diff --git a/app.py b/app.py
index e6c3e99..7115ebc 100755
--- a/app.py
+++ b/app.py
@@ -17,6 +17,29 @@ from tinytag import TinyTag
from main_window_ui import Ui_MainWindow
from dlg_search_database_ui import Ui_Dialog
+from songdb import Tracks
+
+import sqlalchemy
+
+from sqlalchemy.orm import sessionmaker
+from sqlalchemy.ext.declarative import declarative_base
+
+# "Constants"
+DISPLAY_SQL = False
+MYSQL_CONNECT = "mysql+mysqldb://songdb:songdb@localhost/songdb"
+
+
+# Declare mapping
+Base = declarative_base()
+
+engine = sqlalchemy.create_engine(f"{MYSQL_CONNECT}?charset=utf8",
+ encoding='utf-8',
+ echo=DISPLAY_SQL)
+Base.metadata.create_all(engine)
+
+# Create a Session
+Session = sessionmaker(bind=engine)
+session = Session()
class RepeatedTimer:
def __init__(self, interval, function, *args, **kwargs):
@@ -83,7 +106,7 @@ class Track:
audio_segment - the segment to find silence in
silence_threshold - the upper bound for how quiet is silent in dFBS
chunk_size - chunk size for interating over the segment in ms
-dlg_search_database_ui
+
https://github.com/jiaaro/pydub/blob/master/pydub/silence.py
"""
@@ -176,7 +199,7 @@ class Window(QMainWindow, Ui_MainWindow):
# import ipdb; ipdb.set_trace()
def selectDatabase(self):
- dlg = DbDialog()
+ dlg = DbDialog(self)
dlg.exec()
def selectFile(self):
@@ -204,14 +227,27 @@ class Window(QMainWindow, Ui_MainWindow):
item = QTableWidgetItem(track.path)
pl.setItem(row, 6, item)
+
class DbDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
- import ipdb; ipdb.set_trace()
+ self.ui.lineEdit.textEdited.connect(self.chars_typed)
+ # import ipdb; ipdb.set_trace()
# self.lineEdit.clicked.connect(self.selectFile)
+ def chars_typed(self, s):
+ print(f"chars_typed({s})")
+ if len(s) >= 3:
+ # matches = Tracks.search_titles(s)
+ matches = session.query(Tracks).filter(
+ Tracks.title.ilike(f"%{s}%")).all()
+ if matches:
+ # import ipdb; ipdb.set_trace()
+ songs = [t.title for t in matches]
+ self.ui.listWidget.clear()
+ self.ui.listWidget.addItems(songs)
diff --git a/dlg_search_database_ui.py b/dlg_search_database_ui.py
index 29bd471..36df05f 100644
--- a/dlg_search_database_ui.py
+++ b/dlg_search_database_ui.py
@@ -2,39 +2,41 @@
# Form implementation generated from reading ui file 'ui/dlg_SearchDatabase.ui'
#
-# Created by: PyQt5 UI code generator 5.11.3
+# Created by: PyQt5 UI code generator 5.15.2
#
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again. Do not edit this file unless you know what you are doing.
+
from PyQt5 import QtCore, QtGui, QtWidgets
+
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(383, 272)
- self.widget = QtWidgets.QWidget(Dialog)
- self.widget.setGeometry(QtCore.QRect(10, 20, 361, 242))
- self.widget.setObjectName("widget")
- self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
- self.verticalLayout.setContentsMargins(0, 0, 0, 0)
+ self.gridLayout_2 = QtWidgets.QGridLayout(Dialog)
+ self.gridLayout_2.setObjectName("gridLayout_2")
+ self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
- self.label = QtWidgets.QLabel(self.widget)
+ self.label = QtWidgets.QLabel(Dialog)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
- self.lineEdit = QtWidgets.QLineEdit(self.widget)
+ self.lineEdit = QtWidgets.QLineEdit(Dialog)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1)
self.verticalLayout.addLayout(self.gridLayout)
- self.listWidget = QtWidgets.QListWidget(self.widget)
+ self.listWidget = QtWidgets.QListWidget(Dialog)
self.listWidget.setObjectName("listWidget")
self.verticalLayout.addWidget(self.listWidget)
- self.buttonBox = QtWidgets.QDialogButtonBox(self.widget)
+ self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.verticalLayout.addWidget(self.buttonBox)
+ self.gridLayout_2.addLayout(self.verticalLayout, 0, 0, 1, 1)
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept)
@@ -45,4 +47,3 @@ class Ui_Dialog(object):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label.setText(_translate("Dialog", "Title:"))
-
diff --git a/songdb.py b/songdb.py
index 6cd5198..46f4a2f 100755
--- a/songdb.py
+++ b/songdb.py
@@ -57,6 +57,15 @@ class Tracks(Base):
return track
+ @staticmethod
+ def search_titles(text):
+ return Tracks.query.filter(
+ Tracks.title.ilike(text)
+ ).all()
+
+
+
+
def main():
"Main loop"
diff --git a/ui/dlg_SearchDatabase.ui b/ui/dlg_SearchDatabase.ui
index d303eec..619eddd 100644
--- a/ui/dlg_SearchDatabase.ui
+++ b/ui/dlg_SearchDatabase.ui
@@ -13,45 +13,39 @@
Dialog
-
-
-
- 10
- 20
- 361
- 242
-
-
-
- -
-
-
-
-
-
- Title:
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
-
-
-
-
+
+ -
+
+
-
+
+
-
+
+
+ Title:
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+
+
+