Re: [Banshee-List] iTunes-style check boxes for syncing - patch



Hey I'm sorry about that.  I should have thought about that.  I opened
bug 354557 and included the patch as an attachment.

http://bugzilla.gnome.org/show_bug.cgi?id=354557

-Mike


On Tue, 2006-09-05 at 22:06 -0400, Aaron Bockover wrote:
> Please open a bug in bugzilla for this. At quick glance it looks pretty
> nice, but I can't test it because you posted the patch inline and not
> attached. 
> 
> I ask for it to go in bugzilla so it can be tracked and discussed in the
> proper area; wouldn't want it to get lost on the list.
> 
> Thanks,
> Aaron
> 
> 
> On Tue, 2006-09-05 at 20:15 -0400, Michael Quinn wrote:
> > Heres a small patch I've worked on that adds the iTunes-style checkbox
> > interface to banshee, so you can specify which songs you want synced to
> > your device.  I hope people find this useful!
> > 
> > Index: data/UIManagerLayout.xml
> > ===================================================================
> > RCS file: /cvs/gnome/banshee/data/UIManagerLayout.xml,v
> > retrieving revision 1.19
> > diff -u -r1.19 UIManagerLayout.xml
> > --- data/UIManagerLayout.xml	4 Sep 2006 00:22:29 -0000	1.19
> > +++ data/UIManagerLayout.xml	6 Sep 2006 00:02:33 -0000
> > @@ -96,6 +96,9 @@
> >              <menuitem name="SearchForSameGenre"
> > action="SearchForSameGenreAction" />
> >          </menu>
> >          <separator />
> > +        <menuitem name="CheckSongs" action="CheckSongsAction" />
> > +        <menuitem name="UncheckSongs" action="UncheckSongsAction" />
> > +        <separator />
> >          <menuitem name="SelectAll" action="SelectAllAction" />
> >          <menuitem name="SelectNone" action="SelectNoneAction" />
> >          <separator />
> > Index: src/PlayerInterface.cs
> > ===================================================================
> > RCS file: /cvs/gnome/banshee/src/PlayerInterface.cs,v
> > retrieving revision 1.211
> > diff -u -r1.211 PlayerInterface.cs
> > --- src/PlayerInterface.cs	4 Sep 2006 22:58:11 -0000	1.211
> > +++ src/PlayerInterface.cs	6 Sep 2006 00:02:35 -0000
> > @@ -935,6 +935,8 @@
> >              Globals.ActionManager.SongActions.Sensitive = true;
> >              Globals.ActionManager["WriteCDAction"].Sensitive = !(source
> > is AudioCdSource);
> >              Globals.ActionManager["RemoveSongsAction"].Sensitive
> > = !(source is AudioCdSource);
> > +            Globals.ActionManager["CheckSongsAction"].Visible = (source
> > is LibrarySource);
> > +            Globals.ActionManager["UncheckSongsAction"].Visible =
> > (source is LibrarySource);
> > 
> > Globals.ActionManager["DeleteSongsFromDriveAction"].Sensitive = 
> >                  !(source is AudioCdSource || source is DapSource);
> >          }
> > @@ -1120,6 +1122,8 @@
> >                  gxml["DapContainer"].Hide();
> >              }
> >              
> > +            playlistView.SyncColumn.Visible = source is LibrarySource;
> > +            
> >              // Make some choices for audio CDs, they can't be rated,
> > nor have plays or
> >              // last-played info. Only show the rip button for audio CDs
> >              gxml["SearchLabel"].Sensitive = source.SearchEnabled;
> > @@ -1556,7 +1560,7 @@
> >                      "/SongViewPopup/AddToPlaylist") as MenuItem;
> >                  rating_menu_item =
> > Globals.ActionManager.GetWidget("/SongViewPopup/Rating") as MenuItem;
> >              }
> > -          
> > +            
> >              bool sensitive = playlistView.Selection.CountSelectedRows()
> > > 0;
> >  
> >              if(sensitive && (SourceManager.ActiveSource is
> > LibrarySource || SourceManager.ActiveSource is PlaylistSource)) {
> > @@ -1612,6 +1616,20 @@
> >                  
> >                  plMenu.ShowAll();
> >                  ratingMenu.ShowAll();
> > +                
> > +                if (SourceManager.ActiveSource is LibrarySource)
> > +                {
> > +                    bool showCheck = false;
> > +                    bool showUncheck = false;
> > +                    foreach(TreePath path in
> > playlistView.Selection.GetSelectedRows()) {
> > +                        LibraryTrackInfo track =
> > (LibraryTrackInfo)playlistModel.PathTrackInfo(path);
> > +                        if (track.ToSync == true) showUncheck = true;
> > +                        if (track.ToSync == false) showCheck = true;
> > +                    }
> > +                    
> > +                    Globals.ActionManager["CheckSongsAction"].Visible =
> > showCheck;
> > +                    Globals.ActionManager["UncheckSongsAction"].Visible
> > = showUncheck;
> > +                }                
> >              } else {
> >                  Globals.ActionManager["AddToPlaylistAction"].Visible =
> > false;
> >                  Globals.ActionManager["RatingAction"].Visible = false;
> > @@ -2041,7 +2059,7 @@
> >              
> >              switch(md.Run()) {
> >                  case (int)ResponseType.Ok:
> > -
> > dapSource.Device.Save(Globals.Library.Tracks.Values);
> > +
> > dapSource.Device.Save(Globals.Library.GetSyncTracks());
> >                      break;
> >                  case (int)ResponseType.Apply:
> >                      dapSource.Device.Save();
> > @@ -2313,6 +2331,34 @@
> >              suspendSearch = false;
> >              
> >              playlistView.HasFocus = true;
> > +        }
> > +        
> > +        private void OnCheckSongsAction(object o, EventArgs args)
> > +        {
> > +            int selCount = playlistView.Selection.CountSelectedRows();
> > +        
> > +            if(selCount <= 0) {
> > +                return;
> > +            }
> > +            
> > +            foreach(TreePath path in
> > playlistView.Selection.GetSelectedRows()) {
> > +                LibraryTrackInfo track =
> > (LibraryTrackInfo)playlistModel.PathTrackInfo(path);
> > +                track.ToSync = true;
> > +            }
> > +        }
> > +        
> > +        private void OnUncheckSongsAction(object o, EventArgs args)
> > +        {
> > +            int selCount = playlistView.Selection.CountSelectedRows();
> > +        
> > +            if(selCount <= 0) {
> > +                return;
> > +            }
> > +            
> > +            foreach(TreePath path in
> > playlistView.Selection.GetSelectedRows()) {
> > +                LibraryTrackInfo track =
> > (LibraryTrackInfo)playlistModel.PathTrackInfo(path);
> > +                track.ToSync = false;
> > +            }
> >          }
> >          
> >          // --- Help Menu ---
> > Index: src/PlaylistView.cs
> > ===================================================================
> > RCS file: /cvs/gnome/banshee/src/PlaylistView.cs,v
> > retrieving revision 1.54
> > diff -u -r1.54 PlaylistView.cs
> > --- src/PlaylistView.cs	5 Aug 2006 20:51:12 -0000	1.54
> > +++ src/PlaylistView.cs	6 Sep 2006 00:02:36 -0000
> > @@ -74,6 +74,7 @@
> >          Pixbuf ripColumnPixbuf;
> >  
> >          public TreeViewColumn RipColumn;
> > +        public TreeViewColumn SyncColumn;
> >          public PlaylistColumn RatingColumn;
> >          public PlaylistColumn PlaysColumn;
> >          public PlaylistColumn LastPlayedColumn;
> > @@ -177,7 +178,22 @@
> >              RipColumn.PackStart(ripRenderer, true);
> >              RipColumn.SetCellDataFunc(ripRenderer, new
> > TreeCellDataFunc(RipCellInd));
> >              InsertColumn(RipColumn, 1);
> > -
> > +        	
> > +            // Add sync column
> > +            SyncColumn = new TreeViewColumn();
> > +            SyncColumn.Expand = false;
> > +            SyncColumn.Resizable = false;
> > +            SyncColumn.Clickable = false;
> > +            SyncColumn.Reorderable = false;
> > +            SyncColumn.Visible = true;
> > +        
> > +            CellRendererToggle syncRenderer = new CellRendererToggle();
> > +            syncRenderer.Activatable = true;
> > +            syncRenderer.Toggled += OnSyncToggled;
> > +            SyncColumn.PackStart(syncRenderer, true);
> > +            SyncColumn.SetCellDataFunc(syncRenderer, new
> > TreeCellDataFunc(SyncCellInd));
> > +            InsertColumn(SyncColumn, 1);
> > +        	
> >              ColumnDragFunction = new
> > TreeViewColumnDropFunc(CheckColumnDrop);
> >  
> >              Model = this.model = model;
> > @@ -222,6 +238,18 @@
> >              
> >              }   
> >          }
> > +        
> > +        private void OnSyncToggled(object o, ToggledArgs args)
> > +        {
> > +            try {
> > +                LibraryTrackInfo ti =
> > (LibraryTrackInfo)model.PathTrackInfo(new TreePath(args.Path));
> > +                CellRendererToggle renderer = (CellRendererToggle)o;
> > +                ti.ToSync = !ti.ToSync;
> > +                renderer.Active = ti.ToSync;
> > +             } catch(Exception) {
> > +        
> > +             }
> > +        }
> >  
> >          private bool CheckColumnDrop(TreeView tree, TreeViewColumn col,
> >                                       TreeViewColumn prev,
> > TreeViewColumn next)
> > @@ -426,6 +454,19 @@
> >                  toggle.Sensitive = ti.CanPlay && !ti.IsRipped;
> >                  toggle.Activatable = toggle.Sensitive;
> >                  toggle.Active = ti.CanRip && !ti.IsRipped;
> > +            } else {
> > +                toggle.Active = false;
> > +            }
> > +        }
> > +        
> > +        protected void SyncCellInd(TreeViewColumn tree_column,
> > CellRenderer cell, 
> > +            TreeModel tree_model, TreeIter iter)
> > +        {
> > +            CellRendererToggle toggle = (CellRendererToggle)cell;
> > +            LibraryTrackInfo ti = model.IterTrackInfo(iter) as
> > LibraryTrackInfo;
> > + 
> > +            if(ti != null) {
> > +                toggle.Active = ti.ToSync;
> >              } else {
> >                  toggle.Active = false;
> >              }
> > Index: src/Banshee.Base/ActionManager.cs
> > ===================================================================
> > RCS file: /cvs/gnome/banshee/src/Banshee.Base/ActionManager.cs,v
> > retrieving revision 1.22
> > diff -u -r1.22 ActionManager.cs
> > --- src/Banshee.Base/ActionManager.cs	4 Sep 2006 00:22:29 -0000	1.22
> > +++ src/Banshee.Base/ActionManager.cs	6 Sep 2006 00:02:36 -0000
> > @@ -236,7 +236,15 @@
> >                      
> >                  new ActionEntry("RatingAction", null,
> >                      Catalog.GetString("Rating"), null,
> > -                    Catalog.GetString("Set rating for selected songs"),
> > null)
> > +                    Catalog.GetString("Set rating for selected songs"),
> > null),
> > +                    
> > +                new ActionEntry("CheckSongsAction", null,
> > +                    Catalog.GetString("Check Song(s)"), null,
> > +                    Catalog.GetString("Mark songs to be synced with
> > audio player"), null),
> > +                    
> > +                new ActionEntry("UncheckSongsAction", null,
> > +                    Catalog.GetString("Uncheck Song(s)"), null,
> > +                    Catalog.GetString("Unmark songs to be synced with
> > audio player"), null)
> >              });
> >              
> >              ui.InsertActionGroup(song_actions, 0);
> > Index: src/Banshee.Base/Database.cs
> > ===================================================================
> > RCS file: /cvs/gnome/banshee/src/Banshee.Base/Database.cs,v
> > retrieving revision 1.7
> > diff -u -r1.7 Database.cs
> > --- src/Banshee.Base/Database.cs	22 May 2006 17:01:49 -0000	1.7
> > +++ src/Banshee.Base/Database.cs	6 Sep 2006 00:02:36 -0000
> > @@ -74,7 +74,9 @@
> >                     	LastPlayedStamp INTEGER,
> >                     	DateAddedStamp INTEGER,
> >                     	
> > -                   	RemoteLookupStatus INTEGER
> > +                   	RemoteLookupStatus INTEGER,
> > +                   	
> > +                   	ToSync INTEGER NOT NULL DEFAULT 1
> >                  )");
> >              }
> >              
> > @@ -120,7 +122,14 @@
> >              } catch(ApplicationException) {
> >                  LogCore.Instance.PushDebug("Adding new database
> > column", "RemoteLookupStatus INTEGER");
> >                  Execute("ALTER TABLE Tracks ADD RemoteLookupStatus
> > INTEGER");
> > -            }            
> > +            }
> > +                        
> > +            try {
> > +                QuerySingle("SELECT ToSync FROM Tracks LIMIT 1");
> > +            } catch(ApplicationException) {
> > +                LogCore.Instance.PushDebug("Adding new database
> > column", "ToSync INTEGER");
> > +                Execute("ALTER TABLE Tracks ADD ToSync INTEGER NOT NULL
> > DEFAULT 1");
> > +            }
> >              
> >              try {
> >                  QuerySingle("SELECT ViewOrder FROM PlaylistEntries
> > LIMIT 1");
> > Index: src/Banshee.Base/Library.cs
> > ===================================================================
> > RCS file: /cvs/gnome/banshee/src/Banshee.Base/Library.cs,v
> > retrieving revision 1.12
> > diff -u -r1.12 Library.cs
> > --- src/Banshee.Base/Library.cs	28 Jul 2006 17:49:47 -0000	1.12
> > +++ src/Banshee.Base/Library.cs	6 Sep 2006 00:02:37 -0000
> > @@ -301,5 +301,19 @@
> >          {
> >              return PathUtil.MakeFileNameKey(uri);
> >          }
> > +        
> > +        public ICollection<TrackInfo> GetSyncTracks()
> > +        {
> > +            List<TrackInfo> syncTracks = new List<TrackInfo>();
> > +            foreach (LibraryTrackInfo track in Tracks.Values)
> > +            {
> > +                if (track.ToSync == true)
> > +                {
> > +                    syncTracks.Add(track);
> > +                }
> > +            }
> > +            
> > +            return syncTracks;
> > +        }
> >      }
> >  }
> > Index: src/Banshee.Base/LibraryTrackInfo.cs
> > ===================================================================
> > RCS file: /cvs/gnome/banshee/src/Banshee.Base/LibraryTrackInfo.cs,v
> > retrieving revision 1.14
> > diff -u -r1.14 LibraryTrackInfo.cs
> > --- src/Banshee.Base/LibraryTrackInfo.cs	24 Aug 2006 16:35:50 -0000	1.14
> > +++ src/Banshee.Base/LibraryTrackInfo.cs	6 Sep 2006 00:02:37 -0000
> > @@ -39,6 +39,8 @@
> >  {
> >      public class LibraryTrackInfo : TrackInfo
> >      {
> > +        protected bool to_sync;
> > +    	
> >          public static int GetId(SafeUri lookup)
> >          {
> >              string query = String.Format(@"
> > @@ -174,7 +176,8 @@
> >              this.duration = duration;
> >              this.asin = asin;
> >              this.remote_lookup_status = remote_lookup_status;
> > -            
> > +            this.to_sync = true;
> > +        	
> >              this.date_added = DateTime.Now;
> >              
> >              CheckIfExists(uri);
> > @@ -200,7 +203,8 @@
> >                  LoadFromFile(filename);
> >                  string new_filename = MoveToPlace(filename, true);
> >                  uri = new SafeUri(new_filename != null ? new_filename :
> > filename);
> > -                CheckIfExists(uri);
> > +            	CheckIfExists(uri);
> > +                this.to_sync = true;
> >                  SaveToDatabase(true);
> >              }
> >  
> > @@ -313,7 +317,8 @@
> >                      "Rating", rating, 
> >                      "NumberOfPlays", play_count, 
> >                      "LastPlayedStamp",
> > DateTimeUtil.FromDateTime(last_played),
> > -                    "RemoteLookupStatus", (int)remote_lookup_status);
> > +                    "RemoteLookupStatus", (int)remote_lookup_status,
> > +                    "ToSync", Convert.ToInt32(to_sync));
> >              } else {
> >                  tracksQuery = new Update("Tracks",
> >                      "Uri", uri.AbsoluteUri,
> > @@ -337,7 +342,8 @@
> >                      "Rating", rating, 
> >                      "NumberOfPlays", play_count, 
> >                      "LastPlayedStamp",
> > DateTimeUtil.FromDateTime(last_played),
> > -                    "RemoteLookupStatus", (int)remote_lookup_status) +
> > +                    "RemoteLookupStatus", (int)remote_lookup_status,
> > +                    "ToSync", Convert.ToInt32(to_sync)) +
> >                      new Where(new Compare("TrackID", Op.EqualTo,
> > track_id));// +
> >                  //    new Limit(1);
> >              }
> > @@ -420,6 +426,8 @@
> >              if(temp_stamp > 0) {
> >                  date_added = DateTimeUtil.ToDateTime(temp_stamp);
> >              }
> > +            
> > +            to_sync = Convert.ToBoolean(reader["ToSync"]);
> >          }
> >  		
> >          private void LoadFromFile(string filename)
> > @@ -467,6 +475,16 @@
> >                  new Where(new Compare("TrackID", Op.EqualTo,
> > track_id));
> >              Core.Library.Db.Execute(query);*/
> >              Save();
> > +        }
> > +        
> > +        public bool ToSync {
> > +            get {
> > +                return to_sync;
> > +            }
> > +            set {
> > +        	    to_sync = value;
> > +                Save();
> > +            }
> >          }
> >      }
> >  }
> > 
> > _______________________________________________
> > Banshee-list mailing list
> > Banshee-list gnome org
> > http://mail.gnome.org/mailman/listinfo/banshee-list
> 
> _______________________________________________
> Banshee-list mailing list
> Banshee-list gnome org
> http://mail.gnome.org/mailman/listinfo/banshee-list




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