Compare commits

...

6 Commits
1.0 ... main

8 changed files with 104 additions and 65 deletions

26
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,26 @@
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.

11
CHANGELOG.md Normal file
View File

@ -0,0 +1,11 @@
# Changelog
## 1.2
* chore: ruff, isort and black check
* chore: allow newer versions of negromate.songs
## 1.1
* Fix readme and dependencies

View File

@ -1,17 +1,27 @@
Negro Mate Karaoke
==================
Simple karaoke bideo browser.
Simple karaoke video browser.
This module provides one extra command to negromate:
negromate karaoke: GUI for negromate karaoke
Uses Kivy, a fairly large python library. It could be more easy to install this
package if Kivy is already installed in the system.
VLC is also used to play the songs.
Needs the following packages installed:
* python3-kivy (at least version 2.1.0)
* vlc
Uses kivy, installation instructions here: https://kivy.org/doc/stable/installation/installation-devel.html
Usage
-----
Launch:
negromate-karaoke folder/with/songs
Keyboard shortcuts:
- A: Previous song
@ -19,21 +29,3 @@ Keyboard shortcuts:
- D: Next song
The songs are played with vlc, so to exit a playing song: `Ctrl-C`.
Install Mini-howto
------------------
Instalation uses the pep517 packaging format, whichs requires pip version
19 or newer.
pip install "pip>=19"
Install dependencies for Kivy:
apt-get install python3-dev python-setuptools python-pygame python-opengl \
python-enchant python-dev build-essential python-pip libgl1-mesa-dev \
libgles2-mesa-dev zlib1g-dev
Install this package
pip install .

View File

@ -1 +1 @@
VERSION = "1.0"
VERSION = "1.2"

View File

@ -1,17 +1,22 @@
from pathlib import Path
name = 'karaoke'
help_text = 'GUI for negromate karaoke'
name = "karaoke"
help_text = "GUI for negromate karaoke"
def options(parser, config, **kwargs):
parser.add_argument(
'-s', '--song_folder', type=Path,
default=config['global']['song_folder'],
"-s",
"--song_folder",
type=Path,
default=config["global"]["song_folder"],
help="Folder with the song database, defaults to {}".format(
config['global']['song_folder']))
config["global"]["song_folder"]
),
)
def run(args, **kwargs):
from ..karaoke import main
main(args.song_folder.expanduser())

View File

@ -3,21 +3,23 @@ import os
import subprocess
import kivy
kivy.require('2.0.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
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):
active = BooleanProperty(False)
song = ObjectProperty('')
song = ObjectProperty("")
@property
def name(self):
@ -49,18 +51,18 @@ class KaraokeGUI(BoxLayout):
self.keyboard = Window.request_keyboard(
self.keyboard_closed,
self,
'text',
"text",
)
self.keyboard.bind(on_key_down=self.on_key_down)
def on_key_down(self, keyboard, keycode, text, modifiers):
if text == 'a':
if text == "a":
self.previous()
return True
elif text == 'd':
elif text == "d":
self.next()
return True
elif text == 's':
elif text == "s":
self.play()
return True
return False
@ -69,7 +71,7 @@ class KaraokeGUI(BoxLayout):
pass
def on_songs(self, instance, value):
container = self.ids['song_container']
container = self.ids["song_container"]
container.clear_widgets()
for song in self.songs:
container.add_widget(song)
@ -79,12 +81,12 @@ class KaraokeGUI(BoxLayout):
for song in self.songs:
song.active = False
value.active = True
current_song_image = self.ids['current_song_image']
current_song_title = self.ids['current_song_title']
current_song_image = self.ids["current_song_image"]
current_song_title = self.ids["current_song_title"]
current_song_image.source = value.cover
current_song_title.text = value.name
scrollview = self.ids['songs_scroll']
scrollview = self.ids["songs_scroll"]
scrollview.scroll_to(value)
def previous(self):
@ -108,19 +110,26 @@ class KaraokeGUI(BoxLayout):
self.active_song = self.songs[idx]
def play(self):
subprocess.call([
'cvlc',
'--fullscreen',
'--no-sub-autodetect-file',
'--sub-file',
self.active_song.subtitle,
self.active_song.video,
'vlc://quit'
])
subprocess.call(
[
"cvlc",
"--fullscreen",
"--no-sub-autodetect-file",
"--sub-file",
self.active_song.subtitle,
self.active_song.video,
"vlc://quit",
]
)
class KaraokeApp(App):
kv_directory = os.path.join(os.path.dirname(__file__, ), 'kv_templates')
kv_directory = os.path.join(
os.path.dirname(
__file__,
),
"kv_templates",
)
def __init__(self, root_folder, **kwargs):
super().__init__(**kwargs)
@ -137,7 +146,5 @@ class KaraokeApp(App):
def main(path):
# Window.fullscreen = True
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()

View File

@ -1,2 +1 @@
Kivy==2.0.0
negromate.songs==1.4
negromate.songs>=1.5

View File

@ -22,8 +22,7 @@ packages = find_namespace:
zip_safe = false
python_requires = >= 3.4
install_requires =
kivy
negromate.songs ==1.4
negromate.songs >=1.5
[options.entry_points]
negromate.commands =