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 {
}