WIP: rename repository.py → ds.py

This commit is contained in:
Keith Edmunds 2025-04-12 11:15:21 +01:00
parent 9a6bb038e1
commit 38c49b32d7
9 changed files with 103 additions and 103 deletions

View File

@ -23,7 +23,7 @@ from helpers import (
get_relative_date, get_relative_date,
ms_to_mmss, ms_to_mmss,
) )
import repository import ds
class TrackInsertDialog(QDialog): class TrackInsertDialog(QDialog):
@ -94,8 +94,8 @@ class TrackInsertDialog(QDialog):
self.setLayout(layout) self.setLayout(layout)
self.resize(800, 600) self.resize(800, 600)
width = repository.get_setting("dbdialog_width") or 800 width = ds.get_setting("dbdialog_width") or 800
height = repository.get_setting("dbdialog_height") or 800 height = ds.get_setting("dbdialog_height") or 800
self.resize(width, height) self.resize(width, height)
self.signals = MusicMusterSignals() self.signals = MusicMusterSignals()
@ -107,9 +107,9 @@ class TrackInsertDialog(QDialog):
return return
if text.startswith("a/") and len(text) > 2: if text.startswith("a/") and len(text) > 2:
self.tracks = repository.tracks_by_artist(text[2:]) self.tracks = ds.tracks_by_artist(text[2:])
else: else:
self.tracks = repository.tracks_by_title(text) self.tracks = ds.tracks_by_title(text)
for track in self.tracks: for track in self.tracks:
duration_str = ms_to_mmss(track.duration) duration_str = ms_to_mmss(track.duration)

View File

