private void RemoveTrack (string track)
{
string uri = new SafeUri(track).AbsoluteUri;
const string hash_sql = @"SELECT TrackID, MetadataHash FROM CoreTracks WHERE Uri = ? LIMIT 1";
int track_id = 0;
string hash = null;
using (var reader = new HyenaDataReader (ServiceManager.DbConnection.Query (hash_sql, uri))) {
if (reader.Read ()) {
track_id = reader.Get<int> (0);
hash = reader.Get<string> (1);
}
}
if (hash != null) {
lock (queue) {
var item = queue.FirstOrDefault (
i => i.ChangeType == WatcherChangeTypes.Created && GetMetadataHash (i) == hash);
if (item != null) {
item.ChangeType = WatcherChangeTypes.Renamed;
item.OldFullPath = track;
return;
}
}
}
const string delete_sql = @"
INSERT INTO CoreRemovedTracks (DateRemovedStamp, TrackID, Uri)
SELECT ?, TrackID, Uri FROM CoreTracks WHERE TrackID IN ({0})
;
DELETE FROM CoreTracks WHERE TrackID IN ({0})";
// If track_id is 0, it's a directory.
HyenaSqliteCommand delete_command;
if (track_id > 0) {
delete_command = new HyenaSqliteCommand (String.Format (delete_sql,
"?"), DateTime.Now, track_id, track_id);
} else {
string pattern = StringUtil.EscapeLike (uri) + "/_%";
delete_command = new HyenaSqliteCommand (String.Format (delete_sql,
@"SELECT TrackID FROM CoreTracks WHERE Uri LIKE ? ESCAPE '\'"), DateTime.Now, pattern, pattern);
}
ServiceManager.DbConnection.Execute (delete_command);
}