1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-13 15:43:21 +08:00

Add fallback logic for the case where previous database can't be migrated

This commit is contained in:
Dean Herbert 2017-10-19 21:37:09 +09:00
parent 7ce6167220
commit 8aea6068ba
2 changed files with 22 additions and 9 deletions

View File

@ -221,19 +221,25 @@ namespace osu.Game.Database
Database.ExecuteSqlCommand(
"INSERT INTO BeatmapInfo SELECT ID, AudioLeadIn, BaseDifficultyID, BeatDivisor, BeatmapSetInfoID, Countdown, DistanceSpacing, GridSize, Hash, Hidden, LetterboxInBreaks, MD5Hash, NULLIF(BeatmapMetadataID, 0), OnlineBeatmapID, Path, RulesetID, SpecialStyle, StackLeniency, StarDifficulty, StoredBookmarks, TimelineZoom, Version, WidescreenStoryboard FROM BeatmapInfo_Old");
Database.ExecuteSqlCommand("DROP TABLE BeatmapInfo_Old");
throw new Exception();
}
catch
{
// if anything went wrong during migration just nuke the database.
Database.EnsureDeleted();
throw new MigrationFailedException();
}
}
catch (MigrationFailedException e)
{
throw;
}
catch
{
}
}
}
}
public class MigrationFailedException : Exception
{
}
}

View File

@ -90,8 +90,18 @@ namespace osu.Game
dependencies.Cache(this);
dependencies.Cache(LocalConfig);
using (var context = contextFactory.GetContext())
context.Migrate();
try
{
using (var context = contextFactory.GetContext())
context.Migrate();
}
catch (MigrationFailedException)
{
using (var context = contextFactory.GetContext())
context.Database.EnsureDeleted();
using (var context = contextFactory.GetContext())
context.Migrate();
}
dependencies.Cache(API = new APIAccess
{
@ -203,10 +213,7 @@ namespace osu.Game
// TODO: This is temporary until we reimplement the local FPS display.
// It's just to allow end-users to access the framework FPS display without knowing the shortcut key.
fpsDisplayVisible = LocalConfig.GetBindable<bool>(OsuSetting.ShowFpsDisplay);
fpsDisplayVisible.ValueChanged += val =>
{
FrameStatisticsMode = val ? FrameStatisticsMode.Minimal : FrameStatisticsMode.None;
};
fpsDisplayVisible.ValueChanged += val => { FrameStatisticsMode = val ? FrameStatisticsMode.Minimal : FrameStatisticsMode.None; };
fpsDisplayVisible.TriggerChange();
}