private void MigrateFromLegacyBanshee()
{
Execute(@"
INSERT INTO CoreArtists
(ArtistID, TagSetID, MusicBrainzID, Name, NameLowered, NameSort, Rating)
SELECT DISTINCT null, 0, null, Artist, NULL, NULL, 0
FROM Tracks
ORDER BY Artist
");
Execute(@"
INSERT INTO CoreAlbums
(AlbumID, ArtistID, TagSetID, MusicBrainzID, Title, TitleLowered, TitleSort, ReleaseDate,
Duration, Year, IsCompilation, ArtistName, ArtistNameLowered, ArtistNameSort, Rating)
SELECT DISTINCT null,
(SELECT ArtistID
FROM CoreArtists
WHERE Name = Tracks.Artist
LIMIT 1),
0, null, AlbumTitle, NULL, NULL, ReleaseDate, 0, 0, 0, Artist, NULL, NULL, 0
FROM Tracks
ORDER BY AlbumTitle
");
Execute (String.Format (@"
INSERT INTO CoreTracks
(PrimarySourceID, TrackID, ArtistID, AlbumID, TagSetID, ExternalID, MusicBrainzID, Uri, MimeType,
FileSize, BitRate, Attributes, LastStreamError, Title, TitleLowered, TrackNumber, TrackCount,
Disc, DiscCount, Duration, Year, Genre, Composer, Conductor, Grouping, Copyright, LicenseUri,
Comment, Rating, Score, PlayCount, SkipCount, LastPlayedStamp, LastSkippedStamp, DateAddedStamp,
DateUpdatedStamp, MetadataHash, BPM, LastSyncedStamp, FileModifiedStamp)
SELECT
1,
TrackID,
(SELECT ArtistID
FROM CoreArtists
WHERE Name = Artist),
(SELECT a.AlbumID
FROM CoreAlbums a, CoreArtists b
WHERE a.Title = AlbumTitle
AND a.ArtistID = b.ArtistID
AND b.Name = Artist),
0,
0,
0,
Uri,
MimeType,
0, 0,
{0},
{1},
Title, NULL,
TrackNumber,
TrackCount,
0, 0,
Duration * 1000,
Year,
Genre,
NULL, NULL, NULL, NULL, NULL, NULL,
Rating,
0,
NumberOfPlays,
0,
LastPlayedStamp,
NULL,
DateAddedStamp,
DateAddedStamp,
NULL, NULL, DateAddedStamp, NULL
FROM Tracks
", (int)TrackMediaAttributes.Default, (int)StreamPlaybackError.None));
Execute ("UPDATE CoreTracks SET LastPlayedStamp = NULL WHERE LastPlayedStamp = -62135575200");
// Old versions of Banshee had different columns for Playlists/PlaylistEntries, so be careful
try {
Execute(@"
INSERT INTO CorePlaylists (PlaylistID, Name, SortColumn, SortType)
SELECT * FROM Playlists;
INSERT INTO CorePlaylistEntries
(EntryID, PlaylistID, TrackID, ViewOrder)
SELECT * FROM PlaylistEntries
");
} catch (Exception e) {
Log.Exception ("Must be a pre-0.13.2 banshee.db, attempting to migrate", e);
try {
Execute(@"
INSERT INTO CorePlaylists (PlaylistID, Name)
SELECT PlaylistID, Name FROM Playlists;
INSERT INTO CorePlaylistEntries (EntryID, PlaylistID, TrackID)
SELECT EntryID, PlaylistID, TrackID FROM PlaylistEntries
");
Log.Debug ("Success, was able to migrate older playlist information");
} catch (Exception e2) {
Log.Exception ("Failed to migrate playlists", e2);
}
}
// Really old versions of Banshee didn't have SmartPlaylists, so ignore errors
try {
Execute(@"
INSERT INTO CoreSmartPlaylists (SmartPlaylistID, Name, Condition, OrderBy, LimitNumber, LimitCriterion)
SELECT * FROM SmartPlaylists
");
} catch {}
Execute ("UPDATE CoreSmartPlaylists SET PrimarySourceID = 1");
Execute ("UPDATE CorePlaylists SET PrimarySourceID = 1");
InitializeOrderedTracks ();
Migrate_15 ();
}