Skip to content

Commit 41e98ba

Browse files
committed
Database: Make it possible to trigger the "Repair Database" action via menu item
1 parent 17be527 commit 41e98ba

4 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/mixxxmainwindow.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,11 @@ void MixxxMainWindow::connectMenuBar() {
852852
this,
853853
&MixxxMainWindow::slotOptionsPreferences,
854854
Qt::UniqueConnection);
855+
connect(m_pMenuBar,
856+
&WMainMenuBar::repairDatabase,
857+
this,
858+
&MixxxMainWindow::slotOptionsRepairDatabase,
859+
Qt::UniqueConnection);
855860
connect(m_pMenuBar,
856861
&WMainMenuBar::loadTrackToDeck,
857862
this,
@@ -1134,6 +1139,28 @@ void MixxxMainWindow::slotOptionsPreferences() {
11341139
m_pPrefDlg->activateWindow();
11351140
}
11361141

1142+
void MixxxMainWindow::slotOptionsRepairDatabase() {
1143+
QMessageBox::StandardButton btn = QMessageBox::warning(
1144+
this,
1145+
VersionStore::applicationName(),
1146+
tr("Repairing the database requires a restart of Mixxx.\n"
1147+
"Do you want to exit out of Mixxx and run the database repair on the next launch?"),
1148+
QMessageBox::Yes | QMessageBox::No,
1149+
QMessageBox::No);
1150+
if (btn == QMessageBox::Yes) {
1151+
// TODO(cr7pt0gr4ph7): Implement an external restart handler that
1152+
// automatically restarts Mixxx here. Basically just a small
1153+
// cmdline application that, when invoked, forwards everything to the
1154+
// main Mixxx executable, but also listens for a a special restart flag.
1155+
1156+
// Set flag and exit out of Mixxx
1157+
m_pCoreServices->getSettings()->setValue(
1158+
mixxx::library::prefs::kRepairDatabaseOnNextRestartConfigKey,
1159+
true);
1160+
close();
1161+
}
1162+
}
1163+
11371164
void MixxxMainWindow::slotNoVinylControlInputConfigured() {
11381165
if (m_noVinylInputDialog && m_noVinylInputDialog->isVisible()) {
11391166
// Don't show redundant dialogs.

src/mixxxmainwindow.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ class MixxxMainWindow : public QMainWindow {
6262
void slotFileLoadSongPlayer(int deck);
6363
/// show the preferences dialog
6464
void slotOptionsPreferences();
65+
/// set up a database repair for next start
66+
void slotOptionsRepairDatabase();
6567
/// show the about dialog
6668
void slotHelpAbout();
6769
/// show popup with library scan results

src/widget/wmainmenubar.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,14 @@ void WMainMenuBar::initialize() {
541541

542542
pOptionsMenu->addSeparator();
543543

544+
QString repairDatabaseTitle = tr("Repair Database");
545+
QString repairDatabaseText = tr("Restart Mixxx & repair database inconsistencies");
546+
auto* pOptionsRepairDatabase = new QAction(repairDatabaseTitle, this);
547+
pOptionsRepairDatabase->setStatusTip(repairDatabaseText);
548+
pOptionsRepairDatabase->setWhatsThis(buildWhatsThis(repairDatabaseTitle, repairDatabaseText));
549+
connect(pOptionsRepairDatabase, &QAction::triggered, this, &WMainMenuBar::repairDatabase);
550+
pOptionsMenu->addAction(pOptionsRepairDatabase);
551+
544552
QString preferencesTitle = tr("&Preferences");
545553
QString preferencesText = tr("Change Mixxx settings (e.g. playback, MIDI, controls)");
546554
auto* pOptionsPreferences = new QAction(preferencesTitle, this);

src/widget/wmainmenubar.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class WMainMenuBar : public QMenuBar {
6565
void createPlaylist();
6666
void loadTrackToDeck(int deck);
6767
void reloadSkin();
68+
void repairDatabase();
6869
void rescanLibrary();
6970
#ifdef __ENGINEPRIME__
7071
void exportLibrary();

0 commit comments

Comments
 (0)