banshee r3854 - in trunk/banshee: . build build/m4/banshee src/Core/Banshee.Core/Banshee.Base src/Core/Banshee.Services src/Core/Banshee.Services/Banshee.MediaEngine src/Core/Banshee.Services/Banshee.Sources src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod src/Extensions src/Extensions/Banshee.BooScript src/Extensions/Banshee.BooScript/Banshee.BooScript src/Extensions/Banshee.BooScript/Resources src/Extensions/Banshee.Podcasting src/Extensions/Template src/Libraries/Hyena/Hyena.CommandLine src/Libraries/Migo



Author: abock
Date: Thu May  1 01:56:55 2008
New Revision: 3854
URL: http://svn.gnome.org/viewvc/banshee?rev=3854&view=rev

Log:
2008-04-30  Aaron Bockover  <abock gnome org>

    * build/build.environment.mk:
    * build/m4/banshee/boo.m4:
    * configure.ac: Build stuff for the BooScript extension

    * src/Core/Banshee.Core/Banshee.Base/Paths.cs: Added GetTempFileName

    * src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs:
    Use the new Paths.GetTempFileName

    * src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs:
    Created a new collection that holds formatter handlers and add our
    default formatters; this allows scripts and extensions can add their own

    * src/Core/Banshee.Services/Banshee.Sources/Source.cs: Move the default
    duration formatters into DurationStatusFormatters and create a static
    instance of that collection to use for sources

    * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs:
    * src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs: Small progress
    on syncing, not much

    * src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs: Require
    arguments taking value to have the --arg=value form on the command line
    and treat all non -- starting arguments as 'files'

    * src/Extensions/Banshee.BooScript/Banshee.BooScript.addin.xml:
    * src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs:
    Ported the Boo scripting support from old Banshee

    * src/Extensions/Banshee.BooScript/Resources/duration-status-formats.boo:
    * src/Extensions/Banshee.BooScript/Resources/filename-transform.boo:
    The first two Boo scripts that work on the new Banshee



Added:
   trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs
   trunk/banshee/src/Extensions/Banshee.BooScript/
   trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript/
   trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.addin.xml
   trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.mdp
   trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs
   trunk/banshee/src/Extensions/Banshee.BooScript/Makefile.am
   trunk/banshee/src/Extensions/Banshee.BooScript/Resources/
   trunk/banshee/src/Extensions/Banshee.BooScript/Resources/duration-status-formats.boo
   trunk/banshee/src/Extensions/Banshee.BooScript/Resources/filename-transform.boo
Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/build/build.environment.mk
   trunk/banshee/build/m4/banshee/boo.m4
   trunk/banshee/configure.ac
   trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Paths.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp
   trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs
   trunk/banshee/src/Core/Banshee.Services/Makefile.am
   trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
   trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
   trunk/banshee/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.mdp
   trunk/banshee/src/Extensions/Extensions.mds
   trunk/banshee/src/Extensions/Makefile.am
   trunk/banshee/src/Extensions/Template/Template.mdp
   trunk/banshee/src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs
   trunk/banshee/src/Libraries/Migo/Migo.mdp

Modified: trunk/banshee/build/build.environment.mk
==============================================================================
--- trunk/banshee/build/build.environment.mk	(original)
+++ trunk/banshee/build/build.environment.mk	Thu May  1 01:56:55 2008
@@ -22,39 +22,14 @@
 LINK_DBUS = $(NDESK_DBUS_LIBS)
 LINK_TAGLIB = $(TAGLIB_SHARP_LIBS)
 LINK_IPOD = $(IPODSHARP_LIBS)
+LINK_BOO = $(BOO_LIBS)
 
 LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
 LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
 LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
 
-# Internal directories/libraries
-
 DIR_BIN = $(top_builddir)/bin
 
-# Libraries
-#
-#DIR_BOO = $(DIR_LIBRARIES)/Boo
-#if EXTERNAL_BOO
-#LINK_BOO = $(BOO_LIBS)
-#else
-#LINK_BOO = \
-#	-r:$(DIR_BOO)/Boo.Lang.dll \
-#	-r:$(DIR_BOO)/Boo.Lang.Compiler.dll \
-#	-r:$(DIR_BOO)/Boo.Lang.Interpreter.dll
-#endif
-#
-#DIR_BOOBUDDY = $(DIR_LIBRARIES)/BooBuddy
-#MONO_BASE_PATH += $(DIR_BOOBUDDY)
-#REF_BOOBUDDY = $(LINK_GTK) $(LINK_BOO)
-#LINK_BOOBUDDY = -r:$(DIR_BOOBUDDY)/BooBuddy.dll
-#LINK_BOOBUDDY_DEPS = $(REF_BOOBUDDY) $(LINK_BOOBUDDY)
-#
-#DIR_GNOME_KEYRING = $(DIR_LIBRARIES)/Gnome.Keyring
-#MONO_BASE_PATH += $(DIR_GNOME_KEYRING)
-#REF_GNOME_KEYRING = $(LINK_DBUS) $(LINK_MONO_POSIX)
-#LINK_GNOME_KEYRING = -r:$(DIR_GNOME_KEYRING)/Gnome.Keyring.dll
-#LINK_GNOME_KEYRING_DEPS = $(REF_GNOME_KEYRING) $(LINK_GNOME_KEYRING)
-
 # Hyena
 REF_HYENA = $(LINK_SYSTEM) $(LINK_SQLITE) $(LINK_MONO_POSIX)
 LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
