amuse.git

commit ceff433f65429e648812ac82d4c0bae64b0ef657

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"