haha
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
package archive
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
"hash/fnv"
|
||||
"../config"
|
||||
)
|
||||
|
||||
var pln = fmt.Println
|
||||
|
||||
var Archive_map map[uint32]config.Track_t
|
||||
var Archive_map_keys []uint32
|
||||
|
||||
var built = false
|
||||
|
||||
func Build() error {
|
||||
|
||||
if built {
|
||||
return nil
|
||||
}
|
||||
|
||||
Archive_map = make(map[uint32]config.Track_t)
|
||||
|
||||
album_dirs, err := ioutil.ReadDir(config.Xcfg.Archive.PATH)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, dir := range album_dirs {
|
||||
|
||||
album := new(config.Album_t)
|
||||
album.TRACKS = make(map[uint32]config.Track_t)
|
||||
album.PATH = filepath.Join(config.Xcfg.Archive.PATH, dir.Name())
|
||||
album.ID = hash(album.PATH)
|
||||
|
||||
album.MAKER, album.NAME = parse_album_name(dir.Name())
|
||||
|
||||
track_files, _ := filepath.Glob(album.PATH + "/*.mp3")
|
||||
for _, file := range track_files {
|
||||
track := new(config.Track_t)
|
||||
track.NAME = parse_track_name(filepath.Base(file), album.MAKER, album.NAME)
|
||||
track.MAKER = album.MAKER
|
||||
track.ALBUM = album.NAME
|
||||
track.PATH = file
|
||||
track.ID = hash(track.PATH)
|
||||
track.AID = album.ID
|
||||
|
||||
album.TRACKS[track.ID] = *track
|
||||
|
||||
Archive_map[track.ID] = *track
|
||||
Archive_map_keys = append(Archive_map_keys, track.ID)
|
||||
|
||||
}
|
||||
|
||||
cover, _ := filepath.Glob(album.PATH + "/*.jpg")
|
||||
if len(cover) > 0 {
|
||||
album.COVER = filepath.Join(album.PATH, cover[0])
|
||||
}
|
||||
|
||||
// print_album(album)
|
||||
|
||||
config.Xcfg.Archive.ALBUMS[album.ID] = *album
|
||||
}
|
||||
|
||||
built = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func parse_album_name(name string) (string, string) {
|
||||
chunks := strings.Split(name, " - ")
|
||||
if len(chunks) >= 2 {
|
||||
return chunks[0], chunks[1]
|
||||
}
|
||||
return chunks[0], "n/a"
|
||||
}
|
||||
|
||||
func print_album(a *config.Album_t) {
|
||||
pln(a.MAKER)
|
||||
pln(a.NAME)
|
||||
pln(a.PATH)
|
||||
pln(a.COVER)
|
||||
pln(a.ID)
|
||||
pln(len(a.TRACKS))
|
||||
pln("-----")
|
||||
for _, t := range a.TRACKS {
|
||||
print_track(t)
|
||||
}
|
||||
}
|
||||
|
||||
// ex.: Electronic Works 1958-1995-002-Else Marie Pade-Faust Suite Faust & Mefisto.mp3
|
||||
func parse_track_name(name string, maker string, album string) string {
|
||||
|
||||
chunks := []string{}
|
||||
if strings.HasPrefix(name, album) { // bleep
|
||||
chunks = strings.Split(name, "-" + maker + "-")
|
||||
} else if strings.HasPrefix(name, maker) { // bandcamp
|
||||
chunks = strings.Split(name, " - " + album + " - ")
|
||||
}
|
||||
|
||||
if len(chunks) >= 2 {
|
||||
return strings.Split(chunks[1], ".")[0]
|
||||
}
|
||||
return "n/a"
|
||||
}
|
||||
|
||||
func print_track(t config.Track_t) {
|
||||
|
||||
pln(" " + t.NAME)
|
||||
pln(" " + t.PATH)
|
||||
pln(t.ID)
|
||||
pln(t.AID)
|
||||
pln("////////")
|
||||
|
||||
}
|
||||
|
||||
|
||||
func hash(s string) uint32 {
|
||||
h := fnv.New32a()
|
||||
h.Write([]byte(s))
|
||||
return h.Sum32()
|
||||
}
|
||||
Reference in New Issue
Block a user