library: Updates for new database design
I need a templated primary key system to group together albums with years. Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
parent
99718ade43
commit
eaafaeb7d4
|
@ -61,6 +61,7 @@ template <class T>
|
|||
void Database<T> :: clear()
|
||||
{
|
||||
db.clear();
|
||||
keys.clear();
|
||||
_size = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,16 +24,16 @@ namespace library
|
|||
|
||||
class Artist : public DatabaseEntry {
|
||||
public:
|
||||
std:: string name;
|
||||
std :: string name;
|
||||
|
||||
Artist();
|
||||
Artist(TagLib :: Tag *);
|
||||
const std::string &primary_key();
|
||||
void read(File &);
|
||||
void write(File &);
|
||||
#ifdef CONFIG_DEBUG
|
||||
void print();
|
||||
#endif /* CONFIG_DEBUG */
|
||||
bool operator==(const Artist &);
|
||||
};
|
||||
|
||||
|
||||
|
@ -45,12 +45,12 @@ namespace library
|
|||
|
||||
Album();
|
||||
Album(TagLib :: Tag *, unsigned int);
|
||||
const std::string &primary_key();
|
||||
void read(File &);
|
||||
void write(File &);
|
||||
#ifdef CONFIG_DEBUG
|
||||
void print();
|
||||
#endif /* CONFIG_DEBUG */
|
||||
bool operator==(const Album &);
|
||||
};
|
||||
|
||||
|
||||
|
@ -60,6 +60,7 @@ namespace library
|
|||
|
||||
Genre();
|
||||
Genre(TagLib :: Tag *);
|
||||
const std::string &primary_key();
|
||||
void read(File &);
|
||||
void write(File &);
|
||||
#ifdef CONFIG_DEBUG
|
||||
|
@ -76,6 +77,7 @@ namespace library
|
|||
|
||||
Library();
|
||||
Library(const std::string &, bool);
|
||||
const std::string &primary_key();
|
||||
void read(File &);
|
||||
void write(File &);
|
||||
#ifdef CONFIG_DEBUG
|
||||
|
@ -108,6 +110,7 @@ namespace library
|
|||
Track(TagLib :: Tag *, TagLib :: AudioProperties *,
|
||||
unsigned int, unsigned int, unsigned int,
|
||||
unsigned int, const std :: string &);
|
||||
const std::string &primary_key();
|
||||
void read(File &);
|
||||
void write(File &);
|
||||
#ifdef CONFIG_DEBUG
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
|
||||
#include <glib.h>
|
||||
|
||||
static Database<library :: Artist> artist_db("artist.db", DB_UNIQUE);
|
||||
static Database<library :: Album> album_db("album.db", DB_UNIQUE);
|
||||
static Database<library :: Genre> genre_db("genre.db", DB_UNIQUE);
|
||||
static Database<library :: Library> library_db("library.db", DB_NORMAL);
|
||||
static Database<library :: Track> track_db("track.db", DB_UNIQUE);
|
||||
static Database<library :: Artist> artist_db("artist.db");
|
||||
static Database<library :: Album> album_db("album.db");
|
||||
static Database<library :: Genre> genre_db("genre.db");
|
||||
static Database<library :: Library> library_db("library.db");
|
||||
static Database<library :: Track> track_db("track.db");
|
||||
|
||||
|
||||
|
||||
|
@ -23,10 +23,15 @@ library :: Artist :: Artist()
|
|||
}
|
||||
|
||||
library :: Artist :: Artist(TagLib :: Tag *tag)
|
||||
: name(tag->artist().to8Bit(true))
|
||||
: name(tag->artist().stripWhiteSpace().to8Bit(true))
|
||||
{
|
||||
}
|
||||
|
||||
const std::string &library :: Artist :: primary_key()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
void library :: Artist :: read(File &f)
|
||||
{
|
||||
name = f.getline();
|
||||
|
@ -44,10 +49,6 @@ void library :: Artist :: print()
|
|||
}
|
||||
#endif /* CONFIG_DEBUG */
|
||||
|
||||
bool library :: Artist :: operator==(const library :: Artist &rhs)
|
||||
{
|
||||
return name == rhs.name;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
@ -60,10 +61,16 @@ library :: Album :: Album()
|
|||
}
|
||||
|
||||
library :: Album :: Album(TagLib :: Tag *tag, unsigned int artist)
|
||||
: name(tag->album().to8Bit(true)), year(tag->year()), artist_id(artist)
|
||||
: name(tag->album().stripWhiteSpace().to8Bit(true)),
|
||||
year(tag->year()), artist_id(artist)
|
||||
{
|
||||
}
|
||||
|
||||
const std::string &library :: Album :: primary_key()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
void library :: Album :: read(File &f)
|
||||
{
|
||||
f >> artist_id >> year;
|
||||
|
@ -82,15 +89,6 @@ void library :: Album :: print()
|
|||
}
|
||||
#endif /* CONFIG_DEBUG */
|
||||
|
||||
bool library :: Album :: operator==(const library :: Album &rhs)
|
||||
{
|
||||
if (artist_id == rhs.artist_id) {
|
||||
if (name == rhs.name)
|
||||
return year == rhs.year;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
@ -107,6 +105,11 @@ library :: Genre :: Genre(TagLib :: Tag *tag)
|
|||
{
|
||||
}
|
||||
|
||||
const std::string &library :: Genre :: primary_key()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
void library :: Genre :: read(File &f)
|
||||
{
|
||||
name = f.getline();
|
||||
|
@ -145,6 +148,11 @@ library :: Library :: Library(const std::string &path, bool is_enabled)
|
|||
{
|
||||
}
|
||||
|
||||
const std::string &library :: Library :: primary_key()
|
||||
{
|
||||
return root_path;
|
||||
}
|
||||
|
||||
void library :: Library :: read(File &f)
|
||||
{
|
||||
f >> enabled;
|
||||
|
@ -194,6 +202,11 @@ library :: Track :: Track(TagLib :: Tag *tag, TagLib :: AudioProperties *audio,
|
|||
filepath = path.substr(library_db[library_id].root_path.size() + 1);
|
||||
}
|
||||
|
||||
const std::string &library :: Track :: primary_key()
|
||||
{
|
||||
return filepath;
|
||||
}
|
||||
|
||||
void library :: Track :: read(File &f)
|
||||
{
|
||||
f >> library_id >> artist_id >> album_id >> genre_id;
|
||||
|
@ -243,9 +256,9 @@ static void do_update(unsigned int, const std :: string &);
|
|||
static void read_tags(unsigned int lib_id, const std :: string &path)
|
||||
{
|
||||
TagLib :: Tag *tag;
|
||||
TagLib :: AudioProperties *audio;
|
||||
//TagLib :: AudioProperties *audio;
|
||||
TagLib :: FileRef ref(path.c_str(), true, TagLib :: AudioProperties :: Fast);
|
||||
unsigned int artist_id, album_id, genre_id;
|
||||
unsigned int artist_id; //, album_id, genre_id;
|
||||
|
||||
if (ref.isNull()) {
|
||||
print("ERROR: Could not read tags for file %s", path.c_str());
|
||||
|
@ -253,13 +266,14 @@ static void read_tags(unsigned int lib_id, const std :: string &path)
|
|||
}
|
||||
|
||||
tag = ref.tag();
|
||||
audio = ref.audioProperties();
|
||||
|
||||
artist_id = artist_db.insert(tag);
|
||||
album_id = album_db.insert(library :: Album(tag, artist_id));
|
||||
genre_id = genre_db.insert(library :: Genre(tag));
|
||||
track_db.insert(library :: Track(tag, audio, lib_id, artist_id,
|
||||
album_id, genre_id, path));
|
||||
//audio = ref.audioProperties();
|
||||
|
||||
artist_id = artist_db.insert(library :: Artist(tag));
|
||||
/*album_id =*/ album_db.insert(library :: Album(tag, artist_id));
|
||||
/*genre_id = genre_db.insert(library :: Genre(tag));*/
|
||||
/*track_db.insert(library :: Track(tag, audio, lib_id, artist_id,
|
||||
album_id, genre_id, path));*/
|
||||
}
|
||||
|
||||
static void process_path(unsigned int lib_id, const std :: string &dir,
|
||||
|
|
|
@ -55,6 +55,7 @@ void test_print_dbs(const std::string &test)
|
|||
{
|
||||
print("Test %s\n", test.c_str());
|
||||
library :: print_db(library :: DB_GENRE);
|
||||
print("\n");
|
||||
}
|
||||
|
||||
|
||||
|
@ -70,7 +71,7 @@ void test_0()
|
|||
void test_1()
|
||||
{
|
||||
test_add_dir("1a", "/tmp/library/0", true);
|
||||
library :: del_path(0);
|
||||
test_del_dir("1b", 0);
|
||||
print("\n");
|
||||
}
|
||||
|
||||
|
@ -114,12 +115,12 @@ void test_4()
|
|||
|
||||
library :: print_db(library :: DB_ARTIST);
|
||||
print("\n");
|
||||
library :: print_db(library :: DB_ALBUM);
|
||||
print("\n");
|
||||
//library :: print_db(library :: DB_ALBUM);
|
||||
//print("\n");
|
||||
library :: print_db(library :: DB_GENRE);
|
||||
print("\n");
|
||||
library :: print_db(library :: DB_TRACK);
|
||||
print("\n");
|
||||
//library :: print_db(library :: DB_TRACK);
|
||||
//print("\n");
|
||||
}
|
||||
|
||||
/* Test lookup() */
|
||||
|
@ -146,7 +147,7 @@ int main(int argc, char **argv)
|
|||
test_1();
|
||||
test_2();
|
||||
test_3();
|
||||
test_4();
|
||||
test_5();
|
||||
//test_4();
|
||||
//test_5();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
Generating library: 0
|
||||
Generating library: 1
|
||||
Generating library: 2
|
||||
Generating library: 3
|
||||
Generating library: 4
|
||||
|
||||
Test 0a: PASSED
|
||||
Allocated rows: 0
|
||||
Valid rows: 0
|
||||
Test 0b: PASSED
|
||||
Allocated rows: 0
|
||||
Valid rows: 0
|
||||
|
||||
Test 1a: PASSED
|
||||
Allocated rows: 1
|
||||
Valid rows: 1
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
Test 1b
|
||||
Allocated rows: 1
|
||||
Valid rows: 0
|
||||
|
||||
Test 2a: PASSED
|
||||
Allocated rows: 1
|
||||
Valid rows: 1
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
Test 2b: PASSED
|
||||
Allocated rows: 2
|
||||
Valid rows: 2
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
db[1] = /tmp/library/1 (enabled)
|
||||
Test 2c: PASSED
|
||||
Allocated rows: 3
|
||||
Valid rows: 3
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
db[1] = /tmp/library/1 (enabled)
|
||||
db[2] = /tmp/library/2 (enabled)
|
||||
Test 2d
|
||||
Allocated rows: 3
|
||||
Valid rows: 2
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
db[2] = /tmp/library/2 (enabled)
|
||||
Test 2e
|
||||
Allocated rows: 3
|
||||
Valid rows: 1
|
||||
db[2] = /tmp/library/2 (enabled)
|
||||
Test 2f
|
||||
Allocated rows: 3
|
||||
Valid rows: 0
|
||||
|
||||
Test 3a: PASSED
|
||||
Allocated rows: 1
|
||||
Valid rows: 1
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
Test 3b: PASSED
|
||||
Allocated rows: 2
|
||||
Valid rows: 2
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
db[1] = /tmp/library/1 (enabled)
|
||||
Test 3c: PASSED
|
||||
Allocated rows: 3
|
||||
Valid rows: 3
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
db[1] = /tmp/library/1 (enabled)
|
||||
db[2] = /tmp/library/2 (enabled)
|
||||
Test 3d
|
||||
Allocated rows: 0
|
||||
Valid rows: 0
|
||||
Test 3e
|
||||
Allocated rows: 3
|
||||
Valid rows: 3
|
||||
db[0] = /tmp/library/0 (enabled)
|
||||
db[1] = /tmp/library/1 (enabled)
|
||||
db[2] = /tmp/library/2 (enabled)
|
||||
|
Loading…
Reference in New Issue