public async Task UpdateDatabase()
{
is_db_updating = true;
if (OnIdleEvent != null) OnIdleEvent(this, new IdleEventArgs("update"));
//StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
List<StorageFolder> storageFolders = new List<StorageFolder>() { Windows.Storage.KnownFolders.MusicLibrary, Windows.Storage.KnownFolders.RemovableDevices };
//
// Check if empty start Directory exist
//
Directory startDirectory = await GetDirectory(string.Empty, 0);
if (startDirectory != null)
{
//
// Get a filelist for all matching files on filesystem in selected StorageFolders and add them to the Files table
//
foreach (StorageFolder sf in storageFolders)
{
List<File> filelist =
await UpdateDb(
sf,
await GetDirectory(startDirectory.Name, 0),
new List<string>() { startDirectory.Name }
);
await Dbconnection.InsertAllAsync(filelist);
}
}
bool fileremoved = false;
try
{
var updateposCurrentPlaylist = await Dbconnection.QueryAsync<CurrentPlaylist>("SELECT * FROM CurrentPlaylist ORDER BY PositionId");
if (updateposCurrentPlaylist != null)
{
int pos = 0;
foreach (CurrentPlaylist c in updateposCurrentPlaylist)
{
if (!c.IsUri)
{
var file = await Dbconnection.FindAsync<File>(o => o.FileId == c.FileId);
if (file == null)
{
await Dbconnection.DeleteAsync(c);
fileremoved = true;
}
else
{
c.PositionId = pos;
await Dbconnection.UpdateAsync(c);
pos++;
}
}
else
{
c.PositionId = pos;
await Dbconnection.UpdateAsync(c);
pos++;
}
}
}
}
catch { }
db_last_update = DateTime.Now;
is_db_updating = false;
List<string> eventlist = new List<string>() { "update", "database" };
if (fileremoved) eventlist.Add( "playlist");
if (OnIdleEvent != null) OnIdleEvent(this, new IdleEventArgs(eventlist));
}