[WIP] migration to psql

TODO:
[ ] stats
[ ] indexes
This commit is contained in:
Las Zenow 2016-07-30 07:10:33 -04:00
parent e1bd235785
commit e72de38725
24 changed files with 648 additions and 936 deletions

View file

@ -5,45 +5,46 @@ import (
"strings"
"github.com/meskio/epubgo"
"gitlab.com/trantor/trantor/lib/database"
)
type MetaData map[string]interface{}
func EpubMetadata(epub *epubgo.Epub) MetaData {
metadata := MetaData{}
func EpubMetadata(epub *epubgo.Epub) database.Book {
book := database.Book{}
for _, m := range epub.MetadataFields() {
data, err := epub.Metadata(m)
if err != nil {
continue
}
switch m {
case "title":
book.Title = cleanStr(strings.Join(data, ", "))
case "creator":
metadata["author"] = parseAuthr(data)
book.Author = parseAuthr(data)
case "contributor":
book.Contributor = cleanStr(strings.Join(data, ", "))
case "publisher":
book.Publisher = cleanStr(strings.Join(data, ", "))
case "description":
metadata[m] = parseDescription(data)
book.Description = parseDescription(data)
case "subject":
metadata[m] = parseSubject(data)
book.Subject = parseSubject(data)
case "date":
metadata[m] = parseDate(data)
book.Date = parseDate(data)
case "language":
metadata["lang"] = GuessLang(epub, data)
case "title", "contributor", "publisher":
metadata[m] = cleanStr(strings.Join(data, ", "))
book.Lang = GuessLang(epub, data)
case "identifier":
attr, _ := epub.MetadataAttr(m)
for i, d := range data {
if attr[i]["scheme"] == "ISBN" {
isbn := ISBN(d)
if isbn != "" {
metadata["isbn"] = isbn
book.Isbn = isbn
}
}
}
default:
metadata[m] = strings.Join(data, ", ")
}
}
return metadata
return book
}
func cleanStr(str string) string {
@ -88,9 +89,21 @@ func parseDescription(description []string) string {
}
func parseSubject(subject []string) []string {
var res []string
for _, s := range subject {
res = append(res, strings.Split(s, " / ")...)
parsed := subject
for _, sep := range []string{"/", ","} {
p2 := []string{}
for _, s := range subject {
p2 = append(p2, strings.Split(s, sep)...)
}
parsed = p2
}
res := []string{}
for _, s := range parsed {
sub := strings.Trim(s, " ")
sub = strings.ToLower(sub)
if len(sub) != 0 {
res = append(res, sub)
}
}
return res
}