uncommitted - tangerine

Ready changes

Summary

Import uploads missing from VCS:

Diff

diff --git a/.pc/.quilt_patches b/.pc/.quilt_patches
new file mode 100644
index 0000000..6857a8d
--- /dev/null
+++ b/.pc/.quilt_patches
@@ -0,0 +1 @@
+debian/patches
diff --git a/.pc/.quilt_series b/.pc/.quilt_series
new file mode 100644
index 0000000..c206706
--- /dev/null
+++ b/.pc/.quilt_series
@@ -0,0 +1 @@
+series
diff --git a/.pc/.version b/.pc/.version
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/.pc/.version
@@ -0,0 +1 @@
+2
diff --git a/.pc/applied-patches b/.pc/applied-patches
new file mode 100644
index 0000000..540443c
--- /dev/null
+++ b/.pc/applied-patches
@@ -0,0 +1,4 @@
+port_file_plugin_to_db4o_8.0.patch
+dbus-sharp.patch
+tangerine-arm64.patch
+tangerine-mips.patch
diff --git a/.pc/dbus-sharp.patch/configure.ac b/.pc/dbus-sharp.patch/configure.ac
new file mode 100644
index 0000000..6f6aadd
--- /dev/null
+++ b/.pc/dbus-sharp.patch/configure.ac
@@ -0,0 +1,300 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ([2.54])
+AC_INIT([tangerine], [0.3.4])
+AM_INIT_AUTOMAKE([foreign tar-pax])
+
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl -- Intl
+
+IT_PROG_INTLTOOL([0.35.0])
+SHAMROCK_CONFIGURE_I18N(tangerine)
+
+dnl -- Populate top_srcdir variable
+top_srcdir=$(cd $(dirname $0) && pwd)
+
+if test -d $top_srcdir/.bzr ; then
+   VERSION_INFO=`bzr version-info --custom \
+   --template="bzr {branch_nick} r{revno}"`
+else
+   VERSION_INFO="Release"
+fi
+AC_SUBST(VERSION_INFO)
+
+dnl pkg-config
+AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+if test "x$PKG_CONFIG" = "xno"; then
+        AC_MSG_ERROR([You need to install pkg-config])
+fi
+
+AC_PROG_SED
+AC_PROG_INSTALL
+AC_PROG_CC
+AC_HEADER_STDC
+
+SHAMROCK_FIND_C_SHARP_3_0_COMPILER
+
+dnl libtool for libtangglue
+AM_DISABLE_STATIC
+AM_PROG_LIBTOOL
+
+dnl Expansions
+SHAMROCK_EXPAND_LIBDIR
+SHAMROCK_EXPAND_BINDIR
+SHAMROCK_EXPAND_DATADIR
+
+
+dnl mono-zeroconf, taglib-sharp, glib-sharp, log4net
+PKG_CHECK_MODULES(MONO_ZEROCONF, mono-zeroconf)
+PKG_CHECK_MODULES(TAGLIB_SHARP, taglib-sharp)
+PKG_CHECK_MODULES(LOG_4_NET, log4net)
+PKG_CHECK_MODULES(NINI, nini-1.1)
+
+AC_SUBST([MONO_ZEROCONF_LIBS])
+AC_SUBST([TAGLIB_SHARP_LIBS])
+AC_SUBST([LOG_4_NET_LIBS])
+AC_SUBST([DB4O_LIBS])
+AC_SUBST([NINI_LIBS])
+
+dnl {{{ enable debug release configuration
+AC_ARG_ENABLE(debug,
+	    AC_HELP_STRING([--enable-debug],[Use 'DEBUG' Configuration [default=YES]]),
+    	enable_debug=yes,
+	    enable_debug=no)
+
+AM_CONDITIONAL(ENABLE_DEBUG, test "x$enable_debug" = "xyes")
+if test "x$enable_debug" = "xyes" ; then
+        CONFIG_REQUESTED="yes"
+fi
+dnl }}}
+
+dnl {{{ enable release build configuration
+AC_ARG_ENABLE(release,
+	    AC_HELP_STRING([--enable-release],[Use 'RELEASE' Configuration [default=NO]]),
+		enable_release=yes,
+		enable_release=no)
+
+AM_CONDITIONAL(ENABLE_RELEASE, test x$enable_release = xyes)
+if test "x$enable_release" = "xyes" ; then
+    	CONFIG_REQUESTED="yes"
+fi
+
+if test -z "$CONFIG_REQUESTED" ; then
+	    AM_CONDITIONAL(ENABLE_DEBUG, true)
+fi
+dnl }}}
+
+have_inotify="no"
+build_gui="no"
+build_banshee_plugin="no"
+build_itunes_plugin="no"
+build_session_plugin="no"
+build_spotlight_plugin="no"
+build_prefpane="no"
+platform="none"
+AC_MSG_CHECKING([host platform characteristics])
+case "$host" in
+    *-*-linux*|*-*-kfreebsd*)
+        PKG_CHECK_MODULES(GLIB_SHARP_20, glib-sharp-2.0)
+        AC_SUBST(GLIB_SHARP_20_LIBS)
+
+        PKG_CHECK_MODULES(GTK_SHARP_20, gtk-sharp-2.0)
+        AC_SUBST(GTK_SHARP_LIBS_20)
+
+        PKG_CHECK_MODULES(GLADE_SHARP_20, glade-sharp-2.0)
+        AC_SUBST(GLADE_SHARP_LIBS_20)
+
+        PKG_CHECK_MODULES(NDESK_DBUS_10, ndesk-dbus-1.0)
+        AC_SUBST([NDESK_DBUS_10_LIBS])
+
+        PKG_CHECK_MODULES(NDESK_DBUS_GLIB_10, ndesk-dbus-glib-1.0)
+        AC_SUBST([NDESK_DBUS_GLIB_10_LIBS])
+
+        PKG_CHECK_MODULES(X_SESSION, sm)
+        AC_SUBST([X_SESSION_LIBS])
+
+        have_inotify=yes
+
+        case $host in
+             *-*-kfreebsd*)
+                have_inotify=no
+             ;;
+        esac
+
+        build_gui="yes"
+        build_session_plugin="yes"
+        platform="LINUX"
+        ;;
+    *-*-darwin*)
+        have_inotify="no"
+        build_gui="no"
+        build_session_plugin="no"
+        build_itunes_plugin="yes"
+        build_spotlight_plugin="yes"
+        build_prefpane="yes"
+        platform="MACOSX"
+        ;;
+esac
+
+dnl file {{{
+AC_ARG_ENABLE(file,
+        AC_HELP_STRING([--enable-file], [Build the file plugin (default: auto)]),
+        file_beagle=$enableval,
+        enable_file=auto)
+
+if test "x$enable_file" != "xno"; then
+        PKG_CHECK_MODULES([DB4O], [db4o >= 8.0], [HAVE_DB4O_8=yes], [HAVE_DB4O_8=no])
+        AM_CONDITIONAL([HAVE_DB4O_8], [test "$HAVE_DB4O_8" = "yes"])
+
+        if test "$HAVE_DB4O_8" = "yes"; then
+				HAVE_DB4O=yes
+        else
+				PKG_CHECK_MODULES([DB4O], [db4o], HAVE_DB4O=yes, HAVE_DB4O=no)
+        fi
+
+        if test "x$enable_file" = "xyes" -a "x$HAVE_DB4O" = "xno"; then
+				AC_MSG_ERROR([File support explicitly requested, but dependencies not met])
+        fi
+fi
+
+if test "x$HAVE_DB4O" = "xyes"; then
+        have_file=yes
+else
+        have_file=no
+fi
+dnl }}}
+
+dnl beagle {{{
+AC_ARG_ENABLE(beagle,
+        AC_HELP_STRING([--enable-beagle], [Build the beagle plugin (default: auto)]),
+        enable_beagle=$enableval,
+        enable_beagle=auto)
+
+if test "x$enable_beagle" != "xno"; then 
+        PKG_CHECK_MODULES([BEAGLE], [beagle-0.0 >= 0.1.4], HAVE_BEAGLE=yes, HAVE_BEAGLE=no)
+
+        if test "x$enable_beagle" = "xyes" -a "x$HAVE_BEAGLE" = "xno"; then
+				AC_MSG_ERROR([Beagle support explicitly requested, but dependencies not met])
+        fi
+fi
+
+if test "x$HAVE_BEAGLE" = "xyes"; then
+        have_beagle=yes
+else
+        have_beagle=no
+fi
+dnl }}}
+
+dnl banshee {{{
+AC_ARG_ENABLE(banshee,
+	AC_HELP_STRING([--enable-banshee], [Build plugin to share banshee library (default: NO)]),
+	enable_banshee=$enableval,
+	enable_banshee=auto)
+
+if test "x$enable_banshee" != "xno"; then
+        PKG_CHECK_MODULES([BANSHEE_INDEXER], [banshee-collection-indexer >= 1.4.2], HAVE_BANSHEE=yes, HAVE_BANSHEE=no)
+
+        if test "x$enable_banshee" = "xyes" -a "x$HAVE_BANSHEE" = "xno"; then
+                AC_MSG_ERROR([Banshee support explicitly requested, but dependencies not met])
+        fi
+fi
+
+if test "x$HAVE_BANSHEE" = "xyes"; then
+       have_banshee=yes
+else
+       have_banshee=no
+fi
+dnl }}}
+
+dnl muine {{{
+have_muine=no
+
+AC_PATH_PROG(MUINE, muine)
+if test "x$MUINE" != "x" ; then
+    LIBMUINE32=`dirname $MUINE | sed -e "s/bin/lib\/muine\/libmuine.so/"`
+    LIBMUINE64=`dirname $MUINE | sed -e "s/bin/lib64\/muine\/libmuine.so/"`
+
+    LIBMUINE=bogus
+
+    if test -f $LIBMUINE32; then \
+        have_muine=yes
+        LIBMUINE=$LIBMUINE32
+    elif test -f $LIBMUINE64; then \
+        have_muine=yes
+        LIBMUINE=$LIBMUINE64
+    fi
+    
+    AC_SUBST(LIBMUINE)
+fi
+
+AM_CONDITIONAL(BUILD_GUI, test "x$build_gui" = "xyes")       
+AM_CONDITIONAL(BUILD_ITUNES_PLUGIN, test "x$build_itunes_plugin" = "xyes")
+AM_CONDITIONAL(BUILD_PREFPANE, test "x$build_prefpane" = "xyes")
+AM_CONDITIONAL(BUILD_SESSION_PLUGIN, test "x$build_session_plugin" = "xyes")
+AM_CONDITIONAL(BUILD_SPOTLIGHT_PLUGIN, test "x$build_spotlight_plugin" = "xyes")
+AM_CONDITIONAL(HAVE_BANSHEE, test "x$have_banshee" = "xyes")
+AM_CONDITIONAL(HAVE_BEAGLE, test "x$have_beagle" = "xyes")
+AM_CONDITIONAL(HAVE_DB4O, test "x$have_file" = "xyes")
+AM_CONDITIONAL(HAVE_INOTIFY, test "x$have_inotify" = "xyes")       
+AM_CONDITIONAL(HAVE_MUINE, test "x$have_muine" = "xyes")
+
+dnl We need to copy Banshee.CollectionIndexer.dll; it's not in the GAC
+BANSHEE_INDEXER_DLL=$(dirname $($PKG_CONFIG --variable=Libraries banshee-collection-indexer))
+AC_SUBST([BANSHEE_INDEXER_DLL])
+
+AC_CONFIG_FILES([
+daap-sharp/daap-sharp.pc
+daap-sharp/Makefile
+data/Makefile
+data/icons/Makefile
+libtangglue/Makefile
+Makefile
+m4/Makefile
+plugins/File/Makefile
+plugins/Beagle/Makefile
+plugins/Session/Makefile
+plugins/Banshee/Makefile
+plugins/LSongs/Makefile
+plugins/Rhythmbox/Makefile
+plugins/Amarok/Makefile
+plugins/Muine/Makefile
+plugins/Muine/src/MuineDatabase.cs
+po/Makefile.in
+Tangerine/Makefile
+Tangerine/tangerine.pc
+Tangerine.Daemon/Makefile
+Tangerine.Daemon/tangerine
+TangerinePrefPane/Makefile
+TangerineProperties/Makefile
+TangerineProperties/tangerine-properties
+])
+
+AC_OUTPUT
+
+cat <<EOF
+
+${PACKAGE}-${VERSION}
+
+  Build Environment
+    Install Prefix:     ${prefix}
+    Mono C# Compiler:   ${MCS} ${GMCS_FLAGS}
+    Mono Runtime:       ${MONO}
+    Platform:           $platform
+
+  Plugins:
+    Amarok:             yes
+    Beagle:             $have_beagle
+    Banshee:            $have_banshee
+    File:               $have_file
+    LSongs:             yes
+    Muine:              $have_muine
+    Session:            $build_session_plugin
+    ITunes:             $build_itunes_plugin
+    Spotlight:          $build_spotlight_plugin
+
+  Build GUI:            $build_gui
+
+  Build/Development
+    Release Build:      ${enable_release}
+
+EOF
diff --git a/.pc/dbus-sharp.patch/plugins/Banshee/src/BansheePlugin.cs b/.pc/dbus-sharp.patch/plugins/Banshee/src/BansheePlugin.cs
new file mode 100644
index 0000000..67b8a2b
--- /dev/null
+++ b/.pc/dbus-sharp.patch/plugins/Banshee/src/BansheePlugin.cs
@@ -0,0 +1,165 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Threading;
+
+using Banshee.Collection.Indexer.RemoteHelper;
+
+using DAAP;
+using NDesk.DBus;
+using Nini;
+using log4net;
+
+[assembly: Tangerine.Plugin ("banshee", typeof (Tangerine.Plugins.BansheePlugin))]
+
+namespace Tangerine.Plugins 
+{
+    class BansheePlugin : SimpleIndexerClient
+	{
+		int count;
+		bool running;
+		bool indexing;
+		DateTime last_change;
+		object indexing_mutex;
+        List<IDictionary<string, object>> indexed_items;
+
+		readonly string [] export_fields = new [] {"name", "artist", "genre", "year", "album", "local-path", "URI", 
+			"media-attributes", "track-number", "track-count", "bitrate"};
+        
+        public BansheePlugin () : base ()
+		{
+			BusG.Init ();
+	
+			count = 0;
+			running = true;
+			indexing = false;
+			indexing_mutex = new object ();
+		    last_change = DateTime.MinValue;
+			indexed_items = new List<IDictionary<string, object>> ();
+			
+			AddExportField (export_fields);
+			IndexWhenCollectionChanged = false;
+			
+			Start ();
+        }
+		
+		Server Server { get { return Daemon.Server; } }
+		Database Database { get { return Daemon.DefaultDatabase; } }
+		
+		protected override void IndexResult (IDictionary<string, object> result)
+		{
+			if (indexing)
+				indexed_items.Add (result);
+		}
+		
+		protected override void OnStarted ()
+		{
+			Console.Error.WriteLine ("Indexer started");
+		}
+
+		protected override void OnBeginUpdateIndex ()
+		{
+			Console.Error.WriteLine ("Reading Banshee index results from DBus");
+			lock (indexing_mutex) {
+				indexing = true;
+			}
+		}
+		
+		protected override void OnEndUpdateIndex ()
+		{
+			lock (indexing_mutex) {
+				indexing = false;
+			}
+			
+			ProcessList ();
+			Server.Commit ();
+			indexed_items.Clear ();
+		}
+		
+		protected override void OnShutdownWhileIndexing ()
+		{
+			Console.Error.WriteLine ("need to quit");
+		}
+		
+		protected override int CollectionCount {
+			get { return count; }
+		}
+		
+		protected override DateTime CollectionLastModified {
+			get { return last_change; }
+		}
+		
+		void ProcessList ()
+		{
+			if (indexing)
+				return;
+			
+			int tmpCount = 0;
+			
+			foreach (IDictionary<string, object> result in indexed_items)
+			{
+				Track track;
+				short bitrate;
+				string path, mediaType;
+				Dictionary<string, string> tags;
+				int year, trackCount, trackNumber;
+				
+				tags = SetupTags ();
+				foreach (string tag in export_fields) {
+					object objTag;
+					
+					result.TryGetValue (tag, out objTag);
+					tags [tag] = (objTag == null) ? "" : objTag.ToString ();
+				}
+				
+				mediaType = tags ["media-attributes"];				
+				
+				// ignore videos or podcasts in the collection since they're not shared over DAAP.
+				// TODO check if this is actually true for podcasts
+				if (mediaType.Contains ("VideoStream") || mediaType.Contains ("Podcast"))
+					continue;
+				
+				// some items dont have a local-path, we need to use the URI in this case.
+				try {
+					path = string.IsNullOrEmpty (tags ["local-path"]) ? tags ["URI"] : tags ["local-path"];					
+					Uri uri = new Uri (path);
+					track = new Track ();
+					track.FileName = uri.LocalPath;
+					track.Title = tags ["name"];
+					track.Album = tags ["album"];
+					track.Genre = tags ["genre"];
+					track.Artist = tags ["artist"];
+					
+					if (int.TryParse (tags ["year"], out year))
+						track.Year = year;
+					if (short.TryParse (tags ["bitrate"], out bitrate))
+						track.BitRate = bitrate;
+					if (int.TryParse (tags ["track-count"], out trackCount))
+						track.TrackCount = trackCount;
+					if (int.TryParse (tags ["track-number"], out trackNumber))
+						track.TrackNumber = trackNumber;
+					
+					track.Format = Path.GetExtension (track.FileName).Substring (1); // the 1 cuts off the .
+					
+					Daemon.DefaultDatabase.AddTrack (track);
+					tmpCount++;
+				} catch (Exception e) {
+					Console.WriteLine ("{0}\n{1}", e.Message, e.StackTrace);
+				}
+			}
+			
+			count = tmpCount;
+		}
+		
+		Dictionary<string, string> SetupTags ()
+		{
+			Dictionary<string, string> tags = new Dictionary<string, string> ();
+			foreach (string tag in export_fields) {
+				tags.Add (tag, "");
+			}
+
+			return tags;
+		}
+    }
+}
diff --git a/.pc/port_file_plugin_to_db4o_8.0.patch/configure.ac b/.pc/port_file_plugin_to_db4o_8.0.patch/configure.ac
new file mode 100644
index 0000000..6f7816c
--- /dev/null
+++ b/.pc/port_file_plugin_to_db4o_8.0.patch/configure.ac
@@ -0,0 +1,293 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ([2.54])
+AC_INIT([tangerine], [0.3.4])
+AM_INIT_AUTOMAKE([foreign tar-pax])
+
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl -- Intl
+
+IT_PROG_INTLTOOL([0.35.0])
+SHAMROCK_CONFIGURE_I18N(tangerine)
+
+dnl -- Populate top_srcdir variable
+top_srcdir=$(cd $(dirname $0) && pwd)
+
+if test -d $top_srcdir/.bzr ; then
+   VERSION_INFO=`bzr version-info --custom \
+   --template="bzr {branch_nick} r{revno}"`
+else
+   VERSION_INFO="Release"
+fi
+AC_SUBST(VERSION_INFO)
+
+dnl pkg-config
+AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+if test "x$PKG_CONFIG" = "xno"; then
+        AC_MSG_ERROR([You need to install pkg-config])
+fi
+
+AC_PROG_SED
+AC_PROG_INSTALL
+AC_PROG_CC
+AC_HEADER_STDC
+
+SHAMROCK_FIND_C_SHARP_3_0_COMPILER
+
+dnl libtool for libtangglue
+AM_DISABLE_STATIC
+AM_PROG_LIBTOOL
+
+dnl Expansions
+SHAMROCK_EXPAND_LIBDIR
+SHAMROCK_EXPAND_BINDIR
+SHAMROCK_EXPAND_DATADIR
+
+
+dnl mono-zeroconf, taglib-sharp, glib-sharp, log4net
+PKG_CHECK_MODULES(MONO_ZEROCONF, mono-zeroconf)
+PKG_CHECK_MODULES(TAGLIB_SHARP, taglib-sharp)
+PKG_CHECK_MODULES(LOG_4_NET, log4net)
+PKG_CHECK_MODULES(NINI, nini-1.1)
+
+AC_SUBST([MONO_ZEROCONF_LIBS])
+AC_SUBST([TAGLIB_SHARP_LIBS])
+AC_SUBST([LOG_4_NET_LIBS])
+AC_SUBST([DB4O_LIBS])
+AC_SUBST([NINI_LIBS])
+
+dnl {{{ enable debug release configuration
+AC_ARG_ENABLE(debug,
+	    AC_HELP_STRING([--enable-debug],[Use 'DEBUG' Configuration [default=YES]]),
+    	enable_debug=yes,
+	    enable_debug=no)
+
+AM_CONDITIONAL(ENABLE_DEBUG, test "x$enable_debug" = "xyes")
+if test "x$enable_debug" = "xyes" ; then
+        CONFIG_REQUESTED="yes"
+fi
+dnl }}}
+
+dnl {{{ enable release build configuration
+AC_ARG_ENABLE(release,
+	    AC_HELP_STRING([--enable-release],[Use 'RELEASE' Configuration [default=NO]]),
+		enable_release=yes,
+		enable_release=no)
+
+AM_CONDITIONAL(ENABLE_RELEASE, test x$enable_release = xyes)
+if test "x$enable_release" = "xyes" ; then
+    	CONFIG_REQUESTED="yes"
+fi
+
+if test -z "$CONFIG_REQUESTED" ; then
+	    AM_CONDITIONAL(ENABLE_DEBUG, true)
+fi
+dnl }}}
+
+have_inotify="no"
+build_gui="no"
+build_banshee_plugin="no"
+build_itunes_plugin="no"
+build_session_plugin="no"
+build_spotlight_plugin="no"
+build_prefpane="no"
+platform="none"
+AC_MSG_CHECKING([host platform characteristics])
+case "$host" in
+    *-*-linux*|*-*-kfreebsd*)
+        PKG_CHECK_MODULES(GLIB_SHARP_20, glib-sharp-2.0)
+        AC_SUBST(GLIB_SHARP_20_LIBS)
+
+        PKG_CHECK_MODULES(GTK_SHARP_20, gtk-sharp-2.0)
+        AC_SUBST(GTK_SHARP_LIBS_20)
+
+        PKG_CHECK_MODULES(GLADE_SHARP_20, glade-sharp-2.0)
+        AC_SUBST(GLADE_SHARP_LIBS_20)
+
+        PKG_CHECK_MODULES(NDESK_DBUS_10, ndesk-dbus-1.0)
+        AC_SUBST([NDESK_DBUS_10_LIBS])
+
+        PKG_CHECK_MODULES(NDESK_DBUS_GLIB_10, ndesk-dbus-glib-1.0)
+        AC_SUBST([NDESK_DBUS_GLIB_10_LIBS])
+
+        PKG_CHECK_MODULES(X_SESSION, sm)
+        AC_SUBST([X_SESSION_LIBS])
+
+        have_inotify=yes
+
+        case $host in
+             *-*-kfreebsd*)
+                have_inotify=no
+             ;;
+        esac
+
+        build_gui="yes"
+        build_session_plugin="yes"
+        platform="LINUX"
+        ;;
+    *-*-darwin*)
+        have_inotify="no"
+        build_gui="no"
+        build_session_plugin="no"
+        build_itunes_plugin="yes"
+        build_spotlight_plugin="yes"
+        build_prefpane="yes"
+        platform="MACOSX"
+        ;;
+esac
+
+dnl file {{{
+AC_ARG_ENABLE(file,
+        AC_HELP_STRING([--enable-file], [Build the file plugin (default: auto)]),
+        file_beagle=$enableval,
+        enable_file=auto)
+
+if test "x$enable_file" != "xno"; then 
+        PKG_CHECK_MODULES([DB4O], [db4o], HAVE_DB4O=yes, HAVE_DB4O=no)
+
+        if test "x$enable_file" = "xyes" -a "x$HAVE_DB4O" = "xno"; then
+				AC_MSG_ERROR([File support explicitly requested, but dependencies not met])
+        fi
+fi
+
+if test "x$HAVE_DB4O" = "xyes"; then
+        have_file=yes
+else
+        have_file=no
+fi
+dnl }}}
+
+dnl beagle {{{
+AC_ARG_ENABLE(beagle,
+        AC_HELP_STRING([--enable-beagle], [Build the beagle plugin (default: auto)]),
+        enable_beagle=$enableval,
+        enable_beagle=auto)
+
+if test "x$enable_beagle" != "xno"; then 
+        PKG_CHECK_MODULES([BEAGLE], [beagle-0.0 >= 0.1.4], HAVE_BEAGLE=yes, HAVE_BEAGLE=no)
+
+        if test "x$enable_beagle" = "xyes" -a "x$HAVE_BEAGLE" = "xno"; then
+				AC_MSG_ERROR([Beagle support explicitly requested, but dependencies not met])
+        fi
+fi
+
+if test "x$HAVE_BEAGLE" = "xyes"; then
+        have_beagle=yes
+else
+        have_beagle=no
+fi
+dnl }}}
+
+dnl banshee {{{
+AC_ARG_ENABLE(banshee,
+	AC_HELP_STRING([--enable-banshee], [Build plugin to share banshee library (default: NO)]),
+	enable_banshee=$enableval,
+	enable_banshee=auto)
+
+if test "x$enable_banshee" != "xno"; then
+        PKG_CHECK_MODULES([BANSHEE_INDEXER], [banshee-collection-indexer >= 1.4.2], HAVE_BANSHEE=yes, HAVE_BANSHEE=no)
+
+        if test "x$enable_banshee" = "xyes" -a "x$HAVE_BANSHEE" = "xno"; then
+                AC_MSG_ERROR([Banshee support explicitly requested, but dependencies not met])
+        fi
+fi
+
+if test "x$HAVE_BANSHEE" = "xyes"; then
+       have_banshee=yes
+else
+       have_banshee=no
+fi
+dnl }}}
+
+dnl muine {{{
+have_muine=no
+
+AC_PATH_PROG(MUINE, muine)
+if test "x$MUINE" != "x" ; then
+    LIBMUINE32=`dirname $MUINE | sed -e "s/bin/lib\/muine\/libmuine.so/"`
+    LIBMUINE64=`dirname $MUINE | sed -e "s/bin/lib64\/muine\/libmuine.so/"`
+
+    LIBMUINE=bogus
+
+    if test -f $LIBMUINE32; then \
+        have_muine=yes
+        LIBMUINE=$LIBMUINE32
+    elif test -f $LIBMUINE64; then \
+        have_muine=yes
+        LIBMUINE=$LIBMUINE64
+    fi
+    
+    AC_SUBST(LIBMUINE)
+fi
+
+AM_CONDITIONAL(BUILD_GUI, test "x$build_gui" = "xyes")       
+AM_CONDITIONAL(BUILD_ITUNES_PLUGIN, test "x$build_itunes_plugin" = "xyes")
+AM_CONDITIONAL(BUILD_PREFPANE, test "x$build_prefpane" = "xyes")
+AM_CONDITIONAL(BUILD_SESSION_PLUGIN, test "x$build_session_plugin" = "xyes")
+AM_CONDITIONAL(BUILD_SPOTLIGHT_PLUGIN, test "x$build_spotlight_plugin" = "xyes")
+AM_CONDITIONAL(HAVE_BANSHEE, test "x$have_banshee" = "xyes")
+AM_CONDITIONAL(HAVE_BEAGLE, test "x$have_beagle" = "xyes")
+AM_CONDITIONAL(HAVE_DB4O, test "x$have_file" = "xyes")
+AM_CONDITIONAL(HAVE_INOTIFY, test "x$have_inotify" = "xyes")       
+AM_CONDITIONAL(HAVE_MUINE, test "x$have_muine" = "xyes")
+
+dnl We need to copy Banshee.CollectionIndexer.dll; it's not in the GAC
+BANSHEE_INDEXER_DLL=$(dirname $($PKG_CONFIG --variable=Libraries banshee-collection-indexer))
+AC_SUBST([BANSHEE_INDEXER_DLL])
+
+AC_CONFIG_FILES([
+daap-sharp/daap-sharp.pc
+daap-sharp/Makefile
+data/Makefile
+data/icons/Makefile
+libtangglue/Makefile
+Makefile
+m4/Makefile
+plugins/File/Makefile
+plugins/Beagle/Makefile
+plugins/Session/Makefile
+plugins/Banshee/Makefile
+plugins/LSongs/Makefile
+plugins/Rhythmbox/Makefile
+plugins/Amarok/Makefile
+plugins/Muine/Makefile
+plugins/Muine/src/MuineDatabase.cs
+po/Makefile.in
+Tangerine/Makefile
+Tangerine/tangerine.pc
+Tangerine.Daemon/Makefile
+Tangerine.Daemon/tangerine
+TangerinePrefPane/Makefile
+TangerineProperties/Makefile
+TangerineProperties/tangerine-properties
+])
+
+AC_OUTPUT
+
+cat <<EOF
+
+${PACKAGE}-${VERSION}
+
+  Build Environment
+    Install Prefix:     ${prefix}
+    Mono C# Compiler:   ${MCS} ${GMCS_FLAGS}
+    Mono Runtime:       ${MONO}
+    Platform:           $platform
+
+  Plugins:
+    Amarok:             yes
+    Beagle:             $have_beagle
+    Banshee:            $have_banshee
+    File:               $have_file
+    LSongs:             yes
+    Muine:              $have_muine
+    Session:            $build_session_plugin
+    ITunes:             $build_itunes_plugin
+    Spotlight:          $build_spotlight_plugin
+
+  Build GUI:            $build_gui
+
+  Build/Development
+    Release Build:      ${enable_release}
+
+EOF
diff --git a/.pc/port_file_plugin_to_db4o_8.0.patch/plugins/File/Makefile.am b/.pc/port_file_plugin_to_db4o_8.0.patch/plugins/File/Makefile.am
new file mode 100644
index 0000000..54e5140
--- /dev/null
+++ b/.pc/port_file_plugin_to_db4o_8.0.patch/plugins/File/Makefile.am
@@ -0,0 +1,25 @@
+# Simple component buildsystem
+if HAVE_DB4O
+include $(top_srcdir)/build.plugins.rules.mk
+else
+EXTRA_DIST = $(FILES)
+endif
+
+ASSEMBLY = File
+TARGET = library
+
+FILES = \
+	src/FilePlugin.cs
+
+REFERENCES =  \
+	$(BANSHEE_INDEXER_LIBS) \
+	$(DB4O_LIBS) \
+	$(LOG_4_NET_LIBS) \
+	$(NINI_LIBS) \
+	$(TAGLIB_SHARP_LIBS) \
+	System \
+	System.Core
+
+PROJECT_REFERENCES = \
+	daap-sharp \
+	Tangerine
diff --git a/.pc/port_file_plugin_to_db4o_8.0.patch/plugins/File/src/FilePlugin.cs b/.pc/port_file_plugin_to_db4o_8.0.patch/plugins/File/src/FilePlugin.cs
new file mode 100644
index 0000000..f04a053
--- /dev/null
+++ b/.pc/port_file_plugin_to_db4o_8.0.patch/plugins/File/src/FilePlugin.cs
@@ -0,0 +1,351 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+
+using DAAP;
+
+using Db4objects.Db4o;
+using log4net;
+using Nini;
+
+[assembly: Tangerine.Plugin ("file", typeof (Tangerine.Plugins.FilePlugin))]
+
+namespace Tangerine.Plugins
+{
+    public class FilePlugin : IDisposable 
+	{
+		bool running = true;
+		string [] file_types;
+		string [] directories;
+		object commitLock = new object ();
+		DateTime lastChange = DateTime.MinValue;
+		List<string> playlistFiles = new List<string> ();
+        Dictionary<string, Track> trackHash = new Dictionary<string, Track> ();
+        Dictionary<string, Playlist> playlistHash = new Dictionary<string, Playlist> ();
+        
+		ILog log;
+        Database db;
+		Server server;
+        
+		IObjectContainer odb;
+        
+        public FilePlugin () 
+		{
+
+#if LINUX || MACOSX
+            string defaultDir = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), "Music");
+            char splitChar = ':';
+#else
+            string defaultDir = Environment.GetFolderPath (Environment.SpecialFolder.MyMusic);
+            char splitChar = ';';
+#endif
+            if (Daemon.ConfigSource.Configs["FilePlugin"] == null) {
+                directories = new string[] { defaultDir };
+            } else {
+                directories = Daemon.ConfigSource.Configs["FilePlugin"].Get ("directories", defaultDir).Split (splitChar);
+            }
+
+            server = Daemon.Server;
+            db = Daemon.DefaultDatabase;
+            log = Daemon.Log;
+			
+			file_types = Daemon.ConfigSource.Configs ["FilePlugin"].Get ("filetypes", string.Empty).Split (',');
+			if (string.IsNullOrEmpty (file_types [0]))
+				file_types = new string [] { };
+
+#if LINUX
+            if (Inotify.Enabled) {
+                log.Info ("Using inotify to watch for changes");
+            } else {
+                log.Warn ("inotify is not available, filesystem changes will not be observed");
+            }
+#endif
+
+            LoadFromDatabase ();
+            ScanDirectories ();
+
+            Thread commitThread = new Thread (CommitLoop);
+            commitThread.Start ();
+
+            log.Info ("Finished adding songs");
+        }
+
+        public void Dispose () {
+            running = false;
+            
+            lock (commitLock) {
+                Monitor.Pulse (commitLock);
+            }
+
+            odb.Close ();
+        }
+
+        void CommitLoop () 
+		{
+            TimeSpan threshold = TimeSpan.FromSeconds (5);
+            
+            while (true) {
+                lock (commitLock) {
+                    if (!Monitor.Wait (commitLock, threshold) && lastChange != DateTime.MinValue &&
+                        DateTime.Now - lastChange >= threshold) {
+                        try {
+                            server.Commit ();
+                        } catch (Exception e) {
+                            Daemon.LogError ("Failed to commit changes", e);
+                        }
+
+                        lastChange = DateTime.MinValue;
+                    } else if (!running) {
+                        break;
+                    }
+                }
+            }
+        }
+
+        bool IsInDirectories (string file) 
+		{
+            foreach (string dir in directories) {
+                if (file.StartsWith (dir)) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        void LoadFromDatabase () 
+		{
+            if (odb == null) {
+                if (!Directory.Exists (Daemon.ConfigDirectory)) {
+                    Directory.CreateDirectory (Daemon.ConfigDirectory);
+                }
+
+                Db4oFactory.Configure().AllowVersionUpdates (true);
+                odb = Db4oFactory.OpenFile (Path.Combine (Daemon.ConfigDirectory, "tracks.db"));
+            }
+
+            IObjectSet result = odb.Get (typeof (Track));
+            log.DebugFormat ("{0} songs in database", result.Count);
+            
+            foreach (Track song in result) {
+                if (!File.Exists (song.FileName) || !IsInDirectories (song.FileName)) {
+                    log.Debug ("Ignoring song from db: " + song);
+                    odb.Delete (song);
+                    continue;
+                }
+                
+                db.AddTrack (song);
+                trackHash[song.FileName] = song;
+            }
+        }
+
+        void ScanDirectories () 
+		{
+            foreach (string dir in directories) {
+                log.InfoFormat ("Adding songs in '{0}'", dir);
+                AddDirectory (dir);
+            }
+
+            foreach (string plfile in playlistFiles) {
+                AddPlaylist (plfile);
+            }
+
+            playlistFiles.Clear ();
+            server.Commit ();
+        }
+
+        void AddDirectory (string dir) 
+		{
+            if (!Directory.Exists (dir)) {
+                log.ErrorFormat ("Directory '{0}' does not exist", dir);
+                return;
+            }
+
+#if LINUX
+            Inotify.Subscribe (dir, OnDirectoryEvent, Inotify.EventType.CloseWrite | Inotify.EventType.MovedFrom |
+				Inotify.EventType.MovedTo | Inotify.EventType.Delete | Inotify.EventType.Unmount);
+#endif
+			bool restrictedFileTypes = file_types.Any ();
+            foreach (string file in Directory.GetFiles (dir)) {
+				string ext = Path.GetExtension (file);
+                if (ext == ".m3u")
+                    playlistFiles.Add (file);
+                else
+                    if (!restrictedFileTypes || file_types.Contains (ext))
+						AddTrack (file);
+            }
+
+            foreach (string childDir in Directory.GetDirectories (dir)) {
+                AddDirectory (childDir);
+            }
+        }
+
+        void RemoveDirectory (string dir) 
+		{
+            if (string.IsNullOrEmpty (dir))
+                return;
+            
+            foreach (string file in new List<string> (trackHash.Keys)) {
+                if (file.StartsWith (dir))
+                    RemoveTrack (file);
+            }
+        }
+
+        public static bool UpdateTrack (Track track, string file) 
+		{
+            TagLib.File af;
+
+            FileInfo info = new FileInfo (file);
+            if((int) info.Length >= 0) {
+                track.Size = (int) info.Length;
+            } else {
+                return false;
+            }
+
+            try {
+                af = TagLib.File.Create (file);
+            } catch {
+                return false;
+            }
+
+            if(af.Properties.Duration.TotalSeconds >= 1) {
+                track.Duration = af.Properties.Duration;
+            } else {
+                return false;
+            }
+
+            if((short) af.Properties.AudioBitrate >=0) {
+                track.BitRate = (short) af.Properties.AudioBitrate;
+            }else{
+                return false;
+            }
+
+            if (af.Tag.Artists != null && af.Tag.Artists.Length > 0) {
+                track.Artist = af.Tag.Artists[0];
+            } else {
+                track.Artist = String.Empty;
+            }
+            
+            track.Album = af.Tag.Album;
+            if (track.Artist != String.Empty || (af.Tag.Title != null && af.Tag.Title != String.Empty) || (af.Tag.Album != null && af.Tag.Album != String.Empty)) {
+                track.Title = af.Tag.Title;
+            } else {
+                track.Title = info.Name;
+            }
+            track.FileName = file;
+            track.Format = Path.GetExtension (file).Substring (1);
+
+            if (af.Tag.Genres != null && af.Tag.Genres.Length > 0) {
+                track.Genre = af.Tag.Genres[0];
+            } else {
+                track.Genre = String.Empty;
+            }
+            
+            track.TrackCount = (int) af.Tag.TrackCount;
+            track.TrackNumber = (int) af.Tag.Track;
+            track.Year = (int) af.Tag.Year;
+
+            return true;
+        }
+
+        void AddTrack (string file) 
+		{
+            if (trackHash.ContainsKey (file))
+                return;
+            
+            Track track = new Track ();
+            try {
+                if (UpdateTrack (track, file)) {
+                    db.AddTrack (track);   
+                    trackHash[file] = track;
+                    odb.Set (track);
+                }
+            } catch {
+            }
+        }
+
+        void RemoveTrack (string file) 
+		{
+            if (!trackHash.ContainsKey (file))
+                return;
+
+            db.RemoveTrack (trackHash[file]);
+            odb.Delete (trackHash[file]);
+            trackHash.Remove (file);
+        }
+
+        void AddPlaylist (string file) 
+		{
+            Playlist pl = new Playlist (Path.GetFileNameWithoutExtension (file));
+
+            string dir = Path.GetDirectoryName (file);
+            
+            using (StreamReader reader = new StreamReader (File.Open (file, FileMode.Open, FileAccess.Read))) {
+                string line = null;
+
+                while ((line = reader.ReadLine ()) != null) {
+                    if (line.StartsWith ("#EXTM3U") || line.StartsWith ("#EXTINF:"))
+                        continue;
+
+                    string songFile = Path.Combine (dir, line);
+
+                    if (trackHash.ContainsKey (songFile)) {
+                        pl.AddTrack (trackHash[songFile]);
+                    } else {
+                        log.WarnFormat ("Failed to find song {0} for playlist {1}", line, pl.Name);
+                    }
+                }
+            }
+
+            playlistHash[file] = pl;
+            db.AddPlaylist (pl);
+
+            log.InfoFormat ("Added playlist '{0}'", pl.Name);
+        }
+
+        void RemovePlaylist (string file) 
+		{
+            if (!playlistHash.ContainsKey (file))
+                return;
+
+            db.RemovePlaylist (playlistHash[file]);
+            playlistHash.Remove (file);
+        }
+
+#if LINUX
+        void OnDirectoryEvent (Inotify.Watch watch, string path, string subitem, string srcpath, Inotify.EventType type) 
+		{
+            string file = Path.Combine (path, subitem);
+            
+            if ((type & Inotify.EventType.IsDirectory) > 0) {
+
+                // something happened to a directory
+                if ((type & Inotify.EventType.Delete) > 0 || (type & Inotify.EventType.MovedFrom) > 0) {
+                    RemoveDirectory (file);
+                } else if ((type & Inotify.EventType.Create) > 0) {
+                    AddDirectory (file);
+                } else if ((type & Inotify.EventType.MovedTo) > 0) {
+                    RemoveDirectory (srcpath);
+                    AddDirectory (file);
+                }
+                
+            } else {
+                if ((type & Inotify.EventType.Delete) > 0 || (type & Inotify.EventType.MovedFrom) > 0) {
+                    RemoveTrack (file);
+                } else if ((type & Inotify.EventType.CloseWrite) > 0 ||
+                           (type & Inotify.EventType.MovedTo) > 0) {
+                    AddTrack (file);
+                }
+            }
+
+            lock (commitLock) {
+                lastChange = DateTime.Now;
+                Monitor.Pulse (commitLock);
+            }
+        }
+#endif
+    }
+}
diff --git a/.pc/tangerine-arm64.patch/libtangglue/src/inotify-syscalls.h b/.pc/tangerine-arm64.patch/libtangglue/src/inotify-syscalls.h
new file mode 100644
index 0000000..b88caf1
--- /dev/null
+++ b/.pc/tangerine-arm64.patch/libtangglue/src/inotify-syscalls.h
@@ -0,0 +1,65 @@
+#ifndef _LINUX_INOTIFY_SYSCALLS_H
+#define _LINUX_INOTIFY_SYSCALLS_H
+
+#include <sys/syscall.h>
+
+#if defined(__i386__)
+# define __NR_inotify_init	291
+# define __NR_inotify_add_watch	292
+# define __NR_inotify_rm_watch	293
+#elif defined(__x86_64__)
+# define __NR_inotify_init	253
+# define __NR_inotify_add_watch	254
+# define __NR_inotify_rm_watch	255
+#elif defined(__powerpc__) || defined(__powerpc64__)
+# define __NR_inotify_init	275
+# define __NR_inotify_add_watch	276
+# define __NR_inotify_rm_watch	277
+#elif defined (__ia64__)
+# define __NR_inotify_init	1277
+# define __NR_inotify_add_watch	1278
+# define __NR_inotify_rm_watch	1279
+#elif defined (__s390__) || defined (__s390x__)
+# define __NR_inotify_init	284
+# define __NR_inotify_add_watch	285
+# define __NR_inotify_rm_watch	286
+#elif defined (__alpha__)
+# define __NR_inotify_init	444
+# define __NR_inotify_add_watch	445
+# define __NR_inotify_rm_watch	446
+#elif defined (__sparc__) || defined (__sparc64__)
+# define __NR_inotify_init	151
+# define __NR_inotify_add_watch	152
+# define __NR_inotify_rm_watch	156
+#elif defined (__arm__)
+# define __NR_inotify_init	316
+# define __NR_inotify_add_watch	317
+# define __NR_inotify_rm_watch	318
+#elif defined (__SH4__)
+# define __NR_inotify_init	290
+# define __NR_inotify_add_watch	291
+# define __NR_inotify_rm_watch	292
+#elif defined (__SH5__)
+# define __NR_inotify_init	318
+# define __NR_inotify_add_watch	319
+# define __NR_inotify_rm_watch	320
+#else
+# error "Unsupported architecture!"
+#endif
+
+static inline int inotify_init (void)
+{
+	return syscall (__NR_inotify_init);
+}
+
+static inline int inotify_add_watch (int fd, const char *name, __u32 mask)
+{
+	return syscall (__NR_inotify_add_watch, fd, name, mask);
+}
+
+static inline int inotify_rm_watch (int fd, __u32 wd)
+{
+	return syscall (__NR_inotify_rm_watch, fd, wd);
+}
+
+#endif /* _LINUX_INOTIFY_SYSCALLS_H */
diff --git a/.pc/tangerine-mips.patch/libtangglue/src/inotify-syscalls.h b/.pc/tangerine-mips.patch/libtangglue/src/inotify-syscalls.h
new file mode 100644
index 0000000..7245bc1
--- /dev/null
+++ b/.pc/tangerine-mips.patch/libtangglue/src/inotify-syscalls.h
@@ -0,0 +1,73 @@
+#ifndef _LINUX_INOTIFY_SYSCALLS_H
+#define _LINUX_INOTIFY_SYSCALLS_H
+
+#include <sys/syscall.h>
+
+#if defined(__i386__)
+# define __NR_inotify_init	291
+# define __NR_inotify_add_watch	292
+# define __NR_inotify_rm_watch	293
+#elif defined(__x86_64__)
+# define __NR_inotify_init	253
+# define __NR_inotify_add_watch	254
+# define __NR_inotify_rm_watch	255
+#elif defined(__powerpc__) || defined(__powerpc64__)
+# define __NR_inotify_init	275
+# define __NR_inotify_add_watch	276
+# define __NR_inotify_rm_watch	277
+#elif defined (__ia64__)
+# define __NR_inotify_init	1277
+# define __NR_inotify_add_watch	1278
+# define __NR_inotify_rm_watch	1279
+#elif defined (__s390__) || defined (__s390x__)
+# define __NR_inotify_init	284
+# define __NR_inotify_add_watch	285
+# define __NR_inotify_rm_watch	286
+#elif defined (__alpha__)
+# define __NR_inotify_init	444
+# define __NR_inotify_add_watch	445
+# define __NR_inotify_rm_watch	446
+#elif defined (__sparc__) || defined (__sparc64__)
+# define __NR_inotify_init	151
+# define __NR_inotify_add_watch	152
+# define __NR_inotify_rm_watch	156
+#elif defined (__arm__)
+# define __NR_inotify_init	316
+# define __NR_inotify_add_watch	317
+# define __NR_inotify_rm_watch	318
+#elif defined (__SH4__)
+# define __NR_inotify_init	290
+# define __NR_inotify_add_watch	291
+# define __NR_inotify_rm_watch	292
+#elif defined (__SH5__)
+# define __NR_inotify_init	318
+# define __NR_inotify_add_watch	319
+# define __NR_inotify_rm_watch	320
+#elif defined (__aarch64__)
+# define __NR_inotify_init1	26
+# define __NR_inotify_add_watch	27
+# define __NR_inotify_rm_watch	28
+#else
+# error "Unsupported architecture!"
+#endif
+
+static inline int inotify_init (void)
+{
+#ifdef __NR_inotify_init
+	return syscall (__NR_inotify_init);
+#else
+	return syscall (__NR_inotify_init1, 0);
+#endif
+}
+
+static inline int inotify_add_watch (int fd, const char *name, __u32 mask)
+{
+	return syscall (__NR_inotify_add_watch, fd, name, mask);
+}
+
+static inline int inotify_rm_watch (int fd, __u32 wd)
+{
+	return syscall (__NR_inotify_rm_watch, fd, wd);
+}
+
+#endif /* _LINUX_INOTIFY_SYSCALLS_H */
diff --git a/configure.ac b/configure.ac
index 6f7816c..76a2d85 100644
--- a/configure.ac
+++ b/configure.ac
@@ -104,10 +104,10 @@ case "$host" in
         PKG_CHECK_MODULES(GLADE_SHARP_20, glade-sharp-2.0)
         AC_SUBST(GLADE_SHARP_LIBS_20)
 
-        PKG_CHECK_MODULES(NDESK_DBUS_10, ndesk-dbus-1.0)
+        PKG_CHECK_MODULES(NDESK_DBUS_10, dbus-sharp-2.0)
         AC_SUBST([NDESK_DBUS_10_LIBS])
 
-        PKG_CHECK_MODULES(NDESK_DBUS_GLIB_10, ndesk-dbus-glib-1.0)
+        PKG_CHECK_MODULES(NDESK_DBUS_GLIB_10, dbus-sharp-glib-2.0)
         AC_SUBST([NDESK_DBUS_GLIB_10_LIBS])
 
         PKG_CHECK_MODULES(X_SESSION, sm)
@@ -142,8 +142,15 @@ AC_ARG_ENABLE(file,
         file_beagle=$enableval,
         enable_file=auto)
 
-if test "x$enable_file" != "xno"; then 
-        PKG_CHECK_MODULES([DB4O], [db4o], HAVE_DB4O=yes, HAVE_DB4O=no)
+if test "x$enable_file" != "xno"; then
+        PKG_CHECK_MODULES([DB4O], [db4o >= 8.0], [HAVE_DB4O_8=yes], [HAVE_DB4O_8=no])
+        AM_CONDITIONAL([HAVE_DB4O_8], [test "$HAVE_DB4O_8" = "yes"])
+
+        if test "$HAVE_DB4O_8" = "yes"; then
+				HAVE_DB4O=yes
+        else
+				PKG_CHECK_MODULES([DB4O], [db4o], HAVE_DB4O=yes, HAVE_DB4O=no)
+        fi
 
         if test "x$enable_file" = "xyes" -a "x$HAVE_DB4O" = "xno"; then
 				AC_MSG_ERROR([File support explicitly requested, but dependencies not met])
diff --git a/debian/changelog b/debian/changelog
index fc7a779..d585fc1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,22 @@
+tangerine (0.3.4-6.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+
+  [ Jeremy Bicha ]
+  * [fac3fc7] Disable banshee support since banshee is being removed from Debian
+  * [3003354] Remove Jose Carlos Garcia Sogo from Uploaders.
+    Thank you for your work with the initial packaging! (Closes: #862630)
+  * [d136ce8] Update Vcs fields for migration to https://salsa.debian.org/
+  * [dd1bb37] Add minimal debian/gbp.conf
+
+  [ Edmund Grimley Evans ]
+  * [9caab2e] Add tangerine-arm64.patch to fix build on arm64 (Closes: #856056)
+
+  [ Radovan Birdic ]
+  * [3be6658] Add tangerine-mips.patch to fix build on mips (Closes: #830969)
+
+ -- Jeremy Bicha <jbicha@debian.org>  Sun, 18 Nov 2018 13:55:59 -0500
+
 tangerine (0.3.4-6) unstable; urgency=low
 
   * Brown paperbag release
diff --git a/debian/control b/debian/control
index 739e8f4..c19fdd4 100644
--- a/debian/control
+++ b/debian/control
@@ -2,8 +2,7 @@ Source: tangerine
 Section: gnome
 Priority: optional
 Maintainer: Debian CLI Applications Team <pkg-cli-apps-team@lists.alioth.debian.org>
-Uploaders: Jose Carlos Garcia Sogo <jsogo@debian.org>,
-           Sebastian Dröge <slomo@debian.org>,
+Uploaders: Sebastian Dröge <slomo@debian.org>,
            Chow Loong Jin <hyperair@debian.org>
 Build-Depends: debhelper (>= 9),
                dh-autoreconf,
@@ -23,17 +22,16 @@ Build-Depends: debhelper (>= 9),
                libdbus2.0-cil-dev,
                libdbus-glib2.0-cil-dev,
                libsm-dev,
-               banshee (>= 2.0.1-2~),
                libglib2.0-dev
 Standards-Version: 3.9.5
 Homepage: http://launchpad.net/tangerine/
-Vcs-Git: git://git.debian.org/git/pkg-cli-apps/packages/tangerine.git
-Vcs-Browser: http://git.debian.org/?p=pkg-cli-apps/packages/tangerine.git
+Vcs-Git: https://salsa.debian.org/dotnet-team/tangerine.git
+Vcs-Browser: https://salsa.debian.org/dotnet-team/tangerine
 
 Package: tangerine
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}, ${cli:Depends}
-Suggests: amarok (>= 2.0), banshee (>= 1.4.2), rhythmbox
+Suggests: amarok (>= 2.0), rhythmbox
 Description: music server using DAAP
  Tangerine is a simple music sharing server that uses DAAP to share your music
  over the local network.
@@ -49,7 +47,7 @@ Depends: tangerine (= ${binary:Version}),
          ${shlibs:Depends},
          ${misc:Depends},
          ${cli:Depends}
-Suggests: banshee-dbg, rhythmbox
+Suggests: rhythmbox
 Description: music server using DAAP (debug symbols)
  Tangerine is a simple music sharing server that uses DAAP to share your music
  over the local network.
diff --git a/debian/gbp.conf b/debian/gbp.conf
new file mode 100644
index 0000000..e232100
--- /dev/null
+++ b/debian/gbp.conf
@@ -0,0 +1,12 @@
+[DEFAULT]
+pristine-tar = True
+
+[buildpackage]
+sign-tags = True
+
+[dch]
+id-length = 7
+multimaint-merge = True
+
+[pq]
+patch-numbers = False
diff --git a/debian/patches/series b/debian/patches/series
index 76beab4..540443c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,4 @@
 port_file_plugin_to_db4o_8.0.patch
 dbus-sharp.patch
+tangerine-arm64.patch
+tangerine-mips.patch
diff --git a/debian/patches/tangerine-arm64.patch b/debian/patches/tangerine-arm64.patch
new file mode 100644
index 0000000..4e2b97d
--- /dev/null
+++ b/debian/patches/tangerine-arm64.patch
@@ -0,0 +1,34 @@
+From: Edmund Grimley Evans <edmund.grimley.evans@gmail.com>
+Date: Fri, 24 Feb 2017 20:39:36 +0000
+Subject: Add support for AArch64
+
+---
+ libtangglue/src/inotify-syscalls.h | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/libtangglue/src/inotify-syscalls.h b/libtangglue/src/inotify-syscalls.h
+index b88caf1..7245bc1 100644
+--- a/libtangglue/src/inotify-syscalls.h
++++ b/libtangglue/src/inotify-syscalls.h
+@@ -43,13 +43,21 @@
+ # define __NR_inotify_init	318
+ # define __NR_inotify_add_watch	319
+ # define __NR_inotify_rm_watch	320
++#elif defined (__aarch64__)
++# define __NR_inotify_init1	26
++# define __NR_inotify_add_watch	27
++# define __NR_inotify_rm_watch	28
+ #else
+ # error "Unsupported architecture!"
+ #endif
+ 
+ static inline int inotify_init (void)
+ {
++#ifdef __NR_inotify_init
+ 	return syscall (__NR_inotify_init);
++#else
++	return syscall (__NR_inotify_init1, 0);
++#endif
+ }
+ 
+ static inline int inotify_add_watch (int fd, const char *name, __u32 mask)
diff --git a/debian/patches/tangerine-mips.patch b/debian/patches/tangerine-mips.patch
new file mode 100644
index 0000000..4ed4c10
--- /dev/null
+++ b/debian/patches/tangerine-mips.patch
@@ -0,0 +1,38 @@
+From: Radovan Birdic <Radovan.Birdic@imgtec.com>
+Date: Wed, 13 Jul 2016 11:55:52 +0000
+Subject: Add support for mips
+
+---
+ libtangglue/src/inotify-syscalls.h | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/libtangglue/src/inotify-syscalls.h b/libtangglue/src/inotify-syscalls.h
+index 7245bc1..6bbf3f5 100644
+--- a/libtangglue/src/inotify-syscalls.h
++++ b/libtangglue/src/inotify-syscalls.h
+@@ -47,6 +47,25 @@
+ # define __NR_inotify_init1	26
+ # define __NR_inotify_add_watch	27
+ # define __NR_inotify_rm_watch	28
++#elif defined (__mips__)
++# if _MIPS_SIM == _MIPS_SIM_ABI32
++#  define __NR_Linux   4000
++#  define __NR_inotify_init (__NR_Linux + 284)
++#  define __NR_inotify_add_watch (__NR_Linux + 285)
++#  define __NR_inotify_rm_watch (__NR_Linux + 286)
++# endif
++# if _MIPS_SIM == _MIPS_SIM_ABI64
++#  define __NR_Linux   5000
++#  define __NR_inotify_init (__NR_Linux + 243)
++#  define __NR_inotify_add_watch (__NR_Linux + 244)
++#  define __NR_inotify_rm_watch (__NR_Linux + 245)
++# endif
++# if _MIPS_SIM == _MIPS_SIM_NABI32
++#  define __NR_Linux   6000
++#  define __NR_inotify_init (__NR_Linux + 247)
++#  define __NR_inotify_add_watch (__NR_Linux + 248)
++#  define __NR_inotify_rm_watch (__NR_Linux + 249)
++# endif
+ #else
+ # error "Unsupported architecture!"
+ #endif
diff --git a/debian/rules b/debian/rules
index 584e1ce..1d49ff6 100755
--- a/debian/rules
+++ b/debian/rules
@@ -21,7 +21,7 @@ override_dh_auto_configure:
 	dh_auto_configure -- \
 		MCS=/usr/bin/mono-csc \
 		--enable-debug \
-		--enable-banshee \
+		--disable-banshee \
 		--disable-beagle \
 		--enable-file
 
diff --git a/libtangglue/src/inotify-syscalls.h b/libtangglue/src/inotify-syscalls.h
index b88caf1..6bbf3f5 100644
--- a/libtangglue/src/inotify-syscalls.h
+++ b/libtangglue/src/inotify-syscalls.h
@@ -43,13 +43,40 @@
 # define __NR_inotify_init	318
 # define __NR_inotify_add_watch	319
 # define __NR_inotify_rm_watch	320
+#elif defined (__aarch64__)
+# define __NR_inotify_init1	26
+# define __NR_inotify_add_watch	27
+# define __NR_inotify_rm_watch	28
+#elif defined (__mips__)
+# if _MIPS_SIM == _MIPS_SIM_ABI32
+#  define __NR_Linux   4000
+#  define __NR_inotify_init (__NR_Linux + 284)
+#  define __NR_inotify_add_watch (__NR_Linux + 285)
+#  define __NR_inotify_rm_watch (__NR_Linux + 286)
+# endif
+# if _MIPS_SIM == _MIPS_SIM_ABI64
+#  define __NR_Linux   5000
+#  define __NR_inotify_init (__NR_Linux + 243)
+#  define __NR_inotify_add_watch (__NR_Linux + 244)
+#  define __NR_inotify_rm_watch (__NR_Linux + 245)
+# endif
+# if _MIPS_SIM == _MIPS_SIM_NABI32
+#  define __NR_Linux   6000
+#  define __NR_inotify_init (__NR_Linux + 247)
+#  define __NR_inotify_add_watch (__NR_Linux + 248)
+#  define __NR_inotify_rm_watch (__NR_Linux + 249)
+# endif
 #else
 # error "Unsupported architecture!"
 #endif
 
 static inline int inotify_init (void)
 {
+#ifdef __NR_inotify_init
 	return syscall (__NR_inotify_init);
+#else
+	return syscall (__NR_inotify_init1, 0);
+#endif
 }
 
 static inline int inotify_add_watch (int fd, const char *name, __u32 mask)
diff --git a/plugins/Banshee/src/BansheePlugin.cs b/plugins/Banshee/src/BansheePlugin.cs
index 67b8a2b..6b570aa 100644
--- a/plugins/Banshee/src/BansheePlugin.cs
+++ b/plugins/Banshee/src/BansheePlugin.cs
@@ -7,7 +7,7 @@ using System.Threading;
 using Banshee.Collection.Indexer.RemoteHelper;
 
 using DAAP;
-using NDesk.DBus;
+using DBus;
 using Nini;
 using log4net;
 
diff --git a/plugins/File/Makefile.am b/plugins/File/Makefile.am
index 54e5140..df3c552 100644
--- a/plugins/File/Makefile.am
+++ b/plugins/File/Makefile.am
@@ -1,6 +1,11 @@
 # Simple component buildsystem
 if HAVE_DB4O
 include $(top_srcdir)/build.plugins.rules.mk
+
+if HAVE_DB4O_8
+MCS_FLAGS += -d:HAVE_DB4O_8
+endif
+
 else
 EXTRA_DIST = $(FILES)
 endif
diff --git a/plugins/File/src/FilePlugin.cs b/plugins/File/src/FilePlugin.cs
index f04a053..7f6e567 100644
--- a/plugins/File/src/FilePlugin.cs
+++ b/plugins/File/src/FilePlugin.cs
@@ -127,7 +127,11 @@ namespace Tangerine.Plugins
                 odb = Db4oFactory.OpenFile (Path.Combine (Daemon.ConfigDirectory, "tracks.db"));
             }
 
+#if HAVE_DB4O_8
+            IObjectSet result = odb.QueryByExample (typeof (Track));
+#else
             IObjectSet result = odb.Get (typeof (Track));
+#endif
             log.DebugFormat ("{0} songs in database", result.Count);
             
             foreach (Track song in result) {
@@ -261,7 +265,11 @@ namespace Tangerine.Plugins
                 if (UpdateTrack (track, file)) {
                     db.AddTrack (track);   
                     trackHash[file] = track;
+#if HAVE_DB4O_8
+                    odb.Store (track);
+#else
                     odb.Set (track);
+#endif
                 }
             } catch {
             }

Run locally

More details

Full run details