banshee r3634 - in trunk/banshee: . build src/Core/Banshee.Core/Banshee.Base src/Extensions src/Extensions/Banshee.Daap src/Extensions/Banshee.Daap/Banshee.Daap src/Extensions/Banshee.Daap/Daap



Author: ahixon
Date: Tue Apr  1 07:28:39 2008
New Revision: 3634
URL: http://svn.gnome.org/viewvc/banshee?rev=3634&view=rev

Log:
2008-04-01  Alexander Hixon  <hixon alexander mediati org>

	* src/Extensions/Extensions.mds:
	* src/Extensions/Banshee.Daap/Banshee.Daap.mdp: Add the DAAP extension to
	the Extensions solution, and add new files.

	* src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs: Workaround for bug
	in Mono where we can't correctly work with IPv6 addresses.

	* src/Extensions/Banshee.Daap/Makefile.am:
	* src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs: Add Unmap
	support, remove hacky Client connecting code, remove tracks from DB once
	we're finished with them, cleaned up status messages, and use new classes.

	* src/Extensions/Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs: Port login
	dialog from stable.

	* src/Extensions/Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs: Move
	DAAP.Track to TrackInfo logic out into seperate class that inherits from
	DatabaseTrackInfo.

	* src/Core/Banshee.Core/Banshee.Base/Paths.cs: Check to see if the path
	passed was null or empty before performing path operations.

	* build/build.environment.mk: Depend on ThickClient, not just Services.


Added:
   trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs
   trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs
Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/build/build.environment.mk
   trunk/banshee/src/Core/Banshee.Core/Banshee.Base/Paths.cs
   trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap.mdp
   trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
   trunk/banshee/src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs
   trunk/banshee/src/Extensions/Banshee.Daap/Makefile.am
   trunk/banshee/src/Extensions/Extensions.mds

Modified: trunk/banshee/build/build.environment.mk
==============================================================================
--- trunk/banshee/build/build.environment.mk	(original)
+++ trunk/banshee/build/build.environment.mk	Tue Apr  1 07:28:39 2008
@@ -128,7 +128,7 @@
 # Extensions
 REF_EXTENSION_AUDIOCD = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_MUSICBRAINZ_DEPS)
 REF_EXTENSION_BOOKMARKS = $(LINK_BANSHEE_THICKCLIENT_DEPS)
