[gnome-music/wip/mschraal/viewenum: 1/2] Clarify view referral



commit 19854b3cf1a19b018941b9faa40369a413099600
Author: Marinus Schraal <mschraal gnome org>
Date:   Wed Dec 27 21:18:27 2017 +0100

    Clarify view referral
    
    Use an enum to clarify what view is being referred to, instead of using
    numerical values.

 gnomemusic/mpris.py                 |  7 +--
 gnomemusic/toolbar.py               |  8 ++--
 gnomemusic/utils.py                 | 12 ++++++
 gnomemusic/views/emptysearchview.py |  5 ++-
 gnomemusic/views/searchview.py      | 10 +++--
 gnomemusic/window.py                | 86 ++++++++++++++++++++-----------------
 6 files changed, 77 insertions(+), 51 deletions(-)
---
diff --git a/gnomemusic/mpris.py b/gnomemusic/mpris.py
index 3533e9f..87317ce 100644
--- a/gnomemusic/mpris.py
+++ b/gnomemusic/mpris.py
@@ -26,6 +26,7 @@
 from gnomemusic.player import PlaybackStatus, RepeatType
 from gnomemusic.grilo import grilo
 from gnomemusic.playlists import Playlists
+from gnomemusic.utils import View
 import gnomemusic.utils as utils
 
 from gi.repository import GLib
@@ -542,8 +543,8 @@ class MediaPlayer2Service(Server):
             self.player.set_playing(True)
         elif self.first_song_handler == 0:
             window = self.app.get_active_window()
-            window._stack.set_visible_child(window.views[2])
-            model = window.views[2].model
+            window._stack.set_visible_child(window.views[View.SONG])
+            model = window.views[View.SONG].model
             if model.iter_n_children(None):
                 _iter = model.get_iter_first()
                 self._play_first_song(model, model.get_path(_iter), _iter)
@@ -625,7 +626,7 @@ class MediaPlayer2Service(Server):
 
     def ActivatePlaylist(self, playlist_path):
         playlist_id = self._get_playlist_from_path(playlist_path).get_id()
-        self.app._window.views[3].activate_playlist(playlist_id)
+        self.app._window.views[View.PLAYLIST].activate_playlist(playlist_id)
 
     def GetPlaylists(self, index, max_count, order, reverse):
         if order != 'Alphabetical':
diff --git a/gnomemusic/toolbar.py b/gnomemusic/toolbar.py
index dd3709e..fe7f447 100644
--- a/gnomemusic/toolbar.py
+++ b/gnomemusic/toolbar.py
@@ -32,6 +32,7 @@ from gi.repository import GObject, Gtk
 
 from gnomemusic import log
 from gnomemusic.searchbar import Searchbar, DropDown
+from gnomemusic.utils import View
 
 
 class ToolbarState:
@@ -131,9 +132,10 @@ class Toolbar(GObject.GObject):
         view = self._stack_switcher.get_stack().get_visible_child()
         view._back_button_clicked(view)
 
-        if not ((self._window.curr_view == self._window.views[4]
-                 or self._window.curr_view == self._window.views[5])
-                and visible_child != self._window.curr_view._grid):
+        current_view = self._window.curr_view
+        if not ((current_view == self._window.views[View.SEARCH]
+                 or current_view == self._window.views[View.EMPTY_SEARCH])
+                and visible_child != current_view._grid):
             self.set_state(ToolbarState.MAIN)
         else:
             self._search_button.set_visible(True)
diff --git a/gnomemusic/utils.py b/gnomemusic/utils.py
index 5e0152a..603685e 100644
--- a/gnomemusic/utils.py
+++ b/gnomemusic/utils.py
@@ -22,9 +22,21 @@
 # code, but you are not obligated to do so.  If you do not wish to do so,
 # delete this exception statement from your version.
 
+from enum import IntEnum
+
 from gettext import gettext as _
 
 
