Commit Graph

2395 Commits

Author SHA1 Message Date
Anna Schumaker d939dcab20 queue: Begin code updates
So far I have renamed variables, changed a few functions, and updated
all the code that was affected.

Oh, I also started a new unit test.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
2014-04-13 12:27:15 -04:00
Anna Schumaker 44f62028c3 database: Return NULL when inserting a duplicate item
This provides us a more straightforward way to determine if the database
changed.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
2014-04-13 11:14:11 -04:00
Anna Schumaker 8e9bc79e51 Set queue length on startup
Queues are read from disk *before* libraries are read, meaning we can't
calculate the length right away.  But if we don't calculate the length,
then the first time a track is removed from a queue the length will be
set to (0 - track_length).  This is wrong.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
2014-04-11 08:28:03 -04:00
Anna Schumaker 5ff68140b5 Rip out import stuff
I only needed this to make the jump from Ocarina 5.10 -> Ocarina 6.0.
It's not needed anymore, now that 6.0 is out.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-10 08:42:53 -04:00
Anna Schumaker 1c743239a0 Rename playqueue -> queue
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker 57fa16d289 queue: Update design for queues
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker a14f6145a5 Switch over to the new tagdb implementation
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker 2a3d4ca2e0 tagdb: Implement init() and commit()
To save and restore the databases.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker 2a01ce5159 tagdb: Import track information
This allows upgrading from a previous Ocarina version.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker ac338c5704 track: Implement comparison function
Used later for sorting queues.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker c15c5149bc tags: Read and Write a Track tag
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker 72cea29c61 tagdb: Find tags for each track
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker f207ed94df filter: Make sure we don't crash when searching
This only seems to happen when the user searches for something not in
the filter.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker cac0aee2e6 database: Insert through a const reference
This should offer a performance increase since the item to insert will
only be copied if it is not already in the database.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker d452177f32 Make sure index test can handle n = 0
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker 7490b98db6 Combine database and db_entry tests
These tests are designed to verify the database, which should include
the DatabaseEntry class.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker a9dae134d0 database: Store pointers in the database
Inserting into a vector can sometimes cause the entire vector to
reallocate itself.  The insert() function returns a pointer to the
caller, so this reallocation could invalidate the returned pointer.

This is not what we want.

Instead, store pointers to the data in the vector.  C++ provides a
default copy constructor that can be used to allocate a new item before
inserting.  By doing it this way callers won't have to allocate memory
themselves.  In addition, I will no longer need to keep a valid bit
since we can simply check for a NULL entry in the database.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker 38990748bb database: Return pointers for insert() at() and find()
This gives me the item directly, which is usually what I want when I
call these functions.  Save iterators for iterating.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:08 -04:00
Anna Schumaker e2560f3134 tagdb: Add most functions
I implemented:

- add_track()
- remove_track()
- add_library()
- remove_library()
- lookup()
- get_track_db()
- get_library_db()

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-09 21:10:08 -04:00
Anna Schumaker 5d97c84d10 tagdb: Begin the Track class
I properly initialize variables, and I created supporting databases that
will be used to look up artist, album, genre and library information.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:07 -04:00
Anna Schumaker 134348f253 tags: Begin creating the tag database
This patch adds classes for Artist, Album, Genre and Library.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:07 -04:00
Anna Schumaker d61dbae47f Add more to the Track tag design
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:07 -04:00
Anna Schumaker 0fee94f76a tagdb: Add information about tag database layer
This layer will be separate from the library updating code.  This will
give me a place to manage the various databases without extra code to
scan and update paths.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:07 -04:00
Anna Schumaker 89fd79e079 Database: Improve on the insert() return value
Rather than returning an index into the database, instead return an
iterator pointing at the item we just inserted.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:07 -04:00
Anna Schumaker bfefd1761a Think out the design for each tag class
This gives me a chance to write out more information about each class,
so I'll have an easier time knowing what is going on if I ever need to
revisit the design.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-09 21:10:07 -04:00
Anna Schumaker 83118b3e8d Update version
Time to start Ocarina 6.1!

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:10:07 -04:00
Anna Schumaker 2eca396042 Rename config -> Sconstruct
I only had config so I could easily refer to the original Sconstruct.  I
don't need that anymore =)

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 21:09:49 -04:00
Anna Schumaker 887051e5c1 Add a `scons install` option
scons -c install to uninstall.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 20:37:46 -04:00
Anna Schumaker cbe725d891 lib: Don't try to load a track that doesn't exist
This was causing me to throw an exception that never got caught.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 19:32:46 -04:00
Anna Schumaker 8d29ce7169 library: Use track id directly
Calculating through the iterator may lead to unexpected problems.  We
already know the id of every database entry, so we might as well use it
directly.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 19:28:04 -04:00
Anna Schumaker d28b3300f5 library: Put a space between track length and title
If a title began with a number then the number would be read as part of
the length, adding extra time.  So a track with length "100" and title
"42 abcde" would be read back as having length "10042" and title "abcde"

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 19:27:02 -04:00
Anna Schumaker 163d823c19 database: Don't write out unnecessary spaces
When items are deleted from a database we write out a line representing
"invalid entry".  This patch changes the invalid entry line from "0 " to
"0"

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-09 19:22:51 -04:00
Anna Schumaker 22322a9b12 playqueue: Correctly check for play count when sorting
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-08 08:26:15 -04:00
Anna Schumaker ad1c3d6f9d library: Scan fixes
- Double check that track->valid == true before notifying the UI that
  there is a new track.