@ -45,7 +45,7 @@ from helpers import (
from log import log from log import log
from playlistrow import TrackSequence from playlistrow import TrackSequence
from playlistmodel import PlaylistModel from playlistmodel import PlaylistModel
import repository import ds
@dataclass @dataclass
@ -142,7 +142,7 @@ class FileImporter:
# Refresh list of existing tracks as they may have been updated # Refresh list of existing tracks as they may have been updated
# by previous imports # by previous imports
self.existing_tracks = repository.get_all_tracks() self.existing_tracks = ds.get_all_tracks()
for infile in [ for infile in [
os.path.join(Config.REPLACE_FILES_DEFAULT_SOURCE, f) os.path.join(Config.REPLACE_FILES_DEFAULT_SOURCE, f)
@ -465,7 +465,7 @@ class FileImporter:
# file). Check that because the path field in the database is # file). Check that because the path field in the database is
# unique and so adding a duplicate will give a db integrity # unique and so adding a duplicate will give a db integrity
# error. # error.
if repository.track_by_path(tfd.destination_path): if ds.track_by_path(tfd.destination_path):
tfd.error = ( tfd.error = (
"Importing a new track but destination path already exists " "Importing a new track but destination path already exists "
f"in database ({tfd.destination_path})" f"in database ({tfd.destination_path})"
@ -638,9 +638,9 @@ class DoTrackImport(QThread):
# Update databse # Update databse
metadata = get_all_track_metadata(self.destination_track_path) metadata = get_all_track_metadata(self.destination_track_path)
if self.track_id == 0: if self.track_id == 0:
track_dto = repository.create_track(self.destination_track_path, metadata) track_dto = ds.create_track(self.destination_track_path, metadata)
else: else:
track_dto = repository.update_track( track_dto = ds.update_track(
self.destination_track_path, self.track_id, metadata self.destination_track_path, self.track_id, metadata
) )

View File

@ -79,7 +79,7 @@ from models import db, Playdates, PlaylistRows, Playlists, Queries, Settings, Tr
from playlistrow import PlaylistRow, TrackSequence from playlistrow import PlaylistRow, TrackSequence
from playlistmodel import PlaylistModel, PlaylistProxyModel from playlistmodel import PlaylistModel, PlaylistProxyModel
from playlists import PlaylistTab from playlists import PlaylistTab
import repository import ds
from querylistmodel import QuerylistModel from querylistmodel import QuerylistModel
from ui import icons_rc # noqa F401 from ui import icons_rc # noqa F401
from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist # type: ignore from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist # type: ignore
@ -472,7 +472,7 @@ class ManageQueries(ItemlistManager):
# Build a list of queries # Build a list of queries
query_list: list[ItemlistItem] = [] query_list: list[ItemlistItem] = []
for query in repository.get_all_queries(): for query in ds.get_all_queries():
query_list.append( query_list.append(
ItemlistItem( ItemlistItem(
name=query.name, id=query.query_id, favourite=query.favourite name=query.name, id=query.query_id, favourite=query.favourite
@ -485,7 +485,7 @@ class ManageQueries(ItemlistManager):
def delete_item(self, query_id: int) -> None: def delete_item(self, query_id: int) -> None:
"""delete query""" """delete query"""
query = repository.query_by_id(query_id) query = ds.query_by_id(query_id)
if not query: if not query:
raise ApplicationError( raise ApplicationError(
f"manage_template.delete({query_id=}) can't load query" f"manage_template.delete({query_id=}) can't load query"
@ -494,7 +494,7 @@ class ManageQueries(ItemlistManager):
"Delete query", "Delete query",
f"Delete query '{query.name}': " "Are you sure?", f"Delete query '{query.name}': " "Are you sure?",
): ):
repository.delete_query(query_id) ds.delete_query(query_id)
self.refresh_table() self.refresh_table()
@ -503,13 +503,13 @@ class ManageQueries(ItemlistManager):
dlg = FilterDialog(query.name, query.filter) dlg = FilterDialog(query.name, query.filter)
if dlg.exec(): if dlg.exec():
repository.update_query_filter(query.query_id, dlg.filter) ds.update_query_filter(query.query_id, dlg.filter)
repository.update_query_name(query.query_id, dlg.name_text.text()) ds.update_query_name(query.query_id, dlg.name_text.text())
def edit_item(self, query_id: int) -> None: def edit_item(self, query_id: int) -> None:
"""Edit query""" """Edit query"""
query = repository.query_by_id(query_id) query = ds.query_by_id(query_id)
if not query: if not query:
raise ApplicationError( raise ApplicationError(
f"manage_template.edit_item({query_id=}) can't load query" f"manage_template.edit_item({query_id=}) can't load query"
@ -519,7 +519,7 @@ class ManageQueries(ItemlistManager):
def toggle_favourite(self, query_id: int, favourite: bool) -> None: def toggle_favourite(self, query_id: int, favourite: bool) -> None:
"""Mark query as (not) favourite""" """Mark query as (not) favourite"""
repository.update_query_favourite(query_id, favourite) ds.update_query_favourite(query_id, favourite)
def new_item(self) -> None: def new_item(self) -> None:
"""Create new query""" """Create new query"""
@ -528,21 +528,21 @@ class ManageQueries(ItemlistManager):
if not query_name: if not query_name:
return return
query = repository.create_query(query_name, Filter()) query = ds.create_query(query_name, Filter())
self._edit_item(query) self._edit_item(query)
self.refresh_table() self.refresh_table()
def rename_item(self, query_id: int) -> None: def rename_item(self, query_id: int) -> None:
"""rename query""" """rename query"""
query = repository.query_by_id(query_id) query = ds.query_by_id(query_id)
if not query: if not query:
raise ApplicationError(f"Can't load query ({query_id=})") raise ApplicationError(f"Can't load query ({query_id=})")
new_name = get_name(prompt="New query name", default=query.name) new_name = get_name(prompt="New query name", default=query.name)
if not new_name: if not new_name:
return return
repository.update_query_name(query_id, new_name) ds.update_query_name(query_id, new_name)
self.change_text(query_id, new_name) self.change_text(query_id, new_name)
@ -567,7 +567,7 @@ class ManageTemplates(ItemlistManager):
# Build a list of templates # Build a list of templates
template_list: list[ItemlistItem] = [] template_list: list[ItemlistItem] = []
for template in repository.playlists_templates(): for template in ds.playlists_templates():
template_list.append( template_list.append(
ItemlistItem( ItemlistItem(
name=template.name, name=template.name,
@ -582,7 +582,7 @@ class ManageTemplates(ItemlistManager):
def delete_item(self, template_id: int) -> None: def delete_item(self, template_id: int) -> None:
"""delete template""" """delete template"""
template = repository.playlists_template_by_id(template_id) template = ds.playlists_template_by_id(template_id)
if not template: if not template:
raise ApplicationError( raise ApplicationError(
f"manage_template.delete({template_id=}) can't load template" f"manage_template.delete({template_id=}) can't load template"
@ -602,12 +602,12 @@ class ManageTemplates(ItemlistManager):
else: else:
self.musicmuster.playlist_section.tabPlaylist.removeTab(open_idx) self.musicmuster.playlist_section.tabPlaylist.removeTab(open_idx)
repository.delete_playlist(template.playlist_id) ds.delete_playlist(template.playlist_id)
def edit_item(self, template_id: int) -> None: def edit_item(self, template_id: int) -> None:
"""Edit template""" """Edit template"""
template = repository.playlists_template_by_id(template_id) template = ds.playlists_template_by_id(template_id)
if not template: if not template:
raise ApplicationError( raise ApplicationError(
f"manage_template.edit({template_id=}) can't load template" f"manage_template.edit({template_id=}) can't load template"
@ -619,7 +619,7 @@ class ManageTemplates(ItemlistManager):
def toggle_favourite(self, template_id: int, favourite: bool) -> None: def toggle_favourite(self, template_id: int, favourite: bool) -> None:
"""Mark template as (not) favourite""" """Mark template as (not) favourite"""
repository.update_template_favourite(template_id, favourite) ds.update_template_favourite(template_id, favourite)
def new_item( def new_item(
self, self,
@ -639,7 +639,7 @@ class ManageTemplates(ItemlistManager):
return return
# Create playlist for template and mark is as a template # Create playlist for template and mark is as a template
template = repository.create_playlist(name, template_id, as_template=True) template = ds.create_playlist(name, template_id, as_template=True)
# Open it for editing # Open it for editing
self.musicmuster._open_playlist(template, is_template=True) self.musicmuster._open_playlist(template, is_template=True)
@ -647,14 +647,14 @@ class ManageTemplates(ItemlistManager):
def rename_item(self, template_id: int) -> None: def rename_item(self, template_id: int) -> None:
"""rename template""" """rename template"""
template = repository.playlist_by_id(template_id) template = ds.playlist_by_id(template_id)
if not template: if not template:
raise ApplicationError( raise ApplicationError(
f"manage_template.delete({template_id=}) can't load template" f"manage_template.delete({template_id=}) can't load template"
) )
new_name = self.musicmuster.get_playlist_name(template.name) new_name = self.musicmuster.get_playlist_name(template.name)
if new_name: if new_name:
repository.playlist_rename(template_id, new_name) ds.playlist_rename(template_id, new_name)
@dataclass @dataclass
@ -780,7 +780,7 @@ class QueryDialog(QDialog):
self.query_list: list[tuple[str, int]] = [] self.query_list: list[tuple[str, int]] = []
self.query_list.append((Config.NO_QUERY_NAME, 0)) self.query_list.append((Config.NO_QUERY_NAME, 0))
for query in repository.get_all_queries(): for query in ds.get_all_queries():
self.query_list.append((query.name, query.query_id)) self.query_list.append((query.name, query.query_id))
self.setWindowTitle("Query Selector") self.setWindowTitle("Query Selector")
@ -898,7 +898,7 @@ class QueryDialog(QDialog):
querylist_y=self.y(), querylist_y=self.y(),
) )
for name, value in attributes_to_save.items(): for name, value in attributes_to_save.items():
repository.set_setting(name, value) ds.set_setting(name, value)
header = self.table_view.horizontalHeader() header = self.table_view.horizontalHeader()
if header is None: if header is None:
@ -908,7 +908,7 @@ class QueryDialog(QDialog):
return return
for column_number in range(column_count - 1): for column_number in range(column_count - 1):
attr_name = f"querylist_col_{column_number}_width" attr_name = f"querylist_col_{column_number}_width"
repository.set_setting( ds.set_setting(
attr_name, self.table_view.columnWidth(column_number) attr_name, self.table_view.columnWidth(column_number)
) )
@ -939,7 +939,7 @@ class QueryDialog(QDialog):
# Get query # Get query
query_id = self.combo_box.currentData() query_id = self.combo_box.currentData()
query = repository.query_by_id(query_id) query = ds.query_by_id(query_id)
if not query: if not query:
return return
@ -961,10 +961,10 @@ class QueryDialog(QDialog):
def set_window_size(self) -> None: def set_window_size(self) -> None:
"""Set window sizes""" """Set window sizes"""
x = repository.get_setting("querylist_x") or 100 x = ds.get_setting("querylist_x") or 100
y = repository.get_setting("querylist_y") or 100 y = ds.get_setting("querylist_y") or 100
width = repository.get_setting("querylist_width") or 100 width = ds.get_setting("querylist_width") or 100
height = repository.get_setting("querylist_height") or 100 height = ds.get_setting("querylist_height") or 100
self.setGeometry(x, y, width, height) self.setGeometry(x, y, width, height)
def set_column_sizes(self) -> None: def set_column_sizes(self) -> None:
@ -980,7 +980,7 @@ class QueryDialog(QDialog):
# Last column is set to stretch so ignore it here # Last column is set to stretch so ignore it here
for column_number in range(column_count - 1): for column_number in range(column_count - 1):
attr_name = f"querylist_col_{column_number}_width" attr_name = f"querylist_col_{column_number}_width"
width = repository.get_setting(attr_name) or Config.DEFAULT_COLUMN_WIDTH width = ds.get_setting(attr_name) or Config.DEFAULT_COLUMN_WIDTH
self.table_view.setColumnWidth(column_number, width) self.table_view.setColumnWidth(column_number, width)
@ -997,8 +997,8 @@ class SelectPlaylistDialog(QDialog):
self.ui.buttonBox.rejected.connect(self.close) self.ui.buttonBox.rejected.connect(self.close)
self.playlist = None self.playlist = None
width = repository.get_setting("select_playlist_dialog_width") or 800 width = ds.get_setting("select_playlist_dialog_width") or 800
height = repository.get_setting("select_playlist_dialog_height") or 800 height = ds.get_setting("select_playlist_dialog_height") or 800
self.resize(width, height) self.resize(width, height)
for playlist in playlists: for playlist in playlists:
@ -1008,8 +1008,8 @@ class SelectPlaylistDialog(QDialog):
self.ui.lstPlaylists.addItem(p) self.ui.lstPlaylists.addItem(p)
def __del__(self): # review def __del__(self): # review
repository.set_setting("select_playlist_dialog_height", self.height()) ds.set_setting("select_playlist_dialog_height", self.height())
repository.set_setting("select_playlist_dialog_width", self.width()) ds.set_setting("select_playlist_dialog_width", self.width())
def list_doubleclick(self, entry): # review def list_doubleclick(self, entry): # review
self.playlist = entry.data(Qt.ItemDataRole.UserRole) self.playlist = entry.data(Qt.ItemDataRole.UserRole)
@ -1195,7 +1195,7 @@ class Window(QMainWindow):
playlist_id_to_tab[ playlist_id_to_tab[
self.playlist_section.tabPlaylist.widget(idx).playlist_id self.playlist_section.tabPlaylist.widget(idx).playlist_id
] = idx ] = idx
repository.playlist_save_tabs(playlist_id_to_tab) ds.playlist_save_tabs(playlist_id_to_tab)
# Save window attributes # Save window attributes
attributes_to_save = dict( attributes_to_save = dict(
@ -1206,7 +1206,7 @@ class Window(QMainWindow):
active_tab=self.playlist_section.tabPlaylist.currentIndex(), active_tab=self.playlist_section.tabPlaylist.currentIndex(),
) )
for name, value in attributes_to_save.items(): for name, value in attributes_to_save.items():
repository.set_setting(name, value) ds.set_setting(name, value)
event.accept() event.accept()
@ -1324,7 +1324,7 @@ class Window(QMainWindow):
"separator": True, "separator": True,
}, },
] ]
templates = repository.playlists_templates() templates = ds.playlists_templates()
for template in templates: for template in templates:
submenu_items.append( submenu_items.append(
{ {
@ -1357,7 +1357,7 @@ class Window(QMainWindow):
"separator": True, "separator": True,
}, },
] ]
queries = repository.get_all_queries(favourites_only=True) queries = ds.get_all_queries(favourites_only=True)
for query in queries: for query in queries:
submenu_items.append( submenu_items.append(
{ {
@ -1409,7 +1409,7 @@ class Window(QMainWindow):
if template_id > 0, and return the Playlists object. if template_id > 0, and return the Playlists object.
""" """
return repository.create_playlist(name, template_id) return ds.create_playlist(name, template_id)
@log_call @log_call
def _open_playlist(self, playlist: Playlists, is_template: bool = False) -> int: def _open_playlist(self, playlist: Playlists, is_template: bool = False) -> int:
@ -1432,7 +1432,7 @@ class Window(QMainWindow):
idx = self.playlist_section.tabPlaylist.addTab(playlist_tab, playlist.name) idx = self.playlist_section.tabPlaylist.addTab(playlist_tab, playlist.name)
# Mark playlist as open # Mark playlist as open
repository.playlist_mark_status(playlist.playlist_id, open=True) ds.playlist_mark_status(playlist.playlist_id, open=True)
# Switch to new tab # Switch to new tab
self.playlist_section.tabPlaylist.setCurrentIndex(idx) self.playlist_section.tabPlaylist.setCurrentIndex(idx)
@ -1458,7 +1458,7 @@ class Window(QMainWindow):
if not playlist_name: if not playlist_name:
return return
_ = repository.create_playlist(playlist_name, template_id) _ = ds.create_playlist(playlist_name, template_id)
@log_call @log_call
def delete_playlist(self, checked: bool = False) -> None: def delete_playlist(self, checked: bool = False) -> None:
@ -1467,21 +1467,21 @@ class Window(QMainWindow):
but unused. but unused.
""" """
playlist = repository.playlist_by_id(self.current.playlist_id) playlist = ds.playlist_by_id(self.current.playlist_id)
if playlist: if playlist:
if helpers.ask_yes_no( if helpers.ask_yes_no(
"Delete playlist", "Delete playlist",
f"Delete playlist '{playlist.name}': " "Are you sure?", f"Delete playlist '{playlist.name}': " "Are you sure?",
): ):
if self.close_playlist_tab(): if self.close_playlist_tab():
repository.delete_playlist(self.current.playlist_id) ds.delete_playlist(self.current.playlist_id)
else: else:
log.error("Failed to retrieve playlist") log.error("Failed to retrieve playlist")
def open_existing_playlist(self, checked: bool = False) -> None: def open_existing_playlist(self, checked: bool = False) -> None:
"""Open existing playlist""" """Open existing playlist"""
playlists = repository.playlists_closed() playlists = ds.playlists_closed()
dlg = SelectPlaylistDialog(self, playlists=playlists) dlg = SelectPlaylistDialog(self, playlists=playlists)
dlg.exec() dlg.exec()
playlist = dlg.playlist playlist = dlg.playlist
@ -1491,7 +1491,7 @@ class Window(QMainWindow):
def save_as_template(self, checked: bool = False) -> None: def save_as_template(self, checked: bool = False) -> None:
"""Save current playlist as template""" """Save current playlist as template"""
template_names = [a.name for a in repository.playlists_templates()] template_names = [a.name for a in ds.playlists_templates()]
while True: while True:
# Get name for new template # Get name for new template
@ -1509,7 +1509,7 @@ class Window(QMainWindow):
helpers.show_warning( helpers.show_warning(
self, "Duplicate template", "Template name already in use" self, "Duplicate template", "Template name already in use"
) )
repository.save_as_template(self.current.playlist_id, template_name) ds.save_as_template(self.current.playlist_id, template_name)
helpers.show_OK("Template", "Template saved", self) helpers.show_OK("Template", "Template saved", self)
def get_playlist_name( def get_playlist_name(
@ -1520,7 +1520,7 @@ class Window(QMainWindow):
dlg = QInputDialog(self) dlg = QInputDialog(self)
dlg.setInputMode(QInputDialog.InputMode.TextInput) dlg.setInputMode(QInputDialog.InputMode.TextInput)
dlg.setLabelText(prompt) dlg.setLabelText(prompt)
all_playlist_names = [a.name for a in repository.get_all_playlists()] all_playlist_names = [a.name for a in ds.get_all_playlists()]
while True: while True:
if default: if default:
@ -1552,7 +1552,7 @@ class Window(QMainWindow):
template_name_id_list: list[tuple[str, int]] = [] template_name_id_list: list[tuple[str, int]] = []
template_name_id_list.append((Config.NO_TEMPLATE_NAME, 0)) template_name_id_list.append((Config.NO_TEMPLATE_NAME, 0))
for template in repository.playlists_templates(): for template in ds.playlists_templates():
template_name_id_list.append((template.name, template.playlist_id)) template_name_id_list.append((template.name, template.playlist_id))
dlg = TemplateSelectorDialog(template_name_id_list, template_prompt) dlg = TemplateSelectorDialog(template_name_id_list, template_prompt)
@ -1594,7 +1594,7 @@ class Window(QMainWindow):
except subprocess.CalledProcessError as exc_info: except subprocess.CalledProcessError as exc_info:
git_tag = str(exc_info.output) git_tag = str(exc_info.output)
dbname = repository.get_db_name() dbname = ds.get_db_name()
QMessageBox.information( QMessageBox.information(
self, self,
@ -1661,7 +1661,7 @@ class Window(QMainWindow):
return False return False
# Record playlist as closed # Record playlist as closed
repository.playlist_mark_status(open=False) ds.playlist_mark_status(open=False)
# Close playlist and remove tab # Close playlist and remove tab
self.playlist_section.tabPlaylist.widget(tab_index).close() self.playlist_section.tabPlaylist.widget(tab_index).close()
@ -1744,7 +1744,7 @@ class Window(QMainWindow):
path += ".csv" path += ".csv"
with open(path, "w") as f: with open(path, "w") as f:
for playdate in repository.playdates_between_dates(start_dt): for playdate in ds.playdates_between_dates(start_dt):
f.write(f"{playdate.artist},{playdate.title}\n") f.write(f"{playdate.artist},{playdate.title}\n")
def drop3db(self) -> None: def drop3db(self) -> None:
@ -1807,7 +1807,7 @@ class Window(QMainWindow):
playlist_id = self.current.playlist_id playlist_id = self.current.playlist_id
playlist = repository.playlist_by_id(playlist_id) playlist = ds.playlist_by_id(playlist_id)
if not playlist: if not playlist:
return return
@ -1828,7 +1828,7 @@ class Window(QMainWindow):
with open(path, "w") as f: with open(path, "w") as f:
# Required directive on first line # Required directive on first line
f.write("#EXTM3U\n") f.write("#EXTM3U\n")
for playlistrow in repository.get_playlist_rows(playlist_id): for playlistrow in ds.get_playlist_rows(playlist_id):
if playlistrow.track: if playlistrow.track:
f.write( f.write(
"#EXTINF:" "#EXTINF:"
@ -1909,13 +1909,13 @@ class Window(QMainWindow):
"""Load the playlists that were open when app was last closed""" """Load the playlists that were open when app was last closed"""
playlist_ids = [] playlist_ids = []
for playlist in repository.playlists_open(): for playlist in ds.playlists_open():
if playlist: if playlist:
# Create tab # Create tab
playlist_ids.append(self._open_playlist(playlist)) playlist_ids.append(self._open_playlist(playlist))
# Set active tab # Set active tab
value = repository.get_setting("active_tab") value = ds.get_setting("active_tab")
if value is not None and value >= 0: if value is not None and value >= 0:
self.playlist_section.tabPlaylist.setCurrentIndex(value) self.playlist_section.tabPlaylist.setCurrentIndex(value)
@ -1965,7 +1965,7 @@ class Window(QMainWindow):
playlists = [] playlists = []
source_playlist_id = self.current.playlist_id source_playlist_id = self.current.playlist_id
for playlist in repository.get_all_playlists(): for playlist in ds.get_all_playlists():
if playlist.id == source_playlist_id: if playlist.id == source_playlist_id:
continue continue
else: else:
@ -1979,7 +1979,7 @@ class Window(QMainWindow):
# Add to end of target playlist, so target row will be length of # Add to end of target playlist, so target row will be length of
# playlist # playlist
to_row = repository.playlist_row_count(to_playlist_id) to_row = ds.playlist_row_count(to_playlist_id)
# Move rows # Move rows
self.current.base_model.move_rows_between_playlists( self.current.base_model.move_rows_between_playlists(
@ -2186,7 +2186,7 @@ class Window(QMainWindow):
if not track_info: if not track_info:
return return
self.preview_manager.row_number = track_info.row_number self.preview_manager.row_number = track_info.row_number
track = repository.track_by_id(track_info.track_id) track = ds.track_by_id(track_info.track_id)
if not track: if not track:
raise ApplicationError( raise ApplicationError(
f"musicmuster.preview: unable to retreive track {track_info.track_id=}" f"musicmuster.preview: unable to retreive track {track_info.track_id=}"
@ -2236,7 +2236,7 @@ class Window(QMainWindow):
return return
intro = round(self.preview_manager.get_playtime() / 100) * 100 intro = round(self.preview_manager.get_playtime() / 100) * 100
repository.set_track_intro(track_id, intro) ds.set_track_intro(track_id, intro)
self.preview_manager.set_intro(intro) self.preview_manager.set_intro(intro)
self.current.base_model.refresh_row(row_number) self.current.base_model.refresh_row(row_number)
roles = [ roles = [
@ -2270,11 +2270,11 @@ class Window(QMainWindow):
Rename current playlist. checked is passed by menu but not used here Rename current playlist. checked is passed by menu but not used here
""" """
playlist = repository.playlist_by_id(self.current.playlist_id) playlist = ds.playlist_by_id(self.current.playlist_id)
if playlist: if playlist:
new_name = self.get_playlist_name(playlist.name) new_name = self.get_playlist_name(playlist.name)
if new_name: if new_name:
repository.playlist_rename(playlist.id, new_name) ds.playlist_rename(playlist.id, new_name)
idx = self.tabBar.currentIndex() idx = self.tabBar.currentIndex()
self.tabBar.setTabText(idx, new_name) self.tabBar.setTabText(idx, new_name)
@ -2415,10 +2415,10 @@ class Window(QMainWindow):
def set_main_window_size(self) -> None: def set_main_window_size(self) -> None:
"""Set size of window from database""" """Set size of window from database"""
x = repository.get_setting("mainwindow_x") or 100 x = ds.get_setting("mainwindow_x") or 100
y = repository.get_setting("mainwindow_y") or 100 y = ds.get_setting("mainwindow_y") or 100
width = repository.get_setting("mainwindow_width") or 100 width = ds.get_setting("mainwindow_width") or 100
height = repository.get_setting("mainwindow_height") or 100 height = ds.get_setting("mainwindow_height") or 100
self.setGeometry(x, y, width, height) self.setGeometry(x, y, width, height)
@log_call @log_call

View File

@ -49,7 +49,7 @@ from helpers import (
) )
from log import log, log_call from log import log, log_call
from playlistrow import PlaylistRow, TrackSequence from playlistrow import PlaylistRow, TrackSequence
import repository import ds
HEADER_NOTES_COLUMN = 1 HEADER_NOTES_COLUMN = 1
@ -102,7 +102,7 @@ class PlaylistModel(QAbstractTableModel):
self.signals.signal_track_started.connect(self.track_started) self.signals.signal_track_started.connect(self.track_started)
# Populate self.playlist_rows # Populate self.playlist_rows
for dto in repository.get_playlist_rows(self.playlist_id): for dto in ds.get_playlist_rows(self.playlist_id):
self.playlist_rows[dto.row_number] = PlaylistRow(dto) self.playlist_rows[dto.row_number] = PlaylistRow(dto)
self.update_track_times() self.update_track_times()
@ -198,7 +198,7 @@ class PlaylistModel(QAbstractTableModel):
if self.is_header_row(row): if self.is_header_row(row):
# Check for specific header colouring # Check for specific header colouring
if plr.row_bg is None: if plr.row_bg is None:
plr.row_bg = repository.get_colour(plr.note) plr.row_bg = ds.get_colour(plr.note)
if plr.row_bg: if plr.row_bg:
return QBrush(QColor(plr.row_bg)) return QBrush(QColor(plr.row_bg))
else: else:
@ -235,7 +235,7 @@ class PlaylistModel(QAbstractTableModel):
if column == Col.NOTE.value: if column == Col.NOTE.value:
if plr.note: if plr.note:
if plr.note_bg is None: if plr.note_bg is None:
plr.row_bg = repository.get_colour(plr.note) plr.row_bg = ds.get_colour(plr.note)
if plr.note_bg: if plr.note_bg:
return QBrush(QColor(plr.note_bg)) return QBrush(QColor(plr.note_bg))
@ -296,7 +296,7 @@ class PlaylistModel(QAbstractTableModel):
self.obs_scene_change(row_number) self.obs_scene_change(row_number)
# Update Playdates in database # Update Playdates in database
repository.update_playdates(track_id) ds.update_playdates(track_id)
# Mark track as played in playlist # Mark track as played in playlist
playlist_dto.played = True playlist_dto.played = True
@ -397,7 +397,7 @@ class PlaylistModel(QAbstractTableModel):
# Signal that rows will be removed # Signal that rows will be removed
super().beginRemoveRows(QModelIndex(), min(row_group), max(row_group)) super().beginRemoveRows(QModelIndex(), min(row_group), max(row_group))
# Remove rows from data store # Remove rows from data store
repository.remove_rows(self.playlist_id, row_group) ds.remove_rows(self.playlist_id, row_group)
# Signal that data store has been updated # Signal that data store has been updated
super().endRemoveRows() super().endRemoveRows()
@ -502,7 +502,7 @@ class PlaylistModel(QAbstractTableModel):
def _foreground_role(self, row: int, column: int, plr: PlaylistRow) -> QBrush: def _foreground_role(self, row: int, column: int, plr: PlaylistRow) -> QBrush:
"""Return header foreground colour or QBrush() if none""" """Return header foreground colour or QBrush() if none"""
plr.row_fg = repository.get_colour(plr.note, foreground=True) plr.row_fg = ds.get_colour(plr.note, foreground=True)
if plr.row_fg: if plr.row_fg:
return QBrush(QColor(plr.row_fg)) return QBrush(QColor(plr.row_fg))
return QBrush() return QBrush()
@ -713,7 +713,7 @@ class PlaylistModel(QAbstractTableModel):
super().beginInsertRows(QModelIndex(), new_row_number, new_row_number) super().beginInsertRows(QModelIndex(), new_row_number, new_row_number)
new_row = repository.insert_row( new_row = ds.insert_row(
playlist_id=self.playlist_id, playlist_id=self.playlist_id,
row_number=new_row_number, row_number=new_row_number,
track_id=track_id, track_id=track_id,
@ -843,7 +843,7 @@ class PlaylistModel(QAbstractTableModel):
# Notify model going to change # Notify model going to change
self.beginResetModel() self.beginResetModel()
# Update database # Update database
repository.move_rows(from_rows, self.playlist_id, to_row_number) ds.move_rows(from_rows, self.playlist_id, to_row_number)
# Notify model changed # Notify model changed
self.endResetModel() self.endResetModel()
@ -896,7 +896,7 @@ class PlaylistModel(QAbstractTableModel):
to_row_number + len(row_group) to_row_number + len(row_group)
) )
self.signals.signal_begin_insert_rows.emit(insert_rows) self.signals.signal_begin_insert_rows.emit(insert_rows)
repository.move_rows(from_rows=row_group, ds.move_rows(from_rows=row_group,
from_playlist_id=self.playlist_id, from_playlist_id=self.playlist_id,
to_row=to_row_number, to_row=to_row_number,
to_playlist_id=to_playlist_id) to_playlist_id=to_playlist_id)
@ -1025,7 +1025,7 @@ class PlaylistModel(QAbstractTableModel):
# build a new playlist_rows # build a new playlist_rows
new_playlist_rows: dict[int, PlaylistRow] = {} new_playlist_rows: dict[int, PlaylistRow] = {}
for dto in repository.get_playlist_rows(self.playlist_id): for dto in ds.get_playlist_rows(self.playlist_id):
if dto.playlistrow_id not in plrid_to_row: if dto.playlistrow_id not in plrid_to_row:
new_playlist_rows[dto.row_number] = PlaylistRow(dto) new_playlist_rows[dto.row_number] = PlaylistRow(dto)
else: else:
@ -1040,7 +1040,7 @@ class PlaylistModel(QAbstractTableModel):
"""Populate dict for one row from database""" """Populate dict for one row from database"""
plrid = self.playlist_rows[row_number].playlistrow_id plrid = self.playlist_rows[row_number].playlistrow_id
refreshed_row = repository.get_playlist_row(plrid) refreshed_row = ds.get_playlist_row(plrid)
if not refreshed_row: if not refreshed_row:
raise ApplicationError(f"Failed to retrieve row {self.playlist_id=}, {row_number=}") raise ApplicationError(f"Failed to retrieve row {self.playlist_id=}, {row_number=}")
@ -1067,7 +1067,7 @@ class PlaylistModel(QAbstractTableModel):
track = self.playlist_rows[row_number] track = self.playlist_rows[row_number]
metadata = get_all_track_metadata(track.path) metadata = get_all_track_metadata(track.path)
_ = repository.update_track(track.path, track.track_id, metadata) _ = ds.update_track(track.path, track.track_id, metadata)
roles = [ roles = [
Qt.ItemDataRole.BackgroundRole, Qt.ItemDataRole.BackgroundRole,
@ -1107,7 +1107,7 @@ class PlaylistModel(QAbstractTableModel):
): ):
return return
repository.remove_comments(self.playlist_id, row_numbers) ds.remove_comments(self.playlist_id, row_numbers)
# only invalidate required roles # only invalidate required roles
roles = [ roles = [
@ -1166,7 +1166,7 @@ class PlaylistModel(QAbstractTableModel):
header_text = header_text[0:-1] header_text = header_text[0:-1]
# Parse passed header text and remove the first colour match string # Parse passed header text and remove the first colour match string
return repository.remove_colour_substring(header_text) return ds.remove_colour_substring(header_text)
def rowCount(self, index: QModelIndex = QModelIndex()) -> int: def rowCount(self, index: QModelIndex = QModelIndex()) -> int:
"""Standard function for view""" """Standard function for view"""
@ -1450,7 +1450,7 @@ class PlaylistModel(QAbstractTableModel):
if not track_id: if not track_id:
return "" return ""
return repository.get_last_played_dates(track_id) return ds.get_last_played_dates(track_id)
@log_call @log_call
def update_or_insert(self, track_id: int, row_number: int) -> None: def update_or_insert(self, track_id: int, row_number: int) -> None:

View File

@ -22,7 +22,7 @@ from config import Config
import helpers import helpers
from log import log from log import log
from music_manager import Music from music_manager import Music
import repository import ds
class PlaylistRow: class PlaylistRow:
@ -161,10 +161,10 @@ class PlaylistRow:
if self.track_id > 0: if self.track_id > 0:
raise ApplicationError("Attempting to add track to row with existing track ({self=}") raise ApplicationError("Attempting to add track to row with existing track ({self=}")
repository.add_track_to_header(track_id) ds.add_track_to_header(track_id)
# Need to update with track information # Need to update with track information
track = repository.track_by_id(track_id) track = ds.track_by_id(track_id)
if track: if track:
for attr, value in track.__dataclass_fields__.items(): for attr, value in track.__dataclass_fields__.items():
setattr(self, attr, value) setattr(self, attr, value)
@ -583,7 +583,7 @@ class TrackSequence:
for ts in [self.next, self.current, self.previous]: for ts in [self.next, self.current, self.previous]:
if not ts: if not ts:
continue continue
playlist_row_dto = repository.get_playlist_row(ts.playlistrow_id) playlist_row_dto = ds.get_playlist_row(ts.playlistrow_id)
if not playlist_row_dto: if not playlist_row_dto:
raise ApplicationError(f"(Can't retrieve PlaylistRows entry, {self=}") raise ApplicationError(f"(Can't retrieve PlaylistRows entry, {self=}")
ts = PlaylistRow(playlist_row_dto) ts = PlaylistRow(playlist_row_dto)

View File

@ -54,7 +54,7 @@ from helpers import (
from log import log, log_call from log import log, log_call
from playlistrow import TrackSequence from playlistrow import TrackSequence
from playlistmodel import PlaylistModel, PlaylistProxyModel from playlistmodel import PlaylistModel, PlaylistProxyModel
import repository import ds
if TYPE_CHECKING: if TYPE_CHECKING:
from musicmuster import Window from musicmuster import Window
@ -688,7 +688,7 @@ class PlaylistTab(QTableView):
self.resizeRowsToContents() self.resizeRowsToContents()
# Save settings # Save settings
repository.set_setting( ds.set_setting(
f"playlist_col_{column_number}_width", self.columnWidth(column_number) f"playlist_col_{column_number}_width", self.columnWidth(column_number)
) )
@ -1071,7 +1071,7 @@ class PlaylistTab(QTableView):
# Last column is set to stretch so ignore it here # Last column is set to stretch so ignore it here
for column_number in range(header.count() - 1): for column_number in range(header.count() - 1):
attr_name = f"playlist_col_{column_number}_width" attr_name = f"playlist_col_{column_number}_width"
value = repository.get_setting(attr_name) value = ds.get_setting(attr_name)
if value is not None: if value is not None:
self.setColumnWidth(column_number, value) self.setColumnWidth(column_number, value)
else: else:

View File

@ -39,7 +39,7 @@ from helpers import (
) )
from log import log, log_call from log import log, log_call
from playlistrow import PlaylistRow from playlistrow import PlaylistRow
import repository import ds
@dataclass @dataclass
@ -228,7 +228,7 @@ class QuerylistModel(QAbstractTableModel):
row = 0 row = 0
try: try:
results = repository.get_filtered_tracks(self.filter) results = ds.get_filtered_tracks(self.filter)
for result in results: for result in results:
queryrow = QueryRow( queryrow = QueryRow(
artist=result.artist, artist=result.artist,
@ -271,4 +271,4 @@ class QuerylistModel(QAbstractTableModel):
track_id = self.querylist_rows[row].track_id track_id = self.querylist_rows[row].track_id
if not track_id: if not track_id:
return QVariant() return QVariant()
return repository.get_last_played_dates(track_id) return ds.get_last_played_dates(track_id)

View File

@ -12,7 +12,7 @@ from helpers import (
get_tags, get_tags,
) )
from log import log from log import log
import repository import ds
def check_db() -> None: def check_db() -> None:
@ -26,7 +26,7 @@ def check_db() -> None:
Check all paths in database exist Check all paths in database exist
""" """
db_paths = set([a.path for a in repository.get_all_tracks()]) db_paths = set([a.path for a in ds.get_all_tracks()])
os_paths_list = [] os_paths_list = []
for root, _dirs, files in os.walk(Config.ROOT): for root, _dirs, files in os.walk(Config.ROOT):
@ -51,7 +51,7 @@ def check_db() -> None:
missing_file_count += 1 missing_file_count += 1
track = repository.track_by_path(path) track = ds.track_by_path(path)
if not track: if not track:
# This shouldn't happen as we're looking for paths in # This shouldn't happen as we're looking for paths in
# database that aren't in filesystem, but just in case... # database that aren't in filesystem, but just in case...
@ -88,7 +88,7 @@ def update_bitrates() -> None:
Update bitrates on all tracks in database Update bitrates on all tracks in database
""" """
for track in repository.get_all_tracks(): for track in ds.get_all_tracks():
try: try:
t = get_tags(track.path) t = get_tags(track.path)
# TODO this won't persist as we're updating DTO # TODO this won't persist as we're updating DTO