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
- From: ahixon svn gnome org
- To: svn-commits-list gnome org
- Subject: 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
- Date: Tue, 1 Apr 2008 07:28:40 +0100 (BST)
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]