blam r628 - trunk/src



Author: cmartin
Date: Sun Sep  7 10:43:14 2008
New Revision: 628
URL: http://svn.gnome.org/viewvc/blam?rev=628&view=rev

Log:
Implement the IChannel interface for ChannelList.

This interface allows us to work much more easily with
channel groups by creating a backend-unaway interface to
channels and groups.

The transformation is probably not complete yet.

Modified:
   trunk/src/Application.cs
   trunk/src/Channel.cs
   trunk/src/ChannelCollection.cs
   trunk/src/ChannelGroup.cs
   trunk/src/ChannelList.cs
   trunk/src/Delegates.cs
   trunk/src/Dialogs.cs
   trunk/src/ItemList.cs
   trunk/src/Opml.cs

Modified: trunk/src/Application.cs
==============================================================================
--- trunk/src/Application.cs	(original)
+++ trunk/src/Application.cs	Sun Sep  7 10:43:14 2008
@@ -179,7 +179,7 @@
                                                         "mainWindow", null);
             gladeXML.Autoconnect(this);
 
-            channelList = new ChannelList(mCollection.Channels);
+            channelList = new ChannelList(mCollection.Channels, mCollection.Groups);
             ((Container)channelListSw).Child = channelList;
 
             channelList.ChannelSelectedEvent   += ChannelSelected;
@@ -353,7 +353,7 @@
             //Gnome.Url.Show(itemView.Widget.LinkMessage);
         }
 
