More experimenting with tiedot

This commit is contained in:
Deluan
2016-02-27 03:35:01 -05:00
parent 4f9054b738
commit ecc0df9e7c
14 changed files with 175 additions and 35 deletions
+10 -3
View File
@@ -40,9 +40,16 @@ $ gopm get -v -g
From here it's a normal [BeeGo](http://beego.me) development cycle. Some useful commands:
* Start local server with `bee run`
* Start test runner on the browser with `NOLOG=1 goconvey --port 9090`
* Test from command line with `go test ./... -v`
```bash
# Start local server (with hot reload)
$ bee run
# Start test runner on the browser
$ NOLOG=1 goconvey --port 9090
# Runa all tests
$ go test ./... -v
```
### Useful Links
+5 -2
View File
@@ -5,7 +5,10 @@ autoRender = false
copyRequestBody = true
apiVersion = 1.0.0
musicFolder=./iTunes.xml
ignoredArticles="The El La Los Las Le Les Os As O A"
indexGroups=A B C D E F G H I J K L M N O P Q R S T U V W X-Z(XYZ)
musicFolder=./iTunesFull.xml
user=deluan
password=wordpass
dbPath = ./devDb
@@ -21,4 +24,4 @@ httpPort = 8081
enableAdmin = false
user=deluan
password=wordpass
dbPath = ./tmp/testDb
dbPath = /tmp/testDb
+16
View File
@@ -1,6 +1,22 @@
package models
import (
"strings"
"github.com/astaxie/beego"
)
type Artist struct {
Id string
Name string
}
func NoArticle(name string) string {
articles := strings.Split(beego.AppConfig.String("ignoredArticles"), " ")
for _, a := range articles {
n := strings.TrimPrefix(name, a + " ")
if (n != name) {
return n
}
}
return name
}
+16 -2
View File
@@ -1,13 +1,27 @@
package models
import "time"
import (
"time"
)
type MediaFile struct {
Id string
Path string
Title string
Album string
Artist string
Title string
AlbumArtist string
Compilation bool
CreatedAt time.Time
UpdatedAt time.Time
}
func (m*MediaFile) RealArtist() string {
if (m.Compilation) {
return "Various Artists"
}
if (m.AlbumArtist != "") {
return m.AlbumArtist
}
return m.Artist
}
+1 -1
View File
@@ -56,7 +56,7 @@ func (r *BaseRepository) saveOrUpdate(rec interface{}) error {
if err != nil {
return err
}
docId, err := r.queryFirstKey(`{"in": ["Id"], "eq": "%s"}`, m["Id"])
docId, err := r.queryFirstKey(`{"in": ["Id"], "eq": "%s", "limit": 1}`, m["Id"])
if docId == 0 {
_, err = r.col.Insert(m)
return err
+25 -7
View File
@@ -11,20 +11,38 @@ var (
once sync.Once
)
func createCollection(name string) *db.Col {
col := dbInstance().Use(name)
if col != nil {
return col
}
func createCollection(name string, ix ...interface{}) *db.Col {
log := false
if dbInstance().Use(name) == nil {
if err := dbInstance().Create(name); err != nil {
beego.Error(err)
}
if err := col.Index([]string{"Id"}); err != nil {
beego.Error(name, err)
log = true
}
col := dbInstance().Use(name)
createIndex(col, []string{"Id"}, log)
for _, i := range ix {
switch i := i.(type) {
case string:
createIndex(col, []string{i}, log)
case []string:
createIndex(col, i, log)
default:
beego.Error("Trying to create an Index with an invalid type: ", i)
}
}
return col
}
func createIndex(col *db.Col, path []string, log bool) (err error) {
if err := col.Index(path); err != nil && log {
beego.Error(path, err)
}
return err
}
func dbInstance() *db.DB {
once.Do(func() {
instance, err := db.OpenDB(beego.AppConfig.String("dbPath"))
+54
View File
@@ -0,0 +1,54 @@
package repositories
import (
. "github.com/smartystreets/goconvey/convey"
_ "github.com/deluan/gosonic/tests"
"testing"
)
const (
testCollectionName = "TestCollection"
)
func TestCreateCollection(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode.")
}
dbInstance().Drop(testCollectionName)
Convey("Given an empty DB", t, func() {
Convey("When creating a new collection", func() {
newCol := createCollection(testCollectionName)
Convey("Then it should create the collection", func() {
So(dbInstance().Use(testCollectionName), ShouldNotBeNil)
})
Convey("And it should create a default index on Id", func() {
allIndexes := newCol.AllIndexes()
So(len(allIndexes), ShouldEqual, 1)
So(len(allIndexes[0]), ShouldEqual, 1)
So(allIndexes[0], ShouldContain, "Id")
})
})
Convey("When creating a new collection with a 'Name' index", func() {
newCol := createCollection(testCollectionName, "Name")
Convey("Then it should create a default index [Id] and an index on 'Name'", func() {
listOfIndexes := newCol.AllIndexes()
So(len(listOfIndexes), ShouldEqual, 2)
var allPaths = make(map[string]bool)
for _, i := range listOfIndexes {
allPaths[i[0]] = true
}
So(allPaths, ShouldContainKey, "Id")
So(allPaths, ShouldContainKey, "Name")
})
})
})
}
+2
View File
@@ -21,6 +21,8 @@ func (s *ItunesScanner) LoadFolder(path string) []Track {
mediaFiles[i].Album = t.Album
mediaFiles[i].Title = t.Name
mediaFiles[i].Artist = t.Artist
mediaFiles[i].AlbumArtist = t.AlbumArtist
mediaFiles[i].Compilation = t.Compilation
path, _ = url.QueryUnescape(t.Location)
mediaFiles[i].Path = strings.TrimPrefix(path, "file://")
mediaFiles[i].CreatedAt = t.DateAdded
+25 -1
View File
@@ -4,6 +4,9 @@ import (
"github.com/astaxie/beego"
"github.com/deluan/gosonic/repositories"
"github.com/deluan/gosonic/models"
"strings"
"fmt"
"encoding/json"
)
type Scanner interface {
@@ -23,12 +26,15 @@ func doImport(mediaFolder string, scanner Scanner) {
func updateDatastore(files []Track) {
mfRepo := repositories.NewMediaFileRepository()
var artistIndex = make(map[string]map[string]string)
for _, t := range files {
m := &models.MediaFile{
Id: t.Id,
Album: t.Album,
Artist: t.Artist,
AlbumArtist: t.AlbumArtist,
Title: t.Title,
Compilation: t.Compilation,
Path: t.Path,
CreatedAt: t.CreatedAt,
UpdatedAt: t.UpdatedAt,
@@ -37,6 +43,24 @@ func updateDatastore(files []Track) {
if err != nil {
beego.Error(err)
}
collectIndex(m, artistIndex)
}
mfRepo.Dump()
//mfRepo.Dump()
j,_ := json.MarshalIndent(artistIndex, "", " ")
fmt.Println(string(j))
}
func collectIndex(m *models.MediaFile, artistIndex map[string]map[string]string) {
name := m.RealArtist()
indexName := strings.ToLower(models.NoArticle(name))
if indexName == "" {
return
}
initial := strings.ToUpper(indexName[0:1])
artists := artistIndex[initial]
if artists == nil {
artists = make(map[string]string)
artistIndex[initial] = artists
}
artists[indexName] = name
}
+3 -1
View File
@@ -7,9 +7,11 @@ import (
type Track struct {
Id string
Path string
Title string
Album string
Artist string
Title string
AlbumArtist string
Compilation bool
CreatedAt time.Time
UpdatedAt time.Time
}
+1 -1
View File
@@ -1,4 +1,4 @@
package api_test
package api
import (
"encoding/xml"
+1 -1
View File
@@ -1,4 +1,4 @@
package api_test
package api
import (
_ "github.com/deluan/gosonic/routers"
+1 -1
View File
@@ -1,4 +1,4 @@
package api_test
package api
import (
"encoding/xml"
+1 -1
View File
@@ -1,4 +1,4 @@
package api_test
package api
import (
"encoding/xml"