Newer
Older
//
// tank
//
// Import and Playlist Daemon for autoradio project
//
//
// Copyright (C) 2017 Christian Pointner <equinox@helsinki.at>
//
// This file is part of tank.
//
// tank is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// tank is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with tank. If not, see <http://www.gnu.org/licenses/>.
//
package store
import (
"encoding/binary"
"errors"
"time"
)
const (
// well-known bucket names
infoBn = "_info"
groupsBn = "groups"
publicGroupBn = "_public"
filesBn = "files"
playlistsBn = "playlists"
// well-known keys
storeVersionKey = "Version"
)
var (
groupBuckets = []string{filesBn, playlistsBn} // these buckets will be created inside every group bucket
ErrNotImplented = errors.New("not implemented")
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
)
func itob(v int) []byte {
b := make([]byte, 8)
binary.BigEndian.PutUint64(b, uint64(v))
return b
}
func btoi(b []byte) int {
return int(binary.BigEndian.Uint64(b))
}
type TimeAndUser struct {
User string `json:"u"`
Timestamp time.Time `josn:"ts"`
}
// stored in filesBn
type FileSource struct {
FileName string `json:"f"`
ContentHash string `json:"h"`
}
type FileMetadata struct {
Artist string `json:"a"`
Title string `json:"t"`
Album string `json:"b"`
// TODO: add more fields
}
type File struct {
Created TimeAndUser `json:"cr"`
LastChanged TimeAndUser `json:"ch"`
Source FileSource `json:"src"`
Metadata FileMetadata `json:"m"`
Size uint64 `json:"s"`
Used bool `json:"u"`
Dirty bool `json:"d"`
}
// stored in filesBn
type Playlist struct {
Created TimeAndUser `json:"cr"`
LastChanged TimeAndUser `json:"ch"`
// TODO: playlist storage layout
}