1. Drop indexes before sync, then re-create after. This speeds up the
indexing process.
2. 'external_id' field now required for all tracks.
3. Added IIndexerSource::HasStableIds(). We use this as a hint to not
remove orphaned tracks from existing playlists when re-scanning.
4. Removed 'track_id' from 'playlist_tracks' table, and added
'track_external_id' and 'source_id' instead.
5. Indexer will only scan for plugins once now, during initialization.
useful for things like dynamic playlists.
- Updated CategoryListQuery to initialize mappings statically, instead
of during construction, locking a mutex.
- Integrated with the new IIndexerSource, IIndexerWriter, and
IIndexerNotifier SDK interfaces
- Added a simple capabilities model to the playback infrastructure. This
is used to detect whether or not streams can be prefetched. For example,
CDDA cannot because of seek times while playing tracks.
- Added bare-bones CddaDataModel that uses the win32 api to enumerate
connected devices. This is used for disc fingerprinting (using the CDDB
algorithm) and encapsulating data related to discs and tracks. Also,
use the WM_DEVICECHANGE API to detect when new discs are inserted, or
existing discs are removed.
- Don't install the global hotkey hook when running in a debugger.
- Added the ability for the user to configure seeking vs scrubbing when
changing the playhead
- Added IIndexerSource interface: plugins will be able to implement this
interface to add tracks to the library that will be indexed and
maintained like all other tracks
- Added IIndexerWriter interface: IIndexerSource plugins will use this
interface to add/remove/update track info with the main app
- Added IIndexerNotifier: interface used to notify the app that it needs
to be re-indexed.
- Added "source_id" , "external_id", and "visible" column to the tracks
table, with appropriate indexes.
- Updated all queries to take "source_id" and "visible" into account
- Extracted TrackMetadataQuery from TrackList. Never should have been
there to begin with, but was due to some technical limitations that no
longer exist.
- Fixed a really old indexer bug where the reported number of file scanned
was not accurate. Strange this wasn't noticed before.
- Added "SetIndexerNotifier" injection method
- Fixed a bug in TrackMetadataQuery -- it was unnecessarily relying upon
the paths table, which was causing query errors when the table was
empty.
- Use a cache for local file paths instead of requiring an async round
trip when adding/removing
- Remove use of manual "ANALYZE", it was causing strange performance
degradation issues. Instead, move to a set of PRAGMAs that instructs
sqlite to run these optimizations when necessary.
- Updated ::GetInt32 and ::GetUint32 return types to be explicit as to play
more nicely with clang -- may as well, we're updating the SDK version
anyway.
header after a rquery after being hidden, then re-displayed. ugh.
- Added explicit Interrupt() method to IDataStream because we're bumping
the API version anyway
- Added support for a "album header" play queue overlay
- Removed some code in Window that was causing unnecessary visibility
changed callbacks
- Added Window::OnAddedToParent and Window::OnRemovedFromParent
- Updated themes to support "list_header_highlighted_background" and
"list_header_highlighted_foreground"