@@ -94,15 +69,7 @@
 LINK_MUSICBRAINZ = -r:$(DIR_BIN)/MusicBrainz.dll
 LINK_MUSICBRAINZ_DEPS = $(REF_MUSICBRAINZ) $(LINK_MUSICBRAINZ)
 
-#DIR_MUSICBRAINZ = $(DIR_LIBRARIES)/MusicBrainz
-#MONO_BASE_PATH += $(DIR_MUSICBRAINZ)
-#REF_MUSICBRAINZ = $(LINK_SYSTEM)
-#LINK_MUSICBRAINZ = -r:$(DIR_MUSICBRAINZ)/MusicBrainz.dll
-#LINK_MUSICBRAINZ_DEPS = $(REF_MUSICBRAINZ) $(LINK_MUSICBRAINZ)
-
-
 # Core
-
 REF_BANSHEE_CORE = $(LINK_HYENA_DEPS) $(LINK_MONO_POSIX) $(LINK_GLIB) \
 	$(LINK_DBUS) $(LINK_TAGLIB) $(LINK_MONO_ADDINS_DEPS)
 LINK_BANSHEE_CORE = -r:$(DIR_BIN)/Banshee.Core.dll
@@ -141,6 +108,7 @@
 # Extensions
 REF_EXTENSION_AUDIOCD = $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_MUSICBRAINZ_DEPS)
 REF_EXTENSION_BOOKMARKS = $(LINK_BANSHEE_THICKCLIENT_DEPS)
+REF_EXTENSION_BOOSCRIPT = $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_BOO)
 REF_EXTENSION_DAAP = $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_ICSHARP_ZIP_LIB) $(LINK_MONO_ZEROCONF)
 REF_EXTENSION_MULTIMEDIAKEYS = $(LINK_BANSHEE_SERVICES_DEPS)
 REF_EXTENSION_NOTIFICATIONAREA = $(LINK_BANSHEE_THICKCLIENT_DEPS)

Modified: trunk/banshee/build/m4/banshee/boo.m4
==============================================================================
--- trunk/banshee/build/m4/banshee/boo.m4	(original)
+++ trunk/banshee/build/m4/banshee/boo.m4	Thu May  1 01:56:55 2008
@@ -1,25 +1,6 @@
 AC_DEFUN([BANSHEE_CHECK_BOO],
 [
-	PKG_CHECK_MODULES(BOO, boo >= 0.7.6, have_booc="yes", have_booc="no")
-	if test "x$have_booc" = "xyes"; then
-		AC_PATH_PROG(BOOC, booc, no)
-		AM_CONDITIONAL(HAVE_BOOC, test ! "x$BOOC" = "xno")
-		AC_SUBST(BOOC)
-	else
-		AC_MSG_RESULT([no])
-		AM_CONDITIONAL(HAVE_BOOC, false)
-	fi
-
-	AC_ARG_ENABLE(external_boo, AC_HELP_STRING([--enable-external-boo], 
-		[Use external Boo instead of the bundled one]), 
-		enable_external_boo="yes", enable_external_boo="no")
-
-	if test "x$enable_external_boo" = "xyes"; then
-		PKG_CHECK_MODULES(BOO, boo >= 0.7.6)
-		AC_SUBST(BOO_LIBS)
-		AM_CONDITIONAL(EXTERNAL_BOO, true)
-	else
-		AM_CONDITIONAL(EXTERNAL_BOO, false)
-	fi
+	PKG_CHECK_MODULES(BOO, boo >= 0.7.6, enable_boo="yes", enable_boo="no")
+	AC_SUBST(BOO_LIBS)
 ])
 

Modified: trunk/banshee/configure.ac
==============================================================================
--- trunk/banshee/configure.ac	(original)
+++ trunk/banshee/configure.ac	Thu May  1 01:56:55 2008
@@ -58,6 +58,9 @@
 dnl notify-sharp library
 BANSHEE_CHECK_NOTIFY_SHARP
 
+dnl Boo
+BANSHEE_CHECK_BOO
+
 dnl Monodoc (optional through --disable-docs)
 SHAMROCK_CHECK_MONODOC
 
@@ -155,6 +158,7 @@
 src/Extensions/Makefile
 src/Extensions/Banshee.AudioCd/Makefile
 src/Extensions/Banshee.Bookmarks/Makefile
