Skip to content

Commit

Permalink
Add bookfile handling (#65)
Browse files Browse the repository at this point in the history
* BookFile import untested

Signed-off-by: Russell Troxel <[email protected]>

* Working BookFile Import

Signed-off-by: Russell Troxel <[email protected]>

* Import book files

Signed-off-by: Russell Troxel <[email protected]>

* Calibre Import

Signed-off-by: Russell Troxel <[email protected]>

* Go Mod Tidy

Signed-off-by: Russell Troxel <[email protected]>

---------

Signed-off-by: Russell Troxel <[email protected]>
  • Loading branch information
rtrox authored Jan 13, 2024
1 parent 3b82afb commit 55df24d
Show file tree
Hide file tree
Showing 118 changed files with 18,669 additions and 3,781 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ require (
github.com/vmihailenco/msgpack/v5 v5.0.0-beta.9 // indirect
github.com/vmihailenco/tagparser v0.1.2 // indirect
github.com/zclconf/go-cty v1.8.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
golang.org/x/crypto v0.14.0 // indirect
golang.org/x/exp v0.0.0-20221230185412-738e83a70c30 // indirect
golang.org/x/mod v0.10.0 // indirect
golang.org/x/sync v0.3.0 // indirect
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,8 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJu
github.com/zclconf/go-cty v1.8.0 h1:s4AvqaeQzJIu3ndv4gVIhplVD0krU+bgrcLSVUnaWuA=
github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/exp v0.0.0-20221230185412-738e83a70c30 h1:m9O6OTJ627iFnN2JIWfdqlZCzneRO6EEBsHXI25P8ws=
golang.org/x/exp v0.0.0-20221230185412-738e83a70c30/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
Expand All @@ -203,8 +203,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c=
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
Expand Down
9 changes: 8 additions & 1 deletion internal/calibre/model.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package calibre

import "time"
import (
"path"
"time"
)

type Author struct {
ID int64 `json:"id"`
Expand Down Expand Up @@ -34,6 +37,10 @@ type Book struct {
Series []Series `json:"series,omitempty" gorm:"many2many:books_series_link;foreignKey:id;joinForeignKey:book;References:ID;JoinReferences:series"`
}

func (b *Book) FullPath(c Calibre) string {
return path.Join(c.LibraryPath(), b.Path)
}

type Identifier struct {
ID int64 `json:"id"`
BookID int64 `json:"bookId" gorm:"column:book"`
Expand Down
41 changes: 30 additions & 11 deletions internal/calibre/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package calibre

import (
"context"
"path"

gormLogger "github.com/mpalmer/gorm-zerolog"
"github.com/rs/zerolog"
Expand All @@ -11,6 +12,8 @@ import (
)

type Calibre interface {
LibraryPath() string

GetAuthor(ctx context.Context, id int64) (*Author, error)
GetAuthors(ctx context.Context) ([]*Author, error)
GetAuthorBooks(ctx context.Context, id int64) ([]*Book, error)
Expand Down Expand Up @@ -40,16 +43,32 @@ type Calibre interface {
}

type CalibreSQLite struct {
db *gorm.DB
libraryPath string
db *gorm.DB
}

func NewCalibreSQLite(dbPath string) (*CalibreSQLite, error) {
func NewCalibreSQLite(libraryPath string) (*CalibreSQLite, error) {
dbPath := path.Join(libraryPath, "metadata.db")
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})

if err != nil {
return nil, err
}
return &CalibreSQLite{db: db}, nil
ret := &CalibreSQLite{
libraryPath: libraryPath,
db: db,
}
return ret, nil
}

func (c *CalibreSQLite) Clone() *CalibreSQLite {
return &CalibreSQLite{
libraryPath: c.libraryPath,
db: c.db.Session(&gorm.Session{}),
}
}
func (c *CalibreSQLite) LibraryPath() string {
return c.libraryPath
}

func (c *CalibreSQLite) Close() error {
Expand All @@ -60,14 +79,14 @@ func (c *CalibreSQLite) Close() error {
return db.Close()
}

func (c *CalibreSQLite) WithLogger(logger *zerolog.Logger) Calibre {
return &CalibreSQLite{
db: c.db.Session(
&gorm.Session{
Logger: gormLogger.Logger{},
},
),
}
func (c *CalibreSQLite) WithLogger(logger *zerolog.Logger) *CalibreSQLite {
ret := c.Clone()
ret.db = ret.db.Session(
&gorm.Session{
Logger: gormLogger.Logger{},
},
)
return ret
}

func (c *CalibreSQLite) WithPagination(page, pageSize int) Calibre {
Expand Down
42 changes: 22 additions & 20 deletions internal/calibre/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"github.com/stretchr/testify/require"
)

const TestDB = "test_fixtures/models_only"

func TestGetAuthor(t *testing.T) {
tests := []struct {
name string
Expand Down Expand Up @@ -44,7 +46,7 @@ func TestGetAuthor(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand All @@ -63,7 +65,7 @@ func TestGetAuthors(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -106,7 +108,7 @@ func TestGetAuthorBooks(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -161,7 +163,7 @@ func TestGetAuthorSeries(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -309,7 +311,7 @@ func TestGetBook(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -357,7 +359,7 @@ func TestGetBookByIdentifier(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand All @@ -377,7 +379,7 @@ func TestGetBooks(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -435,7 +437,7 @@ func TestGetBooks_WithPagination(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
require := require.New(t)
db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -492,7 +494,7 @@ func TestGetTag(t *testing.T) {
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand All @@ -511,7 +513,7 @@ func TestGetTags(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -554,7 +556,7 @@ func TestGetTagBooks(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -610,7 +612,7 @@ func TestGetPublisher(t *testing.T) {
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand All @@ -629,7 +631,7 @@ func TestGetPublishers(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -677,7 +679,7 @@ func TestGetPublisherBooks(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -740,7 +742,7 @@ func TestGetLanguage(t *testing.T) {
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand All @@ -759,7 +761,7 @@ func TestGetLanguages(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -792,7 +794,7 @@ func TestGetLanguageBooks(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -837,7 +839,7 @@ func TestGetSeries(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand All @@ -856,7 +858,7 @@ func TestGetSeriesList(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down Expand Up @@ -895,7 +897,7 @@ func TestGetSeriesBooks(t *testing.T) {
t.Parallel()
require := require.New(t)

db, err := NewCalibreSQLite("test_fixtures/metadata.db")
db, err := NewCalibreSQLite(TestDB)
if err != nil {
t.Fatal(err)
}
Expand Down
Loading

0 comments on commit 55df24d

Please sign in to comment.