Author: Adam <git@apiote.tk>
extact datastructures
db/db.go | 48 ++++++++++----------------------------- libamuse/account.go | 56 +++++++++++++--------------------------------- libamuse/film.go | 3 + libamuse/serie.go | 7 +++-- tmdb/common.go | 37 +++++++++++++++++++++++++++--- tmdb/film.go | 55 ++++++++++++++++++++++++--------------------- tmdb/serie.go | 1
diff --git a/db/db.go b/db/db.go index 5b2b4b7f72aca6466979a5a6ba254d0cd922bfbb..4063a8233a1f9efeedbb2f05bfa2686d8b4c28b8 100644 --- a/db/db.go +++ b/db/db.go @@ -1,6 +1,7 @@ package db import ( + "notabug.org/apiote/amuse/datastructure" "notabug.org/apiote/amuse/utils" "crypto/rand" @@ -14,29 +15,6 @@ "time" _ "github.com/mattn/go-sqlite3" ) - -type ItemType string - -const ( - ItemTypeBook ItemType = "book" - ItemTypeFilm = "film" - ItemTypeTvserie = "tvserie" - ItemTypeUnkown = "unknown" -) - -type ItemInfo struct { - Cover string - Status string - Title string - YearStart int - YearEnd int - BasedOn string - Genres string - Runtime int - Collection int - Part int - Item string -} type CacheEntry struct { Etag string @@ -246,7 +224,7 @@ return nil } -func GetItemExperiences(username, itemId string, itemType ItemType) (map[string][]time.Time, error) { +func GetItemExperiences(username, itemId string, itemType datastructure.ItemType) (map[string][]time.Time, error) { times := map[string][]time.Time{} user, err := GetUser(username) if err != nil { @@ -295,7 +273,7 @@ } return times, nil } -func AddToExperiences(username, itemId string, itemType ItemType, datetime time.Time) error { +func AddToExperiences(username, itemId string, itemType datastructure.ItemType, datetime time.Time) error { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -313,7 +291,7 @@ //todo if !datetime.IsZero() then delete all datetime that .IsZero() where itemId = itemId return nil } -func SkipSpecials(username, itemId string, episodesNumber int, itemType ItemType, datetime time.Time) error { +func SkipSpecials(username, itemId string, episodesNumber int, itemType datastructure.ItemType, datetime time.Time) error { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -338,7 +316,7 @@ return nil } -func AddToWantList(username, itemId string, itemType ItemType) error { +func AddToWantList(username, itemId string, itemType datastructure.ItemType) error { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -354,7 +332,7 @@ } return nil } -func RemoveFromWantList(username, itemId string, itemType ItemType) error { +func RemoveFromWantList(username, itemId string, itemType datastructure.ItemType) error { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -370,7 +348,7 @@ } return nil } -func IsOnWantList(username, itemId string, itemType ItemType) (bool, error) { +func IsOnWantList(username, itemId string, itemType datastructure.ItemType) (bool, error) { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -389,7 +367,7 @@ return isOnlist, nil } -func SaveCacheItem(itemType ItemType, itemId string, itemInfo ItemInfo) error { +func SaveCacheItem(itemType datastructure.ItemType, itemId string, itemInfo datastructure.ItemInfo) error { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -406,7 +384,7 @@ } return nil } -func UpdateCacheItem(itemType ItemType, itemId string, itemInfo ItemInfo) error { +func UpdateCacheItem(itemType datastructure.ItemType, itemId string, itemInfo datastructure.ItemInfo) error { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -419,7 +397,7 @@ return nil } -func RemoveCacheItem(itemType ItemType, itemId string) error { +func RemoveCacheItem(itemType datastructure.ItemType, itemId string) error { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -445,7 +423,7 @@ return err } -func GetCacheItem(itemType ItemType, itemId string) (*ItemInfo, error) { +func GetCacheItem(itemType datastructure.ItemType, itemId string) (*datastructure.ItemInfo, error) { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -454,8 +432,8 @@ } defer db.Close() var ( - itemInfo ItemInfo - itemTypeDb ItemType + itemInfo datastructure.ItemInfo + itemTypeDb datastructure.ItemType itemIdDb string refCount int ) diff --git a/libamuse/account.go b/libamuse/account.go index 8f372db794ffc0ae6e0703397ced590f8ffbb6fc..69859524345dad6568ee7f27a515645af973ca76 100644 --- a/libamuse/account.go +++ b/libamuse/account.go @@ -2,8 +2,8 @@ package libamuse import ( "notabug.org/apiote/amuse/accounts" + "notabug.org/apiote/amuse/datastructure" "notabug.org/apiote/amuse/db" - "notabug.org/apiote/amuse/tmdb" "errors" "fmt" @@ -52,7 +52,7 @@ data := args[0].(*RequestData) result := args[1].(*Result) itemType := args[2].(string) - err := db.AddToWantList(result.user.Username, data.id, db.ItemType(itemType)) + err := db.AddToWantList(result.user.Username, data.id, datastructure.ItemType(itemType)) return gott.Tuple(args), err } @@ -62,55 +62,31 @@ itemType := args[2].(string) var arg interface{} var err error switch itemType { - case db.ItemTypeFilm: + case datastructure.ItemTypeFilm: arg, err = gott. NewResult(gott.Tuple(args)). Bind(getFilm). Bind(getCollection). Finish() args = arg.(gott.Tuple) - break + case datastructure.ItemTypeTvserie: + arg, err = gott. + NewResult(gott.Tuple(args)). + Bind(getTvSerie). + Bind(getSeasons). + Finish() + args = arg.(gott.Tuple) } return gott.Tuple(args), err } -func cacheItemFilm(film *tmdb.Film) db.ItemInfo { // todo -> interface Item - part := 0 - for i, p := range film.Collection.Parts { - if p.Title == film.Title { - part = i - break - } - } - genres := "" - for _, genre := range film.Genres { - genres += fmt.Sprintf("%d", genre.Id) + "," - } - - itemInfo := db.ItemInfo{ - Cover: film.Poster_path, - Status: film.Status, - Title: film.Original_title, - YearStart: film.Release_date.Year(), - // todo BasedOn: - Genres: genres, - Runtime: film.Runtime, - Collection: film.Collection.Id, - Part: part, - } - return itemInfo -} - func cacheItem(args ...interface{}) (interface{}, error) { data := args[0].(*RequestData) result := args[1].(*Result) - var itemInfo db.ItemInfo - if film, ok := result.result.(*tmdb.Film); ok { - itemInfo = cacheItemFilm(film) - } + itemInfo := result.result.(datastructure.Item).GetItemInfo() - err := db.SaveCacheItem(db.ItemTypeFilm, data.id, itemInfo) + err := db.SaveCacheItem(datastructure.ItemTypeFilm, data.id, itemInfo) return gott.Tuple(args), err } @@ -159,9 +135,9 @@ _, err := fmt.Sscanf(id[1][4:], "%d", &episodesNumber) if err != nil { return gott.Tuple(args), err } - err = db.SkipSpecials(result.user.Username, id[0], episodesNumber, db.ItemType(itemType), t) + err = db.SkipSpecials(result.user.Username, id[0], episodesNumber, datastructure.ItemType(itemType), t) } else { - err = db.AddToExperiences(result.user.Username, data.id, db.ItemType(itemType), t) + err = db.AddToExperiences(result.user.Username, data.id, datastructure.ItemType(itemType), t) } return gott.Tuple(args), err @@ -172,7 +148,7 @@ data := args[0].(*RequestData) result := args[1].(*Result) itemType := args[2].(string) - err := db.RemoveFromWantList(result.user.Username, data.id, db.ItemType(itemType)) + err := db.RemoveFromWantList(result.user.Username, data.id, datastructure.ItemType(itemType)) return gott.Tuple(args), err } @@ -181,7 +157,7 @@ func removeCacheItem(args ...interface{}) (interface{}, error) { data := args[0].(*RequestData) itemType := args[2].(string) - err := db.RemoveCacheItem(db.ItemType(itemType), data.id) + err := db.RemoveCacheItem(datastructure.ItemType(itemType), data.id) return gott.Tuple(args), err } diff --git a/libamuse/film.go b/libamuse/film.go index 1324e42cf47d07ca302f7c966155ff696142e63e..95f17c8919374c76cd314c9e10c738d4964b68bc 100644 --- a/libamuse/film.go +++ b/libamuse/film.go @@ -4,6 +4,7 @@ import ( "notabug.org/apiote/amuse/accounts" "notabug.org/apiote/amuse/db" "notabug.org/apiote/amuse/tmdb" + "notabug.org/apiote/amuse/datastructure" "strconv" @@ -50,7 +51,7 @@ if result.user.IsEmpty() { return gott.Tuple(args), nil } - exp, err := db.GetItemExperiences(result.user.Username, data.id, db.ItemTypeFilm) + exp, err := db.GetItemExperiences(result.user.Username, data.id, datastructure.ItemTypeFilm) film.Experiences = exp[data.id] return gott.Tuple(args), err } diff --git a/libamuse/serie.go b/libamuse/serie.go index 521fc43c711a68ec22b93941ee7dbd243b70d7ed..4953bd655f2f8bc8475dbbb8cac02a43d93d19ee 100644 --- a/libamuse/serie.go +++ b/libamuse/serie.go @@ -4,6 +4,7 @@ import ( "notabug.org/apiote/amuse/accounts" "notabug.org/apiote/amuse/db" "notabug.org/apiote/amuse/tmdb" + "notabug.org/apiote/amuse/datastructure" "sort" @@ -95,7 +96,7 @@ if result.user.IsEmpty() { return gott.Tuple(args), nil } - experiences, err := db.GetItemExperiences(result.user.Username, tvSerie.Id, db.ItemTypeTvserie) + experiences, err := db.GetItemExperiences(result.user.Username, tvSerie.Id, datastructure.ItemTypeTvserie) var ( watched int watchedAndSkipped int @@ -126,7 +127,7 @@ tvSerie := result.result.(*tmdb.TvSerie) if result.user.IsEmpty() { return gott.Tuple(args), nil } - experiences, err := db.GetItemExperiences(result.user.Username, tvSerie.Id, db.ItemTypeTvserie) + experiences, err := db.GetItemExperiences(result.user.Username, tvSerie.Id, datastructure.ItemTypeTvserie) for _, season := range tvSerie.Seasons { for _, episode := range season.Episodes { @@ -147,7 +148,7 @@ tvSerie := result.result.(*tmdb.TvSerie) if result.user.IsEmpty() { return gott.Tuple(args), nil } - experiences, err := db.GetItemExperiences(result.user.Username, tvSerie.Id, db.ItemTypeTvserie) + experiences, err := db.GetItemExperiences(result.user.Username, tvSerie.Id, datastructure.ItemTypeTvserie) for s, season := range tvSerie.Seasons { for e, episode := range season.Episodes { diff --git a/tmdb/common.go b/tmdb/common.go index 27e9500812174ce07b44181da67402299a0d1919..4aaf0db87d91724e66bff8a17fb10e2bc9c58da1 100644 --- a/tmdb/common.go +++ b/tmdb/common.go @@ -2,7 +2,11 @@ package tmdb import ( "notabug.org/apiote/amuse/wikidata" + "notabug.org/apiote/amuse/datastructure" "notabug.org/apiote/amuse/db" + "notabug.org/apiote/amuse/network" + + "notabug.org/apiote/gott" ) const ( @@ -33,13 +37,38 @@ Cast []ShowCastEntry Crew []ShowCrewEntry } -func GetItemTypeFromShow(show Show) db.ItemType { +func GetItemTypeFromShow(show Show) datastructure.ItemType { if _, ok := show.(*Film); ok { - return db.ItemTypeFilm + return datastructure.ItemTypeFilm } else if _, ok := show.(*TvSerie); ok { - return db.ItemTypeTvserie + return datastructure.ItemTypeTvserie } else { - return db.ItemTypeUnkown + return datastructure.ItemTypeUnkown + } +} + +func getCacheEntry(args ...interface{}) (interface{}, error) { + result := args[1].(*network.Result) + uri := result.Request.URL.String() + entry, err := db.GetCacheEntry(uri) + if err != nil || entry == nil { + return gott.Tuple(args), err } + + result.Etag = entry.Etag + result.Body = entry.Data + return gott.Tuple(args), nil +} + +func cleanCache(args ...interface{}) error { + err := db.CleanCache() + return err +} + +func saveCacheEntry(args ...interface{}) error { + result := args[1].(*network.Result) + uri := result.Request.URL.String() + err := db.SaveCacheEntry(uri, result.Etag, result.Body) + return err } diff --git a/tmdb/film.go b/tmdb/film.go index d6da001b0ad1b6c803a8dabbb10040d16facf64d..fdf46c326a5faf457371f9887bcd63cdb0798a93 100644 --- a/tmdb/film.go +++ b/tmdb/film.go @@ -1,16 +1,17 @@ package tmdb import ( - "notabug.org/apiote/amuse/db" "notabug.org/apiote/amuse/i18n" "notabug.org/apiote/amuse/network" "notabug.org/apiote/amuse/utils" "notabug.org/apiote/amuse/wikidata" + "notabug.org/apiote/amuse/datastructure" "encoding/json" "net/http" "sort" "time" + "fmt" "notabug.org/apiote/gott" ) @@ -52,6 +53,33 @@ Credits ShowCredits BasedOn wikidata.Book Experiences []time.Time IsOnWantList bool +} + +func (f *Film) GetItemInfo() datastructure.ItemInfo { + part := 0 + for i, p := range f.Collection.Parts { + if p.Title == f.Title { + part = i + break + } + } + genres := "" + for _, genre := range f.Genres { + genres += fmt.Sprintf("%d", genre.Id) + "," + } + + itemInfo := datastructure.ItemInfo{ + Cover: f.Poster_path, + Status: f.Status, + Title: f.Original_title, + YearStart: f.Release_date.Year(), + // todo BasedOn: + Genres: genres, + Runtime: f.Runtime, + Collection: f.Collection.Id, + Part: part, + } + return itemInfo } func (f *Film) AddBasedOn(book wikidata.Book) { @@ -141,31 +169,6 @@ return (isBefore && !collection.Parts[i].Release_date.IsZero()) || (!isBefore && collection.Parts[j].Release_date.IsZero()) }) return gott.Tuple(args) -} - -func getCacheEntry(args ...interface{}) (interface{}, error) { - result := args[1].(*network.Result) - uri := result.Request.URL.String() - entry, err := db.GetCacheEntry(uri) - if err != nil || entry == nil { - return gott.Tuple(args), err - } - - result.Etag = entry.Etag - result.Body = entry.Data - return gott.Tuple(args), nil -} - -func cleanCache(args ...interface{}) error { - err := db.CleanCache() - return err -} - -func saveCacheEntry(args ...interface{}) error { - result := args[1].(*network.Result) - uri := result.Request.URL.String() - err := db.SaveCacheEntry(uri, result.Etag, result.Body) - return err } func GetFilm(id, language string) (*Film, error) { diff --git a/tmdb/serie.go b/tmdb/serie.go index f3f460f804b1acee62b1b2a6a61aec8fc14005d4..50fc503df76f273677547631fd13d813921ea2ad 100644 --- a/tmdb/serie.go +++ b/tmdb/serie.go @@ -1,6 +1,7 @@ package tmdb import ( + "notabug.org/apiote/amuse/datastructure" "notabug.org/apiote/amuse/i18n" "notabug.org/apiote/amuse/network" "notabug.org/apiote/amuse/utils"