+src/Extensions/Banshee.BooScript/Makefile
 src/Extensions/Banshee.Daap/Makefile
 src/Extensions/Banshee.Lastfm/Makefile
 src/Extensions/Banshee.MultimediaKeys/Makefile
@@ -183,6 +187,7 @@
 
     DAAP Support:      ${enable_daap}	(unstable)
     Podcast Support:   ${enable_podcast}	(unstable)
+    Boo Scripting:     ${enable_boo}
 "
 if test -d ${expanded_libdir}/${PACKAGE}; then
 	echo "WARNING: An existing Banshee install is in ${expanded_libdir}/${PACKAGE}"

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Paths.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Paths.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Paths.cs	Thu May  1 01:56:55 2008
@@ -35,7 +35,34 @@
 namespace Banshee.Base
 {
     public class Paths
-    {        
+    {
+        public static string GetTempFileName (string dir)
+        {
+            return GetTempFileName (dir, null);
+        }
+        
+        public static string GetTempFileName (string dir, string extension)
+        {
+            return GetTempFileName (new DirectoryInfo (dir), extension);
+        }
+        
+        public static string GetTempFileName (DirectoryInfo dir, string extension)
+        {
+            string path = null;
+            
+            if (dir == null || !dir.Exists) {
+                throw new DirectoryNotFoundException ();
+            }
+
+            do {
+                string guid = Guid.NewGuid ().ToString ();
+                string file = extension == null ? guid : String.Format ("{0}.{1}", guid, extension);
+                path = Path.Combine (dir.FullName, file);
+            } while (File.Exists (path));
+        
+            return path;
+        }
+        
         public static string Combine (string first, params string [] components)
         {
             if (String.IsNullOrEmpty (first)) {

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/TranscoderService.cs	Thu May  1 01:56:55 2008
@@ -53,7 +53,8 @@
             public TrackTranscodedHandler Handler;
             public TranscodeCancelledHandler CancelledHandler;
 
-            public TranscodeContext (TrackInfo track, SafeUri out_uri, ProfileConfiguration config, TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler)
+            public TranscodeContext (TrackInfo track, SafeUri out_uri, ProfileConfiguration config, 
+                TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler)
             {
                 Track = track;
                 OutUri = out_uri;
@@ -100,10 +101,10 @@
         }
 
         private static string cache_dir = Paths.Combine (Paths.ApplicationCache, "transcoder");
-        private static uint count = 0;
+        
         public static SafeUri GetTempUriFor (string extension)
         {
-            return new SafeUri (Paths.Combine (cache_dir, String.Format ("{0}.{1}", count++, extension)));
+            return new SafeUri (Paths.GetTempFileName (cache_dir, extension));
         }
 
         private ITranscoder Transcoder {
@@ -126,7 +127,7 @@
             get {
                 if (user_job == null) {
                     user_job = new BatchUserJob (Catalog.GetString("Converting {0} of {1}"), Catalog.GetString("Initializing"), "encode");
-                    user_job.CancelMessage = Catalog.GetString("Files are currently being converted to another format. Would you like to stop this?");
+                    user_job.CancelMessage = Catalog.GetString ("Files are currently being converted to another format. Would you like to stop this?");
                     user_job.CanCancel = true;
                     user_job.DelayShow = true;
                     user_job.CancelRequested += OnCancelRequested;
@@ -148,7 +149,6 @@
                 }
                 
                 if (transcoder != null) {
-                    Console.WriteLine ("transcoder.Finish");
                     transcoder.Finish ();
                     transcoder = null;
                 }
@@ -166,12 +166,14 @@
             }
         }
 
-        public void Enqueue (TrackInfo track, ProfileConfiguration config, TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler)
+        public void Enqueue (TrackInfo track, ProfileConfiguration config, 
+            TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler)
         {
             Enqueue (track, GetTempUriFor (config.Profile.OutputFileExtension), config, handler, cancelledHandler);
         }
 
-        public void Enqueue (TrackInfo track, SafeUri out_uri, ProfileConfiguration config, TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler)
+        public void Enqueue (TrackInfo track, SafeUri out_uri, ProfileConfiguration config, 
+            TrackTranscodedHandler handler, TranscodeCancelledHandler cancelledHandler)
         {
             bool start = false;
             lock (queue) {

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Services.mdp	Thu May  1 01:56:55 2008
@@ -161,6 +161,12 @@
     <File name="Banshee.Library/LibraryLocationPreference.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Preferences/VoidPreference.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Hardware/ICustomDeviceProvider.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.Collection.Database/DatabaseTrackModelCache.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.Collection.Database/DatabaseTrackModelProvider.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.Collection.Database/IDatabaseTrackModelCache.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.Collection.Database/IDatabaseTrackModelProvider.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.ServiceStack/IDelayedInitializeService.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.Sources/DurationStatusFormatters.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

Added: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/DurationStatusFormatters.cs	Thu May  1 01:56:55 2008
@@ -0,0 +1,94 @@
+//
+// DurationStatusFormatters.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+using Mono.Unix;
+
+using Hyena;
+
+namespace Banshee.Sources
+{
+    public delegate void DurationStatusFormatHandler (StringBuilder builder, TimeSpan span);
+    
+    public class DurationStatusFormatters : List<DurationStatusFormatHandler>
+    {       
+        public DurationStatusFormatters ()
+        {
+            Add (AwesomeConciseFormatter);
+            Add (AnnoyingPreciseFormatter);
+            Add (ConfusingPreciseFormatter);
+        }
+        
+        public static void AwesomeConciseFormatter (StringBuilder builder, TimeSpan span)
+        {
+            if (span.Days > 0) {
+                double days = span.Days + (span.Hours / 24.0);
+                builder.AppendFormat (Catalog.GetPluralString ("{0} day", "{0} days", 
+                    StringUtil.DoubleToPluralInt (days)), StringUtil.FormatDouble (days));
+            } else if (span.Hours > 0) {
+                double hours = span.Hours + (span.Minutes / 60.0);
+                builder.AppendFormat (Catalog.GetPluralString ("{0} hour", "{0} hours", 
+                    StringUtil.DoubleToPluralInt (hours)), StringUtil.FormatDouble (hours));
+            } else {
+                double minutes = span.Minutes + (span.Seconds / 60.0);
+                builder.AppendFormat (Catalog.GetPluralString ("{0} minute", "{0} minutes", 
+                    StringUtil.DoubleToPluralInt (minutes)), StringUtil.FormatDouble (minutes));
+            }
+        }
+        
+        public static void AnnoyingPreciseFormatter (StringBuilder builder, TimeSpan span)
+        {
+            if (span.Days > 0) {
+                builder.AppendFormat (Catalog.GetPluralString ("{0} day", "{0} days", span.Days), span.Days);
+                builder.Append (", ");
+            }
+            
+            if (span.Hours > 0) {
+                builder.AppendFormat(Catalog.GetPluralString ("{0} hour", "{0} hours", span.Hours), span.Hours);
+                builder.Append (", ");
+            }
+
+            builder.AppendFormat (Catalog.GetPluralString ("{0} minute", "{0} minutes", span.Minutes), span.Minutes);
+            builder.Append (", ");
+            builder.AppendFormat (Catalog.GetPluralString ("{0} second", "{0} seconds", span.Seconds), span.Seconds);
+        }
+        
+        public static void ConfusingPreciseFormatter (StringBuilder builder, TimeSpan span)
+        {
+            if (span.Days > 0) {
+                builder.AppendFormat ("{0}:{1:00}:", span.Days, span.Hours);
+            } else if (span.Hours > 0) {
+                builder.AppendFormat ("{0}:", span.Hours);
+            }
+            
+            builder.AppendFormat ("{0:00}:{1:00}", span.Minutes, span.Seconds);
+        }
+    }
+}

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Sources/Source.cs	Thu May  1 01:56:55 2008
@@ -521,9 +521,22 @@
         }
 
         public virtual int FilteredCount { get { return Count; } }
+                
+        public virtual string TrackModelPath {
+            get { return null; }
+        }
+        
+#endregion
+
+#region Status Message Stuff        
+        
+        private static DurationStatusFormatters duration_status_formatters = new DurationStatusFormatters ();
+        public static DurationStatusFormatters DurationStatusFormatters {
+            get { return duration_status_formatters; }
+        }
         
         protected virtual int StatusFormatsCount {
-            get { return 3; }
+            get { return duration_status_formatters.Count; }
         }
         
         protected virtual int CurrentStatusFormat {
@@ -553,49 +566,9 @@
             
             builder.AppendFormat (Catalog.GetPluralString ("{0} item", "{0} items", count), count);
             
-            if (this is IDurationAggregator) {
+            if (this is IDurationAggregator && StatusFormatsCount > 0) {
                 builder.Append (", ");
-
-                TimeSpan span = (this as IDurationAggregator).Duration;
-                int format = CurrentStatusFormat;
-                
-                if (format == 0) {
-                    if (span.Days > 0) {
-                        double days = span.Days + (span.Hours / 24.0);
-                        builder.AppendFormat (Catalog.GetPluralString ("{0} day", "{0} days", 
-                            StringUtil.DoubleToPluralInt (days)), StringUtil.FormatDouble (days));
-                    } else if (span.Hours > 0) {
-                        double hours = span.Hours + (span.Minutes / 60.0);
-                        builder.AppendFormat (Catalog.GetPluralString ("{0} hour", "{0} hours", 
-                            StringUtil.DoubleToPluralInt (hours)), StringUtil.FormatDouble (hours));
-                    } else {
-                        double minutes = span.Minutes + (span.Seconds / 60.0);
-                        builder.AppendFormat (Catalog.GetPluralString ("{0} minute", "{0} minutes", 
-                            StringUtil.DoubleToPluralInt (minutes)), StringUtil.FormatDouble (minutes));
-                    }
-                } else if (format == 1) {
-                    if (span.Days > 0) {
-                        builder.AppendFormat (Catalog.GetPluralString ("{0} day", "{0} days", span.Days), span.Days);
-                        builder.Append (", ");
-                    }
-                    
-                    if (span.Hours > 0) {
-                        builder.AppendFormat(Catalog.GetPluralString ("{0} hour", "{0} hours", span.Hours), span.Hours);
-                        builder.Append (", ");
-                    }
-
-                    builder.AppendFormat (Catalog.GetPluralString ("{0} minute", "{0} minutes", span.Minutes), span.Minutes);
-                    builder.Append (", ");
-                    builder.AppendFormat (Catalog.GetPluralString ("{0} second", "{0} seconds", span.Seconds), span.Seconds);
-                } else if (format == 2) {
-                    if (span.Days > 0) {
-                        builder.AppendFormat ("{0}:{1:00}:", span.Days, span.Hours);
-                    } else if (span.Hours > 0) {
-                        builder.AppendFormat ("{0}:", span.Hours);
-                    }
-                    
-                    builder.AppendFormat ("{0:00}:{1:00}", span.Minutes, span.Seconds);
-                }
+                duration_status_formatters[CurrentStatusFormat] (builder, ((IDurationAggregator)this).Duration);
             }
 
             if (this is IFileSizeAggregator) {
@@ -609,6 +582,8 @@
             return builder.ToString ();
         }
         
+#endregion
+        
         string IService.ServiceName {
             get { return String.Format ("{0}{1}", DBusServiceManager.MakeDBusSafeString (Name), "Source"); }
         }
@@ -622,12 +597,5 @@
                 }
             }
         }
-        
-        public virtual string TrackModelPath {
-            get { return null; }
-        }
-        
-#endregion
-        
     }
 }

Modified: trunk/banshee/src/Core/Banshee.Services/Makefile.am
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Makefile.am	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Makefile.am	Thu May  1 01:56:55 2008
@@ -142,6 +142,7 @@
 	Banshee.SmartPlaylist/Migrator.cs \
 	Banshee.SmartPlaylist/SmartPlaylistSource.cs \
 	Banshee.Sources/DatabaseSource.cs \
+	Banshee.Sources/DurationStatusFormatters.cs \
 	Banshee.Sources/ErrorSource.cs \
 	Banshee.Sources/IDiskUsageReporter.cs \
 	Banshee.Sources/IDurationAggregator.cs \

Modified: trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodSource.cs	Thu May  1 01:56:55 2008
@@ -28,6 +28,7 @@
 
 using System;
 using System.IO;
+using System.Collections.Generic;
 
 using IPod;
 
@@ -297,6 +298,9 @@
 #endregion
 
 #region Syncing
+
+        private Queue<IpodTrackInfo> tracks_to_add = new Queue<IpodTrackInfo> ();
+        // private Queue<IpodTrackInfo> track_to_remove = new Queue<IpodTrackInfo> ();
         
         public override bool IsReadOnly {
             get { return ipod_device.IsReadOnly; }
@@ -318,8 +322,17 @@
 
         protected override void AddTrackToDevice (DatabaseTrackInfo track, SafeUri fromUri)
         {
-            if (track.PrimarySourceId == DbId) {
-                return;
+            lock (this) {
+                if (track.PrimarySourceId == DbId) {
+                    return;
+                }
+                
+                IpodTrackInfo ipod_track = new IpodTrackInfo (track);
+                ipod_track.Uri = fromUri;
+                ipod_track.PrimarySource = this;
+                ipod_track.Save (false);
+            
+                tracks_to_add.Enqueue (ipod_track);
             }
         }
 

Modified: trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/IpodTrackInfo.cs	Thu May  1 01:56:55 2008
@@ -53,7 +53,7 @@
             CanSaveToDatabase = true;
         }
         
-        public IpodTrackInfo (TrackInfo track, IPod.TrackDatabase database)
+        public IpodTrackInfo (TrackInfo track)
         {
             if (track is IpodTrackInfo) {
                 this.track = ((IpodTrackInfo)track).IpodTrack;

Added: trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.addin.xml
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.addin.xml	Thu May  1 01:56:55 2008
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Addin 
+    id="Banshee.BooScript"
+    version="1.0"
+    compatVersion="1.0"
+    copyright="Â 2008 Novell Inc. Licensed under the MIT X11 license."
+    name="Boo Scripting"
+    category="Developers"
+    description="The Boo Scripting plugin allows users to quickly customize and extend Banshee through the Boo programming language."
+    author="Aaron Bockover"
+    url="http://banshee-project.org/";
+    defaultEnabled="false">
+
+  <Dependencies>
+    <Addin id="Banshee.Services" version="1.0"/>
+  </Dependencies>
+
+  <Extension path="/Banshee/ServiceManager/Service">
+    <Service class="Banshee.BooScript.BooScriptService"/>
+  </Extension>
+
+</Addin>

Added: trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.mdp
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript.mdp	Thu May  1 01:56:55 2008
@@ -0,0 +1,35 @@
+<Project name="Banshee.BooScript" fileversion="2.0" UseParentDirectoryAsNamespace="True" language="C#" clr-version="Net_2_0" ctype="DotNetProject">
+  <Configurations active="Debug">
+    <Configuration name="Debug" ctype="DotNetProjectConfiguration">
+      <Output directory="../../../bin" assemblyKeyFile="." assembly="Banshee.BooScript" />
+      <Build debugmode="True" target="Library" />
+      <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" />
+      <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
+    </Configuration>
+  </Configurations>
+  <Contents>
+    <File name="Banshee.BooScript.addin.xml" subtype="Code" buildaction="EmbedAsResource" />
+    <File name="Banshee.BooScript/BooScriptService.cs" subtype="Code" buildaction="Compile" />
+    <File name="Resources/duration-status-formats.boo" subtype="Code" buildaction="EmbedAsResource" />
+    <File name="Resources/filename-transform.boo" subtype="Code" buildaction="EmbedAsResource" />
+  </Contents>
+  <References>
+    <ProjectReference type="Project" localcopy="True" refto="Banshee.Core" />
+    <ProjectReference type="Project" localcopy="True" refto="Banshee.Services" />
+    <ProjectReference type="Project" localcopy="True" refto="Hyena" />
+    <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Gac" localcopy="True" refto="Boo.Lang, Version=2.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67" />
+    <ProjectReference type="Gac" localcopy="True" refto="Boo.Lang.Compiler, Version=2.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67" />
+    <ProjectReference type="Gac" localcopy="True" refto="Boo.Lang.Interpreter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67" />
+    <ProjectReference type="Gac" localcopy="True" refto="Boo.Lang.Parser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67" />
+  </References>
+  <MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="True" RelativeMakefileName="./Makefile.am">
+    <BuildFilesVar Sync="True" Name="SOURCES" />
+    <DeployFilesVar />
+    <ResourcesVar Sync="True" Name="RESOURCES" />
+    <OthersVar />
+    <GacRefVar />
+    <AsmRefVar />
+    <ProjectRefVar />
+  </MonoDevelop.Autotools.MakefileInfo>
+</Project>
\ No newline at end of file

Added: trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.BooScript/Banshee.BooScript/BooScriptService.cs	Thu May  1 01:56:55 2008
@@ -0,0 +1,128 @@
+// 
+// BooScriptService.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2006-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Reflection;
+
+using Boo.Lang.Compiler;
+using Boo.Lang.Compiler.IO;
+using Boo.Lang.Compiler.Pipelines;
+using Boo.Lang.Interpreter;
+
+using Hyena;
+using Banshee.Base;
+using Banshee.ServiceStack;
+
+namespace Banshee.BooScript
+{
+    public class BooScriptService : IExtensionService
+    {
+        private static string scripts_directory = Path.Combine (Paths.ApplicationData, "boo-scripts");
+        
+        private bool initialized;
+        
+        void IExtensionService.Initialize ()
+        {
+            lock (this) {
+                if (initialized) {
+                    return;
+                }
+                
+                Directory.CreateDirectory (scripts_directory);
+                
+                if (ApplicationContext.CommandLine.Contains ("run-scripts")) {
+                    foreach (string file in ApplicationContext.CommandLine.Files) {
+                        if (Path.GetExtension (file) == ".boo") {
+                            RunBooScript (file);
+                        }
+                    }
+                }
+            
+                foreach (string file in Directory.GetFiles (scripts_directory, "*.boo")) {
+                    RunBooScript (file);
+                }
+                
+                initialized = true;
+            }
+        }
+        
+        public void Dispose ()
+        {
+        }
+        
+#region Boo Scripting Engine
+
+        private void RunBooScript (string file)
+        {
+            uint timer_id = Log.DebugTimerStart ();
+        
+            BooCompiler compiler = new BooCompiler ();
+            compiler.Parameters.Ducky = true;
+            compiler.Parameters.Pipeline = new CompileToMemory ();
+            compiler.Parameters.Input.Add (new FileInput (file));
+            
+            foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies ()) {
+                compiler.Parameters.References.Add (assembly);
+            }
+            
+            CompilerContext context = compiler.Run ();
+            
+            if (context.GeneratedAssembly == null) {
+                foreach (CompilerError error in context.Errors) {
+                    Log.Warning (String.Format ("BooScript: compiler error: {0} ({1})", 
+                        error.ToString (), file), false);
+                }
+                
+                return;
+            }
+            
+            try {
+                Type script_module = context.GeneratedAssembly.GetTypes ()[0];
+                
+                if (script_module == null) {
+                    Log.Warning (String.Format ("BooScript: could not find module in script ({0})", file), false);
+                    return;
+                }
+                
+                MethodInfo main_entry = script_module.Assembly.EntryPoint;
+                main_entry.Invoke (null, new object[main_entry.GetParameters ().Length]);
+                        
+                Log.DebugTimerPrint (timer_id, "BooScript: compiled and invoked: {0}");
+            } catch (Exception e) {
+                Log.Exception ("BooScript: scripted failed", e);
+            }
+        }
+
+#endregion                
+        
+        string IService.ServiceName {
+            get { return "BooScriptService"; }
+        }
+    }
+}

Added: trunk/banshee/src/Extensions/Banshee.BooScript/Makefile.am
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.BooScript/Makefile.am	Thu May  1 01:56:55 2008
@@ -0,0 +1,13 @@
+ASSEMBLY = Banshee.BooScript
+TARGET = library
+LINK = $(REF_EXTENSION_BOOSCRIPT)
+
+SOURCES = Banshee.BooScript/BooScriptService.cs
+
+RESOURCES =  \
+	Banshee.BooScript.addin.xml \
+	Resources/duration-status-formats.boo \
+	Resources/filename-transform.boo
+
+include $(top_srcdir)/build/build.mk
+

Added: trunk/banshee/src/Extensions/Banshee.BooScript/Resources/duration-status-formats.boo
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.BooScript/Resources/duration-status-formats.boo	Thu May  1 01:56:55 2008
@@ -0,0 +1,30 @@
+# Â 2006-2008 Novell Inc. Licensed under the MIT X11 license.
+# Written by Aaron Bockover <abockover novell com>
+#
+# This script demonstrates how to override the default formatting
+# options for the duration segment of source status messages.
+#
+# There is no limit to the number of formatters. Users will be
+# able to cycle between all of them in the UI.
+
+import System
+import System.Text
+import Banshee.Sources
+
+formatters = Source.DurationStatusFormatters
+
+# We hate all of the crappy Banshee default duration
+# formatter since they are for normal earthlings
+formatters.Clear ()
+
+# Now add our own so we can actually make use of the data
+formatters.Add ({ builder as StringBuilder, span as TimeSpan |
+    builder.Append ("${span.TotalMilliseconds}ms")
+})
+
+formatters.Add ({ builder as StringBuilder, span as TimeSpan |
+    builder.Append ("${span.Ticks} ticks")
+})
+
+# Actually, they do have one that isn't *too* bad
+formatters.Add (DurationStatusFormatters.ConfusingPreciseFormatter)

Added: trunk/banshee/src/Extensions/Banshee.BooScript/Resources/filename-transform.boo
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.BooScript/Resources/filename-transform.boo	Thu May  1 01:56:55 2008
@@ -0,0 +1,13 @@
+# Â 2006-2008 Novell Inc. Licensed under the MIT X11 license.
+# Written by Aaron Bockover <abockover novell com>
+#
+# This script changes the formatting of any filenames that Banshee
+# will create while managing your library (i.e. CD ripping)
+#
+# The provided pattern transforms all filenames to lower case,
+# removes any non-digit/alpha characters, and replaces spaces 
+# with underscores for the UNIX diehard.
+
+Banshee.Base.FileNamePattern.Filter = { songpath as string |
+    @/[ ]+/.Replace (@/[^0-9A-Za-z\/ ]+/.Replace (songpath, "").ToLower (), "_")
+}

Modified: trunk/banshee/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.mdp
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.mdp	(original)
+++ trunk/banshee/src/Extensions/Banshee.Podcasting/Banshee.Podcasting.mdp	Thu May  1 01:56:55 2008
@@ -15,7 +15,6 @@
     <File name="Banshee.Podcasting/PodcastCore_Interface.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Podcasting/PodcastImportManager.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Podcasting/PodcastService.cs" subtype="Code" buildaction="Compile" />
-    <File name="Banshee.Podcasting.Data/PodcastFeed.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Podcasting.Data/PodcastItem.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Podcasting.Gui/DownloadManager/DownloadManagerInterface.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Podcasting.Gui/DownloadManager/DownloadUserJob.cs" subtype="Code" buildaction="Compile" />

Modified: trunk/banshee/src/Extensions/Extensions.mds
==============================================================================
--- trunk/banshee/src/Extensions/Extensions.mds	(original)
+++ trunk/banshee/src/Extensions/Extensions.mds	Thu May  1 01:56:55 2008
@@ -11,6 +11,7 @@
       <Entry build="True" name="Banshee.Daap" configuration="Debug" />
       <Entry build="True" name="Banshee.Podcasting" configuration="Debug" />
       <Entry build="True" name="Banshee.Sample" configuration="Debug" />
+      <Entry build="True" name="Banshee.BooScript" configuration="Debug" />
     </Configuration>
   </Configurations>
   <StartMode startupentry="Banshee.Daap" single="True">
@@ -24,6 +25,7 @@
     <Execute type="None" entry="Banshee.AudioCd" />
     <Execute type="None" entry="Banshee.Podcasting" />
     <Execute type="None" entry="Banshee.Sample" />
+    <Execute type="None" entry="Banshee.BooScript" />
   </StartMode>
   <Entries>
     <Entry filename="Banshee.Daap/Banshee.Daap.mdp" />
@@ -36,5 +38,6 @@
     <Entry filename="Banshee.AudioCd/Banshee.AudioCd.mdp" />
     <Entry filename="Banshee.Podcasting/Banshee.Podcasting.mdp" />
     <Entry filename="Banshee.Sample/Banshee.Sample.mdp" />
+    <Entry filename="Banshee.BooScript/Banshee.BooScript.mdp" />
   </Entries>
 </Combine>
\ No newline at end of file

Modified: trunk/banshee/src/Extensions/Makefile.am
==============================================================================
--- trunk/banshee/src/Extensions/Makefile.am	(original)
+++ trunk/banshee/src/Extensions/Makefile.am	Thu May  1 01:56:55 2008
@@ -1,6 +1,7 @@
 SUBDIRS = \
 	Banshee.AudioCd \
 	Banshee.Bookmarks \
+	Banshee.BooScript \
 	Banshee.Daap \
 	Banshee.Lastfm \
 	Banshee.MultimediaKeys \

Modified: trunk/banshee/src/Extensions/Template/Template.mdp
==============================================================================
--- trunk/banshee/src/Extensions/Template/Template.mdp	(original)
+++ trunk/banshee/src/Extensions/Template/Template.mdp	Thu May  1 01:56:55 2008
@@ -1,4 +1,4 @@
-<Project name="@EXTENSION_NAME@" fileversion="2.0" language="C#" clr-version="Net_2_0" ctype="DotNetProject">
+<Project name="@EXTENSION_NAME@" fileversion="2.0" UseParentDirectoryAsNamespace="True" language="C#" clr-version="Net_2_0" ctype="DotNetProject">
   <Configurations active="Debug">
     <Configuration name="Debug" ctype="DotNetProjectConfiguration">
       <Output directory="../../../bin" assemblyKeyFile="." assembly="@EXTENSION_NAME@" />

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.CommandLine/CommandLineParser.cs	Thu May  1 01:56:55 2008
@@ -79,11 +79,8 @@
                 if (eq_offset > 1) {
                     value = name.Substring (eq_offset + 1);
                     name = name.Substring (0, eq_offset);
-                } else if (i < arguments.Length - 1 && !IsOption (arguments[i + 1])) {
-                    value = arguments[i + 1];
-                    i++;
                 }
-                  
+                 
                 if (parsed_arguments.ContainsKey (name)) {
                     parsed_arguments[name] = value;
                 } else {

Modified: trunk/banshee/src/Libraries/Migo/Migo.mdp
==============================================================================
--- trunk/banshee/src/Libraries/Migo/Migo.mdp	(original)
+++ trunk/banshee/src/Libraries/Migo/Migo.mdp	Thu May  1 01:56:55 2008
@@ -34,35 +34,13 @@
     <File name="Migo/Migo.Syndication/EventArgs/FeedEventArgs.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/EventArgs/FeedItemCountChangedEventArgs.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/EventArgs/FeedItemEventArgs.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/EnclosuresTableManager.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/FeedsTableManager.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/TablesManagers/ItemsTableManager.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/DatabaseManager.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/DataUtility.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/DbDefines.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/QueuedDbCommand.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/Rfc822DateTime.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/SQLiteUtility.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Utilities/XmlUtils.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Db/DataWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Db/FeedDataWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Db/FeedEnclosureDataWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Db/FeedItemDataWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Rss/RssFeedEnclosureWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Rss/RssFeedItemWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/Rss/RssFeedWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/IFeedEnclosureWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/IFeedItemWrapper.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/Migo.Syndication.Data/Wrappers/IFeedWrapper.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/Feed.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/FeedEnclosure.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/FeedItem.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/FeedsManager.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.Syndication/FeedUpdateTask.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/IFeed.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/IFeedEnclosure.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/IFeedItem.cs" subtype="Code" buildaction="Compile" />
-    <File name="Migo/Migo.Syndication/IFeedsManager.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.TaskCore/AsyncCommandQueue/AsyncCommandQueue.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.TaskCore/AsyncCommandQueue/CommandDelegate.cs" subtype="Code" buildaction="Compile" />
     <File name="Migo/Migo.TaskCore/AsyncCommandQueue/CommandWrapper.cs" subtype="Code" buildaction="Compile" />



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