- Use primary_key() instead of manually calculating the full filepath.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-08 08:15:32 -04:00
Anna Schumaker a470b88a46 library: Save after library validation
Otherwise we won't remember what songs we forgot!

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-08 08:12:04 -04:00
Anna Schumaker 9b417e10aa library: Properly check if a track is in the database
The iterator will be set to db.end(), so we should verify that it IS
this value.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-08 08:09:09 -04:00
Anna Schumaker 0d6dc76eb7 Update PKGBUILD
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-06 19:57:06 -04:00
Anna Schumaker 92e580b904 Create a .desktop file
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-06 19:57:06 -04:00
Anna Schumaker 9f54c23995 database: don't iterate if there are no entries
Checking the valid bit could lead to a segmentation fault.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-06 19:57:06 -04:00
Anna Schumaker b75d13838f database: Properly test for double-removal
I found that databases were always decrementing _size when remove() was
called.  This patch fixes the bug by checking if the entry is valid
before removal.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-06 19:57:06 -04:00
Anna Schumaker fc07e28201 library: Don't save length strings to disk
Recalculating this doesn't change the runtime significantly, so we might
as well save some disk space.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-06 19:57:06 -04:00
Anna Schumaker 1e09406730 library: Don't attach artist_id to albums
This was an unnecessary field, and might potentally result in album
duplication.

Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-06 19:57:06 -04:00
Anna Schumaker 2960b72967 audio: Save and load current trackid
Signed-off-by: Anna Schumaker <anna@ocarinaproject.net>
2014-04-06 19:57:06 -04:00
Anna Schumaker 81f3ef458f database: Each DatabaseEntry should know its id
This will let me set up a Track class that has pointers to the
corresponding artist, album and genre information without needing to
know their IDs directly.  Having this information available means I
won't need to keep a "join struct" when doing lookups - instead I can
return a pointer to a Track class that already knows everything.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-06 19:57:06 -04:00
Anna Schumaker 14879b03fd idle: Update design and unit test
I didn't have any changes to make to the IdleQueue itself, but I did
need to update the unit test and reword a few things in the design.

Signed-off-by: Anna Schuamker <schumaker.anna@gmail.com>
2014-04-06 19:57:06 -04:00
Anna Schumaker 58ed47b37c filter: Update design and rewrite the unit test
- filter :: add() now returns the lowercased text
- Don't cache lowercased strings
- Remove functions depending on CONFIG_TEST

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-06 19:57:06 -04:00
Anna Schumaker 7eddaac14e Remove some text from DESIGN
Because it is all in TODO already.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-06 19:57:06 -04:00
Anna Schumaker 08a69c2c81 Update the license
The SimPL was essentially a reworded GPL v2 license, so we might as well
have the original GPL v2 text.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-06 19:57:06 -04:00
Anna Schumaker 1b34a9a8a0 index: Update the index design
I updated the design and rewrote the unit tests.  This creates something
more consistent with how I ended up using the index.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-06 19:57:05 -04:00
Anna Schumaker fc8dc9d55e database: Design and test updates
I add:
- Autosaving option
- Real iterators
- Better accessor functions

The new design and unit test also allows me to remove the 300,000+ line
"database.good" file that the old tests were based on.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-06 19:57:05 -04:00