-REF_EXTENSION_DAAP = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_ICSHARP_ZIP_LIB) $(LINK_MONO_ZEROCONF)
+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)
 REF_EXTENSION_PLAYQUEUE = $(LINK_BANSHEE_THICKCLIENT_DEPS)

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	Tue Apr  1 07:28:39 2008
@@ -55,6 +55,10 @@
         
         public static string MakePathRelativeToLibrary (string path)
         {
+            if (String.IsNullOrEmpty (path)) {
+                return null;
+            }
+            
             string library_location = CachedLibraryLocation;
             
             if (path.Length < library_location.Length + 1) {

Modified: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap.mdp
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap.mdp	(original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap.mdp	Tue Apr  1 07:28:39 2008
@@ -11,8 +11,7 @@
     <File name="Banshee.Daap/DaapService.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Daap/DaapContainerSource.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.Daap/DaapSource.cs" subtype="Code" buildaction="Compile" />
-    <File name="Daap/content-codes" subtype="Code" buildaction="EmbedAsResource" />
-    <File name="Resources/Banshee.Daap.addin.xml" subtype="Code" buildaction="EmbedAsResource" />
+    <File name="Banshee.Daap/DaapTrackInfo.cs" subtype="Code" buildaction="Compile" />
     <File name="Daap/AuthenticationException.cs" subtype="Code" buildaction="Compile" />
     <File name="Daap/BrokenMD5.cs" subtype="Code" buildaction="Compile" />
     <File name="Daap/Client.cs" subtype="Code" buildaction="Compile" />
@@ -30,12 +29,16 @@
     <File name="Daap/Track.cs" subtype="Code" buildaction="Compile" />
     <File name="Daap/User.cs" subtype="Code" buildaction="Compile" />
     <File name="Daap/Utility.cs" subtype="Code" buildaction="Compile" />
+    <File name="Daap/content-codes" subtype="Code" buildaction="EmbedAsResource" />
+    <File name="Resources/Banshee.Daap.addin.xml" subtype="Code" buildaction="EmbedAsResource" />
+    <File name="Banshee.Daap/DaapLoginDialog.cs" subtype="Code" buildaction="Compile" />
   </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="Mono.Zeroconf, Version=2.0.0.76, Culture=neutral, PublicKeyToken=e60c4f4a95e1099e" />
   </References>
   <MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="True" RelativeMakefileName="./Makefile.am">
     <BuildFilesVar Sync="True" Name="SOURCES" />
@@ -46,4 +49,4 @@
     <AsmRefVar />
     <ProjectRefVar />
   </MonoDevelop.Autotools.MakefileInfo>
-</Project>
\ No newline at end of file
+</Project>

Added: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapLoginDialog.cs	Tue Apr  1 07:28:39 2008
@@ -0,0 +1,155 @@
+// 
+// DaapLoginDialog.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 2005-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 Mono.Unix;
+using DAAP;
+using Gtk;
+
+using Banshee.Base;
+
+namespace Banshee.Daap
+{
+    internal class DaapLoginDialog : Dialog
+    {
+        private string share_name;
+        private bool show_username;
+        private Entry username_entry;
+        private Entry password_entry;
+        private Gtk.AccelGroup accel_group;
+        
+        public DaapLoginDialog(string shareName, bool showUsername) :  base(
+            Catalog.GetString("Login to Music Share"),
+            null,
+            DialogFlags.Modal | DialogFlags.NoSeparator,
+            Stock.Cancel,
+            ResponseType.Close)
+        {
+            share_name = shareName;
+            show_username = showUsername;
+            //IconThemeUtils.SetWindowIcon(this);
+            accel_group = new Gtk.AccelGroup();
+            AddAccelGroup(accel_group);
+            BuildWindow();
+        }
+        
+        private void BuildWindow()
+        {
+            BorderWidth = 5;
+            VBox.Spacing = 12;
+            ActionArea.Layout = Gtk.ButtonBoxStyle.End;
+
+            HBox box = new HBox();
+            box.BorderWidth = 5;
+            box.Spacing = 15;
+            
+            Image image = new Image(Stock.Network, IconSize.Dialog);
+            image.Yalign = 0.2f;
+            box.PackStart(image, false, false, 0);
+            
+            VBox content_box = new VBox();
+            content_box.Spacing = 12;
+            
+            Label header = new Label();
+            header.Markup = "<big><b>" + GLib.Markup.EscapeText(Catalog.GetString(
+                "Authentication Required")) + "</b></big>";
+            header.Justify = Justification.Left;
+            header.SetAlignment(0.0f, 0.5f);
+            
+            Label message = new Label(Catalog.GetString(String.Format(
+                "Please provide login information to access {0}.", share_name)));
+            message.Wrap = true;
+            message.Justify = Justification.Left;
+            message.SetAlignment(0.0f, 0.5f);
+            
+            content_box.PackStart(header, false, false, 0);
+            content_box.PackStart(message, false, false, 0);
+            
+            username_entry = new Entry();
+            password_entry = new Entry();
+            password_entry.Visibility = false;
+            
+            uint yoff = show_username ? (uint)0 : (uint)1;
+            
+            Table table = new Table(2, 2, false);
+            table.RowSpacing = 5;
+            table.ColumnSpacing = 10;
+            
+            if(show_username) {
+                table.Attach(new Label(Catalog.GetString("Username:")), 0, 1, 0, 1,
+                    AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
+                
+                table.Attach(username_entry, 1, 2, 0, 1,
+                    AttachOptions.Expand | AttachOptions.Fill,
+                    AttachOptions.Shrink, 0, 0);
+            }
+            
+            table.Attach(new Label(Catalog.GetString("Password:")), 0, 1, 1 - yoff, 2 - yoff,
+                AttachOptions.Shrink, AttachOptions.Shrink, 0, 0);
+            
+            table.Attach(password_entry, 1, 2, 1 - yoff, 2 - yoff,
+                AttachOptions.Expand | AttachOptions.Fill,
+                AttachOptions.Shrink, 0, 0);
+            
+            content_box.PackStart(table, false, false, 0);
+            
+            box.PackStart(content_box, true, true, 0);
+            
+            AddButton(Catalog.GetString("Login"), ResponseType.Ok, true);
+            
+            box.ShowAll();
+            VBox.Add(box);
+        }
+        
+        private void AddButton(string stock_id, Gtk.ResponseType response, bool is_default)
+        {
+            Gtk.Button button = new Gtk.Button(stock_id);
+            button.CanDefault = true;
+            button.Show();
+
+            AddActionWidget(button, response);
+
+            if(is_default) {
+                DefaultResponse = response;
+                button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return, 0, Gtk.AccelFlags.Visible);
+            }
+        }
+        
+        public string Username {
+            get {
+                return username_entry.Text == String.Empty ? null : username_entry.Text;
+            }
+        }
+        
+        public string Password {
+            get {
+                return password_entry.Text;
+            }
+        }
+    }
+}

Modified: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs	Tue Apr  1 07:28:39 2008
@@ -38,12 +38,16 @@
 
 namespace Banshee.Daap
 {
-    public class DaapSource : PrimarySource, IDurationAggregator, IDisposable
+    public class DaapSource : PrimarySource, IDurationAggregator, IDisposable, IUnmapableSource
     {
         private Service service;
         private DAAP.Client client;
         private DAAP.Database database;
         
+        public DAAP.Database Database {
+            get { return database; }
+        }
+        
         private bool is_activating;
         private SourceMessage status_message;
         
@@ -51,6 +55,7 @@
         {
             this.service = service;
             Properties.SetString ("Icon.Name", "computer");
+            Properties.SetString ("UnmapSourceActionLabel", Catalog.GetString ("Disconnect"));
             
             AfterInitialized ();
         }
@@ -69,23 +74,15 @@
             Console.WriteLine ("Connecting to {0}:{1}", service.Address, service.Port);
             
             ThreadAssist.Spawn (delegate {
-                try {
-                    // XXX: We get connect failures if we try with IPv6 address - what's up with that?!
-                    // Investigate.
-                    
-                    if (service.Address.ToString ().Contains (".")) {
-                        client = new DAAP.Client (service);
-                    } else {
-                        Console.WriteLine ("Was IPv6 address - we're probably going to die... :(");
-                    }
-                    //client = new Client (System.Net.IPAddress.Parse ("127.0.0.1"), service.Port);
+                try {                    
+                    client = new DAAP.Client (service);
                     client.Updated += OnClientUpdated;
                     
                     if (client.AuthenticationMethod == AuthenticationMethod.None) {
                         client.Login ();
-                    }/* else {
+                    } else {
                         ThreadAssist.ProxyToMain (PromptLogin);
-                    }*/
+                    }
                 } catch(Exception e) {
                     /*ThreadAssist.ProxyToMain(delegate {
                         DaapErrorView error_view = new DaapErrorView(this, DaapErrorType.BrokenAuthentication);
@@ -106,6 +103,22 @@
         
         internal bool Disconnect (bool logout)
         {
+            // Stop currently playing track if its from us.
+            try {
+                if (ServiceManager.PlayerEngine.CurrentState == Banshee.MediaEngine.PlayerEngineState.Playing) {
+                    DatabaseTrackInfo track = ServiceManager.PlayerEngine.CurrentTrack as DatabaseTrackInfo;
+                    if (track != null && track.PrimarySource == this) {
+                        ServiceManager.PlayerEngine.Close ();
+                    }
+                }
+            } catch { }
+            
+            // Remove tracks associated with this source, since we don't want
+            // them after we unmap - we'll refetch.
+            if (Count > 0) {
+                RemoveTrackRange ((TrackListDatabaseModel)TrackModel, new Hyena.Collections.RangeCollection.Range (0, Count));
+            }
+            
             if (client != null) {
                 if (logout) {
                     client.Logout ();
@@ -135,29 +148,26 @@
         
         private void SetMessage (string message, bool spinner)
         {
-            if (status_message == null) {
-                status_message = new SourceMessage (this);
-                PushMessage (status_message);
-                
-                // Nice hack here.
-                status_message.FreezeNotify ();
-                status_message.Text = message;
-                status_message.CanClose = !spinner;
-                status_message.IsSpinning = spinner;
-                status_message.SetIconName (null);
-                
-                status_message.ThawNotify ();
+            if (status_message != null) {
+                DestroyStatusMessage ();
             }
             
-            //string status_name = String.Format ("<i>{0}</i>", GLib.Markup.EscapeText (Name));
-            
+            status_message = new SourceMessage (this);
             status_message.FreezeNotify ();
-            status_message.Text = message;
-            status_message.CanClose = !spinner;
+            status_message.CanClose = false;
             status_message.IsSpinning = spinner;
-            status_message.SetIconName (null);
-            
+            status_message.Text = message;
             status_message.ThawNotify ();
+            
+            PushMessage (status_message);
+        }
+        
+        private void DestroyStatusMessage ()
+        {
+            if (status_message != null) {
+                RemoveMessage (status_message);
+                status_message = null;
+            }
         }
         
         private void HideMessage ()
@@ -168,6 +178,32 @@
             }
         }
         
+        private void PromptLogin (object o, EventArgs args)
+        {
+            SetMessage (String.Format (Catalog.GetString ("Logging in to {0}"), Name), true);
+            
+            DaapLoginDialog dialog = new DaapLoginDialog (client.Name, 
+            client.AuthenticationMethod == AuthenticationMethod.UserAndPassword);
+            if (dialog.Run () == (int) Gtk.ResponseType.Ok) {
+                AuthenticatedLogin (dialog.Username, dialog.Password);
+            } else {
+                Unmap ();
+            }
+
+            dialog.Destroy ();
+        }
+        
+        private void AuthenticatedLogin (string username, string password)
+        {
+            ThreadAssist.Spawn (delegate {
+                try {
+                    client.Login (username, password);
+                } catch (AuthenticationException) {
+                    ThreadAssist.ProxyToMain (PromptLogin);
+                }
+            });
+        }
+        
         private void OnClientUpdated (object o, EventArgs args)
         {
             if (database == null && client.Databases.Count > 0) {
@@ -179,18 +215,8 @@
                 //AddPlaylistSources ();
                 
                 foreach (Track track in database.Tracks) {
-                    //track_model.Add (track);
-                    DatabaseTrackInfo r = new DatabaseTrackInfo ();
-                    r.TrackTitle = track.Title;
-                    r.AlbumTitle = track.Album;
-                    r.ArtistName = track.Artist;
-                    
-                    r.TrackNumber = track.TrackNumber;
-                    r.Year = track.Year;
-                    r.Duration = track.Duration;
-                    r.PrimarySource = this;
-                    
-                    r.Save ();
+                    DaapTrackInfo daaptrack = new DaapTrackInfo (track, this);
+                    daaptrack.Save ();
                 }
                 
                 Reload ();
@@ -238,5 +264,26 @@
         protected override string TypeUniqueId {
             get { return "daap"; }
         }
+        
+        public bool Unmap ()
+        {
+            // TODO: Maybe keep track of where we came from, or pick the next source up on the list?
+            ServiceManager.SourceManager.SetActiveSource (ServiceManager.SourceManager.MusicLibrary);
+            
+            // Disconnect and clear out our tracks and such.
+            Disconnect (true);
+            
+            Reload ();
+            
+            return true;
+        }
+        
+        public bool CanUnmap {
+            get { return true; }
+        }
+        
+        public bool ConfirmBeforeUnmap {
+            get { return false; }
+        }
     }
 }

Added: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapTrackInfo.cs	Tue Apr  1 07:28:39 2008
@@ -0,0 +1,77 @@
+//
+// DaapTrackInfo.cs
+//
+// Authors:
+//   Alexander Hixon <hixon alexander mediati org>
+//
+// Copyright (C) 2008 Alexander Hixon
+//
+// 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 Mono.Unix;
+
+using Banshee.Base;
+using Banshee.Collection;
+using Banshee.Collection.Database;
+using DAAP;
+
+namespace Banshee.Daap
+{
+    public class DaapTrackInfo : DatabaseTrackInfo
+    {
+        public DaapTrackInfo (Track track, DaapSource source) : base ()
+        {
+            TrackTitle = track.Title;
+            AlbumTitle = track.Album;
+            ArtistName = track.Artist;
+            
+            DateAdded = track.DateAdded;
+            DateUpdated = track.DateModified;
+            
+            Genre = track.Genre;
+            FileSize = track.Size;
+            TrackCount = track.TrackCount;
+            TrackNumber = track.TrackNumber;
+            Year = track.Year;
+            Duration = track.Duration;
+            
+            PrimarySource = source;
+            
+            string sessionid = "";
+            if (source.Database.Client.Fetcher.SessionId != 0) {
+                sessionid = String.Format ("?session-id={0}", source.Database.Client.Fetcher.SessionId);
+            }
+            string uri = String.Format ("http://{0}:{1}/databases/{2}/items/{3}.{4}{5}";,
+                                        source.Database.Client.Address.ToString (),
+                                        source.Database.Client.Port,
+                                        source.Database.Id,
+                                        track.Id,
+                                        track.Format,
+                                        sessionid);
+            
+            Uri = new SafeUri (uri);
+            
+            //this.IsLive = true;
+            this.CanSaveToDatabase = false;
+        }
+    }
+}

Modified: trunk/banshee/src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Daap/ServiceLocator.cs	Tue Apr  1 07:28:39 2008
@@ -19,6 +19,7 @@
 
 using System;
 using System.Net;
+using System.Net.Sockets;
 using System.Text;
 using System.Collections;
 
@@ -142,7 +143,13 @@
                 }
             }
             
-            DAAP.Service svc = new DAAP.Service (service.HostEntry.AddressList[0], (ushort)service.Port, 
+            IPAddress address = args.Service.HostEntry.AddressList[0];
+            if (address.AddressFamily == AddressFamily.InterNetworkV6) {
+                // XXX: Workaround a Mono bug where we can't resolve IPv6 addresses properly, so we fix it here
+                address = Dns.GetHostEntry (args.Service.HostEntry.HostName).AddressList[0];
+            }
+            
+            DAAP.Service svc = new DAAP.Service (address, (ushort)service.Port, 
                 name, pwRequired);
             
             services[svc.Name] = svc;

Modified: trunk/banshee/src/Extensions/Banshee.Daap/Makefile.am
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Makefile.am	(original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Makefile.am	Tue Apr  1 07:28:39 2008
@@ -5,8 +5,10 @@
 
 SOURCES =  \
 	Banshee.Daap/DaapContainerSource.cs \
+	Banshee.Daap/DaapLoginDialog.cs \
 	Banshee.Daap/DaapService.cs \
 	Banshee.Daap/DaapSource.cs \
+	Banshee.Daap/DaapTrackInfo.cs \
 	Daap/AuthenticationException.cs \
 	Daap/BrokenMD5.cs \
 	Daap/Client.cs \

Modified: trunk/banshee/src/Extensions/Extensions.mds
==============================================================================
--- trunk/banshee/src/Extensions/Extensions.mds	(original)
+++ trunk/banshee/src/Extensions/Extensions.mds	Tue Apr  1 07:28:39 2008
@@ -8,6 +8,7 @@
       <Entry build="True" name="Banshee.NowPlaying" configuration="Debug" />
       <Entry build="True" name="Banshee.PlayQueue" configuration="Debug" />
       <Entry build="True" name="Banshee.AudioCd" configuration="Debug" />
+      <Entry build="True" name="Banshee.Daap" configuration="Debug" />
     </Configuration>
   </Configurations>
   <StartMode single="True">
@@ -30,4 +31,4 @@
     <Entry filename="Banshee.Bookmarks/Banshee.Bookmarks.mdp" />
     <Entry filename="Banshee.AudioCd/Banshee.AudioCd.mdp" />
   </Entries>
-</Combine>
\ No newline at end of file
+</Combine>



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