From 9a55fa1c649679d8835b6b1ef8fe486a6fe291f8 Mon Sep 17 00:00:00 2001 From: Deluan Date: Wed, 24 Feb 2016 15:30:28 -0500 Subject: [PATCH] Experiments with bleve, repositories and parsing itunes --- .gitignore | 3 ++- README.md | 1 + conf/app.conf | 2 ++ main.go | 27 +++++++++++++++++++++++++ models/media_file.go | 15 ++++++++++++++ repositories/media_file_repository.go | 10 +++++++++ scanners/itunes/itl_scanner.go | 29 +++++++++++++++++++++++++++ scanners/scanner.go | 7 +++++++ 8 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 models/media_file.go create mode 100644 repositories/media_file_repository.go create mode 100644 scanners/itunes/itl_scanner.go create mode 100644 scanners/scanner.go diff --git a/.gitignore b/.gitignore index 7133ddc77..d14bfde8f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ commentsRouter_*.go lastupdate.tmp -gosonic \ No newline at end of file +gosonic +iTunes Music Library.xml \ No newline at end of file diff --git a/README.md b/README.md index 040e24376..791f7140e 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ REST/WEB http://beego.me/ DB +https://github.com/boltdb/bolt https://github.com/HouzuoGuo/tiedot SEARCH diff --git a/conf/app.conf b/conf/app.conf index f1f43e961..ae58699a9 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -5,6 +5,8 @@ autorender = false copyrequestbody = true apiversion = 1.0.0 +musicfolder=. [dev] enableadmin = true +indexpath = ./gosonic.index \ No newline at end of file diff --git a/main.go b/main.go index 7e96629c7..9cd0ea997 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,33 @@ import ( ) func main() { + //// open a new index + //itunes.LoadFolder("iTunes Music Library.xml") + // + //mapping := bleve.NewIndexMapping() + //index, err := bleve.New("example.bleve", mapping) + //if (err != nil) { + // index, err = bleve.Open("example.bleve") + //} + // + //// index some data + //doc := struct { + // Id string + // Value string + //}{ + // Id: "01", + // Value: "deluan cotts quintao", + //} + //err = index.Index("01", doc) + //fmt.Println(err) + // + //// search for some text + //query := bleve.NewMatchQuery("*cotts*") + //search := bleve.NewSearchRequest(query) + //searchResults, err := index.Search(search) + //fmt.Println(err) + //fmt.Println(searchResults.Hits) + if beego.BConfig.RunMode == "dev" { beego.BConfig.WebConfig.DirectoryIndex = true beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" diff --git a/models/media_file.go b/models/media_file.go new file mode 100644 index 000000000..0f210ff24 --- /dev/null +++ b/models/media_file.go @@ -0,0 +1,15 @@ +package models + +import ( + "time" +) + +type MediaFile struct { + Id string + Path string + Album string + Artist string + Title string + CreatedAt time.Time + UpdatedAt time.Time +} \ No newline at end of file diff --git a/repositories/media_file_repository.go b/repositories/media_file_repository.go new file mode 100644 index 000000000..54a331956 --- /dev/null +++ b/repositories/media_file_repository.go @@ -0,0 +1,10 @@ +package repositories + +import "github.com/deluan/gosonic/models" +// +//func AddMediaFile(m models.MediaFile) string { +// m.ID = "user_" + strconv.FormatInt(time.Now().UnixNano(), 10) +// UserList[u.Id] = &u +// return u.Id +//} +// diff --git a/scanners/itunes/itl_scanner.go b/scanners/itunes/itl_scanner.go new file mode 100644 index 000000000..ebf3f0bfb --- /dev/null +++ b/scanners/itunes/itl_scanner.go @@ -0,0 +1,29 @@ +package itunes + +import ( + "github.com/dhowden/itl" + "os" + "github.com/deluan/gosonic/models" + "net/url" +"strings" +) + +func LoadFolder(path string) []models.MediaFile { + xml, _ := os.Open(path) + l,_ := itl.ReadFromXML(xml) + + mediaFiles := make([]models.MediaFile, len(l.Tracks)) + i := 0 + for id, track := range l.Tracks { + mediaFiles[i].Id = id + mediaFiles[i].Album = track.Album + mediaFiles[i].Title = track.Name + mediaFiles[i].Artist = track.Artist + path,_ = url.QueryUnescape(track.Location) + mediaFiles[i].Path = strings.TrimPrefix(path, "file://") + mediaFiles[i].CreatedAt = track.DateAdded + mediaFiles[i].UpdatedAt = track.DateModified + i++ + } + return mediaFiles +} diff --git a/scanners/scanner.go b/scanners/scanner.go new file mode 100644 index 000000000..af7b7be7b --- /dev/null +++ b/scanners/scanner.go @@ -0,0 +1,7 @@ +package scanners + +import "github.com/deluan/gosonic/models" + +type Scanner interface { + LoadFolder(path string) []models.MediaFile +}