summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--community/cinnamon-control-center/PKGBUILD15
-rw-r--r--community/cinnamon/PKGBUILD14
-rw-r--r--community/cinnamon/fallback-helpers.patch7
-rw-r--r--community/cinnamon/gnome-3.8.patch849
-rw-r--r--community/cinnamon/switch-applications.patch24
-rw-r--r--community/darkhttpd/PKGBUILD12
-rw-r--r--community/fatrat/PKGBUILD11
-rw-r--r--community/fatrat/pion-5.0.diff1570
-rw-r--r--community/fbshot/PKGBUILD22
-rw-r--r--community/fltk2/PKGBUILD28
-rw-r--r--community/gemrb/PKGBUILD8
-rw-r--r--community/gource/PKGBUILD8
-rw-r--r--community/gpointing-device-settings/PKGBUILD57
-rw-r--r--community/gprolog/PKGBUILD6
-rw-r--r--community/hwinfo/PKGBUILD22
-rw-r--r--community/libvirt/PKGBUILD16
-rw-r--r--community/log4cpp/PKGBUILD18
-rw-r--r--community/log4cpp/gcc43.patch26
-rw-r--r--community/muffin/PKGBUILD8
-rw-r--r--community/nemo/PKGBUILD8
-rw-r--r--community/pion/PKGBUILD20
-rw-r--r--community/rawtherapee/PKGBUILD4
-rw-r--r--community/rekonq/PKGBUILD6
-rw-r--r--community/virtualgl/PKGBUILD5
-rw-r--r--extra/glibmm/PKGBUILD6
-rw-r--r--extra/goffice/PKGBUILD6
-rw-r--r--extra/xfce4-session/PKGBUILD24
-rw-r--r--extra/xfce4-session/xfce4-session-4.10.0-store-the-watch-function-id.patch26
-rw-r--r--extra/xfce4-session/xfce4-session-4.10.0-use-the-async-spawn-function-of-glib.patch79
-rw-r--r--libre/cgminer-libre/PKGBUILD12
-rw-r--r--libre/mcomix-libre/PKGBUILD17
-rwxr-xr-xmultilib-staging/gens-gs/PKGBUILD61
-rwxr-xr-xmultilib-staging/gens-gs/gens-gtk.patch187
-rw-r--r--multilib-staging/lib32-gtk2/PKGBUILD57
-rw-r--r--multilib-staging/lib32-gtk2/gtk-modules-32.patch12
-rw-r--r--multilib-staging/lib32-gtk2/gtk2.install16
-rw-r--r--multilib-staging/lib32-gtk2/xid-collision-debug.patch15
-rw-r--r--multilib-staging/lib32-pango/PKGBUILD49
-rw-r--r--multilib-staging/lib32-pango/pango.install21
-rwxr-xr-xmultilib-staging/lib32-wxgtk/PKGBUILD50
-rw-r--r--pcr/mosquitto/PKGBUILD27
-rw-r--r--pcr/mosquitto/mosquitto.service22
42 files changed, 2904 insertions, 547 deletions
diff --git a/community/cinnamon-control-center/PKGBUILD b/community/cinnamon-control-center/PKGBUILD
index c303de52b..3e6a3f2de 100644
--- a/community/cinnamon-control-center/PKGBUILD
+++ b/community/cinnamon-control-center/PKGBUILD
@@ -1,17 +1,16 @@
-# $Id: PKGBUILD 88800 2013-04-22 12:29:37Z bgyorgy $
+# $Id: PKGBUILD 89381 2013-04-29 01:59:05Z bgyorgy $
# Maintainer: Alexandre Filgueira <alexfilgueira@cinnarch.com
# Based on gnome-control-center:
# Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
# Jan de Groot <jgc@archlinux.org>
pkgname=cinnamon-control-center
-pkgver=1.7.3
-pkgrel=3
+pkgver=1.7.4
+pkgrel=1
pkgdesc="The Control Center for Cinnamon"
arch=('i686' 'x86_64')
-depends=('cinnamon' 'cheese' 'libgnomekbd' 'libgtop' 'network-manager-applet')
-optdepends=('mesa-demos: provides glxinfo for graphics information'
- 'gnome-color-manager: for color management tasks')
+depends=('cinnamon' 'cheese' 'libgnomekbd' 'network-manager-applet')
+optdepends=('gnome-color-manager: for color management tasks')
makedepends=('intltool' 'gnome-common')
url="https://github.com/linuxmint/cinnamon-control-center"
install=cinnamon-control-center.install
@@ -20,7 +19,7 @@ options=('!libtool' '!emptydirs')
source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/cinnamon-control-center/archive/$pkgver.tar.gz"
"gnomerrlabeler.patch"
"idle-delay.patch")
-sha256sums=('44a4484238c2b9e9060d062028438df589fc29c9e3da45edad068198a990c8be'
+sha256sums=('33425b57d13acf015ddbeba8e9139f7b3488d80f900bd2234f49db1c0944c96b'
'826de61fa60349a99c6895f2ffb0ea1c7f71031b17dd80bb245e3834b30b6ff6'
'42ea92628dc234d65e582592a66c0011d5bb2c2eac14854a06f7a9dc923c8d67')
@@ -51,8 +50,6 @@ package() {
make DESTDIR="$pkgdir" install
# Remove unused stuff
- make -C panels/datetime DESTDIR="$pkgdir" uninstall
- make -C panels/printers DESTDIR="$pkgdir" uninstall
make -C panels/sound DESTDIR="$pkgdir" uninstall
make -C panels/sound/data DESTDIR="$pkgdir" install
make -C shell DESTDIR="$pkgdir" uninstall
diff --git a/community/cinnamon/PKGBUILD b/community/cinnamon/PKGBUILD
index cf5e13723..370a97288 100644
--- a/community/cinnamon/PKGBUILD
+++ b/community/cinnamon/PKGBUILD
@@ -1,12 +1,12 @@
-# $Id: PKGBUILD 88934 2013-04-25 02:04:16Z bgyorgy $
+# $Id: PKGBUILD 89378 2013-04-29 01:43:41Z bgyorgy $
# Maintainer: Alexandre Filgueira <alexfilgueira@cinnarch.com>
# Contributor: M0Rf30
# Contributor: unifiedlinux
# Contributor: CReimer
pkgname=cinnamon
-pkgver=1.7.4
-pkgrel=3
+pkgver=1.7.7
+pkgrel=1
pkgdesc="Linux desktop which provides advanced innovative features and a traditional user experience"
arch=('i686' 'x86_64')
url="http://cinnamon.linuxmint.com/"
@@ -30,12 +30,12 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/Cinnamon/tarball/
"gnome-3.8.patch"
"switch-applications.patch"
"fallback-helpers.patch")
-md5sums=('95260dc968ca9be32c265b35df2dd49d'
+md5sums=('a0ed2648d1d95edeac2e45e2c11508fe'
'2b1ece84416c3e4de030be15f1774d82'
'c3f25b06d345d9d36c197cd96e08f496'
- 'cf2efbe1a5c48e1be53a0e8e4b7c3181'
- '16258907bf51cd8c1569263791ffa620'
- 'f7aa8ace9c9543ba2fd66bd530244fed')
+ '5136c2901dfda09e8b969a8b62b59209'
+ '3880fa4c5234771644e5b57a1ade4456'
+ '0dac5a546bf16921a4fdde8525366a24')
build() {
cd ${srcdir}/linuxmint-Cinnamon*
diff --git a/community/cinnamon/fallback-helpers.patch b/community/cinnamon/fallback-helpers.patch
index 6fe318bd9..b6810cdba 100644
--- a/community/cinnamon/fallback-helpers.patch
+++ b/community/cinnamon/fallback-helpers.patch
@@ -3,7 +3,7 @@ diff -Naur linuxmint-Cinnamon-b41bad0.orig/files/usr/share/gnome-session/session
+++ linuxmint-Cinnamon-b41bad0/files/usr/share/gnome-session/sessions/cinnamon2d.session 2013-04-25 01:30:35.435650613 +0200
@@ -1,5 +1,5 @@
[GNOME Session]
- Name=Cinnamon 2D
+ Name=Cinnamon (Software Rendering)
-RequiredComponents=cinnamon2d;gnome-settings-daemon;
+RequiredComponents=cinnamon2d;gnome-settings-daemon;gnome-fallback-media-keys-helper;gnome-fallback-mount-helper;
DesktopName=GNOME
@@ -11,11 +11,10 @@ diff -Naur linuxmint-Cinnamon-b41bad0.orig/files/usr/share/gnome-session/session
diff -Naur linuxmint-Cinnamon-b41bad0.orig/files/usr/share/gnome-session/sessions/cinnamon.session linuxmint-Cinnamon-b41bad0/files/usr/share/gnome-session/sessions/cinnamon.session
--- linuxmint-Cinnamon-b41bad0.orig/files/usr/share/gnome-session/sessions/cinnamon.session 2013-04-15 15:55:01.000000000 +0200
+++ linuxmint-Cinnamon-b41bad0/files/usr/share/gnome-session/sessions/cinnamon.session 2013-04-25 01:30:33.645607769 +0200
-@@ -1,6 +1,6 @@
+@@ -1,5 +1,5 @@
[GNOME Session]
Name=Cinnamon
-RequiredComponents=cinnamon;gnome-settings-daemon;
+RequiredComponents=cinnamon;gnome-settings-daemon;gnome-fallback-media-keys-helper;gnome-fallback-mount-helper;
- IsRunnableHelper=/usr/lib/gnome-session/gnome-session-check-accelerated
- FallbackSession=cinnamon2d
DesktopName=GNOME
+
diff --git a/community/cinnamon/gnome-3.8.patch b/community/cinnamon/gnome-3.8.patch
index 61cd9180f..f27131aa5 100644
--- a/community/cinnamon/gnome-3.8.patch
+++ b/community/cinnamon/gnome-3.8.patch
@@ -1,7 +1,7 @@
-From f4020d3960fa96a101bdb1c3ac1e1a452dbbf48c Mon Sep 17 00:00:00 2001
+From 2ba97ed278777fcb96b86cd58e9176536585ad2d Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Fri, 19 Apr 2013 13:19:50 -0400
-Subject: [PATCH 01/15] Disable XInput on cinnamon startup (for 3.8 compat)
+Subject: [PATCH 01/16] Disable XInput on cinnamon startup (for 3.8 compat)
This has no effect on < 1.14 clutter
---
@@ -24,10 +24,10 @@ index 418fb60..ac90d91 100644
1.8.1.6
-From cc68659ecdd9e43128ec2b4555479f930c0d1ccd Mon Sep 17 00:00:00 2001
+From 72133f97fbd99c78169cec49e18b97da3edba524 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Fri, 19 Apr 2013 13:21:40 -0400
-Subject: [PATCH 02/15] Explain change
+Subject: [PATCH 02/16] Explain change
---
src/main.c | 4 +++-
@@ -55,10 +55,10 @@ index ac90d91..9d37975 100644
1.8.1.6
-From f3777b3b2733b965bd348c7175ee67ee268aee06 Mon Sep 17 00:00:00 2001
+From 28210e29e3e0d81c68320b9511574a168f5779e4 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Tue, 16 Apr 2013 17:01:30 -0400
-Subject: [PATCH 03/15] Add backgroundManager - this is needed for gnome 3.8
+Subject: [PATCH 03/16] Add backgroundManager - this is needed for gnome 3.8
compatibility, as gnome-settings-daemon no longer handles the desktop
background.
@@ -107,10 +107,10 @@ index 0aa47c5..a2a9479 100644
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
diff --git a/data/org.cinnamon.gschema.xml.in b/data/org.cinnamon.gschema.xml.in
-index ffbad92..6f55477 100644
+index f12f8c5..939ea70 100644
--- a/data/org.cinnamon.gschema.xml.in
+++ b/data/org.cinnamon.gschema.xml.in
-@@ -720,6 +720,23 @@
+@@ -746,6 +746,23 @@
</key>
</schema>
@@ -134,7 +134,7 @@ index ffbad92..6f55477 100644
<schema id="org.cinnamon.background" path="/org/cinnamon/background/">
<key name="mode" type="s">
<default>"wallpaper"</default>
-@@ -750,8 +767,60 @@
+@@ -776,8 +793,60 @@
This key defines the delay for the slideshow.
</description>
</key>
@@ -253,7 +253,7 @@ index f964aed..4a38c84 100644
class BackgroundSidePage (SidePage):
def __init__(self, name, icon, keywords, advanced, content_box):
- SidePage.__init__(self, name, icon, keywords, advanced, content_box)
+ SidePage.__init__(self, name, icon, keywords, advanced, content_box, True)
- self._gnome_background_schema = Gio.Settings("org.gnome.desktop.background")
self._cinnamon_background_schema = Gio.Settings("org.cinnamon.background")
self._add_wallpapers_dialog = AddWallpapersDialog()
@@ -296,7 +296,7 @@ index f964aed..4a38c84 100644
advanced_options_box.pack_start(hbox, False, False, 0)
self.content_box.show_all()
diff --git a/js/ui/main.js b/js/ui/main.js
-index 11920a4..5cae372 100644
+index 74154ab..99aee95 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -86,6 +86,7 @@ let _cssStylesheet = null;
@@ -317,7 +317,7 @@ index 11920a4..5cae372 100644
// the color is used as the default contents for the Muffin root background
// actor so set it anyways.
diff --git a/src/Makefile.am b/src/Makefile.am
-index 51413aa..6efce18 100644
+index 3bab29c..6bac83c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -105,6 +105,7 @@ cinnamon_public_headers_h = \
@@ -820,20 +820,20 @@ index 0000000..9a56e32
1.8.1.6
-From 590a48961f2c7a1b18fb914a1d7212ffcdf03017 Mon Sep 17 00:00:00 2001
+From c971d472a88f8ea725b2bef33715016e111732d9 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Tue, 16 Apr 2013 18:28:16 -0400
-Subject: [PATCH 04/15] Change default background
+Subject: [PATCH 04/16] Change default background
---
data/org.cinnamon.gschema.xml.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/org.cinnamon.gschema.xml.in b/data/org.cinnamon.gschema.xml.in
-index 6f55477..35b0972 100644
+index 939ea70..6d8c82d 100644
--- a/data/org.cinnamon.gschema.xml.in
+++ b/data/org.cinnamon.gschema.xml.in
-@@ -782,7 +782,7 @@
+@@ -808,7 +808,7 @@
</_description>
</key>
<key name="picture-uri" type="s">
@@ -846,20 +846,20 @@ index 6f55477..35b0972 100644
1.8.1.6
-From ac8b0954c7506ae88059e488539f88d55329f070 Mon Sep 17 00:00:00 2001
+From 0147459229b449757bac9a92c173c4bd3c2f9eca Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Tue, 16 Apr 2013 18:41:16 -0400
-Subject: [PATCH 05/15] Use distro-agnostic background..
+Subject: [PATCH 05/16] Use distro-agnostic background..
---
data/org.cinnamon.gschema.xml.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/org.cinnamon.gschema.xml.in b/data/org.cinnamon.gschema.xml.in
-index 35b0972..0d01089 100644
+index 6d8c82d..567dca8 100644
--- a/data/org.cinnamon.gschema.xml.in
+++ b/data/org.cinnamon.gschema.xml.in
-@@ -782,7 +782,7 @@
+@@ -808,7 +808,7 @@
</_description>
</key>
<key name="picture-uri" type="s">
@@ -872,33 +872,33 @@ index 35b0972..0d01089 100644
1.8.1.6
-From 81dbccb60231744999463a5b84c7c36358570929 Mon Sep 17 00:00:00 2001
+From 706d244a9dbe2ace9860044e2245a285d8473f47 Mon Sep 17 00:00:00 2001
From: dalcde <dalcde@yahoo.com.hk>
Date: Mon, 15 Apr 2013 18:34:48 +0800
-Subject: [PATCH 06/15] [GDbus] Port DBus to GDBus (AltLinux patch)
+Subject: [PATCH 06/16] [GDbus] Port DBus to GDBus (AltLinux patch)
---
- .../applets/brightness@cinnamon.org/applet.js | 39 ++--
- .../cinnamon/applets/power@cinnamon.org/applet.js | 102 +++++----
- .../cinnamon/applets/sound@cinnamon.org/applet.js | 244 +++++----------------
+ .../applets/brightness@cinnamon.org/applet.js | 39 +-
+ .../cinnamon/applets/power@cinnamon.org/applet.js | 102 ++--
+ .../cinnamon/applets/sound@cinnamon.org/applet.js | 511 ++++++---------------
.../cinnamon/applets/xrandr@cinnamon.org/applet.js | 19 +-
- js/misc/gnomeSession.js | 147 ++++---------
- js/misc/modemManager.js | 79 ++++---
- js/misc/screenSaver.js | 89 ++++----
+ js/misc/gnomeSession.js | 147 ++----
+ js/misc/modemManager.js | 79 ++--
+ js/misc/screenSaver.js | 89 ++--
js/ui/appletManager.js | 1 -
- js/ui/automountManager.js | 106 +++++----
- js/ui/autorunManager.js | 27 +--
- js/ui/calendar.js | 71 +++---
- js/ui/cinnamonDBus.js | 96 ++++----
- js/ui/endSessionDialog.js | 79 ++++---
- js/ui/keyboard.js | 48 ++--
+ js/ui/automountManager.js | 106 ++---
+ js/ui/autorunManager.js | 27 +-
+ js/ui/calendar.js | 71 +--
+ js/ui/cinnamonDBus.js | 96 ++--
+ js/ui/endSessionDialog.js | 79 ++--
+ js/ui/keyboard.js | 48 +-
js/ui/layout.js | 14 +-
- js/ui/magnifierDBus.js | 134 +++++++----
+ js/ui/magnifierDBus.js | 134 ++++--
js/ui/main.js | 6 -
js/ui/messageTray.js | 13 +-
- js/ui/notificationDaemon.js | 193 ++++++++--------
- js/ui/scripting.js | 34 ++-
- 20 files changed, 688 insertions(+), 853 deletions(-)
+ js/ui/notificationDaemon.js | 193 ++++----
+ js/ui/scripting.js | 34 +-
+ 20 files changed, 774 insertions(+), 1034 deletions(-)
diff --git a/files/usr/share/cinnamon/applets/brightness@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/brightness@cinnamon.org/applet.js
index 9cbda80..9087b25 100644
@@ -1064,12 +1064,11 @@ index c342fe7..b6b2bcd 100644
this.menu = new Applet.AppletPopupMenu(this, orientation);
this.menuManager.addMenu(this.menu);
-
-- this.set_applet_icon_symbolic_name('battery-missing');
++
+ //this.set_applet_icon_symbolic_name('battery-missing');
- this._proxy = new PowerManagerProxy(DBus.session, BUS_NAME, OBJECT_PATH);
- this._smProxy = new SettingsManagerProxy(DBus.session, BUS_NAME, OBJECT_PATH);
-
-+
-+ //this.set_applet_icon_symbolic_name('battery-missing');
+ this._proxy = new PowerManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH);
+ this._smProxy = new SettingsManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH);
+
@@ -1080,10 +1079,10 @@ index c342fe7..b6b2bcd 100644
this._devicesChanged();
},
-- _devicesChanged: function() {
-- this.set_applet_icon_symbolic_name('battery-missing');
+- _devicesChanged: function() {
- this._proxy.GetRemote('Icon', Lang.bind(this, function(icon, error) {
- if (icon) {
+- this.set_applet_icon_symbolic_name('battery-missing');
- let gicon = Gio.icon_new_for_string(icon);
- this._applet_icon.gicon = gicon;
- this.actor.show();
@@ -1109,7 +1108,7 @@ index c342fe7..b6b2bcd 100644
this._readOtherDevices();
this._updateLabel();
diff --git a/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
-index 1113b1e..5bfaf26 100644
+index 50c4e1e..c8427ac 100644
--- a/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
+++ b/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
@@ -1,7 +1,6 @@
@@ -1120,7 +1119,7 @@ index 1113b1e..5bfaf26 100644
const Lang = imports.lang;
const Cinnamon = imports.gi.Cinnamon;
const Clutter = imports.gi.Clutter;
-@@ -12,90 +11,45 @@ const Gvc = imports.gi.Gvc;
+@@ -12,95 +11,50 @@ const Gvc = imports.gi.Gvc;
const Pango = imports.gi.Pango;
const Tooltips = imports.ui.tooltips;
@@ -1167,7 +1166,7 @@ index 1113b1e..5bfaf26 100644
- inSignature: '',
- outSignature: '' },
- { name: 'SetPosition',
-- inSignature: 'a{ov}',
+- inSignature: 'ox',
- outSignature: '' }],
- properties: [{ name: 'Metadata',
- signature: 'a{sv}',
@@ -1234,7 +1233,7 @@ index 1113b1e..5bfaf26 100644
+<property name='Metadata' access='read' type='a{sv}' />
+<property name='Shuffle' access='readwrite' type='b' />
+<property name='Rate' access='readwrite' type='d' />
-+<property name='LoopStatus' access='readwrite' type='b' />
++<property name='LoopStatus' access='readwrite' type='s' />
+<property name='Volume' access='readwrite' type='d' />
+<property name='PlaybackStatus' access='read' type='s' />
+<property name='Position' access='read' type='x' />
@@ -1250,27 +1249,28 @@ index 1113b1e..5bfaf26 100644
/* global values */
let icon_path = "/usr/share/cinnamon/theme/";
-@@ -112,120 +66,20 @@ const VOLUME_ADJUSTMENT_STEP = 0.05; /* Volume adjustment step in % */
+-let compatible_players = [ "clementine", "mpd", "exaile", "banshee", "rhythmbox", "rhythmbox3", "pragha", "quodlibet", "guayadeque", "amarok", "googlemusicframe", "xbmc", "noise", "xnoise", "gmusicbrowser", "spotify", "audacious", "vlc", "beatbox", "songbird", "pithos", "gnome-mplayer", "nuvolaplayer", "qmmp" ];
+-let support_seek = [ "clementine", "banshee", "rhythmbox", "rhythmbox3", "pragha", "quodlibet", "amarok", "noise", "xnoise", "gmusicbrowser", "spotify", "vlc", "beatbox", "gnome-mplayer", "qmmp" ];
++let compatible_players = [ "clementine", "mpd", "exaile", "banshee", "rhythmbox", "rhythmbox3", "pragha", "quodlibet", "guayadeque", "amarok", "googlemusicframe", "xbmc", "noise", "xnoise", "gmusicbrowser", "spotify", "audacious", "vlc", "beatbox", "songbird", "pithos", "gnome-mplayer", "nuvolaplayer" ];
++let support_seek = [ "clementine", "banshee", "rhythmbox", "rhythmbox3", "pragha", "quodlibet", "amarok", "noise", "xnoise", "gmusicbrowser", "spotify", "vlc", "beatbox", "gnome-mplayer" ];
+ /* dummy vars for translation */
+ let x = _("Playing");
+ x = _("Paused");
+@@ -112,131 +66,20 @@ const VOLUME_ADJUSTMENT_STEP = 0.05; /* Volume adjustment step in % */
const ICON_SIZE = 28;
-function Prop() {
- this._init.apply(this, arguments);
-+var PropProxy = Gio.DBusProxy.makeProxyWrapper(PropIFace);
-+function Prop(owner, initCallback, cancellable) {
-+ return new PropProxy(Gio.DBus.session, owner, '/org/mpris/MediaPlayer2', initCallback, cancellable);
- }
-
+-}
+-
-Prop.prototype = {
- _init: function(owner) {
- DBus.session.proxifyObject(this, owner, '/org/mpris/MediaPlayer2', this);
- }
-+var MediaServer2Proxy = Gio.DBusProxy.makeProxyWrapper(MediaServer2IFace);
-+function MediaServer2(owner, initCallback, cancellable) {
-+ return new MediaServer2Proxy(Gio.DBus.session, owner, '/org/mpris/MediaPlayer2', initCallback, cancellable);
- }
+-}
-DBus.proxifyPrototype(Prop.prototype, PropIFace)
-
+-
-function MediaServer2() {
- this._init.apply(this, arguments);
-}
@@ -1293,13 +1293,19 @@ index 1113b1e..5bfaf26 100644
- callback(this, quit);
- }));
- }
--}
++var PropProxy = Gio.DBusProxy.makeProxyWrapper(PropIFace);
++function Prop(owner, initCallback, cancellable) {
++ return new PropProxy(Gio.DBus.session, owner, '/org/mpris/MediaPlayer2', initCallback, cancellable);
+ }
-DBus.proxifyPrototype(MediaServer2.prototype, MediaServer2IFace)
--
+
-function MediaServer2Player() {
- this._init.apply(this, arguments);
--}
--
++var MediaServer2Proxy = Gio.DBusProxy.makeProxyWrapper(MediaServer2IFace);
++function MediaServer2(owner, initCallback, cancellable) {
++ return new MediaServer2Proxy(Gio.DBus.session, owner, '/org/mpris/MediaPlayer2', initCallback, cancellable);
+ }
+
-MediaServer2Player.prototype = {
- _init: function(owner) {
- this._owner = owner;
@@ -1333,6 +1339,9 @@ index 1113b1e..5bfaf26 100644
- callback(this, position);
- }));
- },
+- setPosition: function(value) {
+- this.SetRemote('Position', value);
+- },
- getShuffle: function(callback) {
- this.GetRemote('Shuffle', Lang.bind(this,
- function(shuffle, ex) {
@@ -1371,6 +1380,14 @@ index 1113b1e..5bfaf26 100644
- else
- value = "None"
- this.SetRemote('LoopStatus', value);
+- },
+- getCanSeek: function(callback) {
+- this.GetRemote('CanSeek', Lang.bind(this,
+- function(canSeek, err) {
+- if (!err) {
+- callback(this, canSeek);
+- }
+- }));
- }
+var MediaServer2PlayerProxy = Gio.DBusProxy.makeProxyWrapper(MediaServer2PlayerIFace);
+function MediaServer2Player(owner, initCallback, cancellable) {
@@ -1380,15 +1397,427 @@ index 1113b1e..5bfaf26 100644
function TrackInfo() {
this._init.apply(this, arguments);
-@@ -715,7 +569,7 @@ MyApplet.prototype = {
+@@ -355,7 +198,6 @@ Player.prototype = {
+ _init: function(system_status_button, owner) {
+ PopupMenu.PopupMenuSection.prototype._init.call(this);
+
+- this.showPosition = true; // @todo: Get from settings
+ this._owner = owner;
+ this._system_status_button = system_status_button;
+ this._name = this._owner.split('.')[3];
+@@ -389,7 +231,7 @@ Player.prototype = {
+ this.infos_top.add_actor(this._artist.getActor());
+ this.infos_bottom.add_actor(this._album.getActor());
+ this.infos_top.add_actor(this._title.getActor());
+-
++ this.infos_bottom.add_actor(this._time.getActor());
+ this._trackInfosTop.set_child(this.infos_top);
+ this._trackInfosBottom.set_child(this.infos_bottom);
+
+@@ -414,90 +256,39 @@ Player.prototype = {
+ this._trackControls.set_child(this.controls);
+ this.addActor(this._trackControls);
+
+- this._seekControls = new St.Bin({style_class: 'sound-seek', x_align: St.Align.START});
+- this.seekControls = new St.BoxLayout({style_class: 'sound-seek-box'});
+- this.seekControls.add_actor(this._time.getActor());
+-
+- this._positionSlider = new PopupMenu.PopupSliderMenuItem(0);
+- this._positionSlider.connect('value-changed', Lang.bind(this, function(item) {
+- let time = item._value * this._songLength;
+- this._time.setLabel(this._formatTime(time) + " / " + this._formatTime(this._songLength));
+- }));
+- this._positionSlider.connect('drag-end', Lang.bind(this, function(item) {
+- let time = item._value * this._songLength;
+- this._time.setLabel(this._formatTime(time) + " / " + this._formatTime(this._songLength));
+- this._wantedSeekValue = Math.round(time * 1000000);
+- this._mediaServerPlayer.SetPositionRemote(this._trackObj, time * 1000000);
+- }));
+-
+- this.sliderBin = new St.Bin({style_class: 'sound-seek-slider'});
+- this.sliderBin.set_child(this._positionSlider.actor);
+- this.seekControls.add_actor(this.sliderBin);
+- this._seekControls.set_child(this.seekControls);
+- this.addActor(this._seekControls);
+-
+- this._mediaServer.getRaise(Lang.bind(this, function(sender, raise) {
+- if (raise) {
+- this._raiseButton = new ControlButton('go-up',
+- Lang.bind(this, function () { this._mediaServer.RaiseRemote(); this._system_status_button.menu.actor.hide(); }));
+- this._raiseButtonTooltip = new Tooltips.Tooltip(this._raiseButton.button, _("Open Player"));
+- this.controls.add_actor(this._raiseButton.getActor());
+- }
+- }));
+-
+- this._mediaServer.getQuit(Lang.bind(this, function(sender, quit) {
+- if (quit) {
+- this._quitButton = new ControlButton('window-close',
+- Lang.bind(this, function () { this._mediaServer.QuitRemote(); }));
+- this.controls.add_actor(this._quitButton.getActor());
+- this._quitButtonTooltip = new Tooltips.Tooltip(this._quitButton.button, _("Quit Player"));
+- }
+- }));
++ let CanRaise = this._mediaServer.CanRaise;
++ let CanQuit = this._mediaServer.CanQuit;
++ if (CanRaise) {
++ this._raiseButton = new ControlButton('go-up',
++ Lang.bind(this, function () { this._mediaServer.RaiseRemote(); this._system_status_button.menu.actor.hide(); }));
++ this._raiseButtonTooltip = new Tooltips.Tooltip(this._raiseButton.button, _("Open Player"));
++ this.controls.add_actor(this._raiseButton.getActor());
++ }
++ if (CanQuit) {
++ this._quitButton = new ControlButton('window-close',
++ Lang.bind(this, function () { this._mediaServer.QuitRemote(); }));
++ this.controls.add_actor(this._quitButton.getActor());
++ this._quitButtonTooltip = new Tooltips.Tooltip(this._quitButton.button, _("Quit Player"));
++ }
+
+ /* this players don't support seek */
+- if (support_seek.indexOf(this._name) == -1) {
++ if (support_seek.indexOf(this._name) == -1)
+ this._time.hide();
+- this.showPosition = false;
+- this._positionSlider.hide();
+- }
+ this._getStatus();
+ this._trackId = {};
+ this._getMetadata();
+ this._currentTime = 0;
+ this._getPosition();
+- this._wantedSeekValue = 0;
+- this._updatePositionSlider();
+
+- this._prop.connect('PropertiesChanged', Lang.bind(this, function(sender, iface, value) {
++ this._prop.connectSignal('PropertiesChanged', Lang.bind(this, function(sender, iface, value) {
+ if (value["PlaybackStatus"])
+- this._setStatus(iface, value["PlaybackStatus"]);
++ this._setStatus(value["PlaybackStatus"]);
+ if (value["Metadata"])
+- this._setMetadata(iface, value["Metadata"]);
+- //qmmp
+- if(sender._dbusBusName == 'org.mpris.MediaPlayer2.qmmp') {
+- if (value["playbackStatus"])
+- this._setStatus(iface, value["playbackStatus"]);
+- if (value["metadata"])
+- this._setMetadata(sender, value["metadata"]);
+- }
++ this._setMetadata(value["Metadata"]);
+ }));
+
+- this._mediaServerPlayer.connect('Seeked', Lang.bind(this, function(sender, value) {
+- if (value > 0) {
+- this._setPosition(value);
+- }
+- // Seek initiated by the position slider
+- else if (this._wantedSeekValue > 0) {
+- // Some broken gstreamer players (Banshee) reports always 0
+- // when the track is seeked so we set the position at the
+- // value we set on the slider
+- this._setPosition(this._wantedSeekValue);
+- }
+- // Seek value send by the player
+- else
+- this._setPosition(value);
+-
+- this._wantedSeekValue = 0;
++ this._mediaServerPlayer.connectSignal('Seeked', Lang.bind(this, function(sender, iface, [value]) {
++ this._setPosition(sender, value);
+ }));
+
+ Mainloop.timeout_add(1000, Lang.bind(this, this._getPosition));
+@@ -512,45 +303,26 @@ Player.prototype = {
+ this._playerInfo.setText(this._getName() + " - " + _(status));
+ },
+
+- _updatePositionSlider: function(position) {
+- this._mediaServerPlayer.getCanSeek(Lang.bind(this, function(sender, canSeek) {
+- this._canSeek = canSeek;
+-
+- if (this._songLength == 0 || position == false)
+- this._canSeek = false
+-
+- // Clem: The following code was commented out. When the next song started, it resulted in hiding the sound menu, making it hard for the user to repeatedly click on the next song button.
+- // There's probably a better fix and this was not tested with players which don't support seeking, but it fixes the regression created by the slider (apparently when the slider is hidden it closes the menu)
+- // if (this._playerStatus == "Playing" && this._canSeek && this.showPosition)
+- // this._positionSlider.actor.show();
+- // else
+- // this._positionSlider.actor.hide();
+- }));
+- },
+-
+- _setPosition: function(value) {
+- if (value == null && this._playerStatus != 'Stopped') {
+- this._updatePositionSlider(false);
+- }
+- else {
+- this._currentTime = value / 1000000;
+- this._updateTimer();
+- }
++ _setPosition: function(sender, value) {
++ this._stopTimer();
++ this._currentTime = value / 1000000;
++ this._updateTimer();
++ if (this._playerStatus == "Playing")
++ this._runTimer();
+ },
+
+ _getPosition: function() {
+- this._mediaServerPlayer.getPosition(Lang.bind(this, function(sender, value) {
+- this._setPosition(value);
+- }));
++ this._setPosition(this._mediaServerPlayer.Position);
++ Mainloop.timeout_add(1000, Lang.bind(this, this._getPosition));
+ },
+
+- _setMetadata: function(sender, metadata) {
++ _setMetadata: function(metadata) {
+ if (metadata["mpris:length"]) {
+ // song length in secs
+- this._songLength = metadata["mpris:length"] / 1000000;
++ this._songLength = metadata["mpris:length"].unpack() / 1000000;
+ // FIXME upstream
+ if (this._name == "quodlibet")
+- this._songLength = metadata["mpris:length"] / 1000;
++ this._songLength = metadata["mpris:length"].unpack() / 1000;
+ // reset timer
+ this._stopTimer();
+ if (this._playerStatus == "Playing")
+@@ -559,26 +333,29 @@ Player.prototype = {
+ this._stopTimer();
+ }
+ if (metadata["xesam:artist"])
+- this._artist.setLabel(metadata["xesam:artist"].toString());
++ this._artist.setLabel(metadata["xesam:artist"].unpack());
+ else
+ this._artist.setLabel(_("Unknown Artist"));
+ if (metadata["xesam:album"])
+- this._album.setLabel(metadata["xesam:album"].toString());
++ this._album.setLabel(metadata["xesam:album"].unpack());
+ else
+ this._album.setLabel(_("Unknown Album"));
+ if (metadata["xesam:title"])
+- this._title.setLabel(metadata["xesam:title"].toString());
++ this._title.setLabel(metadata["xesam:title"].unpack());
+ else
+ this._title.setLabel(_("Unknown Title"));
+-
+- if (metadata["mpris:trackid"]) {
+- this._trackObj = metadata["mpris:trackid"];
+- }
++ /*if (metadata["mpris:trackid"]) {
++ this._trackId = {
++ _init: function() {
++ DBus.session.proxifyObject(this, this._owner, metadata["mpris:trackid"]);
++ }
++ }
++ }*/
+
+ let change = false;
+ if (metadata["mpris:artUrl"]) {
+- if (this._trackCoverFile != metadata["mpris:artUrl"].toString()) {
+- this._trackCoverFile = metadata["mpris:artUrl"].toString();
++ if (this._trackCoverFile != metadata["mpris:artUrl"].unpack()) {
++ this._trackCoverFile = metadata["mpris:artUrl"].unpack();
+ change = true;
+ }
+ }
+@@ -600,8 +377,7 @@ Player.prototype = {
+ cover.read_async(null, null, Lang.bind(this, this._onReadCover));
+ }
+ else {
+- cover_path = decodeURIComponent(this._trackCoverFile);
+- cover_path = cover_path.replace("file://", "");
++ cover_path = decodeURIComponent(this._trackCoverFile.substr(7));
+ this._showCover(cover_path);
+ }
+ }
+@@ -611,13 +387,10 @@ Player.prototype = {
+ },
+
+ _getMetadata: function() {
+- this._mediaServerPlayer.getMetadata(Lang.bind(this,
+- this._setMetadata
+- ));
++ this._setMetadata(this._mediaServerPlayer.Metadata);
+ },
+
+- _setStatus: function(sender, status) {
+- this._updatePositionSlider();
++ _setStatus: function(status) {
+ this._playerStatus = status;
+ if (status == "Playing") {
+ this._playButton.setIcon("media-playback-pause");
+@@ -631,53 +404,39 @@ Player.prototype = {
+ this._playButton.setIcon("media-playback-start");
+ this._stopTimer();
+ }
+-
+ this._playerInfo.setImage("player-" + status.toLowerCase());
+ this._setName(status);
+ },
+
+ _getStatus: function() {
+- this._mediaServerPlayer.getPlaybackStatus(Lang.bind(this,
+- this._setStatus
+- ));
++ this._setStatus(this._mediaServerPlayer.PlaybackStatus);
+ },
+
+ _updateRate: function() {
+- this._mediaServerPlayer.getRate(Lang.bind(this, function(sender, rate) {
+- this._rate = rate;
+- }));
++ this._rate = this._mediaServerPlayer.Rate;
+ },
+
+ _updateTimer: function() {
+- if (this.showPosition && this._canSeek) {
+- if (!isNaN(this._currentTime) && !isNaN(this._songLength) && this._currentTime > 0)
+- this._positionSlider.setValue(this._currentTime / this._songLength);
+- else
+- this._positionSlider.setValue(0);
+- }
+ this._time.setLabel(this._formatTime(this._currentTime) + " / " + this._formatTime(this._songLength));
+ },
+
+ _runTimer: function() {
+- if (this._playerStatus == 'Playing') {
+- this._timeoutId = Mainloop.timeout_add_seconds(1, Lang.bind(this, this._runTimer));
+- this._currentTime += 1;
+- this._updateTimer();
+- }
++ /*if (!Tweener.resumeTweens(this)) {
++ Tweener.addTween(this,
++ { time: this._songLength - this._currentTime,
++ transition: 'linear',
++ onUpdate: Lang.bind(this, this._updateTimer) });
++ }*/
+ },
+
+ _pauseTimer: function() {
+- if (this._timeoutId != 0) {
+- Mainloop.source_remove(this._timeoutId);
+- this._timeoutId = 0;
+- }
+- this._updateTimer();
++ //Tweener.pauseTweens(this);
+ },
+
+ _stopTimer: function() {
++ /*Tweener.removeTweens(this);
+ this._currentTime = 0;
+- this._pauseTimer();
+- this._updateTimer();
++ this._updateTimer();*/
+ },
+
+ _formatTime: function(s) {
+@@ -771,7 +530,7 @@ MediaPlayerLauncher.prototype = {
+ },
+
+ activate: function (event) {
+- this._menu.actor.hide();
++ this._menu.actor.hide();
+ this._app.activate_full(-1, event.get_time());
+ return true;
+ }
+@@ -799,7 +558,7 @@ MyApplet.prototype = {
this._players = {};
// watch players
for (var p=0; p<compatible_players.length; p++) {
- DBus.session.watch_name('org.mpris.MediaPlayer2.'+compatible_players[p], false,
-+ Gio.DBus.session.watch_name('org.mpris.MediaPlayer2.'+compatible_players[p], false,
++ Gio.DBus.session.watch_name('org.mpris.MediaPlayer2.'+compatible_players[p], Gio.BusNameWatcherFlags.NONE,
Lang.bind(this, this._addPlayer),
Lang.bind(this, this._removePlayer)
);
+@@ -930,7 +689,7 @@ MyApplet.prototype = {
+ return Object.keys(this._players).length;
+ },
+
+- _addPlayer: function(owner) {
++ _addPlayer: function(connection, owner) {
+ // ensure menu is empty
+ this._cleanup();
+ this._volumeControlShown = false;
+@@ -945,12 +704,12 @@ MyApplet.prototype = {
+ this._readOutput();
+ },
+
+- _removePlayer: function(owner) {
++ _removePlayer: function(connection, owner) {
+ delete this._players[owner];
+ this._cleanup();
+ this._volumeControlShown = false;
+ for (owner in this._players) {
+- this._addPlayer(owner);
++ this._addPlayer(connection, owner);
+ }
+ this.menu.emit('players-loaded', true);
+
+@@ -974,21 +733,21 @@ MyApplet.prototype = {
+ this._volumeControlShown = true;
+
+ if (this._nbPlayers()==0){
+- this._availablePlayers = new Array();
++ this._availablePlayers = new Array();
+ let appsys = Cinnamon.AppSystem.get_default();
+ let allApps = appsys.get_all();
+ let listedDesktopFiles = new Array();
+ for (let y=0; y<allApps.length; y++) {
+- let app = allApps[y];
+- let entry = app.get_tree_entry();
+- let path = entry.get_desktop_file_path();
+- for (var p=0; p<compatible_players.length; p++) {
++ let app = allApps[y];
++ let entry = app.get_tree_entry();
++ let path = entry.get_desktop_file_path();
++ for (var p=0; p<compatible_players.length; p++) {
+ let desktopFile = compatible_players[p]+".desktop";
+- if (path.indexOf(desktopFile) != -1 && listedDesktopFiles.indexOf(desktopFile) == -1) {
+- this._availablePlayers.push(app);
++ if (path.indexOf(desktopFile) != -1 && listedDesktopFiles.indexOf(desktopFile) == -1) {
++ this._availablePlayers.push(app);
+ listedDesktopFiles.push(desktopFile);
+- }
+- }
++ }
++ }
+ }
+
+ if (this._availablePlayers.length > 0){
+@@ -1137,19 +896,19 @@ MyApplet.prototype = {
+ this._mutedChanged (null, null, '_output');
+ this._volumeChanged (null, null, '_output');
+ let sinks = this._control.get_sinks();
+- this._selectDeviceItem.menu.removeAll();
+- for (let i = 0; i < sinks.length; i++) {
+- let sink = sinks[i];
+- let menuItem = new PopupMenu.PopupMenuItem(sink.get_description());
+- if (sinks[i].get_id() == this._output.get_id()) {
+- menuItem.setShowDot(true);
+- }
+- menuItem.connect('activate', Lang.bind(this, function() {
+- log('Changing default sink to ' + sink.get_description());
+- this._control.set_default_sink(sink);
+- }));
+- this._selectDeviceItem.menu.addMenuItem(menuItem);
+- }
++ this._selectDeviceItem.menu.removeAll();
++ for (let i = 0; i < sinks.length; i++) {
++ let sink = sinks[i];
++ let menuItem = new PopupMenu.PopupMenuItem(sink.get_description());
++ if (sinks[i].get_id() == this._output.get_id()) {
++ menuItem.setShowDot(true);
++ }
++ menuItem.connect('activate', Lang.bind(this, function() {
++ log('Changing default sink to ' + sink.get_description());
++ this._control.set_default_sink(sink);
++ }));
++ this._selectDeviceItem.menu.addMenuItem(menuItem);
++ }
+ } else {
+ this._outputSlider.setValue(0);
+ this.setIconName('audio-volume-muted-symbolic');
diff --git a/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/applet.js
index 0dcf74d..c2d152a 100644
--- a/files/usr/share/cinnamon/applets/xrandr@cinnamon.org/applet.js
@@ -2512,7 +2941,7 @@ index f55cf93..69edb51 100644
function KeyboardSource() {
this._init.apply(this, arguments);
diff --git a/js/ui/layout.js b/js/ui/layout.js
-index 76303b9..b97459e 100644
+index 3446e7a..7523b6f 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -488,12 +488,14 @@ Chrome.prototype = {
@@ -2721,14 +3150,14 @@ index 72bba26..4d21797 100644
-DBus.conformExport(CinnamonMagnifier.prototype, MagnifierIface);
-DBus.conformExport(CinnamonMagnifierZoomRegion.prototype, ZoomRegionIface);
diff --git a/js/ui/main.js b/js/ui/main.js
-index 5cae372..180db5c 100644
+index 99aee95..b602915 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
--const DBus = imports.dbus;
+-const DBus= imports.dbus;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
@@ -3112,15 +3541,14 @@ index 42c4f6d..9163d29 100644
1.8.1.6
-From d85e078c0ed09a8b9f8d3ea2ebec1043b6d150c1 Mon Sep 17 00:00:00 2001
+From 135d2228bbf6d3b1be5f90e0e599cd3880e06d93 Mon Sep 17 00:00:00 2001
From: dalcde <dalcde@yahoo.com.hk>
Date: Tue, 16 Apr 2013 16:58:30 +0800
-Subject: [PATCH 07/15] [GDBus][Sound/Power Applet] Fix dbus port issues
+Subject: [PATCH 07/16] [GDBus][Sound/Power Applet] Fix dbus port issues
---
- .../cinnamon/applets/power@cinnamon.org/applet.js | 2 +-
- .../cinnamon/applets/sound@cinnamon.org/applet.js | 83 ++++++++++------------
- 2 files changed, 37 insertions(+), 48 deletions(-)
+ files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js
index b6b2bcd..fad39ab 100644
@@ -3135,204 +3563,14 @@ index b6b2bcd..fad39ab 100644
this._devicesChanged();
}
catch (e) {
-diff --git a/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
-index 5bfaf26..52b8cde 100644
---- a/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
-+++ b/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
-@@ -37,7 +37,7 @@ const MediaServer2PlayerIFace = <interface name="org.mpris.MediaPlayer2.Player">
- <property name='Metadata' access='read' type='a{sv}' />
- <property name='Shuffle' access='readwrite' type='b' />
- <property name='Rate' access='readwrite' type='d' />
--<property name='LoopStatus' access='readwrite' type='b' />
-+<property name='LoopStatus' access='readwrite' type='s' />
- <property name='Volume' access='readwrite' type='d' />
- <property name='PlaybackStatus' access='read' type='s' />
- <property name='Position' access='read' type='x' />
-@@ -256,23 +256,20 @@ Player.prototype = {
- this._trackControls.set_child(this.controls);
- this.addActor(this._trackControls);
-
-- this._mediaServer.getRaise(Lang.bind(this, function(sender, raise) {
-- if (raise) {
-- this._raiseButton = new ControlButton('go-up',
-- Lang.bind(this, function () { this._mediaServer.RaiseRemote(); this._system_status_button.menu.actor.hide(); }));
-- this._raiseButtonTooltip = new Tooltips.Tooltip(this._raiseButton.button, _("Open Player"));
-- this.controls.add_actor(this._raiseButton.getActor());
-- }
-- }));
--
-- this._mediaServer.getQuit(Lang.bind(this, function(sender, quit) {
-- if (quit) {
-- this._quitButton = new ControlButton('window-close',
-- Lang.bind(this, function () { this._mediaServer.QuitRemote(); }));
-- this.controls.add_actor(this._quitButton.getActor());
-- this._quitButtonTooltip = new Tooltips.Tooltip(this._quitButton.button, _("Quit Player"));
-- }
-- }));
-+ let CanRaise = this._mediaServer.CanRaise;
-+ let CanQuit = this._mediaServer.CanQuit;
-+ if (CanRaise) {
-+ this._raiseButton = new ControlButton('go-up',
-+ Lang.bind(this, function () { this._mediaServer.RaiseRemote(); this._system_status_button.menu.actor.hide(); }));
-+ this._raiseButtonTooltip = new Tooltips.Tooltip(this._raiseButton.button, _("Open Player"));
-+ this.controls.add_actor(this._raiseButton.getActor());
-+ }
-+ if (CanQuit) {
-+ this._quitButton = new ControlButton('window-close',
-+ Lang.bind(this, function () { this._mediaServer.QuitRemote(); }));
-+ this.controls.add_actor(this._quitButton.getActor());
-+ this._quitButtonTooltip = new Tooltips.Tooltip(this._quitButton.button, _("Quit Player"));
-+ }
-
- /* this players don't support seek */
- if (support_seek.indexOf(this._name) == -1)
-@@ -283,14 +280,14 @@ Player.prototype = {
- this._currentTime = 0;
- this._getPosition();
-
-- this._prop.connect('PropertiesChanged', Lang.bind(this, function(sender, iface, value) {
-+ this._prop.connectSignal('PropertiesChanged', Lang.bind(this, function(sender, iface, value) {
- if (value["PlaybackStatus"])
-- this._setStatus(iface, value["PlaybackStatus"]);
-+ this._setStatus(value["PlaybackStatus"]);
- if (value["Metadata"])
-- this._setMetadata(iface, value["Metadata"]);
-+ this._setMetadata(value["Metadata"]);
- }));
-
-- this._mediaServerPlayer.connect('Seeked', Lang.bind(this, function(sender, value) {
-+ this._mediaServerPlayer.connectSignal('Seeked', Lang.bind(this, function(sender, iface, [value]) {
- this._setPosition(sender, value);
- }));
-
-@@ -315,19 +312,17 @@ Player.prototype = {
- },
-
- _getPosition: function() {
-- this._mediaServerPlayer.getPosition(Lang.bind(this,
-- this._setPosition
-- ));
-+ this._setPosition(this._mediaServerPlayer.Position);
- Mainloop.timeout_add(1000, Lang.bind(this, this._getPosition));
- },
-
-- _setMetadata: function(sender, metadata) {
-+ _setMetadata: function(metadata) {
- if (metadata["mpris:length"]) {
- // song length in secs
-- this._songLength = metadata["mpris:length"] / 1000000;
-+ this._songLength = metadata["mpris:length"].unpack() / 1000000;
- // FIXME upstream
- if (this._name == "quodlibet")
-- this._songLength = metadata["mpris:length"] / 1000;
-+ this._songLength = metadata["mpris:length"].unpack() / 1000;
- // reset timer
- this._stopTimer();
- if (this._playerStatus == "Playing")
-@@ -338,15 +333,15 @@ Player.prototype = {
- this._stopTimer();
- }
- if (metadata["xesam:artist"])
-- this._artist.setLabel(metadata["xesam:artist"].toString());
-+ this._artist.setLabel(metadata["xesam:artist"].unpack());
- else
- this._artist.setLabel(_("Unknown Artist"));
- if (metadata["xesam:album"])
-- this._album.setLabel(metadata["xesam:album"].toString());
-+ this._album.setLabel(metadata["xesam:album"].unpack());
- else
- this._album.setLabel(_("Unknown Album"));
- if (metadata["xesam:title"])
-- this._title.setLabel(metadata["xesam:title"].toString());
-+ this._title.setLabel(metadata["xesam:title"].unpack());
- else
- this._title.setLabel(_("Unknown Title"));
- /*if (metadata["mpris:trackid"]) {
-@@ -359,8 +354,8 @@ Player.prototype = {
-
- let change = false;
- if (metadata["mpris:artUrl"]) {
-- if (this._trackCoverFile != metadata["mpris:artUrl"].toString()) {
-- this._trackCoverFile = metadata["mpris:artUrl"].toString();
-+ if (this._trackCoverFile != metadata["mpris:artUrl"].unpack()) {
-+ this._trackCoverFile = metadata["mpris:artUrl"].unpack();
- change = true;
- }
- }
-@@ -392,12 +387,10 @@ Player.prototype = {
- },
-
- _getMetadata: function() {
-- this._mediaServerPlayer.getMetadata(Lang.bind(this,
-- this._setMetadata
-- ));
-+ this._setMetadata(this._mediaServerPlayer.Metadata);
- },
-
-- _setStatus: function(sender, status) {
-+ _setStatus: function(status) {
- this._playerStatus = status;
- if (status == "Playing") {
- this._playButton.setIcon("media-playback-pause");
-@@ -416,15 +409,11 @@ Player.prototype = {
- },
-
- _getStatus: function() {
-- this._mediaServerPlayer.getPlaybackStatus(Lang.bind(this,
-- this._setStatus
-- ));
-+ this._setStatus(this._mediaServerPlayer.PlaybackStatus);
- },
-
- _updateRate: function() {
-- this._mediaServerPlayer.getRate(Lang.bind(this, function(sender, rate) {
-- this._rate = rate;
-- }));
-+ this._rate = this._mediaServerPlayer.Rate;
- },
-
- _updateTimer: function() {
-@@ -569,7 +558,7 @@ MyApplet.prototype = {
- this._players = {};
- // watch players
- for (var p=0; p<compatible_players.length; p++) {
-- Gio.DBus.session.watch_name('org.mpris.MediaPlayer2.'+compatible_players[p], false,
-+ Gio.DBus.session.watch_name('org.mpris.MediaPlayer2.'+compatible_players[p], Gio.BusNameWatcherFlags.NONE,
- Lang.bind(this, this._addPlayer),
- Lang.bind(this, this._removePlayer)
- );
-@@ -700,7 +689,7 @@ MyApplet.prototype = {
- return Object.keys(this._players).length;
- },
-
-- _addPlayer: function(owner) {
-+ _addPlayer: function(connection, owner) {
- // ensure menu is empty
- this._cleanup();
- this._volumeControlShown = false;
-@@ -715,12 +704,12 @@ MyApplet.prototype = {
- this._readOutput();
- },
-
-- _removePlayer: function(owner) {
-+ _removePlayer: function(connection, owner) {
- delete this._players[owner];
- this._cleanup();
- this._volumeControlShown = false;
- for (owner in this._players) {
-- this._addPlayer(owner);
-+ this._addPlayer(connection, owner);
- }
- this.menu.emit('players-loaded', true);
-
--
1.8.1.6
-From 02da490ff9d33b050e7a10171b5795aee67d1645 Mon Sep 17 00:00:00 2001
+From 5880ce34538ec2791b5e58cc3ffc07e41c189c82 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Fri, 19 Apr 2013 19:09:18 -0400
-Subject: [PATCH 08/15] Fix gicon error - power applet
+Subject: [PATCH 08/16] Fix gicon error - power applet
---
files/usr/share/cinnamon/applets/power@cinnamon.org/applet.js | 2 +-
@@ -3355,10 +3593,10 @@ index fad39ab..3a13eab 100644
1.8.1.6
-From 3d78b5c929e7e3b0ee24d4b537492740e7bebf2f Mon Sep 17 00:00:00 2001
+From 647bd58c93541acdba11cd11d586d2cb08a0a4eb Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Fri, 19 Apr 2013 19:44:33 -0400
-Subject: [PATCH 09/15] Remove unused
+Subject: [PATCH 09/16] Remove unused
---
src/cinnamon-background-manager.c | 34 ----------------------------------
@@ -3427,10 +3665,10 @@ index 9d95250..67427ed 100644
1.8.1.6
-From d08b882470b135591fb99bd9ff7c63619fcaea82 Mon Sep 17 00:00:00 2001
+From 7a8233638187d00798cf3a4b66a27d707eaec804 Mon Sep 17 00:00:00 2001
From: dalcde <dalcde@yahoo.com.hk>
Date: Sat, 20 Apr 2013 15:42:13 +0800
-Subject: [PATCH 10/15] [GDBus][Power applet] Some fixes and cleanup
+Subject: [PATCH 10/16] [GDBus][Power applet] Some fixes and cleanup
---
.../cinnamon/applets/power@cinnamon.org/applet.js | 52 ++++++----------------
@@ -3549,10 +3787,10 @@ index 3a13eab..5f81d91 100644
1.8.1.6
-From c93e9746b321ad6d0aa38ec28c15fe7b3f18f8f7 Mon Sep 17 00:00:00 2001
+From 1a74c4a4d010a6ddcd2350b1ea298710bc1c08b1 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Sat, 20 Apr 2013 10:59:54 -0400
-Subject: [PATCH 11/15] Move CLUTTER_DISABLE_XINPUT to session startup file
+Subject: [PATCH 11/16] Move CLUTTER_DISABLE_XINPUT to session startup file
---
files/usr/bin/gnome-session-cinnamon | 2 +-
@@ -3586,10 +3824,10 @@ index 9d37975..418fb60 100644
1.8.1.6
-From de1719e63518884cad6c9d63d508f737eab35d49 Mon Sep 17 00:00:00 2001
+From dfa107fd874866da2f634c65a90e2c13a447464c Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Sat, 20 Apr 2013 12:23:29 -0400
-Subject: [PATCH 12/15] Add Xinput disable to cinnamon2d
+Subject: [PATCH 12/16] Add Xinput disable to cinnamon2d
---
files/usr/bin/cinnamon2d | 2 +-
@@ -3607,10 +3845,10 @@ index 1eced99..7f42517 100755
1.8.1.6
-From 15d57d1c15f34d44b23f74b21929d996d4465afb Mon Sep 17 00:00:00 2001
+From 28b39b2372a571ddcc1298f34f2d7e653f6b2e96 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Sat, 20 Apr 2013 12:29:43 -0400
-Subject: [PATCH 13/15] Fix session file
+Subject: [PATCH 13/16] Fix session file
---
files/usr/bin/gnome-session-cinnamon | 2 +-
@@ -3629,10 +3867,10 @@ index 56c37f5..31c9eff 100755
1.8.1.6
-From 03436393c322fd97d8216c3481d28cd34833c656 Mon Sep 17 00:00:00 2001
+From aba3a7666d3679e5803862af07edc47e7b093b11 Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Sat, 20 Apr 2013 12:36:45 -0400
-Subject: [PATCH 14/15] Add cinnamon3d command
+Subject: [PATCH 14/16] Add cinnamon3d command
---
files/usr/bin/cinnamon3d | 2 ++
@@ -3651,10 +3889,10 @@ index 0000000..4891783
1.8.1.6
-From 850da270967622b95be9e0c5edd8e230eb4be5a1 Mon Sep 17 00:00:00 2001
+From 3e1cdf6d88ade9abe5a0b8773b565d345c01f2cb Mon Sep 17 00:00:00 2001
From: Michael Webster <miketwebster@gmail.com>
Date: Sat, 20 Apr 2013 12:37:26 -0400
-Subject: [PATCH 15/15] Fix perms
+Subject: [PATCH 15/16] Fix perms
---
files/usr/bin/cinnamon3d | 0
@@ -3667,3 +3905,58 @@ new mode 100755
--
1.8.1.6
+
+From 7904eaf179918f4f97b328f2b5f340776544ca49 Mon Sep 17 00:00:00 2001
+From: Michael Webster <miketwebster@gmail.com>
+Date: Mon, 22 Apr 2013 18:27:39 -0400
+Subject: [PATCH 16/16] Sledgehammer merge of:
+
+f251f0b77d01cb9a80212b1dce2538c60a5bf59e
+
+Don't ask...
+---
+ .../share/cinnamon/applets/sound@cinnamon.org/applet.js | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js b/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
+index c8427ac..a7b2e09 100644
+--- a/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
++++ b/files/usr/share/cinnamon/applets/sound@cinnamon.org/applet.js
+@@ -53,8 +53,8 @@ const MediaServer2PlayerIFace = <interface name="org.mpris.MediaPlayer2.Player">
+
+ /* global values */
+ let icon_path = "/usr/share/cinnamon/theme/";
+-let compatible_players = [ "clementine", "mpd", "exaile", "banshee", "rhythmbox", "rhythmbox3", "pragha", "quodlibet", "guayadeque", "amarok", "googlemusicframe", "xbmc", "noise", "xnoise", "gmusicbrowser", "spotify", "audacious", "vlc", "beatbox", "songbird", "pithos", "gnome-mplayer", "nuvolaplayer" ];
+-let support_seek = [ "clementine", "banshee", "rhythmbox", "rhythmbox3", "pragha", "quodlibet", "amarok", "noise", "xnoise", "gmusicbrowser", "spotify", "vlc", "beatbox", "gnome-mplayer" ];
++let compatible_players = [ "clementine", "mpd", "exaile", "banshee", "rhythmbox", "rhythmbox3", "pragha", "quodlibet", "guayadeque", "amarok", "googlemusicframe", "xbmc", "noise", "xnoise", "gmusicbrowser", "spotify", "audacious", "vlc", "beatbox", "songbird", "pithos", "gnome-mplayer", "nuvolaplayer", "qmmp"];
++let support_seek = [ "clementine", "banshee", "rhythmbox", "rhythmbox3", "pragha", "quodlibet", "amarok", "noise", "xnoise", "gmusicbrowser", "spotify", "vlc", "beatbox", "gnome-mplayer", "qmmp" ];
+ /* dummy vars for translation */
+ let x = _("Playing");
+ x = _("Paused");
+@@ -285,6 +285,13 @@ Player.prototype = {
+ this._setStatus(value["PlaybackStatus"]);
+ if (value["Metadata"])
+ this._setMetadata(value["Metadata"]);
++ // qmmp
++ if (sender._dbusBusName == 'org.mpris.MediaPlayer2.qmmp') {
++ if (value["playbackStatus"])
++ this._setStatus(value["playbackStatus"]);
++ if (value["metadata"])
++ this._setMetadata(value["metadata"]);
++ }
+ }));
+
+ this._mediaServerPlayer.connectSignal('Seeked', Lang.bind(this, function(sender, iface, [value]) {
+@@ -377,7 +384,8 @@ Player.prototype = {
+ cover.read_async(null, null, Lang.bind(this, this._onReadCover));
+ }
+ else {
+- cover_path = decodeURIComponent(this._trackCoverFile.substr(7));
++ cover_path = decodeURIComponent(this._trackCoverFile;
++ cover_path = cover_path.replace("file://", "");
+ this._showCover(cover_path);
+ }
+ }
+--
+1.8.1.6
+
diff --git a/community/cinnamon/switch-applications.patch b/community/cinnamon/switch-applications.patch
index ce2e31825..1254a7ce4 100644
--- a/community/cinnamon/switch-applications.patch
+++ b/community/cinnamon/switch-applications.patch
@@ -12,30 +12,6 @@ diff -Naur linuxmint-Cinnamon-b41bad0.orig/files/usr/lib/cinnamon-settings/modul
[_("Run dialog (must restart Cinnamon)"), "org.gnome.desktop.wm.keybindings", "panel-run-dialog", True, "cinnamon"],
[_("Menu button (must restart Cinnamon)"), "org.cinnamon.muffin", "overlay-key", False, "cinnamon"],
-diff -Naur linuxmint-Cinnamon-b41bad0.orig/js/ui/altTab.js linuxmint-Cinnamon-b41bad0/js/ui/altTab.js
---- linuxmint-Cinnamon-b41bad0.orig/js/ui/altTab.js 2013-04-15 15:55:01.000000000 +0200
-+++ linuxmint-Cinnamon-b41bad0/js/ui/altTab.js 2013-04-24 21:22:38.309568355 +0200
-@@ -203,9 +203,9 @@
- }
- } else if (binding == 'switch-group-backward') {
- this._select(0, this._appIcons[0].cachedWindows.length - 1);
-- } else if (binding == 'switch-windows-backward') {
-+ } else if (binding == 'switch-applications-backward') {
- this._select(this._appIcons.length - 1);
-- } else if (binding == 'no-switch-windows') {
-+ } else if (binding == 'no-switch-applications') {
- this._select(0);
- } else if (this._appIcons.length == 1) {
- this._select(0);
-@@ -296,7 +296,7 @@
- return false;
- }
- Main.wm.showWorkspaceOSD();
-- that.refresh('no-switch-windows');
-+ that.refresh('no-switch-applications');
- return true;
- };
- let keysym = event.get_key_symbol();
diff -Naur linuxmint-Cinnamon-b41bad0.orig/js/ui/windowManager.js linuxmint-Cinnamon-b41bad0/js/ui/windowManager.js
--- linuxmint-Cinnamon-b41bad0.orig/js/ui/windowManager.js 2013-04-15 15:55:01.000000000 +0200
+++ linuxmint-Cinnamon-b41bad0/js/ui/windowManager.js 2013-04-24 21:21:22.447677094 +0200
diff --git a/community/darkhttpd/PKGBUILD b/community/darkhttpd/PKGBUILD
index bcc749245..525cdccb8 100644
--- a/community/darkhttpd/PKGBUILD
+++ b/community/darkhttpd/PKGBUILD
@@ -1,21 +1,25 @@
-# $Id: PKGBUILD 65106 2012-02-20 04:47:15Z spupykin $
+# $Id: PKGBUILD 89410 2013-04-29 10:56:40Z spupykin $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Maintainer: Vesa Kaihlavirta <vegai@iki.fi>
pkgname=darkhttpd
-pkgver=1.8
-pkgrel=2
+pkgver=1.9
+pkgrel=1
pkgdesc="A small, static webserver"
arch=('i686' 'x86_64')
url="http://dmr.ath.cx/net/darkhttpd/"
license=('BSD')
depends=('glibc')
source=($url/$pkgname-$pkgver.tar.bz2)
-md5sums=('cff3861af17b109d796993a990ec4c5b')
+md5sums=('156f239af542028c3fb5c2248aa0db8d')
build() {
cd $srcdir/$pkgname-$pkgver
make
+}
+
+package() {
+ cd $srcdir/$pkgname-$pkgver
install -D $srcdir/$pkgname-$pkgver/darkhttpd $pkgdir/usr/sbin/darkhttpd
mkdir -p $pkgdir/usr/share/licenses/$pkgname
head -n 18 darkhttpd.c >$pkgdir/usr/share/licenses/$pkgname/license
diff --git a/community/fatrat/PKGBUILD b/community/fatrat/PKGBUILD
index b962073e5..f1c3df7ae 100644
--- a/community/fatrat/PKGBUILD
+++ b/community/fatrat/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 87410 2013-03-31 19:18:13Z stephane $
+# $Id: PKGBUILD 89533 2013-04-29 19:20:35Z stativ $
# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
pkgname=fatrat
pkgver=1.2.0_beta2
-pkgrel=6
+pkgrel=7
pkgdesc="QT4 based download manager with support for HTTP, FTP, SFTP, BitTorrent, rapidshare and more"
arch=('i686' 'x86_64')
url="http://fatrat.dolezel.info/"
@@ -11,9 +11,10 @@ depends=('gloox' 'libtorrent-rasterbar' 'pion' 'qtwebkit' 'curl')
optdepends=('geoip: GeoIP support' 'java-runtime: Java plugins')
makedepends=('boost' 'cmake' 'java-environment')
source=(http://www.dolezel.info/download/data/fatrat/fatrat-$pkgver.tar.xz \
- QTBUG-22829-workaround.diff)
+ QTBUG-22829-workaround.diff pion-5.0.diff)
md5sums=('ad823d2a81f0583316ece815b928c71b'
- '9c017f227437b8a72e92219ee6d58578')
+ '9c017f227437b8a72e92219ee6d58578'
+ 'd7d398e7b6415c0a81eb4960d8271997')
build() {
cd "$srcdir/$pkgname-$pkgver"
@@ -22,6 +23,8 @@ build() {
patch -Np1 < "$srcdir/QTBUG-22829-workaround.diff" || true
# fix help generation with qt4
sed -s 's|qcollectiongenerator|qcollectiongenerator-qt4|' -i CMakeLists.txt
+ # fix for the new pion
+ patch -Np1 < "$srcdir/pion-5.0.diff" || true
cmake \
-DWITH_EVERYTHING=ON \
diff --git a/community/fatrat/pion-5.0.diff b/community/fatrat/pion-5.0.diff
new file mode 100644
index 000000000..ff84fb902
--- /dev/null
+++ b/community/fatrat/pion-5.0.diff
@@ -0,0 +1,1570 @@
+diff -rup fatrat-1.2.0_beta2/CMakeLists.txt fatrat-1.2.0_beta2.new/CMakeLists.txt
+--- fatrat-1.2.0_beta2/CMakeLists.txt 2012-07-14 12:44:27.000000000 +0100
++++ fatrat-1.2.0_beta2.new/CMakeLists.txt 2013-04-29 19:17:48.697623940 +0100
+@@ -148,19 +148,13 @@ if(WITH_DOCUMENTATION)
+ set(QT_USE_QTHELP TRUE)
+ endif(WITH_DOCUMENTATION)
+ if(WITH_WEBINTERFACE)
+- pkg_check_modules(pion-net REQUIRED "pion-net >= 3.0.0")
++ pkg_check_modules(pion REQUIRED "pion >= 5.0.0")
+
+- if(pion-net_FOUND)
+- include_directories(${pion-net_INCLUDE_DIRS})
+- #message(STATUS "Pion libdir: ${pion-net_LIBDIR}")
+-
+- #FILE(GLOB pion_FileService "${pion-net_LIBDIR}/pion/plugins/FileService.*")
+- #if(pion_FileService MATCHES "^$")
+- # message(FATAL_ERROR "Pion-net FileService plugin not found (libpion-net-plugins?) - ${pion_FileService}")
+- #endif(pion_FileService MATCHES "^$")
+- else(pion-net_FOUND)
+- message(FATAL_ERROR "No pion-net library found")
+- endif(pion-net_FOUND)
++ if(pion_FOUND)
++ include_directories(${pion_INCLUDE_DIRS})
++ else(pion_FOUND)
++ message(FATAL_ERROR "No pion library found")
++ endif(pion_FOUND)
+ endif(WITH_WEBINTERFACE)
+
+ #set(CMAKE_REQUIRED_INCLUDES "sys/types.h")
+@@ -570,9 +564,7 @@ ${fatrat_QRC_H} ${lrelease_outputs})
+ add_executable(fatrat-conf src/fatrat-conf.cpp)
+
+ # This used to be a workaround until it started causing the exact opposite... oh dear!
+-#STRING(REPLACE "-mt" "" pion-net_LIBRARIES "${pion-net_LIBRARIES}")
+-#message(STATUS ${pion-net_LIBRARIES})
+-target_link_libraries(fatrat -ldl -lpthread ${QT_LIBRARIES} ${libtorrent_LDFLAGS} ${gloox_LDFLAGS} ${curl_LDFLAGS} ${Boost_LIBRARIES} ${pion-net_LIBRARIES} ${QT_ADDITIONAL_LIBS} ${XATTR_LIBRARIES} -export-dynamic)
++target_link_libraries(fatrat -ldl -lpthread ${QT_LIBRARIES} ${libtorrent_LDFLAGS} ${gloox_LDFLAGS} ${curl_LDFLAGS} ${Boost_LIBRARIES} ${pion_LIBRARIES} ${QT_ADDITIONAL_LIBS} ${XATTR_LIBRARIES} -export-dynamic)
+ target_link_libraries(fatrat-conf ${QT_LIBRARIES})
+
+ set(fatrat_DEV_HEADERS
+Only in fatrat-1.2.0_beta2.new/: CMakeLists.txt.orig
+diff -rup fatrat-1.2.0_beta2/config.h.in fatrat-1.2.0_beta2.new/config.h.in
+--- fatrat-1.2.0_beta2/config.h.in 2012-07-14 12:44:27.000000000 +0100
++++ fatrat-1.2.0_beta2.new/config.h.in 2013-04-29 19:18:03.241412755 +0100
+@@ -13,7 +13,7 @@
+ #cmakedefine WITH_CXX0X
+
+ #ifdef WITH_WEBINTERFACE
+-# define PION_NET_PLUGINS "${pion-net_LIBDIR}/pion/plugins"
++# define PION_NET_PLUGINS "${pion_LIBDIR}/pion/plugins"
+ #endif
+
+ #cmakedefine ENABLE_FAKEDOWNLOAD
+diff -rup fatrat-1.2.0_beta2/src/remote/HttpService.cpp fatrat-1.2.0_beta2.new/src/remote/HttpService.cpp
+--- fatrat-1.2.0_beta2/src/remote/HttpService.cpp 2012-07-14 12:44:27.000000000 +0100
++++ fatrat-1.2.0_beta2.new/src/remote/HttpService.cpp 2013-04-29 19:17:17.076634049 +0100
+@@ -51,9 +51,8 @@ respects for all of the code used other
+ #include <QMultiMap>
+ #include <QProcess>
+ #include <QFile>
+-#include <pion/net/PionUser.hpp>
+-#include <pion/net/HTTPBasicAuth.hpp>
+-#include <pion/net/HTTPResponseWriter.hpp>
++#include <pion/http/basic_auth.hpp>
++#include <pion/http/response_writer.hpp>
+ #include <boost/filesystem/fstream.hpp>
+ #include "pion/FileService.hpp"
+ #include <cstdlib>
+@@ -63,7 +62,7 @@ respects for all of the code used other
+ #include <string.h>
+ #include <algorithm>
+
+-using namespace pion::net;
++using namespace pion::http;
+
+ extern QList<Queue*> g_queues;
+ extern QReadWriteLock g_queuesLock;
+@@ -172,16 +171,16 @@ void HttpService::applySettings()
+
+ void HttpService::setupAuth()
+ {
+- pion::net::PionUserManagerPtr userManager(new pion::net::PionUserManager);
++ pion::user_manager_ptr userManager(new pion::user_manager);
+ QString password = getSettingsValue("remote/password").toString();
+
+- m_auth_ptr = pion::net::HTTPAuthPtr( new pion::net::HTTPBasicAuth(userManager, "FatRat Web Interface") );
+- m_server->setAuthentication(m_auth_ptr);
+- m_auth_ptr->addRestrict("/");
+-
+- m_auth_ptr->addUser("fatrat", password.toStdString());
+- m_auth_ptr->addUser("admin", password.toStdString());
+- m_auth_ptr->addUser("user", password.toStdString());
++ m_auth_ptr = pion::http::auth_ptr( new pion::http::basic_auth(userManager, "FatRat Web Interface") );
++ m_server->set_authentication(m_auth_ptr);
++ m_auth_ptr->add_restrict("/");
++
++ m_auth_ptr->add_user("fatrat", password.toStdString());
++ m_auth_ptr->add_user("admin", password.toStdString());
++ m_auth_ptr->add_user("user", password.toStdString());
+ }
+
+ void HttpService::setup()
+@@ -190,28 +189,30 @@ void HttpService::setup()
+
+ try
+ {
+- m_server = new pion::net::WebServer(m_port);
++ m_server = new pion::http::plugin_server(m_port);
+
+ setupAuth();
+ setupSSL();
+
+- m_server->addService("/xmlrpc", new XmlRpcService);
+- m_server->addService("/subclass", new SubclassService);
+- m_server->addService("/log", new LogService);
+- m_server->addService("/browse", new TransferTreeBrowserService);
+- m_server->addService("/", new pion::plugins::FileService);
+- m_server->setServiceOption("/", "directory", DATA_LOCATION "/data/remote");
+- m_server->setServiceOption("/", "file", DATA_LOCATION "/data/remote/index.html");
+- m_server->addService("/copyrights", new pion::plugins::FileService);
+- m_server->setServiceOption("/copyrights", "file", DATA_LOCATION "/README");
+- m_server->addService("/download", new TransferDownloadService);
+- m_server->addService("/captcha", new CaptchaService);
++ m_server->add_service("/xmlrpc", new XmlRpcService);
++ m_server->add_service("/subclass", new SubclassService);
++ m_server->add_service("/log", new LogService);
++ m_server->add_service("/browse", new TransferTreeBrowserService);
++ m_server->add_service("/", new pion::plugins::FileService);
++ m_server->set_service_option("/", "directory", DATA_LOCATION "/data/remote");
++ m_server->set_service_option("/", "file", DATA_LOCATION "/data/remote/index.html");
++ m_server->add_service("/copyrights", new pion::plugins::FileService);
++ m_server->set_service_option("/copyrights", "file", DATA_LOCATION "/README");
++ m_server->add_service("/download", new TransferDownloadService);
++ m_server->add_service("/captcha", new CaptchaService);
+
+ m_server->start();
+ Logger::global()->enterLogMessage("HttpService", tr("Listening on port %1").arg(m_port));
++ std::cout << "Listening on port " << m_port << std::endl;
+ }
+ catch(const std::exception& e)
+ {
++ std::cerr << e.what() << std::endl;
+ Logger::global()->enterLogMessage("HttpService", tr("Failed to start: %1").arg(e.what()));
+ }
+ }
+@@ -225,29 +226,29 @@ void HttpService::setupSSL()
+ if (file.isEmpty() || !QFile::exists(file))
+ {
+ Logger::global()->enterLogMessage("HttpService", tr("SSL key file not found, disabling HTTPS"));
+- m_server->setSSLFlag(false);
++ m_server->set_ssl_flag(false);
+ m_strSSLPem.clear();
+ }
+ else
+ {
+ Logger::global()->enterLogMessage("HttpService", tr("Loading a SSL key from %1").arg(file));
+ m_strSSLPem = file;
+- m_server->setSSLKeyFile(file.toStdString());
+- m_server->setSSLFlag(true);
++ m_server->set_ssl_key_file(file.toStdString());
++ m_server->set_ssl_flag(true);
+ }
+ }
+ else
+ {
+ Logger::global()->enterLogMessage("HttpService", tr("Running in plain HTTP mode"));
+- m_server->setSSLFlag(false);
++ m_server->set_ssl_flag(false);
+ m_strSSLPem.clear();
+ }
+ }
+
+-void HttpService::LogService::operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn)
++void HttpService::LogService::operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn)
+ {
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn)));
+- QString uuidTransfer = QString::fromStdString(getRelativeResource(request->getResource()));
++ pion::http::response_writer_ptr writer(pion::http::response_writer::create(tcp_conn, *request, boost::bind(&pion::tcp::connection::finish, tcp_conn)));
++ QString uuidTransfer = QString::fromStdString(get_relative_resource(request->get_resource()));
+ QString data;
+
+ if (uuidTransfer.isEmpty())
+@@ -260,8 +261,8 @@ void HttpService::LogService::operator()
+
+ if (!q || !t)
+ {
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_FOUND);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_FOUND);
++ writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_NOT_FOUND);
++ writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_NOT_FOUND);
+ writer->send();
+ return;
+ }
+@@ -272,16 +273,16 @@ void HttpService::LogService::operator()
+ g_queuesLock.unlock();
+ }
+
+- writer->getResponse().addHeader("Content-Type", "text/plain");
++ writer->get_response().add_header("Content-Type", "text/plain");
+ writer->write(data.toStdString());
+ writer->send();
+ }
+
+-void HttpService::TransferTreeBrowserService::operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn)
++void HttpService::TransferTreeBrowserService::operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn)
+ {
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn)));
+- QString uuidTransfer = QString::fromStdString(getRelativeResource(request->getResource()));
+- QString path = QString::fromStdString(request->getQuery("path"));
++ pion::http::response_writer_ptr writer(pion::http::response_writer::create(tcp_conn, *request, boost::bind(&pion::tcp::connection::finish, tcp_conn)));
++ QString uuidTransfer = QString::fromStdString(get_relative_resource(request->get_resource()));
++ QString path = QString::fromStdString(request->get_query("path"));
+
+ path = path.replace("+", " ");
+ path = QUrl::fromPercentEncoding(path.toUtf8());
+@@ -294,8 +295,8 @@ void HttpService::TransferTreeBrowserSer
+
+ if (path.contains("/..") || path.contains("../"))
+ {
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_FORBIDDEN);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_FORBIDDEN);
++ writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_FORBIDDEN);
++ writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_FORBIDDEN);
+ writer->send();
+ return;
+ }
+@@ -304,8 +305,8 @@ void HttpService::TransferTreeBrowserSer
+
+ if (!q || !t)
+ {
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_FOUND);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_FOUND);
++ writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_NOT_FOUND);
++ writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_NOT_FOUND);
+ writer->send();
+ return;
+ }
+@@ -320,8 +321,8 @@ void HttpService::TransferTreeBrowserSer
+
+ if (!dir.cd(path))
+ {
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_FOUND);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_FOUND);
++ writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_NOT_FOUND);
++ writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_NOT_FOUND);
+ writer->send();
+ return;
+ }
+@@ -371,11 +372,11 @@ void HttpService::TransferTreeBrowserSer
+ writer->send();
+ }
+
+-void HttpService::TransferDownloadService::operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn)
++void HttpService::TransferDownloadService::operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn)
+ {
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn)));
+- QString transfer = QString::fromStdString(request->getQuery("transfer"));
+- QString path = QString::fromStdString(request->getQuery("path"));
++ pion::http::response_writer_ptr writer(pion::http::response_writer::create(tcp_conn, *request, boost::bind(&pion::tcp::connection::finish, tcp_conn)));
++ QString transfer = QString::fromStdString(request->get_query("transfer"));
++ QString path = QString::fromStdString(request->get_query("path"));
+
+ path = path.replace("+", " ");
+ path = QUrl::fromPercentEncoding(path.toUtf8());
+@@ -387,8 +388,8 @@ void HttpService::TransferDownloadServic
+
+ if (path.contains("/..") || path.contains("../"))
+ {
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_FORBIDDEN);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_FORBIDDEN);
++ writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_FORBIDDEN);
++ writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_FORBIDDEN);
+ writer->send();
+ return;
+ }
+@@ -397,8 +398,8 @@ void HttpService::TransferDownloadServic
+
+ if (!q || !t)
+ {
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_FOUND);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_FOUND);
++ writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_NOT_FOUND);
++ writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_NOT_FOUND);
+ writer->send();
+ return;
+ }
+@@ -428,24 +429,24 @@ void HttpService::TransferDownloadServic
+ response_file.update();
+
+ pion::plugins::DiskFileSenderPtr sender_ptr(pion::plugins::DiskFileSender::create(response_file, request, tcp_conn, 8192));
+- sender_ptr->getWriter()->getResponse().addHeader("Content-Disposition", disposition.toStdString());
++ sender_ptr->getWriter()->get_response().add_header("Content-Disposition", disposition.toStdString());
+
+ if (unsigned long long fileSize = response_file.getFileSize())
+ {
+ std::stringstream fileSizeStream;
+ fileSizeStream << fileSize;
+- sender_ptr->getWriter()->getResponse().addHeader("Content-Length", fileSizeStream.str());
++ sender_ptr->getWriter()->get_response().add_header("Content-Length", fileSizeStream.str());
+ }
+
+ sender_ptr->send();
+ }
+
+-void HttpService::SubclassService::operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn)
++void HttpService::SubclassService::operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn)
+ {
+- pion::net::HTTPResponseWriterPtr writer = HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn));
++ pion::http::response_writer_ptr writer = pion::http::response_writer::create(tcp_conn, *request, boost::bind(&pion::tcp::connection::finish, tcp_conn));
+ HttpService::WriteBackImpl wb = HttpService::WriteBackImpl(writer);
+- QString transfer = QString::fromStdString(request->getQuery("transfer"));
+- QString method = QString::fromStdString(getRelativeResource(request->getResource()));
++ QString transfer = QString::fromStdString(request->get_query("transfer"));
++ QString method = QString::fromStdString(get_relative_resource(request->get_resource()));
+
+ Queue* q = 0;
+ Transfer* t = 0;
+@@ -460,15 +461,15 @@ void HttpService::SubclassService::opera
+ g_queuesLock.unlock();
+ }
+
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_FOUND);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_FOUND);
++ writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_NOT_FOUND);
++ writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_NOT_FOUND);
+ writer->send();
+ return;
+ }
+
+ QMultiMap<QString,QString> map;
+- pion::net::HTTPTypes::QueryParams params = request->getQueryParams();
+- for (pion::net::HTTPTypes::QueryParams::iterator it = params.begin(); it != params.end(); it++)
++ pion::ihash_multimap params = request->get_queries();
++ for (pion::ihash_multimap::iterator it = params.begin(); it != params.end(); it++)
+ {
+ map.insert(QString::fromStdString(it->first), QString::fromStdString(it->second));
+ }
+@@ -481,7 +482,7 @@ void HttpService::SubclassService::opera
+ g_queuesLock.unlock();
+ }
+
+-HttpService::WriteBackImpl::WriteBackImpl(pion::net::HTTPResponseWriterPtr& writer)
++HttpService::WriteBackImpl::WriteBackImpl(pion::http::response_writer_ptr& writer)
+ : m_writer(writer)
+ {
+
+@@ -489,7 +490,7 @@ HttpService::WriteBackImpl::WriteBackImp
+
+ void HttpService::WriteBackImpl::writeNoCopy(void* data, size_t bytes)
+ {
+- m_writer->writeNoCopy(data, bytes);
++ m_writer->write_no_copy(data, bytes);
+ }
+
+ void HttpService::WriteBackImpl::send()
+@@ -504,13 +505,13 @@ void HttpService::WriteBackImpl::write(c
+
+ void HttpService::WriteBackImpl::setContentType(const char* type)
+ {
+- m_writer->getResponse().addHeader("Content-Type", type);
++ m_writer->get_response().add_header("Content-Type", type);
+ }
+
+ void HttpService::WriteBackImpl::writeFail(QString error)
+ {
+- m_writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_FOUND);
+- m_writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_FOUND);
++ m_writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_NOT_FOUND);
++ m_writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_NOT_FOUND);
+ }
+
+ int HttpService::findTransfer(QString transferUUID, Queue** q, Transfer** t, bool lockForWrite)
+@@ -601,9 +602,9 @@ QVariant HttpService::generateCertificat
+
+
+ /*
+-void HttpService::CaptchaService::operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn)
++void HttpService::CaptchaService::operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn)
+ {
+- m_cap.writer = HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn));
++ m_cap.writer = pion::http::response_writer::create(tcp_conn, *request, boost::bind(&pion::tcp::connection::finish, tcp_conn));
+
+ std::string upgrade, connection;
+ upgrade = request->getHeader("Upgrade");
+@@ -616,8 +617,8 @@ void HttpService::CaptchaService::operat
+
+ if (connection != "upgrade" || upgrade != "websocket" || m_cap.key1.empty() || m_cap.key2.empty())
+ {
+- m_cap.writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_BAD_REQUEST);
+- m_cap.writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_BAD_REQUEST);
++ m_cap.writer->get_response().set_status_code(pion::http::types::RESPONSE_CODE_BAD_REQUEST);
++ m_cap.writer->get_response().set_status_message(pion::http::types::RESPONSE_MESSAGE_BAD_REQUEST);
+ m_cap.writer->send();
+ }
+
+@@ -668,30 +669,30 @@ void HttpService::CaptchaService::CapSer
+
+ */
+
+-void HttpService::CaptchaHttpResponseWriter::handleWrite(const boost::system::error_code &write_error, std::size_t bytes_written)
++void HttpService::CaptchaHttpResponseWriter::handle_write(const boost::system::error_code &write_error, std::size_t bytes_written)
+ {
+ if (!bytes_written)
+ {
+ // TODO: handle errors
+ HttpService::instance()->removeCaptchaClient(client);
+- sendFinalChunk();
++ send_final_chunk();
+ delete client;
+ }
+
+- pion::net::HTTPResponseWriter::handleWrite(write_error, bytes_written);
++ pion::http::response_writer::handle_write(write_error, bytes_written);
+ }
+
+-void HttpService::CaptchaService::operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn)
++void HttpService::CaptchaService::operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn)
+ {
+- if (request->hasQuery("id"))
++ if (request->has_query("id"))
+ {
+- QString id = QString::fromStdString(request->getQuery("id"));
+- QString solution = QString::fromStdString(request->getQuery("solution"));
++ QString id = QString::fromStdString(request->get_query("id"));
++ QString solution = QString::fromStdString(request->get_query("solution"));
+
+ int iid = id.toInt();
+ HttpService::instance()->m_captchaHttp.captchaEntered(iid, solution);
+
+- pion::net::HTTPResponseWriterPtr writer = HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn));
++ pion::http::response_writer_ptr writer = pion::http::response_writer::create(tcp_conn, *request, boost::bind(&pion::tcp::connection::finish, tcp_conn));
+ writer->send();
+ }
+ else
+@@ -709,13 +710,13 @@ void HttpService::CaptchaService::operat
+ RegisteredClient* client = new RegisteredClient;
+
+ client->writer = CaptchaHttpResponseWriter::create(client, tcp_conn, *request,
+- boost::bind(&TCPConnection::finish, tcp_conn));
++ boost::bind(&pion::tcp::connection::finish, tcp_conn));
+ HttpService::instance()->addCaptchaClient(client);
+
+- client->writer->getResponse().addHeader("Content-Type", "text/event-stream");
+- client->writer->getResponse().addHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0");
+- client->writer->getResponse().addHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
+- client->writer->getResponse().addHeader("Pragma", "no-cache");
++ client->writer->get_response().add_header("Content-Type", "text/event-stream");
++ client->writer->get_response().add_header("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0");
++ client->writer->get_response().add_header("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
++ client->writer->get_response().add_header("Pragma", "no-cache");
+ }
+ }
+
+@@ -747,7 +748,7 @@ void HttpService::RegisteredClient::push
+ writer->clear();
+
+ writer->write(buf.data(), buf.length());
+- writer->sendChunk(boost::bind(&HttpService::RegisteredClient::finished, this));
++ writer->send_chunk(boost::bind(&HttpService::RegisteredClient::finished, this));
+ }
+ else
+ writeInProgressLock.unlock();
+@@ -760,7 +761,7 @@ void HttpService::RegisteredClient::keep
+
+ writer->clear();
+ writer->write(": keepalive\r\n\r\n");
+- writer->sendChunk(boost::bind(&HttpService::RegisteredClient::finished, this));
++ writer->send_chunk(boost::bind(&HttpService::RegisteredClient::finished, this));
+ }
+
+ void HttpService::addCaptchaEvent(int id, QString url)
+@@ -803,5 +804,5 @@ void HttpService::keepalive()
+
+ void HttpService::RegisteredClient::terminate()
+ {
+- writer->getTCPConnection()->finish();
++ writer->get_connection()->finish();
+ }
+diff -rup fatrat-1.2.0_beta2/src/remote/HttpService.h fatrat-1.2.0_beta2.new/src/remote/HttpService.h
+--- fatrat-1.2.0_beta2/src/remote/HttpService.h 2012-07-14 12:44:27.000000000 +0100
++++ fatrat-1.2.0_beta2.new/src/remote/HttpService.h 2013-04-29 19:17:17.076634049 +0100
+@@ -40,7 +40,8 @@ respects for all of the code used other
+ #include <ctime>
+ #include <openssl/ssl.h>
+ #include <boost/system/system_error.hpp>
+-#include <pion/net/HTTPResponseWriter.hpp>
++#include <pion/http/plugin_server.hpp>
++#include <pion/http/response_writer.hpp>
+ #include "captcha/CaptchaHttp.h"
+ #include "remote/TransferHttpService.h"
+
+@@ -48,7 +49,8 @@ respects for all of the code used other
+ # error This file is not supposed to be included!
+ #endif
+
+-#include <pion/net/WebServer.hpp>
++#include <pion/http/server.hpp>
++#include <pion/http/plugin_service.hpp>
+
+ class Queue;
+ class Transfer;
+@@ -83,8 +85,8 @@ private:
+ void killCaptchaClients();
+ private:
+ static HttpService* m_instance;
+- pion::net::WebServer* m_server;
+- pion::net::HTTPAuthPtr m_auth_ptr;
++ pion::http::plugin_server* m_server;
++ pion::http::auth_ptr m_auth_ptr;
+ CaptchaHttp m_captchaHttp;
+ quint16 m_port;
+ QString m_strSSLPem;
+@@ -94,27 +96,27 @@ private:
+ QList<RegisteredClient*> m_registeredCaptchaClients;
+ QMutex m_registeredCaptchaClientsMutex;
+
+- class LogService : public pion::net::WebService
++ class LogService : public pion::http::plugin_service
+ {
+- void operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn);
++ void operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn);
+ };
+- class TransferTreeBrowserService : public pion::net::WebService
++ class TransferTreeBrowserService : public pion::http::plugin_service
+ {
+- void operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn);
++ void operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn);
+ };
+- class TransferDownloadService : public pion::net::WebService
++ class TransferDownloadService : public pion::http::plugin_service
+ {
+- void operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn);
++ void operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn);
+ };
+- class SubclassService : public pion::net::WebService
++ class SubclassService : public pion::http::plugin_service
+ {
+ public:
+- void operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn);
++ void operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn);
+ };
+- /*class CaptchaService : public pion::net::WebService
++ /*class CaptchaService : public pion::http::plugin_service
+ {
+ public:
+- void operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn);
++ void operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn);
+ private:
+ class CapServCap
+ {
+@@ -126,15 +128,15 @@ private:
+ std::string key1, key2;
+ char sig[8];
+ int inbuf;
+- pion::net::TCPConnectionPtr tcp_conn;
++ pion::tcp::connection_ptr tcp_conn;
+ } m_cap;
+ };*/
+
+ class CaptchaHttpResponseWriter;
+- class CaptchaService : public pion::net::WebService
++ class CaptchaService : public pion::http::plugin_service
+ {
+ public:
+- void operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn);
++ void operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn);
+ };
+ struct RegisteredClient
+ {
+@@ -151,16 +153,16 @@ private:
+ void terminate();
+ };
+
+- class CaptchaHttpResponseWriter : public pion::net::HTTPResponseWriter
++ class CaptchaHttpResponseWriter : public pion::http::response_writer
+ {
+ public:
+- CaptchaHttpResponseWriter(HttpService::RegisteredClient* cl, pion::net::TCPConnectionPtr &tcp_conn, const pion::net::HTTPRequest& request, FinishedHandler handler = FinishedHandler())
+- : pion::net::HTTPResponseWriter(tcp_conn, request, handler), client(cl)
++ CaptchaHttpResponseWriter(HttpService::RegisteredClient* cl, pion::tcp::connection_ptr &tcp_conn, const pion::http::request& request, finished_handler_t handler = finished_handler_t())
++ : pion::http::response_writer(tcp_conn, request, handler), client(cl)
+ {
+
+ }
+
+- static inline boost::shared_ptr<CaptchaHttpResponseWriter> create(HttpService::RegisteredClient* cl, pion::net::TCPConnectionPtr &tcp_conn, const pion::net::HTTPRequest& request, FinishedHandler handler = FinishedHandler())
++ static inline boost::shared_ptr<CaptchaHttpResponseWriter> create(HttpService::RegisteredClient* cl, pion::tcp::connection_ptr &tcp_conn, const pion::http::request& request, finished_handler_t handler = finished_handler_t())
+ {
+ return boost::shared_ptr<CaptchaHttpResponseWriter>(new CaptchaHttpResponseWriter(cl, tcp_conn, request, handler));
+ }
+@@ -171,7 +173,7 @@ private:
+ m_http_response->prepareBuffersForSend(write_buffers, getTCPConnection()->getKeepAlive(),
+ sendingChunkedMessage());
+ }*/
+- virtual void handleWrite(const boost::system::error_code &write_error, std::size_t bytes_written);
++ virtual void handle_write(const boost::system::error_code &write_error, std::size_t bytes_written);
+
+ HttpService::RegisteredClient* client;
+ };
+@@ -179,14 +181,14 @@ private:
+ class WriteBackImpl : public TransferHttpService::WriteBack
+ {
+ public:
+- WriteBackImpl(pion::net::HTTPResponseWriterPtr& writer);
++ WriteBackImpl(pion::http::response_writer_ptr& writer);
+ void write(const char* data, size_t bytes);
+ void writeFail(QString error);
+ void writeNoCopy(void* data, size_t bytes);
+ void send();
+ void setContentType(const char* type);
+ private:
+- pion::net::HTTPResponseWriterPtr m_writer;
++ pion::http::response_writer_ptr m_writer;
+ };
+ };
+
+diff -rup fatrat-1.2.0_beta2/src/remote/pion/FileService.cpp fatrat-1.2.0_beta2.new/src/remote/pion/FileService.cpp
+--- fatrat-1.2.0_beta2/src/remote/pion/FileService.cpp 2012-07-14 12:44:27.000000000 +0100
++++ fatrat-1.2.0_beta2.new/src/remote/pion/FileService.cpp 2013-04-29 19:17:17.079967487 +0100
+@@ -15,13 +15,14 @@
+ #include <boost/algorithm/string/case_conv.hpp>
+
+ #include "FileService.hpp"
+-#include <pion/PionPlugin.hpp>
+-#include <pion/net/HTTPResponseWriter.hpp>
++#include <pion/plugin.hpp>
++#include <pion/http/response_writer.hpp>
+ #include <sstream>
+ #include <QFileInfo>
+
+ using namespace pion;
+-using namespace pion::net;
++using namespace pion::http;
++using namespace pion::tcp;
+
+ namespace pion { // begin namespace pion
+ namespace plugins { // begin namespace plugins
+@@ -49,7 +50,7 @@ FileService::FileService(void)
+ m_writable(false)
+ {}
+
+-void FileService::setOption(const std::string& name, const std::string& value)
++void FileService::set_option(const std::string& name, const std::string& value)
+ {
+ if (name == "directory") {
+ m_directory = value;
+@@ -104,10 +105,10 @@ void FileService::setOption(const std::s
+ }
+ }
+
+-void FileService::operator()(HTTPRequestPtr& request, TCPConnectionPtr& tcp_conn)
++void FileService::operator()(request_ptr& request, connection_ptr& tcp_conn)
+ {
+ // get the relative resource path for the request
+- const std::string relative_path(getRelativeResource(request->getResource()));
++ const std::string relative_path(get_relative_resource(request->get_resource()));
+
+ // determine the path of the file being requested
+ boost::filesystem::path file_path;
+@@ -117,7 +118,7 @@ void FileService::operator()(HTTPRequest
+ if (m_file.empty()) {
+ // no file is specified, either in the request or in the options
+ PION_LOG_WARN(m_logger, "No file option defined ("
+- << getResource() << ")");
++ << get_resource() << ")");
+ sendNotFoundResponse(request, tcp_conn);
+ return;
+ } else {
+@@ -129,7 +130,7 @@ void FileService::operator()(HTTPRequest
+ if (m_directory.empty()) {
+ // no directory is specified for the relative file
+ PION_LOG_WARN(m_logger, "No directory option defined ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ sendNotFoundResponse(request, tcp_conn);
+ return;
+ } else {
+@@ -142,7 +143,7 @@ void FileService::operator()(HTTPRequest
+ std::string string = file_path.string();
+ if (string.find(m_directory.string()) != 0) {
+ PION_LOG_WARN(m_logger, "Request for file outside of directory ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ static const std::string FORBIDDEN_HTML_START =
+ "<html><head>\n"
+ "<title>403 Forbidden</title>\n"
+@@ -152,14 +153,14 @@ void FileService::operator()(HTTPRequest
+ static const std::string FORBIDDEN_HTML_FINISH =
+ " is not in the configured directory.</p>\n"
+ "</body></html>\n";
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request,
+- boost::bind(&TCPConnection::finish, tcp_conn)));
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_FORBIDDEN);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_FORBIDDEN);
+- if (request->getMethod() != HTTPTypes::REQUEST_METHOD_HEAD) {
+- writer->writeNoCopy(FORBIDDEN_HTML_START);
+- writer << request->getResource();
+- writer->writeNoCopy(FORBIDDEN_HTML_FINISH);
++ response_writer_ptr writer(response_writer::create(tcp_conn, *request,
++ boost::bind(&connection::finish, tcp_conn)));
++ writer->get_response().set_status_code(types::RESPONSE_CODE_FORBIDDEN);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_FORBIDDEN);
++ if (request->get_method() != types::REQUEST_METHOD_HEAD) {
++ writer->write_no_copy(FORBIDDEN_HTML_START);
++ writer << request->get_resource();
++ writer->write_no_copy(FORBIDDEN_HTML_FINISH);
+ }
+ writer->send();
+ return;
+@@ -168,7 +169,7 @@ void FileService::operator()(HTTPRequest
+ // requests specifying directories are not allowed
+ if (boost::filesystem::is_directory(file_path)) {
+ PION_LOG_WARN(m_logger, "Request for directory ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ static const std::string FORBIDDEN_HTML_START =
+ "<html><head>\n"
+ "<title>403 Forbidden</title>\n"
+@@ -178,21 +179,21 @@ void FileService::operator()(HTTPRequest
+ static const std::string FORBIDDEN_HTML_FINISH =
+ " is a directory.</p>\n"
+ "</body></html>\n";
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request,
+- boost::bind(&TCPConnection::finish, tcp_conn)));
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_FORBIDDEN);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_FORBIDDEN);
+- if (request->getMethod() != HTTPTypes::REQUEST_METHOD_HEAD) {
+- writer->writeNoCopy(FORBIDDEN_HTML_START);
+- writer << request->getResource();
+- writer->writeNoCopy(FORBIDDEN_HTML_FINISH);
++ response_writer_ptr writer(response_writer::create(tcp_conn, *request,
++ boost::bind(&connection::finish, tcp_conn)));
++ writer->get_response().set_status_code(types::RESPONSE_CODE_FORBIDDEN);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_FORBIDDEN);
++ if (request->get_method() != types::REQUEST_METHOD_HEAD) {
++ writer->write_no_copy(FORBIDDEN_HTML_START);
++ writer << request->get_resource();
++ writer->write_no_copy(FORBIDDEN_HTML_FINISH);
+ }
+ writer->send();
+ return;
+ }
+
+- if (request->getMethod() == HTTPTypes::REQUEST_METHOD_GET
+- || request->getMethod() == HTTPTypes::REQUEST_METHOD_HEAD)
++ if (request->get_method() == types::REQUEST_METHOD_GET
++ || request->get_method() == types::REQUEST_METHOD_HEAD)
+ {
+ // the type of response we will send
+ enum ResponseType {
+@@ -207,7 +208,7 @@ void FileService::operator()(HTTPRequest
+ DiskFile response_file;
+
+ // get the If-Modified-Since request header
+- const std::string if_modified_since(request->getHeader(HTTPTypes::HEADER_IF_MODIFIED_SINCE));
++ const std::string if_modified_since(request->get_header(types::HEADER_IF_MODIFIED_SINCE));
+
+ // check the cache for a corresponding entry (if enabled)
+ // note that m_cache_setting may equal 0 if m_scan_setting == 1
+@@ -225,18 +226,18 @@ void FileService::operator()(HTTPRequest
+ // all requests must correspond with existing cache entries
+ // since no match was found, just return file not found
+ PION_LOG_WARN(m_logger, "Request for unknown file ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ response_type = RESPONSE_NOT_FOUND;
+ } else {
+ PION_LOG_DEBUG(m_logger, "No cache entry for request ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ }
+
+ } else {
+ // found an existing cache entry
+
+ PION_LOG_DEBUG(m_logger, "Found cache entry for request ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+
+ if (m_cache_setting == 0) {
+ // cache is disabled
+@@ -253,12 +254,12 @@ void FileService::operator()(HTTPRequest
+ // no need to read the file; the modified times match!
+ response_type = RESPONSE_NOT_MODIFIED;
+ } else {
+- if (request->getMethod() == HTTPTypes::REQUEST_METHOD_HEAD) {
++ if (request->get_method() == types::REQUEST_METHOD_HEAD) {
+ response_type = RESPONSE_HEAD_OK;
+ } else {
+ response_type = RESPONSE_OK;
+ PION_LOG_DEBUG(m_logger, "Cache disabled, reading file ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ }
+ }
+
+@@ -290,7 +291,7 @@ void FileService::operator()(HTTPRequest
+ // get the response type
+ if (cache_itr->second.getLastModifiedString() == if_modified_since) {
+ response_type = RESPONSE_NOT_MODIFIED;
+- } else if (request->getMethod() == HTTPTypes::REQUEST_METHOD_HEAD) {
++ } else if (request->get_method() == types::REQUEST_METHOD_HEAD) {
+ response_type = RESPONSE_HEAD_OK;
+ } else {
+ response_type = RESPONSE_OK;
+@@ -301,7 +302,7 @@ void FileService::operator()(HTTPRequest
+
+ PION_LOG_DEBUG(m_logger, (cache_was_updated ? "Updated" : "Using")
+ << " cache entry for request ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ }
+ }
+ }
+@@ -310,7 +311,7 @@ void FileService::operator()(HTTPRequest
+ // make sure that the file exists
+ if (! boost::filesystem::exists(file_path)) {
+ PION_LOG_WARN(m_logger, "File not found ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ sendNotFoundResponse(request, tcp_conn);
+ return;
+ }
+@@ -318,7 +319,7 @@ void FileService::operator()(HTTPRequest
+ response_file.setFilePath(file_path);
+
+ PION_LOG_DEBUG(m_logger, "Found file for request ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+
+ // determine the MIME type
+ response_file.setMimeType(findMIMEType( response_file.getFilePath().string() ));
+@@ -330,7 +331,7 @@ void FileService::operator()(HTTPRequest
+ if (response_file.getLastModifiedString() == if_modified_since) {
+ // no need to read the file; the modified times match!
+ response_type = RESPONSE_NOT_MODIFIED;
+- } else if (request->getMethod() == HTTPTypes::REQUEST_METHOD_HEAD) {
++ } else if (request->get_method() == types::REQUEST_METHOD_HEAD) {
+ response_type = RESPONSE_HEAD_OK;
+ } else {
+ response_type = RESPONSE_OK;
+@@ -341,7 +342,7 @@ void FileService::operator()(HTTPRequest
+ }
+ // add new entry to the cache
+ PION_LOG_DEBUG(m_logger, "Adding cache entry for request ("
+- << getResource() << "): " << relative_path);
++ << get_resource() << "): " << relative_path);
+ boost::mutex::scoped_lock cache_lock(m_cache_mutex);
+ m_cache_map.insert( std::make_pair(relative_path, response_file) );
+ }
+@@ -360,43 +361,43 @@ void FileService::operator()(HTTPRequest
+ // sending headers only -> use our own response object
+
+ // prepare a response and set the Content-Type
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request,
+- boost::bind(&TCPConnection::finish, tcp_conn)));
+- writer->getResponse().setContentType(response_file.getMimeType());
++ response_writer_ptr writer(response_writer::create(tcp_conn, *request,
++ boost::bind(&connection::finish, tcp_conn)));
++ writer->get_response().set_content_type(response_file.getMimeType());
+
+ // set Last-Modified header to enable client-side caching
+- writer->getResponse().addHeader(HTTPTypes::HEADER_LAST_MODIFIED,
++ writer->get_response().add_header(types::HEADER_LAST_MODIFIED,
+ response_file.getLastModifiedString());
+
+ std::stringstream out;
+ out << response_file.getFileSize();
+- writer->getResponse().addHeader(HTTPTypes::HEADER_CONTENT_LENGTH, out.str());
++ writer->get_response().add_header(types::HEADER_CONTENT_LENGTH, out.str());
+
+ switch(response_type) {
+ case RESPONSE_UNDEFINED:
+ case RESPONSE_NOT_FOUND:
+ case RESPONSE_OK:
+ // this should never happen
+- throw UndefinedResponseException(request->getResource());
++ throw UndefinedResponseException(request->get_resource());
+ break;
+ case RESPONSE_NOT_MODIFIED:
+ // set "Not Modified" response
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_MODIFIED);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_MODIFIED);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_NOT_MODIFIED);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_NOT_MODIFIED);
+ break;
+ case RESPONSE_HEAD_OK:
+ // set "OK" response (not really necessary since this is the default)
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_OK);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_OK);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_OK);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_OK);
+ break;
+ }
+
+ // send the response
+ writer->send();
+ }
+- } else if (request->getMethod() == HTTPTypes::REQUEST_METHOD_POST
+- || request->getMethod() == HTTPTypes::REQUEST_METHOD_PUT
+- || request->getMethod() == HTTPTypes::REQUEST_METHOD_DELETE)
++ } else if (request->get_method() == types::REQUEST_METHOD_POST
++ || request->get_method() == types::REQUEST_METHOD_PUT
++ || request->get_method() == types::REQUEST_METHOD_DELETE)
+ {
+ // If not writable, then send 405 (Method Not Allowed) response for POST, PUT or DELETE requests.
+ if (!m_writable) {
+@@ -409,24 +410,24 @@ void FileService::operator()(HTTPRequest
+ static const std::string NOT_ALLOWED_HTML_FINISH =
+ " is not allowed on this server.</p>\n"
+ "</body></html>\n";
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request,
+- boost::bind(&TCPConnection::finish, tcp_conn)));
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_METHOD_NOT_ALLOWED);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED);
+- writer->writeNoCopy(NOT_ALLOWED_HTML_START);
+- writer << request->getMethod();
+- writer->writeNoCopy(NOT_ALLOWED_HTML_FINISH);
+- writer->getResponse().addHeader("Allow", "GET, HEAD");
++ response_writer_ptr writer(response_writer::create(tcp_conn, *request,
++ boost::bind(&connection::finish, tcp_conn)));
++ writer->get_response().set_status_code(types::RESPONSE_CODE_METHOD_NOT_ALLOWED);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED);
++ writer->write_no_copy(NOT_ALLOWED_HTML_START);
++ writer << request->get_method();
++ writer->write_no_copy(NOT_ALLOWED_HTML_FINISH);
++ writer->get_response().add_header("Allow", "GET, HEAD");
+ writer->send();
+ } else {
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request,
+- boost::bind(&TCPConnection::finish, tcp_conn)));
+- if (request->getMethod() == HTTPTypes::REQUEST_METHOD_POST
+- || request->getMethod() == HTTPTypes::REQUEST_METHOD_PUT)
++ response_writer_ptr writer(response_writer::create(tcp_conn, *request,
++ boost::bind(&connection::finish, tcp_conn)));
++ if (request->get_method() == types::REQUEST_METHOD_POST
++ || request->get_method() == types::REQUEST_METHOD_PUT)
+ {
+ if (boost::filesystem::exists(file_path)) {
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NO_CONTENT);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NO_CONTENT);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_NO_CONTENT);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_NO_CONTENT);
+ } else {
+ // The file doesn't exist yet, so it will be created below, unless the
+ // directory of the requested file also doesn't exist.
+@@ -440,11 +441,11 @@ void FileService::operator()(HTTPRequest
+ static const std::string NOT_FOUND_HTML_FINISH =
+ " was not found on this server.</p>\n"
+ "</body></html>\n";
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_FOUND);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_FOUND);
+- writer->writeNoCopy(NOT_FOUND_HTML_START);
+- writer << request->getResource();
+- writer->writeNoCopy(NOT_FOUND_HTML_FINISH);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_NOT_FOUND);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_NOT_FOUND);
++ writer->write_no_copy(NOT_FOUND_HTML_START);
++ writer << request->get_resource();
++ writer->write_no_copy(NOT_FOUND_HTML_FINISH);
+ writer->send();
+ return;
+ }
+@@ -457,17 +458,17 @@ void FileService::operator()(HTTPRequest
+ static const std::string CREATED_HTML_FINISH =
+ "</p>\n"
+ "</body></html>\n";
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_CREATED);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_CREATED);
+- writer->getResponse().addHeader(HTTPTypes::HEADER_LOCATION, request->getResource());
+- writer->writeNoCopy(CREATED_HTML_START);
+- writer << request->getResource();
+- writer->writeNoCopy(CREATED_HTML_FINISH);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_CREATED);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_CREATED);
++ writer->get_response().add_header(types::HEADER_LOCATION, request->get_resource());
++ writer->write_no_copy(CREATED_HTML_START);
++ writer << request->get_resource();
++ writer->write_no_copy(CREATED_HTML_FINISH);
+ }
+- std::ios_base::openmode mode = request->getMethod() == HTTPTypes::REQUEST_METHOD_POST?
++ std::ios_base::openmode mode = request->get_method() == types::REQUEST_METHOD_POST?
+ std::ios::app : std::ios::out;
+ boost::filesystem::ofstream file_stream(file_path, mode);
+- file_stream.write(request->getContent(), request->getContentLength());
++ file_stream.write(request->get_content(), request->get_content_length());
+ file_stream.close();
+ if (!boost::filesystem::exists(file_path)) {
+ static const std::string PUT_FAILED_HTML_START =
+@@ -479,21 +480,21 @@ void FileService::operator()(HTTPRequest
+ static const std::string PUT_FAILED_HTML_FINISH =
+ ".</p>\n"
+ "</body></html>\n";
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_SERVER_ERROR);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_SERVER_ERROR);
+- writer->writeNoCopy(PUT_FAILED_HTML_START);
+- writer << request->getResource();
+- writer->writeNoCopy(PUT_FAILED_HTML_FINISH);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_SERVER_ERROR);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_SERVER_ERROR);
++ writer->write_no_copy(PUT_FAILED_HTML_START);
++ writer << request->get_resource();
++ writer->write_no_copy(PUT_FAILED_HTML_FINISH);
+ }
+ writer->send();
+- } else if (request->getMethod() == HTTPTypes::REQUEST_METHOD_DELETE) {
++ } else if (request->get_method() == types::REQUEST_METHOD_DELETE) {
+ if (!boost::filesystem::exists(file_path)) {
+ sendNotFoundResponse(request, tcp_conn);
+ } else {
+ try {
+ boost::filesystem::remove(file_path);
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NO_CONTENT);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NO_CONTENT);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_NO_CONTENT);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_NO_CONTENT);
+ writer->send();
+ } catch (...) {
+ static const std::string DELETE_FAILED_HTML_START =
+@@ -505,18 +506,18 @@ void FileService::operator()(HTTPRequest
+ static const std::string DELETE_FAILED_HTML_FINISH =
+ ".</p>\n"
+ "</body></html>\n";
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_SERVER_ERROR);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_SERVER_ERROR);
+- writer->writeNoCopy(DELETE_FAILED_HTML_START);
+- writer << request->getResource();
+- writer->writeNoCopy(DELETE_FAILED_HTML_FINISH);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_SERVER_ERROR);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_SERVER_ERROR);
++ writer->write_no_copy(DELETE_FAILED_HTML_START);
++ writer << request->get_resource();
++ writer->write_no_copy(DELETE_FAILED_HTML_FINISH);
+ writer->send();
+ }
+ }
+ } else {
+ // This should never be reached.
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_SERVER_ERROR);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_SERVER_ERROR);
++ writer->get_response().set_status_code(types::RESPONSE_CODE_SERVER_ERROR);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_SERVER_ERROR);
+ writer->send();
+ }
+ }
+@@ -532,19 +533,19 @@ void FileService::operator()(HTTPRequest
+ static const std::string NOT_IMPLEMENTED_HTML_FINISH =
+ " is not implemented on this server.</p>\n"
+ "</body></html>\n";
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request,
+- boost::bind(&TCPConnection::finish, tcp_conn)));
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_IMPLEMENTED);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_IMPLEMENTED);
+- writer->writeNoCopy(NOT_IMPLEMENTED_HTML_START);
+- writer << request->getMethod();
+- writer->writeNoCopy(NOT_IMPLEMENTED_HTML_FINISH);
++ response_writer_ptr writer(response_writer::create(tcp_conn, *request,
++ boost::bind(&connection::finish, tcp_conn)));
++ writer->get_response().set_status_code(types::RESPONSE_CODE_NOT_IMPLEMENTED);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_NOT_IMPLEMENTED);
++ writer->write_no_copy(NOT_IMPLEMENTED_HTML_START);
++ writer << request->get_method();
++ writer->write_no_copy(NOT_IMPLEMENTED_HTML_FINISH);
+ writer->send();
+ }
+ }
+
+-void FileService::sendNotFoundResponse(HTTPRequestPtr& http_request,
+- TCPConnectionPtr& tcp_conn)
++void FileService::sendNotFoundResponse(request_ptr& http_request,
++ connection_ptr& tcp_conn)
+ {
+ static const std::string NOT_FOUND_HTML_START =
+ "<html><head>\n"
+@@ -555,21 +556,21 @@ void FileService::sendNotFoundResponse(H
+ static const std::string NOT_FOUND_HTML_FINISH =
+ " was not found on this server.</p>\n"
+ "</body></html>\n";
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *http_request,
+- boost::bind(&TCPConnection::finish, tcp_conn)));
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_NOT_FOUND);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_NOT_FOUND);
+- if (http_request->getMethod() != HTTPTypes::REQUEST_METHOD_HEAD) {
+- writer->writeNoCopy(NOT_FOUND_HTML_START);
+- writer << http_request->getResource();
+- writer->writeNoCopy(NOT_FOUND_HTML_FINISH);
++ response_writer_ptr writer(response_writer::create(tcp_conn, *http_request,
++ boost::bind(&connection::finish, tcp_conn)));
++ writer->get_response().set_status_code(types::RESPONSE_CODE_NOT_FOUND);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_NOT_FOUND);
++ if (http_request->get_method() != types::REQUEST_METHOD_HEAD) {
++ writer->write_no_copy(NOT_FOUND_HTML_START);
++ writer << http_request->get_resource();
++ writer->write_no_copy(NOT_FOUND_HTML_FINISH);
+ }
+ writer->send();
+ }
+
+ void FileService::start(void)
+ {
+- PION_LOG_DEBUG(m_logger, "Starting up resource (" << getResource() << ')');
++ PION_LOG_DEBUG(m_logger, "Starting up resource (" << get_resource() << ')');
+
+ // scan directory/file if scan setting != 0
+ if (m_scan_setting != 0) {
+@@ -594,7 +595,7 @@ void FileService::start(void)
+
+ void FileService::stop(void)
+ {
+- PION_LOG_DEBUG(m_logger, "Shutting down resource (" << getResource() << ')');
++ PION_LOG_DEBUG(m_logger, "Shutting down resource (" << get_resource() << ')');
+ // clear cached files (if started again, it will re-scan)
+ boost::mutex::scoped_lock cache_lock(m_cache_mutex);
+ m_cache_map.clear();
+@@ -602,7 +603,7 @@ void FileService::stop(void)
+
+ void FileService::scanDirectory(const boost::filesystem::path& dir_path)
+ {
+- PION_LOG_DEBUG(m_logger, "Scanning directory (" << getResource() << "): "
++ PION_LOG_DEBUG(m_logger, "Scanning directory (" << get_resource() << "): "
+ << dir_path.string());
+
+ // iterate through items in the directory
+@@ -705,7 +706,7 @@ void DiskFile::update(void)
+ // set file_size and last_modified
+ m_file_size = QFileInfo(QString::fromStdString(m_file_path.string())).size();
+ m_last_modified = boost::filesystem::last_write_time( m_file_path );
+- m_last_modified_string = HTTPTypes::get_date_string( m_last_modified );
++ m_last_modified_string = types::get_date_string( m_last_modified );
+ }
+
+ void DiskFile::read(void)
+@@ -737,7 +738,7 @@ bool DiskFile::checkUpdated(void)
+ // update file_size and last_modified timestamp
+ m_file_size = cur_size;
+ m_last_modified = cur_modified;
+- m_last_modified_string = HTTPTypes::get_date_string( m_last_modified );
++ m_last_modified_string = types::get_date_string( m_last_modified );
+
+ // read new contents
+ read();
+@@ -748,11 +749,11 @@ bool DiskFile::checkUpdated(void)
+
+ // DiskFileSender member functions
+
+-DiskFileSender::DiskFileSender(DiskFile& file, pion::net::HTTPRequestPtr& request,
+- pion::net::TCPConnectionPtr& tcp_conn,
++DiskFileSender::DiskFileSender(DiskFile& file, pion::http::request_ptr& request,
++ pion::tcp::connection_ptr& tcp_conn,
+ unsigned long max_chunk_size)
+ : m_logger(PION_GET_LOGGER("pion.FileService.DiskFileSender")), m_disk_file(file),
+- m_writer(pion::net::HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn))),
++ m_writer(pion::http::response_writer::create(tcp_conn, *request, boost::bind(&connection::finish, tcp_conn))),
+ m_max_chunk_size(max_chunk_size), m_file_bytes_to_send(0), m_bytes_sent(0)
+ {
+ PION_LOG_DEBUG(m_logger, "Preparing to send file"
+@@ -760,15 +761,15 @@ DiskFileSender::DiskFileSender(DiskFile&
+ << m_disk_file.getFilePath().string());
+
+ // set the Content-Type HTTP header using the file's MIME type
+- m_writer->getResponse().setContentType(m_disk_file.getMimeType());
++ m_writer->get_response().set_content_type(m_disk_file.getMimeType());
+
+ // set Last-Modified header to enable client-side caching
+- m_writer->getResponse().addHeader(HTTPTypes::HEADER_LAST_MODIFIED,
++ m_writer->get_response().add_header(types::HEADER_LAST_MODIFIED,
+ m_disk_file.getLastModifiedString());
+
+ // use "200 OK" HTTP response
+- m_writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_OK);
+- m_writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_OK);
++ m_writer->get_response().set_status_code(types::RESPONSE_CODE_OK);
++ m_writer->get_response().set_status_message(types::RESPONSE_MESSAGE_OK);
+ }
+
+ void DiskFileSender::send(void)
+@@ -827,13 +828,13 @@ void DiskFileSender::send(void)
+ }
+
+ // send the content
+- m_writer->writeNoCopy(file_content_ptr, m_file_bytes_to_send);
++ m_writer->write_no_copy(file_content_ptr, m_file_bytes_to_send);
+
+ if (m_bytes_sent + m_file_bytes_to_send >= m_disk_file.getFileSize()) {
+ // this is the last piece of data to send
+ if (m_bytes_sent > 0) {
+ // send last chunk in a series
+- m_writer->sendFinalChunk(boost::bind(&DiskFileSender::handleWrite,
++ m_writer->send_final_chunk(boost::bind(&DiskFileSender::handleWrite,
+ shared_from_this(),
+ boost::asio::placeholders::error,
+ boost::asio::placeholders::bytes_transferred));
+@@ -846,7 +847,7 @@ void DiskFileSender::send(void)
+ }
+ } else {
+ // there will be more data -> send a chunk
+- m_writer->sendChunk(boost::bind(&DiskFileSender::handleWrite,
++ m_writer->send_chunk(boost::bind(&DiskFileSender::handleWrite,
+ shared_from_this(),
+ boost::asio::placeholders::error,
+ boost::asio::placeholders::bytes_transferred));
+@@ -860,7 +861,7 @@ void DiskFileSender::handleWrite(const b
+
+ if (write_error) {
+ // encountered error sending response data
+- m_writer->getTCPConnection()->setLifecycle(TCPConnection::LIFECYCLE_CLOSE); // make sure it will get closed
++ m_writer->get_connection()->set_lifecycle(connection::LIFECYCLE_CLOSE); // make sure it will get closed
+ PION_LOG_WARN(m_logger, "Error sending file (" << write_error.message() << ')');
+ } else {
+ // response data sent OK
+@@ -874,7 +875,7 @@ void DiskFileSender::handleWrite(const b
+ PION_LOG_DEBUG(m_logger, "Sent "
+ << (m_file_bytes_to_send < m_disk_file.getFileSize() ? "file chunk" : "complete file")
+ << " of " << m_file_bytes_to_send << " bytes (finished"
+- << (m_writer->getTCPConnection()->getKeepAlive() ? ", keeping alive)" : ", closing)") );
++ << (m_writer->get_connection()->get_keep_alive() ? ", keeping alive)" : ", closing)") );
+ } else {
+ // NOT finished sending
+ PION_LOG_DEBUG(m_logger, "Sent file chunk of " << m_file_bytes_to_send << " bytes");
+@@ -884,10 +885,10 @@ void DiskFileSender::handleWrite(const b
+ }
+
+ if (finished_sending) {
+- // TCPConnection::finish() calls TCPServer::finishConnection, which will either:
++ // connection::finish() calls TCPServer::finishConnection, which will either:
+ // a) call HTTPServer::handleConnection again if keep-alive is true; or,
+ // b) close the socket and remove it from the server's connection pool
+- m_writer->getTCPConnection()->finish();
++ m_writer->get_connection()->finish();
+ } else {
+ send();
+ }
+@@ -897,7 +898,7 @@ void DiskFileSender::handleWrite(const b
+ } // end namespace plugins
+ } // end namespace pion
+
+-
++#if 0
+ /// creates new FileService objects
+ extern "C" PION_SERVICE_API pion::plugins::FileService *pion_create_FileService(void)
+ {
+@@ -909,3 +910,5 @@ extern "C" PION_SERVICE_API void pion_de
+ {
+ delete service_ptr;
+ }
++#endif
++
+diff -rup fatrat-1.2.0_beta2/src/remote/pion/FileService.hpp fatrat-1.2.0_beta2.new/src/remote/pion/FileService.hpp
+--- fatrat-1.2.0_beta2/src/remote/pion/FileService.hpp 2012-07-14 12:44:27.000000000 +0100
++++ fatrat-1.2.0_beta2.new/src/remote/pion/FileService.hpp 2013-04-29 19:17:17.079967487 +0100
+@@ -16,13 +16,13 @@
+ #include <boost/thread/once.hpp>
+ #include <boost/thread/mutex.hpp>
+ #include <boost/shared_array.hpp>
+-#include <pion/PionLogger.hpp>
+-#include <pion/PionException.hpp>
+-#include <pion/PionHashMap.hpp>
+-#include <pion/net/WebService.hpp>
+-#include <pion/net/HTTPRequest.hpp>
+-#include <pion/net/HTTPResponseWriter.hpp>
+-#include <pion/net/HTTPServer.hpp>
++#include <pion/logger.hpp>
++#include <pion/error.hpp>
++#include <pion/hash_map.hpp>
++#include <pion/http/plugin_service.hpp>
++#include <pion/http/request.hpp>
++#include <pion/http/response_writer.hpp>
++#include <pion/http/server.hpp>
+ #include <string>
+ #include <map>
+
+@@ -144,8 +144,8 @@ public:
+ */
+ static inline boost::shared_ptr<DiskFileSender>
+ create(DiskFile& file,
+- pion::net::HTTPRequestPtr& request,
+- pion::net::TCPConnectionPtr& tcp_conn,
++ pion::http::request_ptr& request,
++ pion::tcp::connection_ptr& tcp_conn,
+ unsigned long max_chunk_size = 0)
+ {
+ return boost::shared_ptr<DiskFileSender>(new DiskFileSender(file, request,
+@@ -161,11 +161,11 @@ public:
+ void send(void);
+
+ /// sets the logger to be used
+- inline void setLogger(PionLogger log_ptr) { m_logger = log_ptr; }
++ inline void setLogger(pion::logger log_ptr) { m_logger = log_ptr; }
+
+ /// returns the logger currently in use
+- inline PionLogger getLogger(void) { return m_logger; }
+- inline pion::net::HTTPResponseWriterPtr getWriter() { return m_writer; }
++ inline pion::logger getLogger(void) { return m_logger; }
++ inline pion::http::response_writer_ptr getWriter() { return m_writer; }
+
+
+ protected:
+@@ -179,8 +179,8 @@ protected:
+ * @param max_chunk_size sets the maximum chunk size
+ */
+ DiskFileSender(DiskFile& file,
+- pion::net::HTTPRequestPtr& request,
+- pion::net::TCPConnectionPtr& tcp_conn,
++ pion::http::request_ptr& request,
++ pion::tcp::connection_ptr& tcp_conn,
+ unsigned long max_chunk_size);
+
+ /**
+@@ -194,7 +194,7 @@ protected:
+
+
+ /// primary logging interface used by this class
+- PionLogger m_logger;
++ pion::logger m_logger;
+
+
+ private:
+@@ -203,7 +203,7 @@ private:
+ DiskFile m_disk_file;
+
+ /// the HTTP response we are sending
+- pion::net::HTTPResponseWriterPtr m_writer;
++ pion::http::response_writer_ptr m_writer;
+
+ /// used to read the file from disk if it is not already cached in memory
+ boost::filesystem::ifstream m_file_stream;
+@@ -233,73 +233,78 @@ typedef boost::shared_ptr<DiskFileSender
+ /// FileService: web service that serves regular files
+ ///
+ class FileService :
+- public pion::net::WebService
++ public pion::http::plugin_service
+ {
+ public:
+
+ /// exception thrown if the directory configured is not found
+- class DirectoryNotFoundException : public PionException {
++ class DirectoryNotFoundException : public pion::exception {
+ public:
+ DirectoryNotFoundException(const std::string& dir)
+- : PionException("FileService directory not found: ", dir) {}
++ : pion::exception("FileService directory not found") {}
+ };
+
+ /// exception thrown if the directory configuration option is not a directory
+- class NotADirectoryException : public PionException {
++ class NotADirectoryException : public pion::exception {
+ public:
+ NotADirectoryException(const std::string& dir)
+- : PionException("FileService option is not a directory: ", dir) {}
++ : pion::exception("FileService option is not a directory") {}
+ };
+
+ /// exception thrown if the file configured is not found
+- class FileNotFoundException : public PionException {
++ class FileNotFoundException : public pion::exception {
+ public:
+ FileNotFoundException(const std::string& file)
+- : PionException("FileService file not found: ", file) {}
++ : pion::exception("FileService file not found") {}
+ };
+
+ /// exception thrown if the file configuration option is not a file
+- class NotAFileException : public PionException {
++ class NotAFileException : public pion::exception {
+ public:
+ NotAFileException(const std::string& file)
+- : PionException("FileService option is not a file: ", file) {}
++ : pion::exception("FileService option is not a file") {}
+ };
+
+ /// exception thrown if the cache option is set to an invalid value
+- class InvalidCacheException : public PionException {
++ class InvalidCacheException : public pion::exception {
+ public:
+ InvalidCacheException(const std::string& value)
+- : PionException("FileService invalid value for cache option: ", value) {}
++ : pion::exception("FileService invalid value for cache option") {}
+ };
+
+ /// exception thrown if the scan option is set to an invalid value
+- class InvalidScanException : public PionException {
++ class InvalidScanException : public pion::exception {
+ public:
+ InvalidScanException(const std::string& value)
+- : PionException("FileService invalid value for scan option: ", value) {}
++ : pion::exception("FileService invalid value for scan option") {}
+ };
+
+ /// exception thrown if an option is set to an invalid value
+- class InvalidOptionValueException : public PionException {
++ class InvalidOptionValueException : public pion::exception {
+ public:
+ InvalidOptionValueException(const std::string& option, const std::string& value)
+- : PionException("FileService invalid value for " + option + " option: ", value) {}
++ : pion::exception("FileService invalid value for " + option + " option") {}
+ };
+
+ /// exception thrown if we are unable to read a file from disk
+- class FileReadException : public PionException {
++ class FileReadException : public pion::exception {
+ public:
+ FileReadException(const std::string& value)
+- : PionException("FileService unable to read file: ", value) {}
++ : pion::exception("FileService unable to read file: "+value) {}
+ };
+
+ /// exception thrown if we do not know how to respond (should never happen)
+- class UndefinedResponseException : public PionException {
++ class UndefinedResponseException : public pion::exception {
+ public:
+ UndefinedResponseException(const std::string& value)
+- : PionException("FileService has an undefined response: ", value) {}
++ : pion::exception("FileService has an undefined response: "+value) {}
+ };
+
++ class UnknownOptionException : public pion::exception {
++ public:
++ UnknownOptionException(const std::string& value)
++ : pion::exception("FileService invalid option name: "+value) {}
++ };
+
+ // default constructor and destructor
+ FileService(void);
+@@ -315,11 +320,11 @@ public:
+ * max_chunk_size:
+ * writable:
+ */
+- virtual void setOption(const std::string& name, const std::string& value);
++ virtual void set_option(const std::string& name, const std::string& value);
+
+ /// handles requests for FileService
+- virtual void operator()(pion::net::HTTPRequestPtr& request,
+- pion::net::TCPConnectionPtr& tcp_conn);
++ virtual void operator()(pion::http::request_ptr& request,
++ pion::tcp::connection_ptr& tcp_conn);
+
+ /// called when the web service's server is starting
+ virtual void start(void);
+@@ -328,10 +333,10 @@ public:
+ virtual void stop(void);
+
+ /// sets the logger to be used
+- inline void setLogger(PionLogger log_ptr) { m_logger = log_ptr; }
++ inline void setLogger(pion::logger log_ptr) { m_logger = log_ptr; }
+
+ /// returns the logger currently in use
+- inline PionLogger getLogger(void) { return m_logger; }
++ inline pion::logger getLogger(void) { return m_logger; }
+
+
+ protected:
+@@ -372,11 +377,11 @@ protected:
+ */
+ static std::string findMIMEType(const std::string& file_name);
+
+- void sendNotFoundResponse(pion::net::HTTPRequestPtr& http_request,
+- pion::net::TCPConnectionPtr& tcp_conn);
++ void sendNotFoundResponse(pion::http::request_ptr& http_request,
++ pion::tcp::connection_ptr& tcp_conn);
+
+ /// primary logging interface used by this class
+- PionLogger m_logger;
++ pion::logger m_logger;
+
+
+ private:
+diff -rup fatrat-1.2.0_beta2/src/remote/XmlRpcService.cpp fatrat-1.2.0_beta2.new/src/remote/XmlRpcService.cpp
+--- fatrat-1.2.0_beta2/src/remote/XmlRpcService.cpp 2012-07-14 12:44:27.000000000 +0100
++++ fatrat-1.2.0_beta2.new/src/remote/XmlRpcService.cpp 2013-04-29 19:17:17.079967487 +0100
+@@ -37,10 +37,10 @@ respects for all of the code used other
+ #include <QStringList>
+ #include <QFileInfo>
+ #include <QTemporaryFile>
+-#include <pion/net/HTTPResponseWriter.hpp>
++#include <pion/http/response_writer.hpp>
+ #include <QtDebug>
+
+-using namespace pion::net;
++using namespace pion::http;
+
+ extern QList<Queue*> g_queues;
+ extern QReadWriteLock g_queuesLock;
+@@ -151,9 +151,9 @@ void XmlRpcService::globalInit()
+
+ }
+
+-void XmlRpcService::operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn)
++void XmlRpcService::operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn)
+ {
+- if (request->getMethod() != pion::net::HTTPTypes::REQUEST_METHOD_POST)
++ if (request->get_method() != pion::http::types::REQUEST_METHOD_POST)
+ {
+ static const std::string NOT_ALLOWED_HTML_START =
+ "<html><head>\n"
+@@ -164,20 +164,20 @@ void XmlRpcService::operator()(pion::net
+ static const std::string NOT_ALLOWED_HTML_FINISH =
+ " is not allowed on this server.</p>\n"
+ "</body></html>\n";
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn)));
+- writer->getResponse().setStatusCode(HTTPTypes::RESPONSE_CODE_METHOD_NOT_ALLOWED);
+- writer->getResponse().setStatusMessage(HTTPTypes::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED);
+- writer->writeNoCopy(NOT_ALLOWED_HTML_START);
+- writer << request->getMethod();
+- writer->writeNoCopy(NOT_ALLOWED_HTML_FINISH);
+- writer->getResponse().addHeader("Allow", "GET, HEAD");
++ pion::http::response_writer_ptr writer(pion::http::response_writer::create(tcp_conn, *request, boost::bind(&pion::tcp::connection::finish, tcp_conn)));
++ writer->get_response().set_status_code(types::RESPONSE_CODE_METHOD_NOT_ALLOWED);
++ writer->get_response().set_status_message(types::RESPONSE_MESSAGE_METHOD_NOT_ALLOWED);
++ writer->write_no_copy(NOT_ALLOWED_HTML_START);
++ writer << request->get_method();
++ writer->write_no_copy(NOT_ALLOWED_HTML_FINISH);
++ writer->get_response().add_header("Allow", "GET, HEAD");
+ writer->send();
+ return;
+ }
+
+ QByteArray data;
+
+- qDebug() << "XML-RPC call:" << request->getContent();
++ qDebug() << "XML-RPC call:" << request->get_content();
+
+ try
+ {
+@@ -185,7 +185,7 @@ void XmlRpcService::operator()(pion::net
+ QList<QVariant> args;
+ QVariant returnValue;
+
+- XmlRpc::parseCall(request->getContent(), function, args);
++ XmlRpc::parseCall(request->get_content(), function, args);
+
+ if(function == "Queue.getTransfers")
+ {
+@@ -240,7 +240,7 @@ void XmlRpcService::operator()(pion::net
+ throw "400 Bad Request";
+ }
+
+- HTTPResponseWriterPtr writer(HTTPResponseWriter::create(tcp_conn, *request, boost::bind(&TCPConnection::finish, tcp_conn)));
++ pion::http::response_writer_ptr writer(pion::http::response_writer::create(tcp_conn, *request, boost::bind(&pion::tcp::connection::finish, tcp_conn)));
+ writer->write(data.data(), data.size());
+ writer->send();
+ }
+diff -rup fatrat-1.2.0_beta2/src/remote/XmlRpcService.h fatrat-1.2.0_beta2.new/src/remote/XmlRpcService.h
+--- fatrat-1.2.0_beta2/src/remote/XmlRpcService.h 2012-07-14 12:44:27.000000000 +0100
++++ fatrat-1.2.0_beta2.new/src/remote/XmlRpcService.h 2013-04-29 19:17:17.079967487 +0100
+@@ -34,7 +34,8 @@ respects for all of the code used other
+ #include <QVariantMap>
+ #include <QQueue>
+ #include <QPair>
+-#include <pion/net/WebServer.hpp>
++#include <pion/http/server.hpp>
++#include <pion/http/plugin_service.hpp>
+
+ #ifndef WITH_WEBINTERFACE
+ # error This file is not supposed to be included!
+@@ -43,12 +44,12 @@ respects for all of the code used other
+ class Queue;
+ class Transfer;
+
+-class XmlRpcService : public QObject, public pion::net::WebService
++class XmlRpcService : public QObject, public pion::http::plugin_service
+ {
+ Q_OBJECT
+ public:
+ XmlRpcService();
+- void operator()(pion::net::HTTPRequestPtr &request, pion::net::TCPConnectionPtr &tcp_conn);
++ void operator()(pion::http::request_ptr &request, pion::tcp::connection_ptr &tcp_conn);
+ static void globalInit();
+ static void registerFunction(QString name, QVariant (*func)(QList<QVariant>&), QVector<QVariant::Type> arguments);
+ static void deregisterFunction(QString name);
diff --git a/community/fbshot/PKGBUILD b/community/fbshot/PKGBUILD
deleted file mode 100644
index 489f897f8..000000000
--- a/community/fbshot/PKGBUILD
+++ /dev/null
@@ -1,22 +0,0 @@
-# $Id: PKGBUILD 63550 2012-02-05 11:55:26Z ibiru $
-# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
-# Contributor: sp42b <sp42b|a_t|gmx.net>
-
-pkgname=fbshot
-pkgver=0.3
-pkgrel=4
-pkgdesc="Takes screenshots (PNG) from your framebuffer device (e.g. console)."
-arch=('i686' 'x86_64')
-url="http://www.sfires.net/fbshot/"
-license=('GPL')
-depends=('libpng')
-source=(http://www.sfires.net/stuff/fbshot/$pkgname-$pkgver.tar.gz)
-md5sums=('2cc6cc25cdc4cd447a8b0a9662907635')
-
-build() {
- cd "$srcdir/$pkgname-$pkgver"
- sed -i '1,1i#include <zlib.h>' fbshot.c
- make
- install -Dm755 fbshot $pkgdir/usr/bin/fbshot
- install -Dm644 fbshot.1.man $pkgdir/usr/share/man/man1/fbshot.1
-}
diff --git a/community/fltk2/PKGBUILD b/community/fltk2/PKGBUILD
deleted file mode 100644
index 7600f7322..000000000
--- a/community/fltk2/PKGBUILD
+++ /dev/null
@@ -1,28 +0,0 @@
-# $Id: PKGBUILD 63560 2012-02-05 11:56:02Z ibiru $
-# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
-
-pkgname=fltk2
-pkgver=2.0
-_pkgver=2.0.x-alpha-r9166
-pkgrel=8
-pkgdesc="Graphical user interface toolkit for X"
-arch=(i686 x86_64)
-license=('LGPL')
-url="http://www.fltk.org/"
-depends=('libjpeg' 'libpng' 'gcc-libs' 'libxft' 'libxext' 'libxi' 'libxinerama')
-makedepends=('mesa')
-source=(http://ftp.funet.fi/pub/mirrors/ftp.easysw.com/pub/fltk/snapshots/fltk-${_pkgver}.tar.bz2)
-md5sums=('d5e7cd859d2aeb9bb6e13ee298e8b2aa')
-
-build() {
- cd $srcdir/fltk-${_pkgver}
- [ $NOEXTRACT -eq 1 ] || ./configure --prefix=/usr --enable-threads --enable-xft --enable-shared
- patch -p0 src/filename_list.cxx <<EOF
-66c66
-< int n = scandir(d, list, 0, (int(*)(const void*,const void*))sort);
----
-> int n = scandir(d, list, 0, (int(*)(const dirent64**,const dirent64**))sort);
-EOF
- make
- make DESTDIR=$pkgdir install
-}
diff --git a/community/gemrb/PKGBUILD b/community/gemrb/PKGBUILD
index 4a2ea9180..966c64d91 100644
--- a/community/gemrb/PKGBUILD
+++ b/community/gemrb/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 82325 2013-01-15 11:15:34Z stativ $
+# $Id: PKGBUILD 89424 2013-04-29 11:47:02Z bpiotrowski $
# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
pkgname=gemrb
-pkgver=0.7.2
-pkgrel=2
+pkgver=0.8.0
+pkgrel=1
pkgdesc="OSS implementation of Bioware's Infinity Engine which supports eg. Baldur's Gate"
arch=('i686' 'x86_64')
url="http://www.gemrb.org/"
@@ -13,7 +13,7 @@ makedepends=('cmake')
install=gemrb.install
options=('!libtool')
source=("http://downloads.sourceforge.net/sourceforge/gemrb/$pkgname-$pkgver.tar.gz")
-md5sums=('4260fcd42f42ce9232668b202b320b29')
+md5sums=('dc0306d4d301726ac449225313285ea1')
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/community/gource/PKGBUILD b/community/gource/PKGBUILD
index 3c492cbea..a261e7413 100644
--- a/community/gource/PKGBUILD
+++ b/community/gource/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 87416 2013-03-31 19:18:20Z stephane $
+# $Id: PKGBUILD 89529 2013-04-29 19:09:10Z svenstaro $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Jose Valecillos <valecillosjg (at) gmail (dot) com>
# Contributor: Olivier Ramonat <olivier at ramonat dot fr>
pkgname=gource
-pkgver=0.39
-pkgrel=2
+pkgver=0.40
+pkgrel=1
pkgdesc="software version control visualization"
license=(GPL3)
arch=(i686 x86_64)
@@ -12,7 +12,7 @@ url=http://code.google.com/p/gource/
depends=('ftgl' 'sdl' 'sdl_image' 'pcre' 'glew' 'boost-libs')
makedepends=('boost' 'glm' 'mesa')
source=(http://gource.googlecode.com/files/$pkgname-$pkgver.tar.gz)
-md5sums=('31d2d34f3f6a0c044243f477e925b8b4')
+md5sums=('89c608a7aa3c901661eb1f2db6117492')
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/community/gpointing-device-settings/PKGBUILD b/community/gpointing-device-settings/PKGBUILD
index e901f65b6..65ef2fe48 100644
--- a/community/gpointing-device-settings/PKGBUILD
+++ b/community/gpointing-device-settings/PKGBUILD
@@ -1,63 +1,40 @@
-# $Id: PKGBUILD 88555 2013-04-19 17:24:27Z spupykin $
+# $Id: PKGBUILD 89372 2013-04-29 00:10:30Z bgyorgy $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: Thomas Mudrunka <harvie@@email..cz>
pkgname=gpointing-device-settings
pkgver=1.5.1
-pkgrel=3
-pkgdesc="GUI tool for setting pointing device such as TrackPoint or Touchpad.
-Each UI can be written as dynamic loadable module, so a third party can add its own UI. This
-will replace GSynaptics."
+pkgrel=4
+pkgdesc="GUI tool for setting pointing device such as TrackPoint or Touchpad"
arch=('i686' 'x86_64')
license=('GPL')
url="http://live.gnome.org/GPointingDeviceSettings"
-depends=('gtk2' 'gconf' 'gnome-settings-daemon' 'xorg-xinput')
-makedepends=('intltool' 'pkgconfig')
-optdepends=('xf86-input-synaptics: Synaptics touchpads'
- 'libsynaptics: Synaptics touchpads')
+depends=('gtk2' 'gconf')
+makedepends=('gnome-settings-daemon' 'intltool')
+options=('!libtool')
source=("http://keihanna.dl.sourceforge.jp/gsynaptics/45812/${pkgname}-${pkgver}.tar.gz")
md5sums=('1d1491473df8eabca3c15c997a975d7f')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
- #WORKAROUND!!! WE SHOULD GET RID OF THIS:###########
- echo 'diff --git a/configure.ac b/configure.ac
-index 29215e8..728d4c0 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -146,9 +146,9 @@ GENHTML_OPTIONS="--title 'GPointingDeviceSettings Code Coverage'"
+ # Enable deprecations
+ sed -i -e '/DISABLE_DEPRECATED/d' -e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.ac
- GPDS_CFLAGS="$XINPUT_CFLAGS $GTK_CFLAGS"
- GPDS_CFLAGS="$GPDS_CFLAGS $GCONF2_CFLAGS"
--GPDS_CFLAGS="$GPDS_CFLAGS -DGTK_DISABLE_DEPRECATED"
--GPDS_CFLAGS="$GPDS_CFLAGS -DGDK_DISABLE_DEPRECATED"
--GPDS_CFLAGS="$GPDS_CFLAGS -DG_DISABLE_DEPRECATED"
-+#GPDS_CFLAGS="$GPDS_CFLAGS -DGTK_DISABLE_DEPRECATED"
-+#GPDS_CFLAGS="$GPDS_CFLAGS -DGDK_DISABLE_DEPRECATED"
-+#GPDS_CFLAGS="$GPDS_CFLAGS -DG_DISABLE_DEPRECATED"
- GPDS_CFLAGS="$GPDS_CFLAGS -DGPDS_MODULEDIR=\\\"\"\$(gpds_moduledir)\"\\\""
- GPDS_CFLAGS="$GPDS_CFLAGS -DGPDS_DATADIR=\\\"\"\$(gpds_datadir)\"\\\""
- GPDS_CFLAGS="$GPDS_CFLAGS -DGPDS_UIDIR=\\\"\"\$(gpds_uidir)\"\\\""
-' | patch -p1
+ # Disable GSD plugin (won't build with GSD 3.8)
+ sed -i 's/ gnome-settings-daemon-plugins//' modules/Makefile.am
- #Magic patch contributed by mattis:
- echo '--- a/modules/gnome-settings-daemon-plugins/gsd-pointing-device-plugin.c
-+++ b/modules/gnome-settings-daemon-plugins/gsd-pointing-device-plugin.c
-@@ -158,6 +158,9 @@
- plugin_class->activate = activate;
- plugin_class->deactivate = deactivate;
- }
-+
-+static void
-+gsd_mouse_extension_plugin_class_finalize(GsdMouseExtensionPluginClass *klass);
-' | patch -p1
-
- ./configure --prefix=/usr --sysconfdir=/etc
+ autoreconf -fi
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --disable-static --disable-schemas-install \
+ --with-gconf-schema-file-dir=/usr/share/gconf/schemas
make
}
package() {
cd "${srcdir}/${pkgname}-${pkgver}"
make DESTDIR=${pkgdir} install
+
+ # Remove GConf schema (used by GSD plugin)
+ rm -r "${pkgdir}/usr/share/gconf"
}
diff --git a/community/gprolog/PKGBUILD b/community/gprolog/PKGBUILD
index 8c7eb438e..c2ef1465c 100644
--- a/community/gprolog/PKGBUILD
+++ b/community/gprolog/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 88313 2013-04-16 13:27:51Z spupykin $
+# $Id: PKGBUILD 89518 2013-04-29 16:43:32Z spupykin $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Maintainer: Geoffroy Carrier <geoffroy.carrier@koon.fr>
# Contributer: Jason Chu <jchu@xentac.net>
pkgname=gprolog
-pkgver=1.4.3
+pkgver=1.4.4
pkgrel=1
pkgdesc="GNU Prolog"
arch=('i686' 'x86_64')
@@ -12,7 +12,7 @@ url="http://www.gprolog.org/"
depends=()
license=('GPL')
source=(ftp://ftp.gnu.org/gnu/gprolog/gprolog-$pkgver.tar.gz)
-md5sums=('c6d62f93a0274492a2029c267ca8edee')
+md5sums=('37009da471e5217ff637ad1c516448c8')
build() {
cd "$srcdir/gprolog-$pkgver/src"
diff --git a/community/hwinfo/PKGBUILD b/community/hwinfo/PKGBUILD
index 1da0199a3..8c873ac8c 100644
--- a/community/hwinfo/PKGBUILD
+++ b/community/hwinfo/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 75503 2012-08-26 12:50:22Z arodseth $
+# $Id: PKGBUILD 89408 2013-04-29 10:54:52Z arodseth $
# Maintainer: Alexander Rødseth <rodseth@gmail.com>
# Contributor: Kaiting Chen <kaitocracy@gmail.com>
# Contributor: Gergely Imreh <imrehgATgmailDOTcom>
@@ -8,8 +8,8 @@
# Contributor: ninja_pt
pkgname=hwinfo
-pkgver=20.0
-_subver=1.4
+pkgver=20.1
+_subver=3.10
pkgrel=1
pkgdesc='Hardware detection tool from openSUSE'
arch=('x86_64' 'i686')
@@ -19,28 +19,28 @@ depends=('perl' 'libx86emu')
makedepends=('sysfsutils' 'rpmextract' 'flex')
source=("http://download.opensuse.org/source/factory/repo/oss/suse/src/$pkgname-$pkgver-$_subver.src.rpm"
'custom_ioctl.patch')
-sha256sums=('466423b00fda00bc5e927352fb8d2f52b4d4e4b298401cd44c48231951c2a26b'
+sha256sums=('b0e2e51b4dd754071fb40843deaaafb0755388de5335b1d2c4c081d0f6393841'
'6e83b50aa34f31db5fe6de938402e7c4dda6ffa9ffe1346c076e4779018fcf1d')
-build() {
+prepare() {
cd "$srcdir"
- msg2 "Extracting source rpm..."
rpmextract.sh "$pkgname-$pkgver-$_subver.src.rpm"
tar jxf $pkgname-$pkgver.tar.bz2
cd "$pkgname-$pkgver"
- msg2 "Patching..."
- patch -p0 < ../custom_ioctl.patch
- msg2 "Compiling..."
+ patch -p0 -i ../custom_ioctl.patch
+}
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+
make -j1 CFLAGS+="-fPIC -I$srcdir/$pkgname-$pkgver/src/hd" LIBDIR=/usr/lib
}
package() {
cd "$srcdir/$pkgname-$pkgver"
- msg2 "Packaging files..."
make LIBDIR=/usr/lib DESTDIR="$pkgdir" install
- msg2 "Cleaning up..."
rmdir "$pkgdir/sbin"
}
diff --git a/community/libvirt/PKGBUILD b/community/libvirt/PKGBUILD
index 6aa3694e5..5ba45a717 100644
--- a/community/libvirt/PKGBUILD
+++ b/community/libvirt/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 87474 2013-04-01 10:35:45Z spupykin $
+# $Id: PKGBUILD 89422 2013-04-29 11:34:53Z spupykin $
# Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: Jonathan Wiersma <archaur at jonw dot org>
pkgname=libvirt
pkgver=1.0.4
-pkgrel=1
+pkgrel=2
pkgdesc="API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc)"
arch=('i686' 'x86_64')
url="http://libvirt.org/"
@@ -61,10 +61,15 @@ build() {
--with-qemu-user=nobody --with-qemu-group=nobody \
--without-netcf --with-interface
make
+
sed -i 's|/etc/sysconfig/libvirtd|/etc/conf.d/libvirtd|' daemon/libvirtd.service
- sed -i 's|/etc/sysconfig/libvirt-guests|/etc/conf.d/libvirtd-guests|' tools/libvirt-guests.service
- sed -i 's|/etc/init.d/libvirt-g|/etc/rc.d/libvirtd-g|g' tools/libvirt-guests.service
+ sed -i \
+ -e 's|/etc/sysconfig/libvirt-guests|/etc/conf.d/libvirtd-guests|' \
+ -e 's|/etc/init.d/libvirt-g|/etc/rc.d/libvirtd-g|g' \
+ -e 's|After=.*|After=syslog.target network.target libvirtd.service|' \
+ tools/libvirt-guests.service
sed -i 's|@sbindir@|/usr/sbin|g' src/virtlockd.service
+ sed -i 's|#group =.*|group="kvm"|' src/qemu/qemu.conf
}
package() {
@@ -82,9 +87,6 @@ package() {
install -D -m644 "$srcdir"/libvirt.tmpfiles.d "$pkgdir"/usr/lib/tmpfiles.d/libvirt.conf
mv "$pkgdir"/lib/* "$pkgdir"/usr/lib/
- sed -i \
- 's|After=.*|After=syslog.target network.target libvirtd.service|' \
- "$pkgdir"/usr/lib/systemd/system/libvirt-guests.service
rm -rf \
"$pkgdir"/var/run \
diff --git a/community/log4cpp/PKGBUILD b/community/log4cpp/PKGBUILD
index 21bfddf37..3ac6c659b 100644
--- a/community/log4cpp/PKGBUILD
+++ b/community/log4cpp/PKGBUILD
@@ -1,29 +1,27 @@
-# $Id: PKGBUILD 58314 2011-11-11 08:13:40Z stativ $
+# $Id: PKGBUILD 89526 2013-04-29 18:41:08Z stativ $
# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
# Contributor : Geraud Le Falher <daureg@gmail.com>
pkgname=log4cpp
-pkgver=1.0
-pkgrel=6
+pkgver=1.1
+pkgrel=1
pkgdesc="A library of C++ classes for flexible logging to files, syslog, IDSA and other destinations."
arch=('i686' 'x86_64')
-url="http://log4cpp.hora-obscura.de/"
+url="http://log4cpp.sourceforge.net/"
license=('LGPL')
depends=('gcc-libs')
options=('!libtool')
-source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz gcc43.patch)
-md5sums=('1face50ead0790d1297dfb04bacf273c'
- '09a6fd8ab6527a417c97c4db5215e558')
+source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('b9ef6244baa5e5e435f35e0b9474b35d')
build() {
- cd "$srcdir/$pkgname-$pkgver"
- patch -Np1 -i "$srcdir"/gcc43.patch
+ cd "$srcdir/$pkgname"
./configure --prefix=/usr --disable-doxygen --disable-dot --without-idsa
make
}
package() {
- cd "$srcdir/$pkgname-$pkgver"
+ cd "$srcdir/$pkgname"
make DESTDIR="$pkgdir" install
}
diff --git a/community/log4cpp/gcc43.patch b/community/log4cpp/gcc43.patch
deleted file mode 100644
index a60f986e9..000000000
--- a/community/log4cpp/gcc43.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Index: log4cpp-1.0/src/BasicLayout.cpp
-===================================================================
---- log4cpp-1.0.orig/src/BasicLayout.cpp 2008-03-14 16:06:57.000000000 -0400
-+++ log4cpp-1.0/src/BasicLayout.cpp 2008-03-14 16:07:11.000000000 -0400
-@@ -15,6 +15,8 @@
- #include <sstream>
- #endif
-
-+#include <memory>
-+
- namespace log4cpp {
-
- BasicLayout::BasicLayout() {
-Index: log4cpp-1.0/src/PatternLayout.cpp
-===================================================================
---- log4cpp-1.0.orig/src/PatternLayout.cpp 2008-03-14 16:07:33.000000000 -0400
-+++ log4cpp-1.0/src/PatternLayout.cpp 2008-03-14 16:07:49.000000000 -0400
-@@ -370,7 +370,7 @@
- literal = "";
- }
- if ((minWidth != 0) || (maxWidth != 0)) {
-- component = new FormatModifierComponent(component, std::abs(minWidth), maxWidth, minWidth < 0);
-+ component = new FormatModifierComponent(component, std::abs((float)minWidth), maxWidth, minWidth < 0);
- minWidth = maxWidth = 0;
- }
- _components.push_back(component);
diff --git a/community/muffin/PKGBUILD b/community/muffin/PKGBUILD
index 6c2e8d005..ccf3aa3a9 100644
--- a/community/muffin/PKGBUILD
+++ b/community/muffin/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 88909 2013-04-24 17:12:07Z bgyorgy $
+# $Id: PKGBUILD 89374 2013-04-29 01:14:49Z bgyorgy $
# Maintainer: Alexandre Filgueira <alexfilgueira@cinnarch.com>
# Contributor: Adam Hani Schakaki <adam@schakaki.net>
# Contributor: Ner0
pkgname=muffin
-pkgver=1.7.3
-pkgrel=2
+pkgver=1.7.4
+pkgrel=1
pkgdesc="Cinnamon window manager based on Mutter"
arch=('i686' 'x86_64')
url="https://github.com/linuxmint/muffin"
@@ -17,7 +17,7 @@ options=('!libtool' '!emptydirs')
install=$pkgname.install
source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/muffin/tarball/$pkgver"
"switch-applications.patch")
-md5sums=('30e329da6af10e825dace490f13e445f'
+md5sums=('d64bfe853e6fda5ec11a06581743f774'
'a5d5d76dc281277a8afc83d7affdcc7b')
build() {
diff --git a/community/nemo/PKGBUILD b/community/nemo/PKGBUILD
index 00ab3bc7f..20dcea195 100644
--- a/community/nemo/PKGBUILD
+++ b/community/nemo/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 88912 2013-04-24 17:42:52Z bgyorgy $
+# $Id: PKGBUILD 89376 2013-04-29 01:33:47Z bgyorgy $
# Maintainer: Alexandre Filgueira <alexfilgueira@cinnarch.com>
# Contributor: Ner0
pkgname=nemo
-pkgver=1.7.3
-pkgrel=3
+pkgver=1.7.4
+pkgrel=1
pkgdesc="Cinnamon file manager (Nautilus fork)"
arch=('i686' 'x86_64')
url="https://github.com/linuxmint/nemo"
@@ -18,7 +18,7 @@ install=nemo.install
source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/nemo/tarball/$pkgver"
"tracker-0.16.patch"
"remove-desktop-background.patch")
-md5sums=('04c021da543e2562b712107c2be9a8c2'
+md5sums=('fc5595a2489ed28f274c5f79ce95d5de'
'9e170cc74eee901634b3367b06a209c6'
'f10af52377e44e1efe8ec4934aa4d4d2')
diff --git a/community/pion/PKGBUILD b/community/pion/PKGBUILD
index de7f2fe3f..7e5759907 100644
--- a/community/pion/PKGBUILD
+++ b/community/pion/PKGBUILD
@@ -1,12 +1,10 @@
-# $Id: PKGBUILD 87431 2013-03-31 19:18:42Z stephane $
+# $Id: PKGBUILD 89527 2013-04-29 18:57:40Z stativ $
# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
pkgname=pion
-pkgver=4.0.13.1
-# use the git snapshot until a new version is out
-_pkgver=dddce5e02d8a60f958e466e690d38eee924475b0
-pkgrel=4
+pkgver=5.0.1
+pkgrel=1
pkgdesc="A C++ development library for implementing lightweight HTTP interfaces"
-url="http://www.cloudmeter.com/pion/support/"
+url="https://github.com/cloudmeter/pion"
arch=('i686' 'x86_64')
license=('custom:Boost')
depends=('boost-libs' 'openssl' 'log4cpp')
@@ -14,11 +12,11 @@ makedepends=('boost')
provides=('pion-net')
conflicts=('pion-net')
replaces=('pion-net')
-source=(https://github.com/cloudmeter/pion/archive/${_pkgver}.zip)
-md5sums=('4b312452058a6f2580b5d88b03321457')
+source=(https://github.com/cloudmeter/pion/archive/$pkgver.zip)
+md5sums=('9f8af4f3e600a5b0573fb66132a86528')
build() {
- cd "$srcdir/$pkgname-$_pkgver"
+ cd "$srcdir/$pkgname-$pkgver"
sh autogen.sh
@@ -33,12 +31,12 @@ build() {
}
check() {
- cd "$srcdir/$pkgname-$_pkgver"
+ cd "$srcdir/$pkgname-$pkgver"
make -k check
}
package() {
- cd "$srcdir/$pkgname-$_pkgver"
+ cd "$srcdir/$pkgname-$pkgver"
make DESTDIR="$pkgdir" install
# install license
diff --git a/community/rawtherapee/PKGBUILD b/community/rawtherapee/PKGBUILD
index 229360e2f..516d46507 100644
--- a/community/rawtherapee/PKGBUILD
+++ b/community/rawtherapee/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 86054 2013-03-11 19:01:26Z stativ $
+# $Id: PKGBUILD 89541 2013-04-29 19:53:51Z stativ $
# Maintainer: Lukas Jirkovsky <l.jirkovsky AT gmail.com>
# Contributor: Bogdan Szczurek <thebodzio(at)gmail.com>
# Contributor: Vaclav Kramar <vaclav.kramar@tiscali.cz>
@@ -6,7 +6,7 @@
pkgname=rawtherapee
pkgver=4.0.10
-pkgrel=1
+pkgrel=2
epoch=1
pkgdesc="RAW photo editor"
arch=('i686' 'x86_64')
diff --git a/community/rekonq/PKGBUILD b/community/rekonq/PKGBUILD
index 76f12e977..7891929e3 100644
--- a/community/rekonq/PKGBUILD
+++ b/community/rekonq/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 85861 2013-03-07 20:16:32Z andrea $
+# $Id: PKGBUILD 89389 2013-04-29 06:54:51Z andrea $
# Maintainer: Peter Lewis <plewis@aur.archlinux.org>
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Panagiotis Papadopoulos <pano_90 AT gmx DOT net>
pkgname=rekonq
-pkgver=2.2.1
+pkgver=2.3.0
pkgrel=1
pkgdesc='A WebKit based web browser for KDE'
arch=('i686' 'x86_64')
@@ -15,7 +15,7 @@ makedepends=('cmake' 'automoc4')
optdepends=('qca-ossl: to use the sync handler')
install=${pkgname}.install
source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2")
-sha256sums=('aa3939af5038491c612bb113647e8a1110720d6fc1038c8c71e6cf1308efa47b')
+sha256sums=('f84fe975e79cbdcd218eb73d5371ee5ca0e11a2aea0d1d890ba9f24a505cf65c')
build(){
mkdir build
diff --git a/community/virtualgl/PKGBUILD b/community/virtualgl/PKGBUILD
index 87dcb047b..ea2c2d807 100644
--- a/community/virtualgl/PKGBUILD
+++ b/community/virtualgl/PKGBUILD
@@ -4,7 +4,7 @@
pkgname=virtualgl
pkgver=2.3.2
-pkgrel=2
+pkgrel=3
pkgdesc="Redirects 3D commands from an OpenGL application onto a server-side 3D graphics card"
arch=('i686' 'x86_64')
url="http://virtualgl.org"
@@ -24,7 +24,8 @@ build() {
-DTJPEG_INCLUDE_DIR=/usr/include \
-DTJPEG_LIBRARY=/usr/lib/libturbojpeg.so \
-DVGL_LIBDIR=/usr/lib \
- -DVGL_BINDIR=/usr/bin
+ -DVGL_BINDIR=/usr/bin \
+ -DVGL_DOCDIR=/usr/share/doc/${pkgname}
make
}
diff --git a/extra/glibmm/PKGBUILD b/extra/glibmm/PKGBUILD
index e2ca9c3fc..23388f7b8 100644
--- a/extra/glibmm/PKGBUILD
+++ b/extra/glibmm/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 183316 2013-04-21 22:06:34Z heftig $
+# $Id: PKGBUILD 183952 2013-04-29 21:53:23Z heftig $
# Maintainer: Jan de Groot <jgc@archlinux.org>
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
pkgbase=glibmm
pkgname=('glibmm' 'glibmm-docs')
-pkgver=2.36.0
+pkgver=2.36.1
pkgrel=1
arch=('i686' 'x86_64')
license=('LGPL')
@@ -12,7 +12,7 @@ makedepends=('glib2' 'libsigc++2.0' 'pkgconfig')
source=(http://ftp.gnome.org/pub/GNOME/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz)
options=('!libtool')
url="http://www.gtkmm.org/"
-sha256sums=('59c54996cccc527f3a257964e7226151175c423f6fb22166e81d65a652f483f3')
+sha256sums=('d1f7dec2fd75ea95034ec143fcf2ff77a02e92aacf3e0cc110f9c67e7fe23766')
build() {
cd "$pkgname-$pkgver"
diff --git a/extra/goffice/PKGBUILD b/extra/goffice/PKGBUILD
index cdd1f57e6..98659b508 100644
--- a/extra/goffice/PKGBUILD
+++ b/extra/goffice/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 179967 2013-03-13 14:50:17Z jgc $
+# $Id: PKGBUILD 183875 2013-04-29 09:27:35Z jgc $
# Maintainer: Aaron Griffin <aaron@archlinux.org>
pkgname=goffice
-pkgver=0.10.1
+pkgver=0.10.2
pkgrel=1
pkgdesc="A library of document-centric objects and utilities built on top of GLib and Gtk+"
arch=('i686' 'x86_64')
@@ -12,7 +12,7 @@ options=('!libtool')
makedepends=('pkgconfig' 'intltool' 'gtk-doc' 'gobject-introspection')
depends=('librsvg' 'gtk3' 'libgsf' 'libspectre')
source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz)
-sha256sums=('5c38f4e81e874cc8e89481b080f77c47c72bfd6fe2526f4fc2ef87c17f96cad0')
+sha256sums=('7d38769a7af655c0f0373738c786318734400d71b6bbc8d1ce6b6de99bb95674')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/extra/xfce4-session/PKGBUILD b/extra/xfce4-session/PKGBUILD
index 54b01b4a8..fa6e5d7fc 100644
--- a/extra/xfce4-session/PKGBUILD
+++ b/extra/xfce4-session/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 169968 2012-10-30 22:59:13Z heftig $
+# $Id: PKGBUILD 183871 2013-04-29 05:43:04Z foutrelis $
# Maintainer: Evangelos Foutras <evangelos@foutrelis.com>
# Contributor: tobias <tobias funnychar archlinux.org>
pkgname=xfce4-session
pkgver=4.10.0
-pkgrel=6
+pkgrel=7
pkgdesc="A session manager for Xfce"
arch=('i686' 'x86_64')
url="http://www.xfce.org/"
@@ -21,17 +21,31 @@ replaces=('xfce-utils')
options=('!libtool')
install=$pkgname.install
source=(http://archive.xfce.org/src/xfce/$pkgname/4.10/$pkgname-$pkgver.tar.bz2
- xfce4-session-4.10.0-add-systemd-support.patch)
+ xfce4-session-4.10.0-add-systemd-support.patch
+ xfce4-session-4.10.0-use-the-async-spawn-function-of-glib.patch
+ xfce4-session-4.10.0-store-the-watch-function-id.patch)
sha256sums=('bb8aa9a74c3d382840596fb4875144d66c7f3f47c8e9ee81d31e3428a72c46ce'
- 'ffae61c48a4bd0cb51d422cb93f2de9567abaf29085370c455ef349b6a10234b')
+ 'ffae61c48a4bd0cb51d422cb93f2de9567abaf29085370c455ef349b6a10234b'
+ '18ed175dd4242e39161a093045c6c6aebf9a408350652bde1454fe07411cdf3c'
+ '5eb5319a38f58a2d518d0e3d24b6d01c487871711fb36b55cb03a10a4591cdcf')
-build() {
+prepare() {
cd "$srcdir/$pkgname-$pkgver"
# https://bugzilla.xfce.org/show_bug.cgi?id=8729
patch -Np1 -i "$srcdir/xfce4-session-4.10.0-add-systemd-support.patch"
+ # https://bugzilla.xfce.org/show_bug.cgi?id=9709
+ patch -Np1 -i "$srcdir/xfce4-session-4.10.0-use-the-async-spawn-function-of-glib.patch"
+ patch -Np1 -i "$srcdir/xfce4-session-4.10.0-store-the-watch-function-id.patch"
+
+ sed -i 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.in
+
xdt-autogen
+}
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
./configure \
--prefix=/usr \
diff --git a/extra/xfce4-session/xfce4-session-4.10.0-store-the-watch-function-id.patch b/extra/xfce4-session/xfce4-session-4.10.0-store-the-watch-function-id.patch
new file mode 100644
index 000000000..1b86997ff
--- /dev/null
+++ b/extra/xfce4-session/xfce4-session-4.10.0-store-the-watch-function-id.patch
@@ -0,0 +1,26 @@
+From ab391138cacc62ab184a338e237c4430356b41f9 Mon Sep 17 00:00:00 2001
+From: Nick Schermer <nick@xfce.org>
+Date: Fri, 26 Apr 2013 18:05:10 +0000
+Subject: Store the watch function id to avoid possible double free (bug #9709).
+
+---
+diff --git a/xfce4-session/xfsm-startup.c b/xfce4-session/xfsm-startup.c
+index e43c53c..c621397 100644
+--- a/xfce4-session/xfsm-startup.c
++++ b/xfce4-session/xfsm-startup.c
+@@ -903,9 +903,10 @@ xfsm_startup_start_properties (XfsmProperties *properties,
+ child_watch_data = g_new0 (XfsmStartupData, 1);
+ child_watch_data->manager = g_object_ref (manager);
+ child_watch_data->properties = properties;
+- g_child_watch_add_full (G_PRIORITY_LOW, properties->pid,
+- xfsm_startup_child_watch, child_watch_data,
+- (GDestroyNotify) xfsm_startup_data_free);
++ child_watch_data->properties->child_watch_id =
++ g_child_watch_add_full (G_PRIORITY_LOW, properties->pid,
++ xfsm_startup_child_watch, child_watch_data,
++ (GDestroyNotify) xfsm_startup_data_free);
+
+ /* set a timeout -- client must register in a a certain amount of time
+ * or it's assumed to be broken/have issues. */
+--
+cgit v0.9.1
diff --git a/extra/xfce4-session/xfce4-session-4.10.0-use-the-async-spawn-function-of-glib.patch b/extra/xfce4-session/xfce4-session-4.10.0-use-the-async-spawn-function-of-glib.patch
new file mode 100644
index 000000000..beffd0524
--- /dev/null
+++ b/extra/xfce4-session/xfce4-session-4.10.0-use-the-async-spawn-function-of-glib.patch
@@ -0,0 +1,79 @@
+From dee0200fa5dc4de064f288281ddd13199ba7fcde Mon Sep 17 00:00:00 2001
+From: Nick Schermer <nick@xfce.org>
+Date: Fri, 26 Apr 2013 17:46:29 +0000
+Subject: Use the async spawn function of glib.
+
+---
+diff --git a/xfce4-session/xfsm-startup.c b/xfce4-session/xfsm-startup.c
+index 911eec6..e43c53c 100644
+--- a/xfce4-session/xfsm-startup.c
++++ b/xfce4-session/xfsm-startup.c
+@@ -864,6 +864,7 @@ xfsm_startup_start_properties (XfsmProperties *properties,
+ gint n;
+ const gchar *current_directory;
+ GPid pid;
++ GError *error = NULL;
+
+ /* release any possible old resources related to a previous startup */
+ xfsm_properties_set_default_child_watch (properties);
+@@ -878,44 +879,28 @@ xfsm_startup_start_properties (XfsmProperties *properties,
+
+ current_directory = xfsm_properties_get_string (properties, SmCurrentDirectory);
+
+- /* fork a new process for the application */
+-#ifdef HAVE_VFORK
+- /* vfork() doesn't allow you to do anything but call exec*() or _exit(),
+- * so if we need to set the working directory, we can't use vfork() */
+- if (current_directory == NULL)
+- pid = vfork ();
+- else
+-#endif
+- pid = fork ();
+-
+- /* handle the child process */
+- if (pid == 0)
++ if (!g_spawn_async (current_directory,
++ argv, NULL,
++ G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
++ NULL, NULL,
++ &pid, &error))
+ {
+- /* execute the application here */
+- if (current_directory)
+- {
+- if (chdir (current_directory))
+- g_warning ("Unable to chdir to \"%s\": %s", current_directory, strerror (errno));
+- }
+- execvp (argv[0], argv);
+- _exit (127);
+- }
+-
+- /* cleanup */
+- g_strfreev (argv);
++ g_warning ("Unable to launch \"%s\": %s",
++ *argv, error->message);
++ g_error_free (error);
++ g_strfreev (argv);
+
+- /* check if we failed to fork */
+- if (G_UNLIKELY (pid < 0))
+- {
+- /* tell the user that we failed to fork */
+- perror ("Failed to fork new process");
+ return FALSE;
+ }
+
++ xfsm_verbose ("Launched command \"%s\" with PID %dn", *argv, (gint) pid);
++
++ g_strfreev (argv);
++
+ properties->pid = pid;
+
+ /* set a watch to make sure the child doesn't quit before registering */
+- child_watch_data = g_new (XfsmStartupData, 1);
++ child_watch_data = g_new0 (XfsmStartupData, 1);
+ child_watch_data->manager = g_object_ref (manager);
+ child_watch_data->properties = properties;
+ g_child_watch_add_full (G_PRIORITY_LOW, properties->pid,
+--
+cgit v0.9.1
diff --git a/libre/cgminer-libre/PKGBUILD b/libre/cgminer-libre/PKGBUILD
index 748b1a1da..5f7c62ca2 100644
--- a/libre/cgminer-libre/PKGBUILD
+++ b/libre/cgminer-libre/PKGBUILD
@@ -7,8 +7,8 @@
pkgname=cgminer-libre
_pkgflag=libre
-pkgver=3.0.0
-pkgrel=2
+pkgver=3.1.0
+pkgrel=1
pkgdesc="Multi-threaded multi-pool GPU, FPGA and ASIC miner for bitcoin and derivative coins, without nonfree OpenCL recommendation"
url='http://forum.bitcoin.org/index.php?topic=28402.0'
license=('GPL3')
@@ -18,7 +18,7 @@ makedepends=('opencl-headers')
provides=(${pkgname%-$_pkgflag}=$pkgver)
conflicts=${pkgname%-$_pkgflag}
replaces=${pkgname%-$_pkgflag}
-source=(http://github.com/ckolivas/${pkgname%-$_pkgflag}/archive/v3.0.0.tar.gz
+source=("https://github.com/ckolivas/$_pkgname/archive/v$pkgver.tar.gz"
"${pkgname%-$_pkgflag}.conf.d"
"${pkgname%-$_pkgflag}.service")
backup=("etc/conf.d/${pkgname%-$_pkgflag}" "etc/${pkgname%-$_pkgflag}.conf")
@@ -51,6 +51,6 @@ package() {
install -Dm644 ${pkgname%-$_pkgflag}.conf "$pkgdir"/etc/${pkgname%-$_pkgflag}.conf
}
-md5sums=('63551fdb16086d57bfa4d39cd40d74cd'
- 'fe4a243fabe24608f5c05e40f0f118f6'
- 'bd76fc92fedce18c59ccea2aa79cc664')
+sha512sums=('486163017b722bb38cb42dfa5c72b57ac4c96ff0584da630f985d2f22c75418284af420a325aa82419b59dca29646b66f8c678eba7a0f36dc044207ac18c9b6c'
+ '99c38bc395848f9712ce172343d31f5c60f5d8ac1cfe2f48df8f3ec6c488fc275763a79c5ef36b99f32faa465b5a65284b38e8a63ef9b144075ee13971313b41'
+ '3317b60c6b1f14c47d8ee636113ef40a4023ab14054129de80a37947b381fd2b647a7053f4e1bb639efa225a514e862fa531908714c34040dda2d6221dde7f5f')
diff --git a/libre/mcomix-libre/PKGBUILD b/libre/mcomix-libre/PKGBUILD
index d30bbb1a3..9b727361a 100644
--- a/libre/mcomix-libre/PKGBUILD
+++ b/libre/mcomix-libre/PKGBUILD
@@ -5,16 +5,16 @@
_pkgname=mcomix
pkgname=mcomix-libre
-pkgver=0.99
+pkgver=1.00
pkgrel=1
-pkgdesc="A user-friendly, customizable image viewer specifically designed to handle comic books"
+pkgdesc="A user-friendly, customizable image viewer specifically designed to handle comic books, with unar recommendation"
arch=('any')
url="http://sourceforge.net/projects/mcomix/"
license=('GPL')
depends=('pygtk' 'python-imaging' 'xdg-utils' 'python2' \
'desktop-file-utils' 'hicolor-icon-theme' 'python2-distribute')
makedepends=('gettext' 'intltool')
-optdepends=('ununrar: for rar compressed comics')
+optdepends=('unar: for rar compressed comics')
conflicts=('mcomix' 'comix')
replaces=('mcomix' 'comix')
provides=("mcomix=${pkgver}")
@@ -37,11 +37,12 @@ package() {
export PYTHONPATH=${pkgdir}/usr/lib/python2.7/site-packages/
mkdir -p $PYTHONPATH
- python2 setup.py install --prefix=${pkgdir}/usr --optimize=1 \
- --single-version-externally-managed --root=/
+ python2 setup.py install --prefix=/usr --optimize=1 \
+ --single-version-externally-managed --root=${pkgdir}
- install -Dm644 mime/comicbook.schemas \
- ${pkgdir}/usr/share/gconf/schemas/mcomix.schemas
+ install -Dm755 mime/comicthumb ${pkgdir}/usr/bin/comicthumb
+ install -Dm644 mime/comicthumb.1.gz ${pkgdir}/usr/share/man/man1/comicthumb.1.gz
+ install -Dm644 mime/comicbook.schemas ${pkgdir}/usr/share/gconf/schemas/mcomix.schemas
}
-md5sums=('a1ff7e1955042069d5005b4034e7a914')
+md5sums=('3a916dd9da17043ab59ccd17e26eb932')
diff --git a/multilib-staging/gens-gs/PKGBUILD b/multilib-staging/gens-gs/PKGBUILD
new file mode 100755
index 000000000..9c5bde780
--- /dev/null
+++ b/multilib-staging/gens-gs/PKGBUILD
@@ -0,0 +1,61 @@
+# $Id: PKGBUILD 89400 2013-04-29 08:52:25Z alucryd $
+# Maintainer: Maxime Gauduin <alucryd@gmail.com>
+# Contributor: trya <tryagainprod@gmail.com>
+# Contributor: Yvan <madridista40@orange.fr>
+
+pkgname=gens-gs
+pkgver=2.16.7
+pkgrel=4
+pkgdesc="An emulator of Sega Genesis, Sega CD and 32X, combining features from various forks of Gens"
+arch=('i686' 'x86_64')
+url="http://segaretro.org/Gens/GS"
+license=('GPL')
+if [[ $CARCH == "x86_64" ]]; then
+ makedepends=('gcc-multilib' 'lib32-gtk2' 'lib32-mesa-libgl' 'lib32-sdl' 'nasm')
+ optdepends=('lib32-alsa-plugins: Sound support for PulseAudio'
+ 'lib32-libpulse: Sound support for PulseAudio')
+else
+ depends=('gtk2' 'sdl')
+ makedepends=('nasm')
+fi
+conflicts=('gens')
+options=('!libtool')
+source=('http://segaretro.org/images/6/6d/Gens-gs-r7.tar.gz'
+ 'gens-gtk.patch')
+sha256sums=('6320cd7bee85472891e1e29b21731d2c8180d04db67ee21256491f3f9ad145c1'
+ '29b1e9755b34e00ef7d19bdc527dc4f841400a0022c81ee71c331be4a76a6c1c')
+
+prepare() {
+ cd "${srcdir}"/${pkgname}-r7
+
+ patch -Np1 -i ../gens-gtk.patch
+}
+
+build() {
+ cd "${srcdir}"/${pkgname}-r7
+
+ if [[ $CARCH == "x86_64" ]]; then
+ export CC="gcc -m32"
+ export CXX="g++ -m32"
+ export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
+ fi
+
+ if [[ $CARCH == "x86_64" ]]; then
+ LIBS='-ldl -lX11' ./configure --host=i686-unknown-linux-gnu --prefix=/usr --libdir=/usr/lib32 --with-pic --disable-static
+ else
+ LIBS='-ldl -lX11' ./configure --prefix=/usr --with-pic --disable-static
+ fi
+ make
+}
+
+package() {
+ cd "${srcdir}"/${pkgname}-r7
+
+ if [[ $CARCH == "x86_64" ]]; then
+ depends=('lib32-gtk2' 'lib32-sdl')
+ fi
+
+ make DESTDIR="${pkgdir}" install
+}
+
+# vim: ts=2 sw=2 et:
diff --git a/multilib-staging/gens-gs/gens-gtk.patch b/multilib-staging/gens-gs/gens-gtk.patch
new file mode 100755
index 000000000..0bc6fd0ee
--- /dev/null
+++ b/multilib-staging/gens-gs/gens-gtk.patch
@@ -0,0 +1,187 @@
+diff -ru gens/src/gens/ui/gtk/about/about_window.cpp gens-build/src/gens/ui/gtk/about/about_window.cpp
+--- gens/src/gens/ui/gtk/about/about_window.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/gens/ui/gtk/about/about_window.cpp 2010-10-11 15:46:25.000000000 +0000
+@@ -84,7 +84,7 @@
+ gtk_window_set_position(GTK_WINDOW(about_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(about_window), FALSE);
+ gtk_window_set_type_hint(GTK_WINDOW(about_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+- gtk_dialog_set_has_separator(GTK_DIALOG(about_window), FALSE);
++ g_object_set(GTK_DIALOG(about_window), "has-separator", FALSE, NULL);
+
+ // Callbacks for if the window is closed.
+ g_signal_connect((gpointer)about_window, "delete_event",
+diff -ru gens/src/gens/ui/gtk/bios_misc_files/bmf_window.cpp gens-build/src/gens/ui/gtk/bios_misc_files/bmf_window.cpp
+--- gens/src/gens/ui/gtk/bios_misc_files/bmf_window.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/gens/ui/gtk/bios_misc_files/bmf_window.cpp 2010-10-11 15:33:03.000000000 +0000
+@@ -84,7 +84,7 @@
+ gtk_window_set_position(GTK_WINDOW(bmf_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(bmf_window), FALSE);
+ gtk_window_set_type_hint(GTK_WINDOW(bmf_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+- gtk_dialog_set_has_separator(GTK_DIALOG(bmf_window), FALSE);
++ g_object_set(GTK_DIALOG(bmf_window), "has-separator", FALSE, NULL);
+
+ // Callbacks for if the window is closed.
+ g_signal_connect((gpointer)bmf_window, "delete_event",
+diff -ru gens/src/gens/ui/gtk/directory_config/dir_window.cpp gens-build/src/gens/ui/gtk/directory_config/dir_window.cpp
+--- gens/src/gens/ui/gtk/directory_config/dir_window.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/gens/ui/gtk/directory_config/dir_window.cpp 2010-10-11 15:34:21.000000000 +0000
+@@ -109,7 +109,7 @@
+ gtk_window_set_position(GTK_WINDOW(dir_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(dir_window), FALSE);
+ gtk_window_set_type_hint(GTK_WINDOW(dir_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+- gtk_dialog_set_has_separator(GTK_DIALOG(dir_window), FALSE);
++ g_object_set(GTK_DIALOG(dir_window), "has-separator", FALSE, NULL);
+
+ // Callbacks for if the window is closed.
+ g_signal_connect((gpointer)(dir_window), "delete_event",
+diff -ru gens/src/gens/ui/gtk/general_options/genopt_window.cpp gens-build/src/gens/ui/gtk/general_options/genopt_window.cpp
+--- gens/src/gens/ui/gtk/general_options/genopt_window.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/gens/ui/gtk/general_options/genopt_window.cpp 2010-10-11 15:36:00.000000000 +0000
+@@ -140,7 +140,7 @@
+ gtk_window_set_position(GTK_WINDOW(genopt_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(genopt_window), false);
+ gtk_window_set_type_hint(GTK_WINDOW(genopt_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+- gtk_dialog_set_has_separator(GTK_DIALOG(genopt_window), false);
++ g_object_set(GTK_DIALOG(genopt_window), "has-separator", false, NULL);
+
+ // Callbacks for if the window is closed.
+ g_signal_connect((gpointer)genopt_window, "delete_event",
+@@ -458,11 +458,11 @@
+ gtk_box_pack_start(GTK_BOX(vboxIntroEffect), lblIntroEffect, false, false, 0);
+
+ // Dropdown for intro effect.
+- cboIntroEffect = gtk_combo_box_new_text();
+- gtk_combo_box_append_text(GTK_COMBO_BOX(cboIntroEffect), "None");
+- gtk_combo_box_append_text(GTK_COMBO_BOX(cboIntroEffect), "Gens Logo Effect");
+- gtk_combo_box_append_text(GTK_COMBO_BOX(cboIntroEffect), "\"Crazy\" Effect");
+- //gtk_combo_box_append_text(GTK_COMBO_BOX(cboIntroEffect), "Genesis TMSS"); // TODO: Broken.
++ cboIntroEffect = gtk_combo_box_text_new();
++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cboIntroEffect), "None");
++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cboIntroEffect), "Gens Logo Effect");
++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cboIntroEffect), "\"Crazy\" Effect");
++ //gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cboIntroEffect), "Genesis TMSS"); // TODO: Broken.
+ gtk_widget_show(cboIntroEffect);
+ gtk_box_pack_start(GTK_BOX(vboxIntroEffect), cboIntroEffect, false, false, 0);
+ g_signal_connect((gpointer)(cboIntroEffect), "changed",
+diff -ru gens/src/gens/ui/gtk/gens/gens_window_callbacks.cpp gens-build/src/gens/ui/gtk/gens/gens_window_callbacks.cpp
+--- gens/src/gens/ui/gtk/gens/gens_window_callbacks.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/gens/ui/gtk/gens/gens_window_callbacks.cpp 2010-10-11 15:21:28.000000000 +0000
+@@ -154,9 +154,9 @@
+ GSFT_UNUSED_PARAMETER(y);
+ GSFT_UNUSED_PARAMETER(user_data);
+
+- if (context->targets)
++ if (gdk_drag_context_list_targets(context))
+ {
+- GdkAtom target_type = GDK_POINTER_TO_ATOM(g_list_nth_data(context->targets, 0));
++ GdkAtom target_type = GDK_POINTER_TO_ATOM(g_list_nth_data(gdk_drag_context_list_targets(context), 0));
+ gtk_drag_get_data(widget, context, target_type, time);
+ return true;
+ }
+diff -ru gens/src/gens/ui/gtk/opengl_resolution/glres_window.cpp gens-build/src/gens/ui/gtk/opengl_resolution/glres_window.cpp
+--- gens/src/gens/ui/gtk/opengl_resolution/glres_window.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/gens/ui/gtk/opengl_resolution/glres_window.cpp 2010-10-11 15:46:21.000000000 +0000
+@@ -75,7 +75,7 @@
+ gtk_window_set_position(GTK_WINDOW(glres_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(glres_window), FALSE);
+ gtk_window_set_type_hint(GTK_WINDOW(glres_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+- gtk_dialog_set_has_separator(GTK_DIALOG(glres_window), FALSE);
++ g_object_set(GTK_DIALOG(glres_window), "has-separator", FALSE, NULL);
+
+ // Callbacks for if the window is closed.
+ g_signal_connect((gpointer)(glres_window), "delete_event",
+diff -ru gens/src/gens/ui/gtk/plugin_manager/pmgr_window.cpp gens-build/src/gens/ui/gtk/plugin_manager/pmgr_window.cpp
+--- gens/src/gens/ui/gtk/plugin_manager/pmgr_window.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/gens/ui/gtk/plugin_manager/pmgr_window.cpp 2010-10-11 15:46:29.000000000 +0000
+@@ -80,8 +80,7 @@
+ // Callbacks.
+ static gboolean pmgr_window_callback_close(GtkWidget *widget, GdkEvent *event, gpointer user_data);
+ static void pmgr_window_callback_response(GtkDialog *dialog, gint response_id, gpointer user_data);
+-static void pmgr_window_callback_tabPluginList_switch_page(GtkNotebook *notebook, GtkNotebookPage *page,
+- guint page_num, gpointer user_data);
++static void pmgr_window_callback_tabPluginList_switch_page(GtkNotebook *notebook, guint page_num, gpointer user_data);
+ static void pmgr_window_callback_lstPluginList_cursor_changed(GtkTreeView *tree_view, gpointer user_data);
+ static void pmgr_window_callback_fraPluginDesc_size_allocate(GtkWidget *widget, GtkAllocation *allocation, gpointer user_data);
+
+@@ -119,7 +118,7 @@
+ gtk_window_set_position(GTK_WINDOW(pmgr_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(pmgr_window), FALSE);
+ gtk_window_set_type_hint(GTK_WINDOW(pmgr_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+- gtk_dialog_set_has_separator(GTK_DIALOG(pmgr_window), FALSE);
++ g_object_set(GTK_DIALOG(pmgr_window), "has-separator", FALSE, NULL);
+
+ // Callbacks for if the window is closed.
+ g_signal_connect((gpointer)pmgr_window, "delete_event",
+@@ -559,11 +558,9 @@
+ * @param page_num New notebook page index.
+ * @param user_data User data.
+ */
+-static void pmgr_window_callback_tabPluginList_switch_page(GtkNotebook *notebook, GtkNotebookPage *page,
+- guint page_num, gpointer user_data)
++static void pmgr_window_callback_tabPluginList_switch_page(GtkNotebook *notebook, guint page_num, gpointer user_data)
+ {
+ GSFT_UNUSED_PARAMETER(notebook);
+- GSFT_UNUSED_PARAMETER(page);
+ GSFT_UNUSED_PARAMETER(user_data);
+
+ // Activate the "cursor-changed" callback for the page.
+diff -ru gens/src/gens/ui/gtk/select_cdrom/selcd_window.cpp gens-build/src/gens/ui/gtk/select_cdrom/selcd_window.cpp
+--- gens/src/gens/ui/gtk/select_cdrom/selcd_window.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/gens/ui/gtk/select_cdrom/selcd_window.cpp 2010-10-11 15:46:16.000000000 +0000
+@@ -94,7 +94,7 @@
+ gtk_window_set_position(GTK_WINDOW(selcd_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(selcd_window), FALSE);
+ gtk_window_set_type_hint(GTK_WINDOW(selcd_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+- gtk_dialog_set_has_separator(GTK_DIALOG(selcd_window), FALSE);
++ g_object_set(GTK_DIALOG(selcd_window), "has-separator", FALSE, NULL);
+
+ // Callbacks for if the window is closed.
+ g_signal_connect((gpointer)(selcd_window), "delete_event",
+@@ -128,7 +128,7 @@
+ gtk_box_pack_start(GTK_BOX(hboxDeviceName), lblDeviceName, false, false, 0);
+
+ // Create the dropdown for the CD-ROM device name.
+- cboDeviceName = gtk_combo_box_entry_new_text();
++ cboDeviceName = gtk_combo_box_text_new_with_entry();
+ gtk_entry_set_max_length(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(cboDeviceName))), 63);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(lblDeviceName), cboDeviceName);
+ gtk_widget_show(cboDeviceName);
+@@ -156,7 +156,7 @@
+ gtk_box_pack_start(GTK_BOX(hboxDriveSpeed), vboxDriveSpeedDropdown, true, true, 0);
+
+ // Create the dropdown for the CD-ROM drive speed selection.
+- cboDriveSpeed = gtk_combo_box_new_text();
++ cboDriveSpeed = gtk_combo_box_text_new();
+ char tmpSpeed[16];
+ for (unsigned int i = 0; i < ((sizeof(CD_DriveSpeed) / sizeof(CD_DriveSpeed[0])) - 1); i++)
+ {
+@@ -167,7 +167,7 @@
+ else
+ szprintf(tmpSpeed, sizeof(tmpSpeed), "%dx", CD_DriveSpeed[i]);
+
+- gtk_combo_box_append_text(GTK_COMBO_BOX(cboDriveSpeed), tmpSpeed);
++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cboDriveSpeed), tmpSpeed);
+ }
+ gtk_widget_show(cboDriveSpeed);
+ gtk_box_pack_start(GTK_BOX(vboxDriveSpeedDropdown), cboDriveSpeed, true, false, 0);
+@@ -252,7 +252,7 @@
+ continue;
+
+ // Add the device file.
+- gtk_combo_box_append_text(GTK_COMBO_BOX(cboDeviceName), tmpDeviceName);
++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cboDeviceName), tmpDeviceName);
+ }
+ }
+
+diff -ru gens/src/mdp/misc/game_genie/gg_window_gtk2.cpp gens-build/src/mdp/misc/game_genie/gg_window_gtk2.cpp
+--- gens/src/mdp/misc/game_genie/gg_window_gtk2.cpp 2010-10-11 16:32:29.000000000 +0000
++++ gens-build/src/mdp/misc/game_genie/gg_window_gtk2.cpp 2010-10-11 15:52:05.000000000 +0000
+@@ -111,7 +111,7 @@
+ gtk_window_set_position(GTK_WINDOW(gg_window), GTK_WIN_POS_CENTER);
+ gtk_window_set_resizable(GTK_WINDOW(gg_window), TRUE);
+ gtk_window_set_type_hint(GTK_WINDOW(gg_window), GDK_WINDOW_TYPE_HINT_DIALOG);
+- gtk_dialog_set_has_separator(GTK_DIALOG(gg_window), FALSE);
++ g_object_set(GTK_DIALOG(gg_window), "has-separator", FALSE, NULL);
+
+ // Add the window icon.
+ GList *icon_list = NULL;
diff --git a/multilib-staging/lib32-gtk2/PKGBUILD b/multilib-staging/lib32-gtk2/PKGBUILD
new file mode 100644
index 000000000..3e303e874
--- /dev/null
+++ b/multilib-staging/lib32-gtk2/PKGBUILD
@@ -0,0 +1,57 @@
+# $Id: PKGBUILD 89396 2013-04-29 08:14:33Z alucryd $
+# Maintainer: Ionut Biru <ibiru@archlinux.org
+# Contributor: Pierre Schmitz <pierre@archlinux.de>
+# Contributor: Mikko Seppälä <t-r-a-y@mbnet.fi>
+
+_pkgbasename=gtk2
+pkgname=lib32-$_pkgbasename
+pkgver=2.24.17
+pkgrel=2
+pkgdesc="The GTK+ Toolkit (v2) (32-bit)"
+arch=('x86_64')
+url="http://www.gtk.org/"
+install=gtk2.install
+depends=(lib32-{'atk>=1.30.0','pango>=1.28.0','cairo>=1.10.0','gdk-pixbuf2>=2.22.1'}
+ lib32-lib{'cups>=1.4.4',xcursor,'xrandr>=1.3','xi>=1.3',xinerama,xcomposite,xdamage}
+ $_pkgbasename)
+makedepends=('pkgconfig' 'gcc-multilib')
+options=('!libtool' '!docs')
+license=('LGPL')
+source=(http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24/gtk+-${pkgver}.tar.xz
+ xid-collision-debug.patch
+ gtk-modules-32.patch)
+sha256sums=('e947b2b460156d98e8e38930b82458e1d613a71eb26e927f966f7081a640f415'
+ 'd758bb93e59df15a4ea7732cf984d1c3c19dff67c94b957575efea132b8fe558'
+ '2effb13404442ae266d4c663347e88cd1ca19e9a83b452da1743bac16af9c7b0')
+
+build() {
+ export CC="gcc -m32"
+ export CXX="g++ -m32"
+ export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
+
+ cd "${srcdir}/gtk+-${pkgver}"
+ patch -Np1 -i "${srcdir}/xid-collision-debug.patch"
+ patch -p1 -i ${srcdir}/gtk-modules-32.patch
+
+ CXX=/bin/false ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --libdir=/usr/lib32 \
+ --with-xinput=yes
+
+ #https://bugzilla.gnome.org/show_bug.cgi?id=655517
+ sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
+
+ make
+}
+
+package() {
+ cd "${srcdir}/gtk+-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+ rm -rf "${pkgdir}"/etc
+ rm -rf "${pkgdir}"/usr/{include,share}
+
+ cd "${pkgdir}"/usr/bin
+ mv gtk-query-immodules-2.0 gtk-query-immodules-2.0-32
+ rm -f gtk-builder-convert gtk-demo gtk-update-icon-cache
+}
diff --git a/multilib-staging/lib32-gtk2/gtk-modules-32.patch b/multilib-staging/lib32-gtk2/gtk-modules-32.patch
new file mode 100644
index 000000000..a2530c3bf
--- /dev/null
+++ b/multilib-staging/lib32-gtk2/gtk-modules-32.patch
@@ -0,0 +1,12 @@
+diff -ur gtk+-2.20.1/gtk/gtkrc.c gtk+-2.20.1-32/gtk/gtkrc.c
+--- gtk+-2.20.1/gtk/gtkrc.c 2010-05-03 01:28:21.000000000 +0200
++++ gtk+-2.20.1-32/gtk/gtkrc.c 2010-08-26 07:22:42.316920033 +0200
+@@ -450,7 +450,7 @@
+ if (im_module_file)
+ result = g_strdup (im_module_file);
+ else
+- result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gtk.immodules", NULL);
++ result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gtk.immodules-32", NULL);
+ }
+
+ return result;
diff --git a/multilib-staging/lib32-gtk2/gtk2.install b/multilib-staging/lib32-gtk2/gtk2.install
new file mode 100644
index 000000000..49f86f550
--- /dev/null
+++ b/multilib-staging/lib32-gtk2/gtk2.install
@@ -0,0 +1,16 @@
+post_install() {
+ GTK_PATH=/usr/lib32/gtk-2.0 usr/bin/gtk-query-immodules-2.0-32 > etc/gtk-2.0/gtk.immodules-32
+}
+
+pre_upgrade() {
+ pre_remove
+}
+
+post_upgrade() {
+ post_install
+}
+
+pre_remove() {
+ rm -f etc/gtk-2.0/gtk.immodules-32 &>/dev/null
+ rm -f etc/gtk-2.0/gdk-pixbuf.loaders-32 &>/dev/null
+}
diff --git a/multilib-staging/lib32-gtk2/xid-collision-debug.patch b/multilib-staging/lib32-gtk2/xid-collision-debug.patch
new file mode 100644
index 000000000..d61238c3b
--- /dev/null
+++ b/multilib-staging/lib32-gtk2/xid-collision-debug.patch
@@ -0,0 +1,15 @@
+--- gtk+-2.18.3/gdk/x11/gdkxid.c 2009-06-19 04:59:18.000000000 +0200
++++ gtk+-2.18.3/gdk/x11/gdkxid.c.new 2009-07-22 11:30:12.000000000 +0200
+@@ -56,10 +56,10 @@
+ if (!display_x11->xid_ht)
+ display_x11->xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash,
+ (GEqualFunc) gdk_xid_equal);
+-
++/*
+ if (g_hash_table_lookup (display_x11->xid_ht, xid))
+ g_warning ("XID collision, trouble ahead");
+-
++*/
+ g_hash_table_insert (display_x11->xid_ht, xid, data);
+ }
+
diff --git a/multilib-staging/lib32-pango/PKGBUILD b/multilib-staging/lib32-pango/PKGBUILD
new file mode 100644
index 000000000..74a1b1fc4
--- /dev/null
+++ b/multilib-staging/lib32-pango/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 89394 2013-04-29 08:13:56Z alucryd $
+# Contributor: Pierre Schmitz <pierre@archlinux.de>
+# Contributor: Mikko Seppälä <t-r-a-y@mbnet.fi>
+# Maintainer: Biru Ionut <ionut@archlinux.ro>
+
+_pkgbasename=pango
+pkgname=lib32-$_pkgbasename
+pkgver=1.34.0
+pkgrel=2
+pkgdesc="A library for layout and rendering of text (32-bit)"
+arch=('x86_64')
+license=('LGPL')
+makedepends=("gcc-multilib" 'lib32-fontconfig' \
+ 'lib32-mesa-libgl' 'lib32-cairo' 'lib32-libxft' 'lib32-harfbuzz' $_pkgbasename)
+options=('!libtool' '!emptydirs')
+install=pango.install
+source=(http://ftp.gnome.org/pub/gnome/sources/${_pkgbasename}/${pkgver:0:4}/${_pkgbasename}-${pkgver}.tar.xz)
+url="http://www.pango.org/"
+sha256sums=('105da1efe019018a9de81681d88c9ace83d2111509ab625c4be9d124a1fdce27')
+
+prepare() {
+ cd "${srcdir}/${_pkgbasename}-${pkgver}"
+
+ sed -i 's#"pango.modules"#"pango.modules-32"#' pango/modules.c
+}
+
+build() {
+ export CC="gcc -m32"
+ export CXX="g++ -m32"
+ export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
+
+ cd "${srcdir}/${_pkgbasename}-${pkgver}"
+
+ ./configure --prefix=/usr --libdir=/usr/lib32 --sysconfdir=/etc \
+ --localstatedir=/var --with-included-modules=basic-fc \
+ --with-dynamic-modules=arabic-fc,arabic-lang,basic-fc,basic-win32,basic-x,basic-atsui,hangul-fc,hebrew-fc,indic-fc,indic-lang,khmer-fc,syriac-fc,tibetan-fc \
+ --disable-introspection
+ make
+}
+
+package() {
+ depends=('lib32-cairo' 'lib32-libxft' 'lib32-harfbuzz' $_pkgbasename)
+ cd "${srcdir}/${_pkgbasename}-${pkgver}"
+
+ make DESTDIR="${pkgdir}" install
+ rm -rf "$pkgdir"/etc
+ rm -rf "$pkgdir"/usr/{bin/pango-view,share,include}
+ mv "$pkgdir"/usr/bin/pango-querymodules "$pkgdir"/usr/bin/pango-querymodules-32
+}
diff --git a/multilib-staging/lib32-pango/pango.install b/multilib-staging/lib32-pango/pango.install
new file mode 100644
index 000000000..173b6820f
--- /dev/null
+++ b/multilib-staging/lib32-pango/pango.install
@@ -0,0 +1,21 @@
+# arg 1: the new package version
+post_install() {
+ # we need to ldconfig first, in case xfree86's libs aren't
+ # in ld.so.cache yet
+ sbin/ldconfig -r .
+ usr/bin/pango-querymodules-32 >etc/pango/pango.modules-32
+}
+
+# arg 1: the new package version
+# arg 2: the old package version
+post_upgrade() {
+ if [ -f etc/pango/pango.modules-32 ]; then
+ rm etc/pango/pango.modules-32
+ fi
+ post_install $1
+}
+
+# arg 1: the old package version
+pre_remove() {
+ rm etc/pango/pango.modules-32
+}
diff --git a/multilib-staging/lib32-wxgtk/PKGBUILD b/multilib-staging/lib32-wxgtk/PKGBUILD
new file mode 100755
index 000000000..105cde328
--- /dev/null
+++ b/multilib-staging/lib32-wxgtk/PKGBUILD
@@ -0,0 +1,50 @@
+# $Id: PKGBUILD 89392 2013-04-29 08:12:47Z alucryd $
+# Maintainer: Maxime Gauduin <alucryd@gmail.com>
+# Contributor: Limao Luo <luolimao@gmail.com>
+# Contributor: Devin Cofer <ranguvar@archlinux.us>
+# Contributor: Yggdrasil <tetzank@web.de>
+# Contributor: Eric Belanger <eric@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+# Contributor: Bob Finch <w9ya@arrl.net>
+# Contributor: J. Santiago "Angelus" Hirschfeld <jsantiagoh@yahoo.com.ar>
+
+pkgname=lib32-wxgtk
+pkgver=2.8.12.1
+pkgrel=5
+pkgdesc="GTK+ implementation of wxWidgets API for GUI (lib32)"
+arch=('x86_64')
+url="http://wxwidgets.org/"
+license=('custom:wxWindows')
+makedepends=('lib32-gstreamer0.10-base-plugins' 'lib32-gtk2' 'lib32-mesa' 'lib32-glu' 'lib32-libxt' 'lib32-libsm' 'lib32-sdl' 'lib32-mesa-libgl')
+source=("http://downloads.sourceforge.net/wxpython/wxPython-src-${pkgver}.tar.bz2")
+sha256sums=('1f3f153d9f1504c6ce2d2c4b23e940b8f58b81f4cba35cda1a5bb31142243cd0')
+
+build() {
+ cd "${srcdir}"/wxPython-src-${pkgver}
+
+ export CC="gcc -m32"
+ export CXX="g++ -m32"
+ export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
+
+ ./configure --prefix=/usr --libdir=/usr/lib32 --with-{gtk=2,libjpeg=sys,libpng=sys,libtiff=sys,libxpm=sys,opengl,regex=builtin,sdl} --enable-{graphics_ctx,unicode} --disable-{mediactrl,optimize,precomp-headers}
+ make
+ make -C locale allmo
+ make -C contrib/src
+}
+
+package() {
+ depends=('lib32-gtk2' 'lib32-gstreamer0.10-base' 'lib32-libsm' 'lib32-sdl' "${pkgname#*-}")
+
+ cd "${srcdir}"/wxPython-src-${pkgver}
+
+ make DESTDIR="${pkgdir}" install
+ make -C contrib/src DESTDIR="${pkgdir}" install
+ rm -rf "${pkgdir}"/usr/{include,share,bin/wxrc}
+ mv "${pkgdir}"/usr/bin/wx-config{,32}
+ mv "${pkgdir}"/usr/bin/wxrc{,32}-2.8
+
+ install -dm 755 "${pkgdir}"/usr/share/licenses
+ ln -s ${pkgname#*-} "${pkgdir}"/usr/share/licenses/${pkgname}
+}
+
+# vim: ts=2 sw=2 et:
diff --git a/pcr/mosquitto/PKGBUILD b/pcr/mosquitto/PKGBUILD
index 0a7209f0b..652e75691 100644
--- a/pcr/mosquitto/PKGBUILD
+++ b/pcr/mosquitto/PKGBUILD
@@ -1,23 +1,24 @@
# This is the PKGBUILD for mosquitto, an MQTT broker and example clients
-# Maintainer: Dan Anderson <dan-anderson@cox.net>
-# Contributor: Gordon JC Pearce <gordon@gjcp.net>
+# Maintainer: Alexander Rust <mail at alr dot st>
+# Contributor: Dan Anderson <dan-anderson at cox dptnet>
pkgname=mosquitto
-pkgver=1.1
-pkgrel=1
-pkgdesc="An MQTT broker and clients"
-arch=(i686 x86_64 mips64el)
+pkgver=1.1.3
+pkgrel=2
+pkgdesc="An Open Source MQTT v3.1 Broker"
+arch=('i686' 'x86_64' 'arm' 'armv6h' 'mips64el')
url="http://mosquitto.org/"
makedepends=('python')
optdepends=('python: python support')
license=('BSD')
-source=(http://mosquitto.org/files/source/$pkgname-$pkgver.tar.gz{,.asc})
-md5sums=('ab51f64eb3f0041402073aa7865f3ec4'
- '76fbc38a2eb0b8110caf7ac1f43d4057')
+source=(http://mosquitto.org/files/source/$pkgname-$pkgver.tar.gz{,.asc} "$pkgname.service" )
+md5sums=('fd0cae17221d778b0a002c31e6c3de9e'
+ 'SKIP'
+ 'b7cdd7a65d9a7ac5a8c2456f4b1f2d8f')
build() {
cd "$srcdir/$pkgname-$pkgver"
-# Remove hardcoded prefix
+ #Remove hardcoded prefix
find -name Makefile -exec sed '/prefix=/d' -i {} \;
make prefix=/usr
@@ -26,7 +27,11 @@ build() {
package() {
cd "$srcdir/$pkgname-$pkgver"
make prefix=/usr DESTDIR="$pkgdir/" install
-
+
+ # Systemd service file
+ install -Dm644 $srcdir/$pkgname.service $pkgdir/usr/lib/systemd/system/$pkgname.service
+
+ # License files
install -Dm644 LICENSE.txt $pkgdir/usr/share/licenses/$pkgname/LICENSE
install -Dm644 LICENSE-3rd-party.txt $pkgdir/usr/share/licenses/$pkgname/LICENSE-3rd-party
}
diff --git a/pcr/mosquitto/mosquitto.service b/pcr/mosquitto/mosquitto.service
new file mode 100644
index 000000000..7e9ef7cc8
--- /dev/null
+++ b/pcr/mosquitto/mosquitto.service
@@ -0,0 +1,22 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Mosquitto MQTT Broker daemon
+ConditionPathExists=/etc/mosquitto/mosquitto.conf
+Requires=network.target
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf -d
+ExecStartPre=/bin/rm -f /var/run/mosquitto.pid
+PIDFile=/var/run/mosquitto.pid
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
+