[gnome-music/freeze-break: 56/107] rebased on top of current master



commit 6d68d422d57c54bbf4628f785259978d2c88d2c9
Author: Sai <suman sai14 gmail com>
Date:   Sun Aug 4 22:18:17 2013 +0530

    rebased on top of current master

 gnomemusic/playlists.py |   49 +++++++++++++++++++++++++++++++++
 gnomemusic/view.py      |   68 +++++++++++++++++++++++++++++++++++++++++++++++
 gnomemusic/window.py    |    2 +-
 3 files changed, 118 insertions(+), 1 deletions(-)
---
diff --git a/gnomemusic/playlists.py b/gnomemusic/playlists.py
new file mode 100644
index 0000000..cf2bea7
--- /dev/null
+++ b/gnomemusic/playlists.py
@@ -0,0 +1,49 @@
+from gi.repository import TotemPlParser, GLib, Gio
+
+import os
+
+
+class Playlists:
+    instance = None
+
+    @classmethod
+    def get_default(self):
+        if self.instance:
+            return self.instance
+        else:
+            self.instance = Playlists()
+        return self.instance
+
+    def __init__(self):
+        self.playlist_dir = os.path.join(GLib.get_user_data_dir(),
+                                         'gnome-music',
+                                         'playlists')
+
+    def create_playlist(self, name, iterlist=None):
+        parser = TotemPlParser.Parser()
+        playlist = TotemPlParser.Playlist()
+        pl_file = Gio.file_new_for_path(self.playlist_dir + name + ".pls")
+        if iterlist is not None:
+            for _iter in iterlist:
+                pass
+        else:
+            _iter = TotemPlParser.PlaylistIter()
+            playlist.append(_iter)
+        parser.save(playlist, pl_file, name, TotemPlParser.ParserType.PLS)
+        return False
+
+    def get_playlists(self):
+        playlist_files = [pl_file for pl_file in os.listdir(self.playlist_dir)
+                          if os.path.isfile(os.path.join(self.playlist_dir,
+                                                         pl_file))]
+        playlist_names = []
+        for playlist_file in playlist_files:
+            name, ext = os.path.splitext(playlist_file)
+            playlist_names.append(name)
+        return playlist_names
+
+    def add_to_playlist(self, playlist_name):
+        pass
+
+    def delete_playlist(self, playlist_name):
+        pass
diff --git a/gnomemusic/view.py b/gnomemusic/view.py
index b5622c4..001ea49 100644
--- a/gnomemusic/view.py
+++ b/gnomemusic/view.py
@@ -40,12 +40,15 @@ from gi.repository import GLib
 from gi.repository import GdkPixbuf
 from gi.repository import Tracker
 from gi.repository import Gio
+
 from gettext import gettext as _
 from gnomemusic.grilo import grilo
 import gnomemusic.widgets as Widgets
+from gnomemusic.playlists import Playlists
 from gnomemusic.query import Query
 from gnomemusic.albumArtCache import AlbumArtCache as albumArtCache
 tracker = Tracker.SparqlConnection.get(None)
+playlists = Playlists.get_default()
 
 if Gtk.get_minor_version() > 8:
     from gi.repository.Gtk import Stack, StackTransitionType
@@ -462,9 +465,74 @@ class Songs(ViewContainer):
 
 
 class Playlist(ViewContainer):
+    playlists_list = playlists.get_playlists()
+
     def __init__(self, header_bar, selection_toolbar, player):
         ViewContainer.__init__(self, _("Playlists"), header_bar,
                                selection_toolbar)
+        self._playlistWidget = Gtk.Frame(
+            shadow_type=Gtk.ShadowType.NONE,
+            hexpand=True
+        )
+        self.add_button = Gtk.Button(label=_("Add"), visible=True)
+        self.view.get_parent().add(self.add_button)
+        self.add_button.show()
+        self._playlist_list = {}
+        self.view.set_view_type(Gd.MainViewType.LIST)
+        self.view.set_hexpand(False)
+        self.view.get_generic_view().get_selection().set_mode(
+            Gtk.SelectionMode.SINGLE)
+        self._grid.attach(Gtk.Separator(orientation=Gtk.Orientation.VERTICAL),
+                          1, 0, 1, 1)
+        self._grid.attach(self._playlistWidget, 2, 0, 2, 2)
+        self._add_list_renderers()
+        if (Gtk.Settings.get_default().get_property(
+                'gtk_application_prefer_dark_theme')):
+            self.view.get_generic_view().get_style_context().\
+                add_class("artist-panel-dark")
+        else:
+            self.view.get_generic_view().get_style_context().\
+                add_class("artist-panel-white")
+        self.add_button.connect("clicked", self._on_add_button_clicked)
+
+    def _add_list_renderers(self):
+        list_widget = self.view.get_generic_view()
+
+        cols = list_widget.get_columns()
+        cells = cols[0].get_cells()
+        cells[1].set_visible(False)
+        cells[2].set_visible(False)
+        type_renderer = Gd.StyledTextRenderer(
+            xpad=16,
+            ypad=16,
+            ellipsize=Pango.EllipsizeMode.END,
+            xalign=0.0,
+            width=220
+        )
+        list_widget.add_renderer(type_renderer, lambda *args: None, None)
+        cols[0].clear_attributes(type_renderer)
+        cols[0].add_attribute(type_renderer, "text", 2)
+
+    def _populate(self):
+        self._init = True
+        self.populate()
+
+    def _add_item(self, item):
+        _iter = self._model.append()
+        self._playlist_list[item] = {"iter": _iter, "albums": []}
+        self._model.set(_iter, [2], [item])
+
+    def populate(self):
+        for item in self.playlists_list:
+            self._add_item(item)
+
+    def _on_add_button_clicked(self, button):
+        text_renderer = Gtk.CellRendererText()
+        _iter = self._model.append()
+        text_renderer.set_property('editable', True)
+        text_renderer.set_property('editable-set', True)
+        self.view.get_generic_view().add_renderer(text_renderer,
+                                                  lambda *args: None, None)
 
 
 class Artists (ViewContainer):
diff --git a/gnomemusic/window.py b/gnomemusic/window.py
index 98fd005..064e8d6 100644
--- a/gnomemusic/window.py
+++ b/gnomemusic/window.py
@@ -117,7 +117,7 @@ class Window(Gtk.ApplicationWindow):
             self.views.append(Views.Albums(self.toolbar, self.selection_toolbar, self.player))
             self.views.append(Views.Artists(self.toolbar, self.selection_toolbar, self.player))
             self.views.append(Views.Songs(self.toolbar, self.selection_toolbar, self.player))
-            #self.views.append(Views.Playlist(self.toolbar, self.selection_toolbar, self.player))
+            self.views.append(Views.Playlist(self.toolbar, self.selection_toolbar, self.player))
 
             for i in self.views:
                 self._stack.add_titled(i, i.title, i.title)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]