Merge branch 'dev'
This commit is contained in:
commit
fd2183b7f0
@ -38,7 +38,7 @@ class InfoTabs(QTabWidget):
|
|||||||
"""Search Songfacts for title"""
|
"""Search Songfacts for title"""
|
||||||
|
|
||||||
slug = slugify(title, replacements=([["'", ""]]))
|
slug = slugify(title, replacements=([["'", ""]]))
|
||||||
log.error(f"Songfacts Infotab for {title=}")
|
log.info(f"Songfacts Infotab for {title=}")
|
||||||
url = f"https://www.songfacts.com/search/songs/{slug}"
|
url = f"https://www.songfacts.com/search/songs/{slug}"
|
||||||
|
|
||||||
self.open_tab(url, title)
|
self.open_tab(url, title)
|
||||||
@ -47,7 +47,7 @@ class InfoTabs(QTabWidget):
|
|||||||
"""Search Wikipedia for title"""
|
"""Search Wikipedia for title"""
|
||||||
|
|
||||||
str = urllib.parse.quote_plus(title)
|
str = urllib.parse.quote_plus(title)
|
||||||
log.error(f"Wikipedia Infotab for {title=}")
|
log.info(f"Wikipedia Infotab for {title=}")
|
||||||
url = f"https://www.wikipedia.org/w/index.php?search={str}"
|
url = f"https://www.wikipedia.org/w/index.php?search={str}"
|
||||||
|
|
||||||
self.open_tab(url, title)
|
self.open_tab(url, title)
|
||||||
|
|||||||
@ -44,7 +44,7 @@ class FadeTrack(QRunnable):
|
|||||||
sleep(1 / Config.FADEOUT_STEPS_PER_SECOND)
|
sleep(1 / Config.FADEOUT_STEPS_PER_SECOND)
|
||||||
|
|
||||||
self.player.stop()
|
self.player.stop()
|
||||||
log.debug(f"Releasing player {self.player=}")
|
log.error(f"Releasing player {self.player=}")
|
||||||
self.player.release()
|
self.player.release()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -898,10 +898,14 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
def insert_track(self) -> None:
|
def insert_track(self) -> None:
|
||||||
"""Show dialog box to select and add track from database"""
|
"""Show dialog box to select and add track from database"""
|
||||||
|
|
||||||
|
new_row_number = (
|
||||||
|
self.active_tab().source_model_selected_row_number()
|
||||||
|
or self.active_proxy_model().rowCount()
|
||||||
|
)
|
||||||
with Session() as session:
|
with Session() as session:
|
||||||
dlg = TrackSelectDialog(
|
dlg = TrackSelectDialog(
|
||||||
session=session,
|
session=session,
|
||||||
new_row_number=self.active_tab().source_model_selected_row_number(),
|
new_row_number=new_row_number,
|
||||||
source_model=self.active_proxy_model(),
|
source_model=self.active_proxy_model(),
|
||||||
)
|
)
|
||||||
dlg.exec()
|
dlg.exec()
|
||||||
|
|||||||
@ -138,10 +138,10 @@ class PipeClient():
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.timer: bool = False
|
self.timer: bool = False # type: ignore
|
||||||
self._start_time: float = 0
|
self._start_time: float = 0 # type: ignore
|
||||||
self._write_pipe = None
|
self._write_pipe = None
|
||||||
self.reply: str = ''
|
self.reply: str = '' # type: ignore
|
||||||
if not self._write_pipe:
|
if not self._write_pipe:
|
||||||
self._write_thread_start()
|
self._write_thread_start()
|
||||||
self._read_thread_start()
|
self._read_thread_start()
|
||||||
|
|||||||
@ -7,6 +7,7 @@ from datetime import datetime, timedelta
|
|||||||
from enum import auto, Enum
|
from enum import auto, Enum
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
from random import shuffle
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from PyQt6.QtCore import (
|
from PyQt6.QtCore import (
|
||||||
@ -254,7 +255,10 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
row_number = track_sequence.now.plr_rownum
|
row_number = track_sequence.now.plr_rownum
|
||||||
prd = self.playlist_rows[row_number]
|
if row_number is not None:
|
||||||
|
prd = self.playlist_rows[row_number]
|
||||||
|
else:
|
||||||
|
prd = None
|
||||||
|
|
||||||
# Sanity check
|
# Sanity check
|
||||||
if not track_sequence.now.track_id:
|
if not track_sequence.now.track_id:
|
||||||
@ -285,8 +289,9 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
log.error(f"Can't retrieve plr, {track_sequence.now.plr_id=}")
|
log.error(f"Can't retrieve plr, {track_sequence.now.plr_id=}")
|
||||||
|
|
||||||
# Update track times
|
# Update track times
|
||||||
prd.start_time = track_sequence.now.start_time
|
if prd:
|
||||||
prd.end_time = track_sequence.now.end_time
|
prd.start_time = track_sequence.now.start_time
|
||||||
|
prd.end_time = track_sequence.now.end_time
|
||||||
|
|
||||||
# Update colour and times for current row
|
# Update colour and times for current row
|
||||||
self.invalidate_row(row_number)
|
self.invalidate_row(row_number)
|
||||||
@ -1311,6 +1316,14 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
|
|
||||||
self.sort_by_attribute(row_numbers, "lastplayed")
|
self.sort_by_attribute(row_numbers, "lastplayed")
|
||||||
|
|
||||||
|
def sort_randomly(self, row_numbers: List[int]) -> None:
|
||||||
|
"""
|
||||||
|
Sort selected rows randomly
|
||||||
|
"""
|
||||||
|
|
||||||
|
shuffle(row_numbers)
|
||||||
|
self.move_rows(row_numbers, min(row_numbers))
|
||||||
|
|
||||||
def sort_by_title(self, row_numbers: List[int]) -> None:
|
def sort_by_title(self, row_numbers: List[int]) -> None:
|
||||||
"""
|
"""
|
||||||
Sort selected rows by title
|
Sort selected rows by title
|
||||||
@ -1599,6 +1612,9 @@ class PlaylistProxyModel(QSortFilterProxyModel):
|
|||||||
def sort_by_lastplayed(self, row_numbers: List[int]) -> None:
|
def sort_by_lastplayed(self, row_numbers: List[int]) -> None:
|
||||||
return self.source_model.sort_by_lastplayed(row_numbers)
|
return self.source_model.sort_by_lastplayed(row_numbers)
|
||||||
|
|
||||||
|
def sort_randomly(self, row_numbers: List[int]) -> None:
|
||||||
|
return self.source_model.sort_randomly(row_numbers)
|
||||||
|
|
||||||
def sort_by_title(self, row_numbers: List[int]) -> None:
|
def sort_by_title(self, row_numbers: List[int]) -> None:
|
||||||
return self.source_model.sort_by_title(row_numbers)
|
return self.source_model.sort_by_title(row_numbers)
|
||||||
|
|
||||||
|
|||||||
@ -487,6 +487,11 @@ class PlaylistTab(QTableView):
|
|||||||
lambda: proxy_model.sort_by_lastplayed(self.get_selected_rows()),
|
lambda: proxy_model.sort_by_lastplayed(self.get_selected_rows()),
|
||||||
parent_menu=sort_menu,
|
parent_menu=sort_menu,
|
||||||
)
|
)
|
||||||
|
self._add_context_menu(
|
||||||
|
"randomly",
|
||||||
|
lambda: proxy_model.sort_randomly(self.get_selected_rows()),
|
||||||
|
parent_menu=sort_menu,
|
||||||
|
)
|
||||||
|
|
||||||
# Info
|
# Info
|
||||||
if track_row:
|
if track_row:
|
||||||
|
|||||||
943
poetry.lock
generated
943
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@ -40,7 +40,7 @@ flakehell = "^0.9.0"
|
|||||||
pudb = "^2023.1"
|
pudb = "^2023.1"
|
||||||
sphinx = "^7.0.1"
|
sphinx = "^7.0.1"
|
||||||
furo = "^2023.5.20"
|
furo = "^2023.5.20"
|
||||||
black = "^23.3.0"
|
black = "^24.2.0"
|
||||||
flakehell = "^0.9.0"
|
flakehell = "^0.9.0"
|
||||||
mypy = "^1.7.0"
|
mypy = "^1.7.0"
|
||||||
pdbp = "^1.5.0"
|
pdbp = "^1.5.0"
|
||||||
@ -50,8 +50,8 @@ requires = ["poetry-core>=1.0.0"]
|
|||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|
||||||
[tool.mypy]
|
[tool.mypy]
|
||||||
# mypy_path = "/home/kae/.cache/pypoetry/virtualenvs/musicmuster-oWgGw1IG-py3.9:/home/kae/git/musicmuster/app"
|
|
||||||
mypy_path = "/home/kae/git/musicmuster/app"
|
mypy_path = "/home/kae/git/musicmuster/app"
|
||||||
|
explicit_package_bases = true
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
addopts = "--exitfirst --showlocals --capture=no"
|
addopts = "--exitfirst --showlocals --capture=no"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user