new GTK gui
This commit is contained in:
parent
03c5822c4c
commit
2e95986047
8 changed files with 804 additions and 590 deletions
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
|
|
47
data/de.coderkun.MCG.gschema.xml
Normal file
47
data/de.coderkun.MCG.gschema.xml
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schemalist>
|
||||
<schema path="/de/coderkun/mcg/" id="de.coderkun.mcg" gettext-domain="mcg">
|
||||
<key type="ai" name="window-size">
|
||||
<default>[800, 600]</default>
|
||||
<summary>Window size</summary>
|
||||
<description>Window size (width and height).</description>
|
||||
</key>
|
||||
<key type="b" name="window-maximized">
|
||||
<default>false</default>
|
||||
<summary>Window maximized</summary>
|
||||
<description>Window maximized state.</description>
|
||||
</key>
|
||||
<key type="i" name="profile">
|
||||
<default>0</default>
|
||||
<summary>Last selected profile</summary>
|
||||
<description>The index of the last selected profile used to connect to the MPD server.</description>
|
||||
</key>
|
||||
<key type="i" name="panel">
|
||||
<range min="1" max="3"/>
|
||||
<default>1</default>
|
||||
<summary>Last selected panel</summary>
|
||||
<description>The index of the last selected panel.</description>
|
||||
</key>
|
||||
<key type="i" name="item-size">
|
||||
<range min="100" max="1000" />
|
||||
<default>150</default>
|
||||
<summary>Size of library items</summary>
|
||||
<description>The size of items displayed in the library.</description>
|
||||
</key>
|
||||
<key type="s" name="sort-order">
|
||||
<default>'year'</default>
|
||||
<choices>
|
||||
<choice value='artist' />
|
||||
<choice value='title' />
|
||||
<choice value='year' />
|
||||
</choices>
|
||||
<summary>Sort criterium for library items</summary>
|
||||
<description>The sort criterium of items displayed in the library.</description>
|
||||
</key>
|
||||
<key type="b" name="sort-type">
|
||||
<default>true</default>
|
||||
<summary>Sort type for library items</summary>
|
||||
<description>The sort type of items displayed in the library.</description>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
BIN
data/gschemas.compiled
Normal file
BIN
data/gschemas.compiled
Normal file
Binary file not shown.
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
5
gui/__init__.py
Normal file
5
gui/__init__.py
Normal file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
|
1276
gui/gtk.py
1276
gui/gtk.py
File diff suppressed because it is too large
Load diff
33
mcg.py
33
mcg.py
|
@ -144,6 +144,12 @@ class MCGClient(MCGBase, mpd.MPDClient):
|
|||
self._add_action(self._play_album, album)
|
||||
|
||||
|
||||
def seek(self, pos, time):
|
||||
"""Seeks to a song at a position
|
||||
"""
|
||||
self._add_action(self._seek, pos, time)
|
||||
|
||||
|
||||
def stop(self):
|
||||
self._add_action(self._stop)
|
||||
|
||||
|
@ -340,6 +346,10 @@ class MCGClient(MCGBase, mpd.MPDClient):
|
|||
self._call('playid', track_ids[0])
|
||||
|
||||
|
||||
def _seek(self, pos, time):
|
||||
self._call('seek', pos, time)
|
||||
|
||||
|
||||
def _stop(self):
|
||||
self._call('stop')
|
||||
|
||||
|
@ -766,6 +776,8 @@ class MCGProfileConfig(MCGConfig):
|
|||
self.add_section(section)
|
||||
for attribute in profile.get_attributes():
|
||||
self.set(section, attribute, str(profile.get(attribute)))
|
||||
for section in self.sections()[len(self._profiles)+1:]:
|
||||
self.remove_section(section)
|
||||
super().save()
|
||||
|
||||
|
||||
|
@ -825,13 +837,15 @@ class MCGProfile(MCGConfigurable):
|
|||
class MCGCache():
|
||||
DIRNAME = '~/.cache/mcg/'
|
||||
SIZE_FILENAME = 'size'
|
||||
_lock = threading.Lock()
|
||||
|
||||
|
||||
def __init__(self, host, size):
|
||||
self._host = host
|
||||
self._size = size
|
||||
self._dirname = os.path.expanduser(os.path.join(MCGCache.DIRNAME, host))
|
||||
if not os.path.exists(self._dirname):
|
||||
os.makedirs(self._dirname)
|
||||
self._size = size
|
||||
self._read_size()
|
||||
|
||||
|
||||
|
@ -841,23 +855,28 @@ class MCGCache():
|
|||
|
||||
def _read_size(self):
|
||||
size = 100
|
||||
MCGCache._lock.acquire()
|
||||
# Read old size
|
||||
filename = os.path.join(self._dirname, MCGCache.SIZE_FILENAME)
|
||||
if os.path.exists(filename):
|
||||
with open(filename, 'r') as f:
|
||||
size = int(f.readline())
|
||||
# Clear cache if size has changed
|
||||
if size != self._size:
|
||||
self._clear()
|
||||
with open(filename, 'w') as f:
|
||||
f.write(str(self._size))
|
||||
# Write new size
|
||||
with open(filename, 'w') as f:
|
||||
f.write(str(self._size))
|
||||
MCGCache._lock.release()
|
||||
|
||||
|
||||
def _clear(self):
|
||||
for filename in os.listdir(self._dirname):
|
||||
path = os.path.join(self._dirname, filename)
|
||||
try:
|
||||
if os.path.isfile(path):
|
||||
if os.path.isfile(path):
|
||||
try:
|
||||
os.unlink(path)
|
||||
except Exception as e:
|
||||
print("clear:", e)
|
||||
except Exception as e:
|
||||
print("clear:", e)
|
||||
|
||||
|
||||
|
|
29
mcgGtk.py
29
mcgGtk.py
|
@ -6,24 +6,33 @@
|
|||
__author__ = "coderkun"
|
||||
__email__ = "<olli@coderkun.de>"
|
||||
__license__ = "GPL"
|
||||
__version__ = "0.3"
|
||||
__version__ = "0.4"
|
||||
__status__ = "Development"
|
||||
|
||||
|
||||
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
from gi.repository import Gtk, Gdk, GObject
|
||||
|
||||
import gui.gtk
|
||||
from gui import gtk
|
||||
|
||||
|
||||
|
||||
|
||||
# Set environment
|
||||
srcdir = os.path.abspath(os.path.join(os.path.dirname(gtk.__file__), '..'))
|
||||
if not os.environ.get('GSETTINGS_SCHEMA_DIR'):
|
||||
os.environ['GSETTINGS_SCHEMA_DIR'] = os.path.join(srcdir, 'data')
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
GObject.threads_init()
|
||||
Gdk.threads_init()
|
||||
mcgg = gui.gtk.MCGGtk()
|
||||
mcgg.show_all()
|
||||
try:
|
||||
Gtk.main()
|
||||
except (KeyboardInterrupt, SystemExit):
|
||||
pass
|
||||
# Start application
|
||||
app = gtk.Application()
|
||||
exit_status = app.run(sys.argv)
|
||||
sys.exit(exit_status)
|
||||
|
||||
|
|
Loading…
Reference in a new issue