-        private void ChannelSelected(Channel channel)
+        private void ChannelSelected(IChannel channel)
         {
             if (channel == null) {
                 SensitizeChannelMenuItems(false);
@@ -406,7 +406,7 @@
 
         public void MenuChannelActivated (object obj, EventArgs args)
         {
-            Channel channel = channelList.GetSelected ();
+            IChannel channel = channelList.GetSelected ();
 
             bool sensitive = true;
             if (channel == null) {
@@ -597,10 +597,10 @@
             addChannelDialog.Show ();
         }
 
-        public void EditChannelActivated (Channel channel)
+        public void EditChannelActivated (IChannel channel)
         {
             if (channel != null) {
-                channelDialog.Show (channel);
+                channelDialog.Show (channel as Channel);
             }
         }
 
@@ -609,7 +609,7 @@
             EditChannelActivated (channelList.GetSelected ());
         }
 
-        public void MarkChannelAsReadActivated (Channel channel)
+        public void MarkChannelAsReadActivated (IChannel channel)
         {
             if (channel.MarkAsRead ()) {
                 CCollection.Update (channel);
@@ -628,7 +628,7 @@
          }
         }
 
-        public void RemoveChannelActivated(Channel channel)
+        public void RemoveChannelActivated(IChannel channel)
         {
             if (channel != null) {
                 RemoveChannelDialog.Show (mainWindow, mCollection, channel);
@@ -637,12 +637,12 @@
 
         public void RemoveChannelActivated(object obj, EventArgs args)
         {
-            Channel channel = channelList.GetSelected ();
+            IChannel channel = channelList.GetSelected ();
 
             RemoveChannelActivated(channel);
         }
 
-        public void RefreshChannelActivated(Channel channel)
+        public void RefreshChannelActivated(IChannel channel)
         {
             if (channel != null) {
                 mCollection.Refresh (channel);
@@ -651,7 +651,7 @@
 
         public void RefreshChannelActivated(object obj, EventArgs args)
         {
-            Channel channel = channelList.GetSelected ();
+            IChannel channel = channelList.GetSelected ();
 
             RefreshChannelActivated(channel);
         }
@@ -688,24 +688,24 @@
             }
         }
 
-        private void ChannelAddedCb (Channel channel)
+        private void ChannelAddedCb (IChannel channel)
         {
             channelList.Add (channel);
         }
 
-        private void ChannelUpdatedCb (Channel channel)
+        private void ChannelUpdatedCb (IChannel channel)
         {
             channelList.Updated (channel);
             UpdateTotalNumberOfUnread ();
         }
 
-        private void ChannelRemovedCb (Channel channel)
+        private void ChannelRemovedCb (IChannel channel)
         {
             channelList.Remove (channel);
             UpdateTotalNumberOfUnread ();
         }
 
-        private void ChannelRefreshStartedCb (Channel channel)
+        private void ChannelRefreshStartedCb (IChannel channel)
         {
             uint contextId = statusbar.GetContextId("update-status");
             string statusString;
@@ -715,7 +715,7 @@
             statusbar.Push (contextId, statusString);
         }
 
-        private void ChannelRefreshFinishedCb (Channel channel)
+        private void ChannelRefreshFinishedCb (IChannel channel)
         {
             uint contextId = statusbar.GetContextId("update-status");
 

Modified: trunk/src/Channel.cs
==============================================================================
--- trunk/src/Channel.cs	(original)
+++ trunk/src/Channel.cs	Sun Sep  7 10:43:14 2008
@@ -13,9 +13,19 @@
 
 namespace Imendio.Blam {
 
-	public class Channel {
-		[XmlAttribute] public string Name = "";
-		[XmlAttribute] public string Url = "";
+    public interface IChannel
+    {
+        int NrOfItems {get; }
+        int NrOfUnreadItems {get; }
+        string Name {get; set; }
+        string Url {get; set; }
+        ArrayList Items {get; set; }
+        bool MarkAsRead();
+    }
+
+    public class Channel : IChannel {
+		[XmlAttribute("Name")] public string Int_Name = "";
+		[XmlAttribute("Url")] public string Int_Url = "";
 
 		// Used when updating the feed
 		[XmlAttribute] public string LastModified = "";
@@ -28,6 +38,24 @@
 		[XmlAttribute] public string http_username = "";
 		[XmlAttribute] public string http_password = "";
 
+        public string Name {
+            get {
+                return Int_Name;
+            }
+            set {
+                Int_Name = value;
+            }
+        }
+
+        public string Url {
+            get {
+                return Int_Url;
+            }
+            set {
+                Int_Url = value;
+            }
+        }
+
 		public int NrOfItems {
 			get {
 				return mItems.Count;

Modified: trunk/src/ChannelCollection.cs
==============================================================================
--- trunk/src/ChannelCollection.cs	(original)
+++ trunk/src/ChannelCollection.cs	Sun Sep  7 10:43:14 2008
@@ -146,7 +146,7 @@
 	    }
 	}
 
-	public void Add (Channel channel)
+	public void Add (IChannel channel)
 	{
 	    // Not the most efficient way of doing things :)
 	    foreach (Channel ch in mChannels) {
@@ -166,7 +166,7 @@
         MarkAsDirty(true);
 	}
 
-	public void Update (Channel channel)
+	public void Update (IChannel channel)
 	{
 	    MarkAsDirty (true);
 
@@ -175,7 +175,7 @@
 	    }
 	}
 
-	public void Remove (Channel channel)
+	public void Remove (IChannel channel)
 	{
 	    mChannels.Remove (channel);
 
@@ -186,7 +186,7 @@
         MarkAsDirty(true);
 	}
 
-	public void Refresh (Channel channel) 
+	public void Refresh (IChannel channel)
 	{
 	    mQueue.Enqueue (channel);
 	    EmitChannelRefreshStarted (channel);
@@ -197,7 +197,7 @@
 	    thread.Start ();
 	}
 
-	private void QueueChannelRefresh (Channel channel)
+	private void QueueChannelRefresh (IChannel channel)
 	{
 	    mQueue.Enqueue (channel);
 	    EmitChannelRefreshStarted (channel);
@@ -281,7 +281,7 @@
 	    mRunningList.Remove (Thread.CurrentThread);
 	}
 
-	private void EmitChannelRefreshStarted (Channel channel)
+	private void EmitChannelRefreshStarted (IChannel channel)
 	{
 	    if (ChannelRefreshStarted != null) {
 		ChannelRefreshStarted (channel);

Modified: trunk/src/ChannelGroup.cs
==============================================================================
--- trunk/src/ChannelGroup.cs	(original)
+++ trunk/src/ChannelGroup.cs	Sun Sep  7 10:43:14 2008
@@ -11,10 +11,25 @@
 namespace Imendio.Blam
 {
     [XmlType("group")]
-    public class ChannelGroup
+    public class ChannelGroup : IChannel
     {
-        [XmlAttribute] public string Name = null;
+        [XmlAttribute("Name")] public string Int_Name = null;
+        [XmlAttribute("Url")] public string Int_Url = null;
         [XmlElement("Channel", typeof(Channel))] public ArrayList Channels;
+        private ArrayList dummy;
+
+        public ArrayList Items {
+            get { /* FIXME: Cache this value. */
+                ArrayList tmp = new ArrayList();
+                foreach(Channel chan in Channels){
+                    tmp.AddRange(chan.Items);
+                }
+                return tmp;
+            }
+            set {
+                dummy = value;
+            }
+        }
         
         public int NrOfUnreadItems {
             get {
@@ -37,5 +52,32 @@
                 return n;
             }
         }
+        public string Name {
+            get {
+                return Int_Name;
+            }
+            set {
+                Int_Name = value;
+            }
+        }
+
+        public string Url {
+            get {
+                return Int_Url;
+            }
+            set {
+                Int_Url = value;
+            }
+        }
+
+        public bool MarkAsRead()
+        {
+            bool ret = false;
+
+            foreach(Channel chan in Channels){
+                ret = chan.MarkAsRead();
+            }
+            return ret; /* FIXME: We shoudl probably do this some other way. */
+        }
     }
 }

Modified: trunk/src/ChannelList.cs
==============================================================================
--- trunk/src/ChannelList.cs	(original)
+++ trunk/src/ChannelList.cs	Sun Sep  7 10:43:14 2008
@@ -33,10 +33,11 @@
         private TreeViewColumn nameColumn;
 
         private IEnumerator channelEnumerator;
+        private IEnumerator groupEnumerator;
 
-        private Channel LastChannel = null;
+        private IChannel LastChannel = null;
 
-        public ChannelList(IList channels)
+        public ChannelList(IList channels, IList groups)
         { 
             TreeViewColumn col;
             CellRenderer   cell;
@@ -67,12 +68,12 @@
             selectionChangedHandler = new EventHandler(SelectionChanged);
             this.Selection.Changed += selectionChangedHandler;
 
-            this.Model = new ListStore (typeof(Channel));
+            this.Model = new TreeStore (typeof(Channel));
             this.HeadersVisible = false;
 
             // Sort the list
-            (Model as ListStore).DefaultSortFunc = ChannelSort;
-            ((ListStore)this.Model).SetSortColumnId (-1, SortType.Ascending);
+            (Model as TreeStore).DefaultSortFunc = ChannelSort;
+            (this.Model as TreeStore).SetSortColumnId (-1, SortType.Ascending);
 
             // Right click popup
             this.popupMenu = new ChannelMenu();
@@ -82,32 +83,49 @@
             this.popupMenu.RefreshSelected    += RefreshChannelCb;
 
             channelEnumerator = channels.GetEnumerator();
+            groupEnumerator = groups.GetEnumerator();
 
             GLib.Idle.Add(new GLib.IdleHandler(IdleAdd));
         }
 
         private void ForceResort()
         {
-            (Model as ListStore).SetSortColumnId(-1, SortType.Descending);
-            (Model as ListStore).SetSortColumnId(-1, SortType.Ascending);
+            (Model as TreeStore).SetSortColumnId(-1, SortType.Descending);
+            (Model as TreeStore).SetSortColumnId(-1, SortType.Ascending);
         }
 
         private bool IdleAdd()
         {
             while (channelEnumerator.MoveNext ()) {
-                Channel channel = (Channel)channelEnumerator.Current;
+                System.Console.WriteLine("before");
+                IChannel channel = channelEnumerator.Current as IChannel;
                 Add(channel);
+                System.Console.WriteLine("after");
+            }
+
+            while(groupEnumerator.MoveNext()){
+                IChannel group = groupEnumerator.Current as IChannel;
+                AddGroup(group);
             }
 
             return false;
         }
 
-        public void Add (Channel channel)
+        public void Add (IChannel channel)
+        {
+            (this.Model as TreeStore).AppendValues(channel);
+        }
+
+        public void AddGroup(IChannel channel)
         {
-            ((ListStore)this.Model).AppendValues(channel);
+            TreeIter iter = (this.Model as TreeStore).AppendValues(channel);
+            ChannelGroup group = channel as ChannelGroup;
+
+            foreach(IChannel chan in group.Channels)
+                (this.Model as TreeStore).AppendValues(iter, chan);
         }
 
-        public Channel GetSelected ()
+        public IChannel GetSelected ()
         {
             TreeModel model;
             TreeIter  iter;
@@ -116,10 +134,10 @@
                 return null;
             }
 
-            return(Channel)model.GetValue(iter, 0);
+            return(IChannel)model.GetValue(iter, 0);
         }
 
-        public void Updated (Channel channel)
+        public void Updated (IChannel channel)
         {
             TreeIter iter = FindChannel (channel);
 
@@ -131,7 +149,7 @@
 
         }
 
-        public void Remove (Channel channel)
+        public void Remove (IChannel channel)
         {
             TreeIter iter = FindChannel(channel);
             bool valid;
@@ -158,7 +176,7 @@
             TreeIter  iter;
 
             if (this.Selection.GetSelected(out model, out iter)) {
-                Channel channel = (Channel)model.GetValue(iter, 0);
+                IChannel channel = (IChannel)model.GetValue(iter, 0);
                 if (channel.NrOfUnreadItems > 0) {
                     return true;
                 }
@@ -221,8 +239,8 @@
 
         private int ChannelSort(TreeModel model, TreeIter ia, TreeIter ib)
         {
-            Channel a = Model.GetValue(ia, 0) as Channel;
-            Channel b = Model.GetValue(ib, 0) as Channel;
+            IChannel a = Model.GetValue(ia, 0) as IChannel;
+            IChannel b = Model.GetValue(ib, 0) as IChannel;
 
             return a.Name.CompareTo(b.Name);
         }
@@ -261,14 +279,14 @@
             TreeSelection selection = (TreeSelection)obj;
             TreeIter      iter;
             TreeModel     model;
-            Channel       channel;
+            IChannel      channel;
 
             if (!selection.GetSelected(out model, out iter)) {
                 EmitChannelSelected(null);
                 return;
             }
 
-            channel = (Channel)model.GetValue(iter, 0);
+            channel = model.GetValue(iter, 0) as IChannel;
             if (channel != null) {
                 EmitChannelSelected(channel);
             }
@@ -276,7 +294,7 @@
 
         private void NamesCellDataFunc(TreeViewColumn col, CellRenderer cell, TreeModel model, TreeIter iter)
         {
-            Channel channel = model.GetValue(iter, 0) as Channel;
+            IChannel channel = model.GetValue(iter, 0) as IChannel;
             int weight = (int)Pango.Weight.Normal;
 
             (cell as CellRendererText).Text = channel.Name;
@@ -293,7 +311,7 @@
                                        TreeModel      model,
                                        TreeIter       iter)
         {
-            Channel channel = (Channel)model.GetValue(iter, 0);
+            IChannel channel = model.GetValue(iter, 0) as IChannel;
             int weight = (int)Pango.Weight.Normal;
 
             ((CellRendererText)cell).Text = channel.NrOfUnreadItems + "/" + channel.NrOfItems;
@@ -305,7 +323,7 @@
             ((CellRendererText)cell).Weight = weight;
         }
 
-        private void EmitChannelSelected(Channel channel)
+        private void EmitChannelSelected(IChannel channel)
         {
             if(LastChannel != null){
                 foreach(Item item in LastChannel.Items){
@@ -321,7 +339,7 @@
         }
 
         // Used by ChannelUpdated
-        private Channel findChannel;
+        private IChannel findChannel;
         private TreeIter foundIter;
         private bool ForeachFindChannel(TreeModel model, 
                                         TreePath  path,
@@ -336,7 +354,7 @@
             return false;
         }
 
-        private TreeIter FindChannel(Channel channel) 
+        private TreeIter FindChannel(IChannel channel)
         {
             findChannel = channel;
             foundIter = TreeIter.Zero;
@@ -346,7 +364,7 @@
             return foundIter;
         }
 
-        private void EmitEditChannelEvent(Channel channel)
+        private void EmitEditChannelEvent(IChannel channel)
         {
             if (EditChannelEvent != null) {
                 EditChannelEvent(channel);

Modified: trunk/src/Delegates.cs
==============================================================================
--- trunk/src/Delegates.cs	(original)
+++ trunk/src/Delegates.cs	Sun Sep  7 10:43:14 2008
@@ -7,7 +7,7 @@
 
 namespace Imendio.Blam {
     public delegate void BlamEventHandler      ();
-    public delegate void ChannelEventHandler   (Channel channel);
+    public delegate void ChannelEventHandler   (IChannel channel);
     public delegate void ActionFinishedHandler (string  status);
     public delegate void StringUpdatedHandler  (string  str);
 }

Modified: trunk/src/Dialogs.cs
==============================================================================
--- trunk/src/Dialogs.cs	(original)
+++ trunk/src/Dialogs.cs	Sun Sep  7 10:43:14 2008
@@ -147,7 +147,7 @@
 	    removeChannelDialog.IconName = "blam";
 	}
 
-	public static void Show (Gtk.Window parent, ChannelCollection collection, Channel channel)
+	public static void Show (Gtk.Window parent, ChannelCollection collection, IChannel channel)
 	{
 	    if (removeDialog == null) {
 		removeDialog = new RemoveChannelDialog (parent, collection);

Modified: trunk/src/ItemList.cs
==============================================================================
--- trunk/src/ItemList.cs	(original)
+++ trunk/src/ItemList.cs	Sun Sep  7 10:43:14 2008
@@ -28,8 +28,8 @@
     private Item lastItem;
     private uint lastTimeout;
 
-	private Channel channel;
-	public Channel CurrentChannel {
+	private IChannel channel;
+	public IChannel CurrentChannel {
 	    get {
 		return channel;
 	    }

Modified: trunk/src/Opml.cs
==============================================================================
--- trunk/src/Opml.cs	(original)
+++ trunk/src/Opml.cs	Sun Sep  7 10:43:14 2008
@@ -112,7 +112,7 @@
 
 	private int nrChannels;
 
-	private void ChannelReadCb (Channel channel)
+	private void ChannelReadCb (IChannel channel)
 	{
 	    ++nrChannels;
 



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