[musicdb] fix: db updates fail due to duplicate keys creating unique indexes for...
authornight199uk <night199uk@xbmc.org>
Thu, 2 May 2013 13:00:56 +0000 (21:00 +0800)
committernight199uk <night199uk@xbmc.org>
Thu, 2 May 2013 13:02:23 +0000 (21:02 +0800)
xbmc/music/MusicDatabase.cpp
xbmc/music/windows/GUIWindowMusicBase.cpp

index 68fe06f..f6db603 100644 (file)
@@ -3727,6 +3727,7 @@ bool CMusicDatabase::UpdateOldVersion(int version)
     m_pDS->exec("CREATE INDEX idxSong3 ON song(idAlbum)");
     m_pDS->exec("CREATE INDEX idxSong6 ON song(idPath)");
 
+    m_pDS->exec("UPDATE song SET strMusicBrainzTrackID = NULL where strMusicBrainzTrackID = ''");
     m_pDS->exec("CREATE UNIQUE INDEX idxArtist1 ON artist(strMusicBrainzArtistID(36))");
   }
 
@@ -3736,6 +3737,8 @@ bool CMusicDatabase::UpdateOldVersion(int version)
     m_pDS->exec("CREATE UNIQUE INDEX idxSong7 ON song( idAlbum, strMusicBrainzTrackID(36) )");
     m_pDS->exec("ALTER TABLE album_artist ADD strJoinPhrase text\n");
     m_pDS->exec("ALTER TABLE song_artist ADD strJoinPhrase text\n");
+    CMediaSettings::Get().SetMusicNeedsUpdate(35);
+    CSettings::Get().Save();
   }
 
   // always recreate the views after any table change
index f53df36..8b4f0df 100644 (file)
@@ -1142,13 +1142,18 @@ bool CGUIWindowMusicBase::CanContainFilter(const CStdString &strDirectory) const
 void CGUIWindowMusicBase::OnInitWindow()
 {
   CGUIMediaWindow::OnInitWindow();
-  if (CMediaSettings::Get().GetMusicNeedsUpdate() == 27 && !g_application.IsMusicScanning() &&
+  if (CMediaSettings::Get().GetMusicNeedsUpdate() == 35 && !g_application.IsMusicScanning() &&
       g_infoManager.GetLibraryBool(LIBRARY_HAS_MUSIC))
   {
     // rescan of music library required
     if (CGUIDialogYesNo::ShowAndGetInput(799, 800, 801, -1))
     {
-      g_application.StartMusicScan("", CMusicInfoScanner::SCAN_RESCAN);
+      int flags = CMusicInfoScanner::SCAN_RESCAN;
+      if (CSettings::Get().GetBool("musiclibrary.downloadinfo"))
+        flags |= CMusicInfoScanner::SCAN_ONLINE;
+      if (CSettings::Get().GetBool("musiclibrary.backgroundupdate"))
+        flags |= CMusicInfoScanner::SCAN_BACKGROUND;
+      g_application.StartMusicScan("", flags);
       CMediaSettings::Get().SetMusicNeedsUpdate(0); // once is enough (user may interrupt, but that's up to them)
       CSettings::Get().Save();
     }