mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 21:07:33 +08:00
Merge pull request #1671 from FreezyLemon/undelete-button-add
Added Button to restore recently deleted beatmaps
This commit is contained in:
commit
572e2d30b1
@ -341,6 +341,61 @@ namespace osu.Game.Beatmaps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UndeleteAll()
|
||||||
|
{
|
||||||
|
var deleteMaps = QueryBeatmapSets(bs => bs.DeletePending).ToList();
|
||||||
|
|
||||||
|
if (!deleteMaps.Any()) return;
|
||||||
|
|
||||||
|
var notification = new ProgressNotification
|
||||||
|
{
|
||||||
|
CompletionText = "Restored all deleted beatmaps!",
|
||||||
|
Progress = 0,
|
||||||
|
State = ProgressNotificationState.Active,
|
||||||
|
};
|
||||||
|
|
||||||
|
PostNotification?.Invoke(notification);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
foreach (var bs in deleteMaps)
|
||||||
|
{
|
||||||
|
if (notification.State == ProgressNotificationState.Cancelled)
|
||||||
|
// user requested abort
|
||||||
|
return;
|
||||||
|
|
||||||
|
notification.Text = $"Restoring ({i} of {deleteMaps.Count})";
|
||||||
|
notification.Progress = (float)++i / deleteMaps.Count;
|
||||||
|
Undelete(bs);
|
||||||
|
}
|
||||||
|
|
||||||
|
notification.State = ProgressNotificationState.Completed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undelete(BeatmapSetInfo beatmapSet)
|
||||||
|
{
|
||||||
|
if (beatmapSet.Protected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
lock (importContext)
|
||||||
|
{
|
||||||
|
var context = importContext.Value;
|
||||||
|
|
||||||
|
using (var transaction = context.BeginTransaction())
|
||||||
|
{
|
||||||
|
context.ChangeTracker.AutoDetectChangesEnabled = false;
|
||||||
|
|
||||||
|
var iFiles = new FileStore(() => context, storage);
|
||||||
|
var iBeatmaps = createBeatmapStore(() => context);
|
||||||
|
|
||||||
|
undelete(iBeatmaps, iFiles, beatmapSet);
|
||||||
|
|
||||||
|
context.ChangeTracker.AutoDetectChangesEnabled = true;
|
||||||
|
context.SaveChanges(transaction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete a beatmap difficulty.
|
/// Delete a beatmap difficulty.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -15,6 +15,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
private TriangleButton importButton;
|
private TriangleButton importButton;
|
||||||
private TriangleButton deleteButton;
|
private TriangleButton deleteButton;
|
||||||
private TriangleButton restoreButton;
|
private TriangleButton restoreButton;
|
||||||
|
private TriangleButton undeleteButton;
|
||||||
|
|
||||||
protected override string Header => "General";
|
protected override string Header => "General";
|
||||||
|
|
||||||
@ -55,6 +56,15 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
}).ContinueWith(t => Schedule(() => restoreButton.Enabled.Value = true));
|
}).ContinueWith(t => Schedule(() => restoreButton.Enabled.Value = true));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
undeleteButton = new SettingsButton
|
||||||
|
{
|
||||||
|
Text = "Restore all recently deleted beatmaps",
|
||||||
|
Action = () =>
|
||||||
|
{
|
||||||
|
undeleteButton.Enabled.Value = false;
|
||||||
|
Task.Run(() => beatmaps.UndeleteAll()).ContinueWith(t => Schedule(() => undeleteButton.Enabled.Value = true));
|
||||||
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user