diff --git a/main.py b/main.py
index df7fee2..0e26e92 100644
--- a/main.py
+++ b/main.py
@@ -21,8 +21,7 @@ from PyQt5.QtWidgets import (
from PyQt5.QtCore import QUrl, QTimer, Qt
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QAudioProbe
from PyQt5.QtGui import QCloseEvent, QPixmap
-from utils import scan_for_music
-from utils import delete_and_create_library_database
+from utils import scan_for_music, delete_and_create_library_database, initialize_db
from components import PreferencesWindow, AudioVisualizer
# Create ui.py file from Qt Designer
@@ -98,10 +97,9 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
self.open_preferences
) # Open preferences menu
# QUICK ACTIONS MENU
- self.actionScanLibraries.triggered.connect(self.scan_libraries) # Scan library
- self.actionClearDatabase.triggered.connect(
- self.clear_database
- ) # Clear database
+ self.actionScanLibraries.triggered.connect(self.scan_libraries)
+ self.actionDeleteLibrary.triggered.connect(self.clear_database)
+ self.actionDeleteDatabase.triggered.connect(self.delete_database)
## tableView triggers
self.tableView.doubleClicked.connect(
self.play_audio_file
@@ -364,6 +362,32 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
delete_and_create_library_database()
self.tableView.fetch_library()
+ def delete_database(self) -> None:
+ """Deletes the entire database"""
+ reply = QMessageBox.question(
+ self,
+ "Confirmation",
+ "Delete database?",
+ QMessageBox.Yes | QMessageBox.No,
+ QMessageBox.Yes,
+ )
+ if reply:
+ initialize_db()
+ self.tableView.fetch_library()
+
+ def reinitialize_database(self) -> None:
+ """Clears all tables in database and recreates"""
+ reply = QMessageBox.question(
+ self,
+ "Confirmation",
+ "Recreate the database?",
+ QMessageBox.Yes | QMessageBox.No,
+ QMessageBox.Yes,
+ )
+ if reply:
+ initialize_db()
+ self.tableView.fetch_library()
+
def process_probe(self, buff) -> None:
buff.startTime()
self.update_audio_visualization()
diff --git a/ui.py b/ui.py
index 99ef281..e40c87f 100644
--- a/ui.py
+++ b/ui.py
@@ -154,7 +154,7 @@ class Ui_MainWindow(object):
self.verticalLayout_3.setStretch(3, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 21))
+ self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 41))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
@@ -172,14 +172,17 @@ class Ui_MainWindow(object):
self.actionPreferences.setObjectName("actionPreferences")
self.actionScanLibraries = QtWidgets.QAction(MainWindow)
self.actionScanLibraries.setObjectName("actionScanLibraries")
- self.actionClearDatabase = QtWidgets.QAction(MainWindow)
- self.actionClearDatabase.setObjectName("actionClearDatabase")
+ self.actionDeleteLibrary = QtWidgets.QAction(MainWindow)
+ self.actionDeleteLibrary.setObjectName("actionDeleteLibrary")
self.actionOpenFiles = QtWidgets.QAction(MainWindow)
self.actionOpenFiles.setObjectName("actionOpenFiles")
+ self.actionDeleteDatabase = QtWidgets.QAction(MainWindow)
+ self.actionDeleteDatabase.setObjectName("actionDeleteDatabase")
self.menuFile.addAction(self.actionOpenFiles)
self.menuEdit.addAction(self.actionPreferences)
self.menuQuick_Actions.addAction(self.actionScanLibraries)
- self.menuQuick_Actions.addAction(self.actionClearDatabase)
+ self.menuQuick_Actions.addAction(self.actionDeleteLibrary)
+ self.menuQuick_Actions.addAction(self.actionDeleteDatabase)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuEdit.menuAction())
self.menubar.addAction(self.menuView.menuAction())
@@ -207,7 +210,8 @@ class Ui_MainWindow(object):
self.actionPreferences.setText(_translate("MainWindow", "Preferences"))
self.actionPreferences.setStatusTip(_translate("MainWindow", "Open preferences"))
self.actionScanLibraries.setText(_translate("MainWindow", "Scan libraries"))
- self.actionClearDatabase.setText(_translate("MainWindow", "Clear Database"))
+ self.actionDeleteLibrary.setText(_translate("MainWindow", "Delete Library"))
self.actionOpenFiles.setText(_translate("MainWindow", "Open file(s)"))
+ self.actionDeleteDatabase.setText(_translate("MainWindow", "Delete Database"))
from components import AlbumArtGraphicsView, MusicTable
from pyqtgraph import PlotWidget
diff --git a/ui.ui b/ui.ui
index caa3623..b8c8cef 100644
--- a/ui.ui
+++ b/ui.ui
@@ -274,7 +274,7 @@
0
0
1152
- 21
+ 41
@@ -320,9 +321,9 @@
Scan libraries
-
+
- Clear Database
+ Delete Library
@@ -330,6 +331,11 @@
Open file(s)
+
+
+ Delete Database
+
+
diff --git a/utils/__init__.py b/utils/__init__.py
index 1d2dcb7..3f0a03f 100644
--- a/utils/__init__.py
+++ b/utils/__init__.py
@@ -1,4 +1,5 @@
from .id3_timestamp_to_datetime import id3_timestamp_to_datetime
+from .initialize_db import initialize_db
from .safe_get import safe_get
from .get_album_art import get_album_art
from .get_id3_tags import get_id3_tags
diff --git a/utils/delete_and_create_library_database.py b/utils/delete_and_create_library_database.py
index 27a6370..52caa51 100644
--- a/utils/delete_and_create_library_database.py
+++ b/utils/delete_and_create_library_database.py
@@ -1,9 +1,11 @@
import DBA
+
def delete_and_create_library_database():
- with open('utils/delete_and_create_library.sql', 'r') as file:
+ """Clears all songs in database"""
+ with open("utils/delete_and_create_library.sql", "r") as file:
lines = file.read()
- for statement in lines.split(';'):
- print(f'executing [{statement}]')
+ for statement in lines.split(";"):
+ print(f"executing [{statement}]")
with DBA.DBAccess() as db:
db.execute(statement, ())
diff --git a/utils/initialize_db.py b/utils/initialize_db.py
new file mode 100644
index 0000000..f6fccca
--- /dev/null
+++ b/utils/initialize_db.py
@@ -0,0 +1,11 @@
+import DBA
+
+
+def initialize_db():
+ """Recreates everything in the database"""
+ with open("utils/init.sql", "r") as file:
+ lines = file.read()
+ for statement in lines.split(";"):
+ print(f"executing [{statement}]")
+ with DBA.DBAccess() as db:
+ db.execute(statement, ())