Compare commits
No commits in common. "27b4fdf17324edd9cfd691d30b0027e4e4f096a8" and "acd83b32b5e946433e592db81b00bdcd9d444492" have entirely different histories.
27b4fdf173
...
acd83b32b5
|
@ -1,26 +0,0 @@
|
||||||
|
|
||||||
repos:
|
|
||||||
# Using this mirror lets us use mypyc-compiled black, which is about 2x faster
|
|
||||||
- repo: https://github.com/psf/black-pre-commit-mirror
|
|
||||||
rev: 24.2.0
|
|
||||||
hooks:
|
|
||||||
- id: black
|
|
||||||
# It is recommended to specify the latest version of Python
|
|
||||||
# supported by your project here, or alternatively use
|
|
||||||
# pre-commit's default_language_version, see
|
|
||||||
# https://pre-commit.com/#top_level-default_language_version
|
|
||||||
language_version: python3.11
|
|
||||||
|
|
||||||
- repo: https://github.com/pycqa/isort
|
|
||||||
rev: 5.13.2
|
|
||||||
hooks:
|
|
||||||
- id: isort
|
|
||||||
name: isort (python)
|
|
||||||
|
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
||||||
# Ruff version.
|
|
||||||
rev: v0.3.0
|
|
||||||
hooks:
|
|
||||||
# Run the linter.
|
|
||||||
- id: ruff
|
|
||||||
# - id: ruff-format We don't need this because we have black and isort.
|
|
|
@ -1,22 +1,17 @@
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
name = "karaoke"
|
name = 'karaoke'
|
||||||
help_text = "GUI for negromate karaoke"
|
help_text = 'GUI for negromate karaoke'
|
||||||
|
|
||||||
|
|
||||||
def options(parser, config, **kwargs):
|
def options(parser, config, **kwargs):
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-s",
|
'-s', '--song_folder', type=Path,
|
||||||
"--song_folder",
|
default=config['global']['song_folder'],
|
||||||
type=Path,
|
|
||||||
default=config["global"]["song_folder"],
|
|
||||||
help="Folder with the song database, defaults to {}".format(
|
help="Folder with the song database, defaults to {}".format(
|
||||||
config["global"]["song_folder"]
|
config['global']['song_folder']))
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def run(args, **kwargs):
|
def run(args, **kwargs):
|
||||||
from ..karaoke import main
|
from ..karaoke import main
|
||||||
|
|
||||||
main(args.song_folder.expanduser())
|
main(args.song_folder.expanduser())
|
||||||
|
|
|
@ -3,23 +3,21 @@ import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
import kivy
|
import kivy
|
||||||
|
kivy.require('2.1.0')
|
||||||
|
|
||||||
|
from kivy.app import App
|
||||||
|
from kivy.core.text import LabelBase
|
||||||
|
from kivy.core.window import Window
|
||||||
|
from kivy.properties import ObjectProperty, ListProperty, BooleanProperty
|
||||||
|
from kivy.resources import resource_add_path
|
||||||
|
from kivy.uix.boxlayout import BoxLayout
|
||||||
|
|
||||||
from negromate.songs.loader import load_songs
|
from negromate.songs.loader import load_songs
|
||||||
|
|
||||||
kivy.require("2.1.0")
|
|
||||||
|
|
||||||
from kivy.app import App # noqa: E402
|
|
||||||
from kivy.core.text import LabelBase # noqa: E402
|
|
||||||
from kivy.core.window import Window # noqa: E402
|
|
||||||
from kivy.properties import BooleanProperty # noqa: E402
|
|
||||||
from kivy.properties import ListProperty # noqa: E402
|
|
||||||
from kivy.properties import ObjectProperty # noqa: E402
|
|
||||||
from kivy.resources import resource_add_path # noqa: E402
|
|
||||||
from kivy.uix.boxlayout import BoxLayout # noqa: E402
|
|
||||||
|
|
||||||
|
|
||||||
class SongWidget(BoxLayout):
|
class SongWidget(BoxLayout):
|
||||||
active = BooleanProperty(False)
|
active = BooleanProperty(False)
|
||||||
song = ObjectProperty("")
|
song = ObjectProperty('')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
|
@ -51,18 +49,18 @@ class KaraokeGUI(BoxLayout):
|
||||||
self.keyboard = Window.request_keyboard(
|
self.keyboard = Window.request_keyboard(
|
||||||
self.keyboard_closed,
|
self.keyboard_closed,
|
||||||
self,
|
self,
|
||||||
"text",
|
'text',
|
||||||
)
|
)
|
||||||
self.keyboard.bind(on_key_down=self.on_key_down)
|
self.keyboard.bind(on_key_down=self.on_key_down)
|
||||||
|
|
||||||
def on_key_down(self, keyboard, keycode, text, modifiers):
|
def on_key_down(self, keyboard, keycode, text, modifiers):
|
||||||
if text == "a":
|
if text == 'a':
|
||||||
self.previous()
|
self.previous()
|
||||||
return True
|
return True
|
||||||
elif text == "d":
|
elif text == 'd':
|
||||||
self.next()
|
self.next()
|
||||||
return True
|
return True
|
||||||
elif text == "s":
|
elif text == 's':
|
||||||
self.play()
|
self.play()
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
@ -71,7 +69,7 @@ class KaraokeGUI(BoxLayout):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def on_songs(self, instance, value):
|
def on_songs(self, instance, value):
|
||||||
container = self.ids["song_container"]
|
container = self.ids['song_container']
|
||||||
container.clear_widgets()
|
container.clear_widgets()
|
||||||
for song in self.songs:
|
for song in self.songs:
|
||||||
container.add_widget(song)
|
container.add_widget(song)
|
||||||
|
@ -81,12 +79,12 @@ class KaraokeGUI(BoxLayout):
|
||||||
for song in self.songs:
|
for song in self.songs:
|
||||||
song.active = False
|
song.active = False
|
||||||
value.active = True
|
value.active = True
|
||||||
current_song_image = self.ids["current_song_image"]
|
current_song_image = self.ids['current_song_image']
|
||||||
current_song_title = self.ids["current_song_title"]
|
current_song_title = self.ids['current_song_title']
|
||||||
current_song_image.source = value.cover
|
current_song_image.source = value.cover
|
||||||
current_song_title.text = value.name
|
current_song_title.text = value.name
|
||||||
|
|
||||||
scrollview = self.ids["songs_scroll"]
|
scrollview = self.ids['songs_scroll']
|
||||||
scrollview.scroll_to(value)
|
scrollview.scroll_to(value)
|
||||||
|
|
||||||
def previous(self):
|
def previous(self):
|
||||||
|
@ -110,26 +108,19 @@ class KaraokeGUI(BoxLayout):
|
||||||
self.active_song = self.songs[idx]
|
self.active_song = self.songs[idx]
|
||||||
|
|
||||||
def play(self):
|
def play(self):
|
||||||
subprocess.call(
|
subprocess.call([
|
||||||
[
|
'cvlc',
|
||||||
"cvlc",
|
'--fullscreen',
|
||||||
"--fullscreen",
|
'--no-sub-autodetect-file',
|
||||||
"--no-sub-autodetect-file",
|
'--sub-file',
|
||||||
"--sub-file",
|
self.active_song.subtitle,
|
||||||
self.active_song.subtitle,
|
self.active_song.video,
|
||||||
self.active_song.video,
|
'vlc://quit'
|
||||||
"vlc://quit",
|
])
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class KaraokeApp(App):
|
class KaraokeApp(App):
|
||||||
kv_directory = os.path.join(
|
kv_directory = os.path.join(os.path.dirname(__file__, ), 'kv_templates')
|
||||||
os.path.dirname(
|
|
||||||
__file__,
|
|
||||||
),
|
|
||||||
"kv_templates",
|
|
||||||
)
|
|
||||||
|
|
||||||
def __init__(self, root_folder, **kwargs):
|
def __init__(self, root_folder, **kwargs):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
@ -146,5 +137,7 @@ class KaraokeApp(App):
|
||||||
def main(path):
|
def main(path):
|
||||||
# Window.fullscreen = True
|
# Window.fullscreen = True
|
||||||
resource_add_path(os.path.dirname(__file__))
|
resource_add_path(os.path.dirname(__file__))
|
||||||
LabelBase.register(name="CyrBit", fn_regular="resources/fonts/CyrBit.ttf")
|
LabelBase.register(
|
||||||
|
name='CyrBit',
|
||||||
|
fn_regular='resources/fonts/CyrBit.ttf')
|
||||||
KaraokeApp(path).run()
|
KaraokeApp(path).run()
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
negromate.songs>=1.5
|
negromate.songs==1.4
|
||||||
|
|
|
@ -22,7 +22,7 @@ packages = find_namespace:
|
||||||
zip_safe = false
|
zip_safe = false
|
||||||
python_requires = >= 3.4
|
python_requires = >= 3.4
|
||||||
install_requires =
|
install_requires =
|
||||||
negromate.songs >=1.5
|
negromate.songs ==1.4
|
||||||
|
|
||||||
[options.entry_points]
|
[options.entry_points]
|
||||||
negromate.commands =
|
negromate.commands =
|
||||||
|
|
Loading…
Reference in New Issue