+class View(IntEnum):
+    """Enum for views"""
+    ALBUM = 0
+    ARTIST = 1
+    SONG = 2
+    PLAYLIST = 3
+    SEARCH = 4
+    EMPTY_SEARCH = 5
+
+
 def get_album_title(item):
     """Returns the album title associated with the media item
 
diff --git a/gnomemusic/views/emptysearchview.py b/gnomemusic/views/emptysearchview.py
index 0b49f8b..e81b4b4 100644
--- a/gnomemusic/views/emptysearchview.py
+++ b/gnomemusic/views/emptysearchview.py
@@ -27,6 +27,7 @@ from gi.repository import Gd, Gtk
 
 from gnomemusic import log
 from gnomemusic.toolbar import ToolbarState
+from gnomemusic.utils import View
 from gnomemusic.views.baseview import BaseView
 
 
@@ -60,7 +61,7 @@ class EmptySearchView(BaseView):
             self._artist_albums_widget.destroy()
             self._artist_albums_widget = None
         elif self.get_visible_child() == self._grid:
-            self._window.views[0].set_visible_child(
-                self._window.views[0]._grid)
+            self._window.views[View.ALBUM].set_visible_child(
+                self._window.views[View.ALBUM]._grid)
             self._window.toolbar.set_state(ToolbarState.CHILD_VIEW)
         self.set_visible_child(self._grid)
diff --git a/gnomemusic/views/searchview.py b/gnomemusic/views/searchview.py
index 6c2284d..bde6be9 100644
--- a/gnomemusic/views/searchview.py
+++ b/gnomemusic/views/searchview.py
@@ -32,6 +32,7 @@ from gnomemusic.player import DiscoveryStatus
 from gnomemusic.playlists import Playlists
 from gnomemusic.query import Query
 from gnomemusic.toolbar import ToolbarState
+from gnomemusic.utils import View
 from gnomemusic.views.baseview import BaseView
 from gnomemusic.widgets.albumwidget import AlbumWidget
 from gnomemusic.widgets.artistalbumswidget import ArtistAlbumsWidget
@@ -100,8 +101,8 @@ class SearchView(BaseView):
             self._artist_albums_widget.destroy()
             self._artist_albums_widget = None
         elif self.get_visible_child() == self._grid:
-            self._window.views[0].set_visible_child(
-                self._window.views[0]._grid)
+            self._window.views[View.ALBUM].set_visible_child(
+                self._window.views[View.ALBUM]._grid)
 
         self.set_visible_child(self._grid)
         self._window.toolbar.set_state(ToolbarState.MAIN)
@@ -216,8 +217,9 @@ class SearchView(BaseView):
                 self.emit('no-music-found')
 
         # We need to remember the view before the search view
-        if (self._window.curr_view != self._window.views[5]
-                and self._window.prev_view != self._window.views[5]):
+        emptysearchview = self._window.views[View.EMPTY_SEARCH]
+        if (self._window.curr_view != emptysearchview
+                and self._window.prev_view != emptysearchview):
             self.previous_view = self._window.prev_view
 
         if remaining == 0:
diff --git a/gnomemusic/window.py b/gnomemusic/window.py
index 9693b72..ba21854 100644
--- a/gnomemusic/window.py
+++ b/gnomemusic/window.py
@@ -37,6 +37,7 @@ from gnomemusic import TrackerWrapper
 from gnomemusic.toolbar import Toolbar, ToolbarState
 from gnomemusic.player import Player, SelectionToolbar, RepeatType
 from gnomemusic.query import Query
+from gnomemusic.utils import View
 from gnomemusic.views.albumsview import AlbumsView
 from gnomemusic.views.artistsview import ArtistsView
 from gnomemusic.views.emptyview import EmptyView
@@ -149,7 +150,7 @@ class Window(Gtk.ApplicationWindow):
         # Undo playlist removal
         def undo_remove_cb(button, self):
             self._playlist_notification.set_reveal_child(False)
-            self.views[3].undo_playlist_deletion()
+            self.views[View.PLAYLIST].undo_playlist_deletion()
 
             remove_notification_timeout(self)
 
@@ -167,9 +168,10 @@ class Window(Gtk.ApplicationWindow):
 
     @log
     def _on_changes_pending(self, data=None):
+        # FIXME: This is not working right.
         def songs_available_cb(available):
             if available:
-                if self.views[0] == self.views[-1]:
+                if self.views[View.ALBUM] == self.views[-1]:
                     view = self.views.pop()
                     view.destroy()
                     self._switch_to_player_view()
@@ -254,7 +256,7 @@ class Window(Gtk.ApplicationWindow):
         self.player = Player(self)
         self.selection_toolbar = SelectionToolbar()
         self.toolbar = Toolbar()
-        self.views = []
+        self.views = [None] * len(View)
         self._stack = Gtk.Stack(
             transition_type=Gtk.StackTransitionType.CROSSFADE,
             transition_duration=100,
@@ -308,9 +310,9 @@ class Window(Gtk.ApplicationWindow):
             view_class = EmptyView
         else:
             view_class = InitialStateView
-        self.views.append(view_class(self, self.player))
+        self.views[View.ALBUM] = view_class(self, self.player)
 
-        self._stack.add_titled(self.views[0], _("Empty"), _("Empty"))
+        self._stack.add_titled(self.views[View.ALBUM], _("Empty"), _("Empty"))
         self.toolbar._search_button.set_sensitive(False)
         self.toolbar._select_button.set_sensitive(False)
 
@@ -321,12 +323,12 @@ class Window(Gtk.ApplicationWindow):
         self.connect('destroy', self._notify_mode_disconnect)
         self._key_press_event_id = self.connect('key_press_event', self._on_key_press)
 
-        self.views.append(AlbumsView(self, self.player))
-        self.views.append(ArtistsView(self, self.player))
-        self.views.append(SongsView(self, self.player))
-        self.views.append(PlaylistView(self, self.player))
-        self.views.append(SearchView(self, self.player))
-        self.views.append(EmptySearchView(self, self.player))
+        self.views[View.ALBUM] = AlbumsView(self, self.player)
+        self.views[View.ARTIST] = ArtistsView(self, self.player)
+        self.views[View.SONG] = SongsView(self, self.player)
+        self.views[View.PLAYLIST] = PlaylistView(self, self.player)
+        self.views[View.SEARCH] = SearchView(self, self.player)
+        self.views[View.EMPTY_SEARCH] = EmptySearchView(self, self.player)
 
         for i in self.views:
             if i.title:
@@ -370,7 +372,7 @@ class Window(Gtk.ApplicationWindow):
         # Callback to remove playlists
         def remove_playlist_timeout_cb(self):
             # Remove the playlist
-            playlist.delete_playlist(self.views[3].pl_todelete)
+            playlist.delete_playlist(self.views[View.PLAYLIST].pl_todelete)
 
             # Hide the notification
             self._playlist_notification.set_reveal_child(False)
@@ -385,7 +387,7 @@ class Window(Gtk.ApplicationWindow):
             GLib.source_remove(self._playlist_notification_timeout_id)
             remove_playlist_timeout_cb(self)
 
-        playlist_title = self.views[3].current_playlist.get_title()
+        playlist_title = self.views[View.PLAYLIST].current_playlist.get_title()
         label = _("Playlist {} removed".format(playlist_title))
 
         self._playlist_notification.label.set_label(label)
@@ -452,9 +454,10 @@ class Window(Gtk.ApplicationWindow):
                     and event_and_modifiers == Gdk.ModifierType.CONTROL_MASK):
                 self._toggle_view(0, 3)
         else:
-            if (event.keyval == Gdk.KEY_Delete):
-                if self._stack.get_visible_child() == self.views[3]:
-                    self.views[3].remove_playlist()
+            child = self._stack.get_visible_child()
+            if (event.keyval == Gdk.KEY_Delete
+                    and child == self.views[View.PLAYLIST]):
+                self.views[View.PLAYLIST].remove_playlist()
             # Close search bar after Esc is pressed
             if event.keyval == Gdk.KEY_Escape:
                 self.toolbar.searchbar.show_bar(False)
@@ -469,7 +472,7 @@ class Window(Gtk.ApplicationWindow):
                 and GLib.unichar_isprint(chr(key_unic))
                 and (event_and_modifiers == Gdk.ModifierType.SHIFT_MASK
                     or event_and_modifiers == 0)
-                and not self.views[3].rename_active):
+                and not self.views[View.PLAYLIST].rename_active):
             self.toolbar.searchbar.show_bar(True)
 
     @log
@@ -494,28 +497,30 @@ class Window(Gtk.ApplicationWindow):
         self.curr_view = stack.get_visible_child()
 
         # Switch to all albums view when we're clicking Albums
-        if self.curr_view == self.views[0] and not (self.prev_view == self.views[4] or self.prev_view == 
self.views[5]):
+        if (self.curr_view == self.views[View.ALBUM]
+                and not (self.prev_view == self.views[View.SEARCH]
+                    or self.prev_view == self.views[View.EMPTY_SEARCH])):
             self.curr_view.set_visible_child(self.curr_view._grid)
 
         # Slide out sidebar on switching to Artists or Playlists view
-        if self.curr_view == self.views[1] or \
-           self.curr_view == self.views[3]:
+        if self.curr_view == self.views[View.ARTIST] or \
+           self.curr_view == self.views[View.PLAYLIST]:
             self.curr_view.stack.set_visible_child_name('dummy')
             self.curr_view.stack.set_visible_child_name('sidebar')
-        if self.curr_view != self.views[4] and self.curr_view != self.views[5]:
+        if self.curr_view != self.views[View.SEARCH] and self.curr_view != self.views[View.EMPTY_SEARCH]:
             self.toolbar.searchbar.show_bar(False)
 
         # Toggle the selection button for the EmptySearch view
-        if self.curr_view == self.views[5] or \
-           self.prev_view == self.views[5]:
+        if self.curr_view == self.views[View.EMPTY_SEARCH] or \
+           self.prev_view == self.views[View.EMPTY_SEARCH]:
             self.toolbar._select_button.set_sensitive(
                 not self.toolbar._select_button.get_sensitive())
 
         # Disable renaming playlist if it was active when leaving
         # Playlist view
-        if (self.prev_view == self.views[3]
-                and self.views[3].rename_active):
-            self.views[3].disable_rename_playlist()
+        if (self.prev_view == self.views[View.PLAYLIST]
+                and self.views[View.PLAYLIST].rename_active):
+            self.views[View.PLAYLIST].disable_rename_playlist()
 
     @log
     def _toggle_view(self, btn, i):
@@ -523,18 +528,20 @@ class Window(Gtk.ApplicationWindow):
 
     @log
     def _on_search_toggled(self, button, data=None):
-        self.toolbar.searchbar.show_bar(button.get_active(),
-                                        self.curr_view != self.views[4])
-        if (not button.get_active() and
-                (self.curr_view == self.views[4] or self.curr_view == self.views[5])):
+        self.toolbar.searchbar.show_bar(
+            button.get_active(), self.curr_view != self.views[View.SEARCH])
+        if (not button.get_active()
+                and (self.curr_view == self.views[View.SEARCH]
+                    or self.curr_view == self.views[View.EMPTY_SEARCH])):
             child = self.curr_view.get_visible_child()
             if self.toolbar._state == ToolbarState.MAIN:
                 # We should get back to the view before the search
-                self._stack.set_visible_child(self.views[4].previous_view)
-            elif (self.views[4].previous_view == self.views[0]
+                self._stack.set_visible_child(
+                    self.views[View.SEARCH].previous_view)
+            elif (self.views[View.SEARCH].previous_view == self.views[View.ALBUM]
                     and child != self.curr_view._album_widget
                     and child != self.curr_view._artist_albums_widget):
-                self._stack.set_visible_child(self.views[0])
+                self._stack.set_visible_child(self.views[View.ALBUM])
 
             if self.toolbar._selectionMode:
                 self.toolbar.set_selection_mode(False)
@@ -544,20 +551,22 @@ class Window(Gtk.ApplicationWindow):
         if self.toolbar._selectionMode is False:
             self._on_changes_pending()
         else:
-            in_playlist = self._stack.get_visible_child() == self.views[3]
+            child = self._stack.get_visible_child()
+            in_playlist = (child == self.views[View.PLAYLIST])
             self.selection_toolbar._add_to_playlist_button.set_visible(not in_playlist)
             self.selection_toolbar._remove_from_playlist_button.set_visible(in_playlist)
 
     @log
     def _on_add_to_playlist_button_clicked(self, widget):
-        if self._stack.get_visible_child() == self.views[3]:
+        if self._stack.get_visible_child() == self.views[View.PLAYLIST]:
             return
 
         def callback(selected_songs):
             if len(selected_songs) < 1:
                 return
 
-            playlist_dialog = PlaylistDialog(self, self.views[3].pl_todelete)
+            playlist_dialog = PlaylistDialog(
+                self, self.views[View.PLAYLIST].pl_todelete)
             if playlist_dialog.run() == Gtk.ResponseType.ACCEPT:
                 playlist.add_to_playlist(playlist_dialog.get_selected(),
                                          selected_songs)
@@ -568,7 +577,7 @@ class Window(Gtk.ApplicationWindow):
 
     @log
     def _on_remove_from_playlist_button_clicked(self, widget):
-        if self._stack.get_visible_child() != self.views[3]:
+        if self._stack.get_visible_child() != self.views[View.PLAYLIST]:
             return
 
         def callback(selected_songs):
@@ -576,8 +585,7 @@ class Window(Gtk.ApplicationWindow):
                 return
 
             playlist.remove_from_playlist(
-                self.views[3].current_playlist,
-                selected_songs)
+                self.views[View.PLAYLIST].current_playlist, selected_songs)
             self.toolbar.set_selection_mode(False)
 
         self._stack.get_visible_child().get_selected_songs(callback)


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