rpms/gvfs/F-12 gvfs-1.4.1-afc-dont-leak-volumes.patch, NONE, 1.1 gvfs-1.4.1-afc-fast-mime.patch, NONE, 1.1 gvfs-1.4.1-afc-fix-mtime-setting.patch, NONE, 1.1 gvfs-1.4.1-afc-hide-dot-files.patch, NONE, 1.1 gvfs-1.4.1-afc-indentation.patch, NONE, 1.1 gvfs-1.4.1-afc-latest-libiphone-api.patch, NONE, 1.1 gvfs-1.4.1-afc-mtime-pre-3.1-devices.patch, NONE, 1.1 gvfs-1.4.1-afc-mtime-setting.patch, NONE, 1.1 gvfs-1.4.1-afc-no-libgudev-dependency.patch, NONE, 1.1 gvfs-1.4.1-afc-preview-icon.patch, NONE, 1.1 gvfs-1.4.1-afc-shadowed-mount.patch, NONE, 1.1 gvfs-1.4.1-afc-st_mtime.patch, NONE, 1.1 gvfs-1.4.1-afc-thumbnails.patch, NONE, 1.1 gvfs-1.4.1-afc-x-content-types.patch, NONE, 1.1 gvfs-1.5.3-afc-new-libiphone.patch, NONE, 1.1 gvfs-1.5.3-use-libimobiledevice.patch, NONE, 1.1 0001-Add-AFC-backend.patch, 1.2, 1.3 gvfs.spec, 1.180, 1.181
Tomas Bzatek
tbzatek at fedoraproject.org
Mon Feb 8 16:44:31 UTC 2010
- Previous message: rpms/gyachi/F-11 gyachi.spec,1.47,1.48
- Next message: rpms/ocsinventory/devel ocsinventory-schema.patch, NONE, 1.1 .cvsignore, 1.6, 1.7 ocsinventory.spec, 1.12, 1.13 sources, 1.6, 1.7 ocsinventory.patch, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: tbzatek
Update of /cvs/extras/rpms/gvfs/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv17600
Modified Files:
0001-Add-AFC-backend.patch gvfs.spec
Added Files:
gvfs-1.4.1-afc-dont-leak-volumes.patch
gvfs-1.4.1-afc-fast-mime.patch
gvfs-1.4.1-afc-fix-mtime-setting.patch
gvfs-1.4.1-afc-hide-dot-files.patch
gvfs-1.4.1-afc-indentation.patch
gvfs-1.4.1-afc-latest-libiphone-api.patch
gvfs-1.4.1-afc-mtime-pre-3.1-devices.patch
gvfs-1.4.1-afc-mtime-setting.patch
gvfs-1.4.1-afc-no-libgudev-dependency.patch
gvfs-1.4.1-afc-preview-icon.patch
gvfs-1.4.1-afc-shadowed-mount.patch
gvfs-1.4.1-afc-st_mtime.patch gvfs-1.4.1-afc-thumbnails.patch
gvfs-1.4.1-afc-x-content-types.patch
gvfs-1.5.3-afc-new-libiphone.patch
gvfs-1.5.3-use-libimobiledevice.patch
Log Message:
* Mon Feb 8 2010 Tomas Bzatek <tbzatek at redhat.com> - 1.4.3-5
- ftp: backport several PASV/EPSV fixes from master (#542205, #555033)
- AFC: Use new libimobiledevice library
gvfs-1.4.1-afc-dont-leak-volumes.patch:
afcvolumemonitor.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- NEW FILE gvfs-1.4.1-afc-dont-leak-volumes.patch ---
>From e08ea6cd747969ec548a3285e1ec55f26d78cf1e Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Thu, 05 Nov 2009 23:28:19 +0000
Subject: Avoid leaking volumes when removing them
---
diff --git a/monitor/afc/afcvolumemonitor.c b/monitor/afc/afcvolumemonitor.c
index 76f4303..91b3e41 100644
--- a/monitor/afc/afcvolumemonitor.c
+++ b/monitor/afc/afcvolumemonitor.c
@@ -65,6 +65,7 @@ g_vfs_afc_monitor_remove_volume (GVfsAfcVolumeMonitor *self,
g_print ("removing volume for device uuid '%s'\n", uuid);
self->volumes = g_list_remove (self->volumes, volume);
g_signal_emit_by_name (self, "volume-removed", volume);
+ g_object_unref (volume);
}
}
--
cgit v0.8.3.1
gvfs-1.4.1-afc-fast-mime.patch:
gvfsbackendafc.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-fast-mime.patch ---
>From 4685f9e982f4c6884a21a0bd80d512a4ea0162db Mon Sep 17 00:00:00 2001
From: Christian Kellner <gicmo at gnome.org>
Date: Fri, 09 Oct 2009 10:48:24 +0000
Subject: [AFC] Also set fast mime-type
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index e4e1da0..29c1ed1 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -834,7 +834,10 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
}
if (content_type)
- g_file_info_set_content_type (info, content_type);
+ {
+ g_file_info_set_content_type (info, content_type);
+ g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE, content_type);
+ }
if (icon == NULL)
icon = g_themed_icon_new ("text-x-generic");
--
cgit v0.8.3.1
gvfs-1.4.1-afc-fix-mtime-setting.patch:
gvfsbackendafc.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-fix-mtime-setting.patch ---
>From dc17f80f9f37fb9c6b9300f8e25184efcd30e8bf Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Fri, 06 Nov 2009 02:44:04 +0000
Subject: Fix mtime setting
Thinko in mtime setting patch, spotted by Nikias.
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 1e0d788..43affa7 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -1090,7 +1090,7 @@ g_vfs_backend_afc_set_attribute (GVfsBackend *backend,
self = G_VFS_BACKEND_AFC(backend);
g_return_if_fail(self->connected);
- if (g_str_equal (attribute, G_FILE_ATTRIBUTE_TIME_MODIFIED) != FALSE)
+ if (g_str_equal (attribute, G_FILE_ATTRIBUTE_TIME_MODIFIED) == FALSE)
{
g_vfs_job_failed (G_VFS_JOB (job),
G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
--
cgit v0.8.3.1
gvfs-1.4.1-afc-hide-dot-files.patch:
gvfsbackendafc.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
--- NEW FILE gvfs-1.4.1-afc-hide-dot-files.patch ---
>From 0b272cacaa0af2d448a34a88db31b0c56383c418 Mon Sep 17 00:00:00 2001
From: Christian Kellner <gicmo at gnome.org>
Date: Thu, 08 Oct 2009 21:27:58 +0000
Subject: [afc] Bug 597800 - Should hide dot files
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 8c64b0d..e4e1da0 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -876,6 +876,11 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
g_file_info_set_edit_name (info, display_name);
g_free (display_name);
+
+ /* mark dot files as hidden */
+ if (basename != NULL && basename[0] == '.')
+ g_file_info_set_is_hidden (info, TRUE);
+
}
/* Callback for iterating over a directory. */
--
cgit v0.8.3.1
gvfs-1.4.1-afc-indentation.patch:
gvfsbackendafc.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-indentation.patch ---
>From d1947d28585fb6f69ad1899b48598e93115c69f9 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Thu, 07 Jan 2010 18:08:22 +0000
Subject: [afc] Fix indentation
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 8722ca7..783ed86 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -765,10 +765,11 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
if (g_str_equal (afcinfo[i], "st_size"))
{
g_file_info_set_size (info, atoll(afcinfo[i+1]));
- } else if (g_str_equal (afcinfo[i], "st_blocks"))
- {
+ }
+ else if (g_str_equal (afcinfo[i], "st_blocks"))
+ {
g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_UNIX_BLOCKS, atoi(afcinfo[i+1]));
- }
+ }
else if (g_str_equal (afcinfo[i], "st_ifmt"))
{
if (g_str_equal (afcinfo[i+1], "S_IFREG"))
--
cgit v0.8.3.1
gvfs-1.4.1-afc-latest-libiphone-api.patch:
configure.ac | 4 ++--
daemon/gvfsbackendafc.c | 18 +++++++++---------
monitor/afc/afcvolume.c | 8 ++++----
monitor/afc/afcvolumemonitor.c | 17 ++++++++---------
4 files changed, 23 insertions(+), 24 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-latest-libiphone-api.patch ---
>From 690150b6d2beb3364690b4303143a049598c1a9d Mon Sep 17 00:00:00 2001
From: Nikias Bassen <nikias at gmx.li>
Date: Thu, 29 Oct 2009 14:19:21 +0000
Subject: Adaption to latest libiphone API
Remove libusbmuxd dependency, and use afc_get_device_info_key
to get the model name.
---
diff --git a/configure.ac b/configure.ac
index 5069d73..d15db88 100644
--- a/configure.ac
+++ b/configure.ac
@@ -330,10 +330,10 @@ AFC_LIBS=
AFC_CFLAGS=
if test "x$enable_afc" != "xno" -a "x$msg_gudev" = "xyes" ; then
- PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.2 libusbmuxd >= 1.0, msg_afc=yes)
+ PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.4, msg_afc=yes)
if test "x$msg_afc" = "xyes"; then
- PKG_CHECK_MODULES(AFC, libiphone-1.0 libusbmuxd >= 1.0)
+ PKG_CHECK_MODULES(AFC, libiphone-1.0)
AC_DEFINE(HAVE_AFC, 1, [Define to 1 if AFC is going to be built])
fi
fi
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 8bdd2ec..131d683 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -218,21 +218,21 @@ g_vfs_backend_iphone_check (iphone_error_t cond, GVfsJob *job)
}
static void
-_usbmuxd_event_cb (const usbmuxd_event_t *event, void *user_data)
+_iphone_event_cb (const iphone_event_t *event, void *user_data)
{
GVfsBackendAfc *afc_backend = G_VFS_BACKEND_AFC (user_data);
g_return_if_fail (afc_backend->uuid != NULL);
- if (event->event != UE_DEVICE_REMOVE)
+ if (event->event != IPHONE_DEVICE_REMOVE)
return;
- if (g_str_equal (event->device.uuid, afc_backend->uuid) == FALSE)
+ if (g_str_equal (event->uuid, afc_backend->uuid) == FALSE)
return;
g_print ("Shutting down AFC backend for device uuid %s\n", afc_backend->uuid);
g_vfs_backend_afc_close_connection (afc_backend);
- usbmuxd_unsubscribe();
+ iphone_event_unsubscribe ();
/* TODO: need a cleaner way to force unmount ourselves */
exit (1);
@@ -258,7 +258,8 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
self = G_VFS_BACKEND_AFC(backend);
self->connected = FALSE;
- usbmuxd_subscribe (_usbmuxd_event_cb, self);
+
+ iphone_event_subscribe (_iphone_event_cb, self);
/* setup afc */
@@ -318,7 +319,7 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
retries = 0;
do {
- err = iphone_get_device_by_uuid(&self->dev, self->uuid);
+ err = iphone_device_new(&self->dev, self->uuid);
if (err == IPHONE_E_SUCCESS)
break;
g_usleep (G_USEC_PER_SEC);
@@ -368,11 +369,10 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
}
/* set correct fd icon spec name depending on device model */
- self->model = afc_get_device_info_field (self->afc_cli, "Model");
- if (G_UNLIKELY(self->model == NULL))
+ if (G_UNLIKELY(g_vfs_backend_afc_check (afc_get_device_info_key (self->afc_cli, "Model", &self->model), G_VFS_JOB(job))))
goto out_destroy_afc;
- if (strstr(self->model, "iPod") != NULL)
+ if ((self->model != NULL) && (strstr(self->model, "iPod") != NULL))
{
g_vfs_backend_set_icon_name (G_VFS_BACKEND(self), "multimedia-player-apple-ipod-touch");
}
diff --git a/monitor/afc/afcvolume.c b/monitor/afc/afcvolume.c
index 0e3c65e..73f2e55 100644
--- a/monitor/afc/afcvolume.c
+++ b/monitor/afc/afcvolume.c
@@ -37,7 +37,7 @@ G_DEFINE_TYPE_EXTENDED(GVfsAfcVolume, g_vfs_afc_volume, G_TYPE_OBJECT, 0,
static void
g_vfs_afc_volume_finalize (GObject *object)
{
- GVfsAfcVolume *self;
+ GVfsAfcVolume *self = NULL;
self = G_VFS_AFC_VOLUME(object);
@@ -81,7 +81,7 @@ _g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
retries = 0;
do {
- err = iphone_get_device_by_uuid (&dev, self->uuid);
+ err = iphone_device_new (&dev, self->uuid);
if (err == IPHONE_E_SUCCESS)
break;
g_usleep (G_USEC_PER_SEC);
@@ -113,8 +113,8 @@ _g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
if (afc_client_new (dev, port, &afc_cli) == AFC_E_SUCCESS)
{
/* set correct fd icon spec name depending on device model */
- model = afc_get_device_info_field (afc_cli, "Model");
- if (model != NULL)
+ model = NULL;
+ if (afc_get_device_info_key (afc_cli, "Model", &model) == AFC_E_SUCCESS)
{
if(g_str_has_prefix(model, "iPod") != FALSE)
{
diff --git a/monitor/afc/afcvolumemonitor.c b/monitor/afc/afcvolumemonitor.c
index e0de6ef..76f4303 100644
--- a/monitor/afc/afcvolumemonitor.c
+++ b/monitor/afc/afcvolumemonitor.c
@@ -10,7 +10,7 @@
#include <gvfsproxyvolumemonitordaemon.h>
#include <stdio.h>
#include <gio/gio.h>
-#include <usbmuxd.h>
+#include <libiphone/libiphone.h>
#include "afcvolume.h"
#include "afcvolumemonitor.h"
@@ -69,7 +69,7 @@ g_vfs_afc_monitor_remove_volume (GVfsAfcVolumeMonitor *self,
}
static void
-g_vfs_afc_monitor_usbmuxd_event (const usbmuxd_event_t *event, void *user_data)
+g_vfs_afc_monitor_iphone_event (const iphone_event_t *event, void *user_data)
{
GVfsAfcVolumeMonitor *self;
@@ -77,10 +77,10 @@ g_vfs_afc_monitor_usbmuxd_event (const usbmuxd_event_t *event, void *user_data)
self = G_VFS_AFC_VOLUME_MONITOR(user_data);
- if (event->event == UE_DEVICE_ADD)
- g_vfs_afc_monitor_create_volume (self, event->device.uuid);
+ if (event->event == IPHONE_DEVICE_ADD)
+ g_vfs_afc_monitor_create_volume (self, event->uuid);
else
- g_vfs_afc_monitor_remove_volume (self, event->device.uuid);
+ g_vfs_afc_monitor_remove_volume (self, event->uuid);
}
static GObject *
@@ -94,7 +94,7 @@ g_vfs_afc_volume_monitor_constructor (GType type, guint ncps,
self->volumes = NULL;
- usbmuxd_subscribe(g_vfs_afc_monitor_usbmuxd_event, self);
+ iphone_event_subscribe(g_vfs_afc_monitor_iphone_event, self);
g_print ("Volume monitor alive\n");
@@ -115,11 +115,11 @@ g_vfs_afc_volume_monitor_finalize (GObject *_self)
self = G_VFS_AFC_VOLUME_MONITOR(_self);
- usbmuxd_unsubscribe();
-
if (self->volumes)
list_free (self->volumes);
+ iphone_event_unsubscribe();
+
if (G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->finalize)
(*G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->finalize)( G_OBJECT(self));
}
--
cgit v0.8.3.1
gvfs-1.4.1-afc-mtime-pre-3.1-devices.patch:
gvfsbackendafc.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-mtime-pre-3.1-devices.patch ---
>From e0ccf14f320f6d7b15f13bf35588d9927b8e0b12 Mon Sep 17 00:00:00 2001
From: Nikias Bassen <nikias at gmx.li>
Date: Mon, 02 Nov 2009 13:19:37 +0000
Subject: Ignore error for pre-3.1 devices when setting modification time
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 48ee052..1e0d788 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -1085,6 +1085,7 @@ g_vfs_backend_afc_set_attribute (GVfsBackend *backend,
{
GVfsBackendAfc *self;
uint64_t mtime = 0;
+ afc_error_t err;
self = G_VFS_BACKEND_AFC(backend);
g_return_if_fail(self->connected);
@@ -1099,9 +1100,13 @@ g_vfs_backend_afc_set_attribute (GVfsBackend *backend,
mtime = *(guint64*)(value_p) * (guint64)1000000000;
- if (G_UNLIKELY(g_vfs_backend_afc_check (afc_set_file_time (self->afc_cli,
- filename, mtime),
- G_VFS_JOB(job))))
+ err = afc_set_file_time (self->afc_cli, filename, mtime);
+ if (err == AFC_E_UNKNOWN_PACKET_TYPE)
+ {
+ /* ignore error for pre-3.1 devices as the do not support setting file modification times */
+ return g_vfs_job_succeeded (G_VFS_JOB(job));
+ }
+ if (G_UNLIKELY(g_vfs_backend_afc_check (err, G_VFS_JOB(job))))
{
return;
}
--
cgit v0.8.3.1
gvfs-1.4.1-afc-mtime-setting.patch:
gvfsbackendafc.c | 37 ++++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
--- NEW FILE gvfs-1.4.1-afc-mtime-setting.patch ---
>From dc24aa1c9702114d3a66218a366b2b4292f34352 Mon Sep 17 00:00:00 2001
From: Nikias Bassen <nikias at gmx.li>
Date: Sat, 31 Oct 2009 01:47:17 +0000
Subject: Support for setting file modification times
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 131d683..48ee052 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -1075,6 +1075,41 @@ g_vfs_backend_afc_set_display_name (GVfsBackend *backend,
}
static void
+g_vfs_backend_afc_set_attribute (GVfsBackend *backend,
+ GVfsJobSetAttribute *job,
+ const char *filename,
+ const char *attribute,
+ GFileAttributeType type,
+ gpointer value_p,
+ GFileQueryInfoFlags flags)
+{
+ GVfsBackendAfc *self;
+ uint64_t mtime = 0;
+
+ self = G_VFS_BACKEND_AFC(backend);
+ g_return_if_fail(self->connected);
+
+ if (g_str_equal (attribute, G_FILE_ATTRIBUTE_TIME_MODIFIED) != FALSE)
+ {
+ g_vfs_job_failed (G_VFS_JOB (job),
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation unsupported"));
+ return;
+ }
+
+ mtime = *(guint64*)(value_p) * (guint64)1000000000;
+
+ if (G_UNLIKELY(g_vfs_backend_afc_check (afc_set_file_time (self->afc_cli,
+ filename, mtime),
+ G_VFS_JOB(job))))
+ {
+ return;
+ }
+
+ g_vfs_job_succeeded (G_VFS_JOB(job));
+}
+
+static void
g_vfs_backend_afc_make_directory (GVfsBackend *backend,
GVfsJobMakeDirectory *job,
const char *path)
@@ -1221,6 +1256,7 @@ g_vfs_backend_afc_class_init (GVfsBackendAfcClass *klass)
backend_class->make_symlink = g_vfs_backend_afc_make_symlink;
backend_class->move = g_vfs_backend_afc_move;
backend_class->set_display_name = g_vfs_backend_afc_set_display_name;
+ backend_class->set_attribute = g_vfs_backend_afc_set_attribute;
}
/*
--
cgit v0.8.3.1
gvfs-1.4.1-afc-no-libgudev-dependency.patch:
configure.ac | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-no-libgudev-dependency.patch ---
>From 6c91b2513d7ad1bd4774c8559c4ceb200a0a9d61 Mon Sep 17 00:00:00 2001
From: Nikias Bassen <nikias at gmx.li>
Date: Fri, 30 Oct 2009 02:17:08 +0000
Subject: build fix: afc-backend does not depend on libgudev
---
diff --git a/configure.ac b/configure.ac
index d15db88..2d032fa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -329,7 +329,7 @@ msg_afc=no
AFC_LIBS=
AFC_CFLAGS=
-if test "x$enable_afc" != "xno" -a "x$msg_gudev" = "xyes" ; then
+if test "x$enable_afc" != "xno" ; then
PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.4, msg_afc=yes)
if test "x$msg_afc" = "xyes"; then
--
cgit v0.8.3.1
gvfs-1.4.1-afc-preview-icon.patch:
gvfsbackendafc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-preview-icon.patch ---
>From cb5c88866e02ef50f0a22a7575e8b37f540978bf Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Tue, 10 Nov 2009 13:33:21 +0000
Subject: [afc] Only check for a preview icon if actually requested
Should speed up enumeration slightly.
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 0c34e8b..8722ca7 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -904,7 +904,8 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
g_file_info_set_is_hidden (info, hidden);
/* Check for matching thumbnail in .MISC directory */
- if (path != NULL &&
+ if (g_file_attribute_matcher_matches (matcher, G_FILE_ATTRIBUTE_PREVIEW_ICON) &&
+ path != NULL &&
g_str_has_prefix (path, "/DCIM/") &&
hidden == FALSE &&
basename != NULL &&
--
cgit v0.8.3.1
gvfs-1.4.1-afc-shadowed-mount.patch:
afcvolume.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-shadowed-mount.patch ---
>From 5bf437d9e65d69e985af1c1dc8d9c84cac744c96 Mon Sep 17 00:00:00 2001
From: Martin Szulecki <opensuse at sukimashita.com>
Date: Sun, 15 Nov 2009 00:42:03 +0000
Subject: Fix shadowed mount showing up next to existing volume icon
The activation_root for a volume was not set when queried and thus
causing two icons created for the same volume/mount.
Now it already sets the activiation_root in the volume constructor
like in the gphoto2 backend.
https://bugzilla.gnome.org/show_bug.cgi?id=597802
---
diff --git a/monitor/afc/afcvolume.c b/monitor/afc/afcvolume.c
index 73f2e55..3af4661 100644
--- a/monitor/afc/afcvolume.c
+++ b/monitor/afc/afcvolume.c
@@ -137,11 +137,19 @@ g_vfs_afc_volume_new (GVolumeMonitor *monitor,
const char *uuid)
{
GVfsAfcVolume *self;
+ GFile *root;
+ char *uri;
self = G_VFS_AFC_VOLUME(g_object_new (G_VFS_TYPE_AFC_VOLUME, NULL));
self->monitor = monitor;
self->uuid = g_strdup (uuid);
+ uri = g_strdup_printf ("afc://%s", self->uuid);
+ root = g_file_new_for_uri (uri);
+ g_free (uri);
+
+ g_object_set_data_full (G_OBJECT(self), "root", root, g_object_unref);
+
/* Get mount information here */
if (!_g_vfs_afc_volume_update_metadata (self))
return NULL;
@@ -233,15 +241,12 @@ g_vfs_afc_volume_mount (GVolume *volume,
GVfsAfcVolume *afc_volume = G_VFS_AFC_VOLUME (volume);
ActivationMountOp *data;
GFile *root;
- char *uri;
g_print ("g_vfs_afc_volume_mount (can_mount=%d uuid=%s)\n",
g_vfs_afc_volume_can_mount (volume),
afc_volume->uuid);
- uri = g_strdup_printf ("afc://%s", afc_volume->uuid);
- root = g_file_new_for_uri (uri);
- g_free (uri);
+ root = g_object_get_data (G_OBJECT (volume), "root");
data = g_new0 (ActivationMountOp, 1);
data->enclosing_volume = afc_volume;
@@ -249,8 +254,6 @@ g_vfs_afc_volume_mount (GVolume *volume,
data->user_data = user_data;
data->root = root;
- g_object_set_data_full (G_OBJECT(volume), "root", g_object_ref (root), g_object_unref);
-
g_file_mount_enclosing_volume (root,
0,
mount_operation,
--
cgit v0.8.3.1
gvfs-1.4.1-afc-st_mtime.patch:
gvfsbackendafc.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- NEW FILE gvfs-1.4.1-afc-st_mtime.patch ---
>From 3590a1b9bac58bf95af25fa5348c2a34b1da6bd3 Mon Sep 17 00:00:00 2001
From: Nikias Bassen <nikias at gmx.li>
Date: Thu, 29 Oct 2009 11:22:15 +0000
Subject: [afc] Add st_mtime support for OS 3.1
Add mtime support in g_vfs_backend_afc_set_info_from_afcinfo,
as supported by OS 3.1.
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 29c1ed1..8bdd2ec 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -797,6 +797,10 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
{
g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_NLINK, atoi(afcinfo[i+1]));
}
+ else if (g_str_equal (afcinfo[i], "st_mtime"))
+ {
+ g_file_info_set_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED, atoll(afcinfo[i+1]) / 1000000000);
+ }
else if (g_str_equal (afcinfo[i], "LinkTarget"))
{
linktarget = g_strdup (afcinfo[i+1]);
--
cgit v0.8.3.1
gvfs-1.4.1-afc-thumbnails.patch:
gvfsbackendafc.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 67 insertions(+), 5 deletions(-)
--- NEW FILE gvfs-1.4.1-afc-thumbnails.patch ---
>From 7226f3868128ff7b888a7bde88c6b4484c373b43 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Fri, 06 Nov 2009 00:38:48 +0000
Subject: [afc] Add thumbnails for Photos in /DCIM
Photos taken using the iPhone or iPod touch will be thumbnailed
by the device, on-disk, so try to use those instead of letting
the computer download the whole file for it.
Make sure we only process non-hidden files inside the DCIM
directory, to avoid unnecessary checks.
https://bugzilla.gnome.org/show_bug.cgi?id=597804
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 43affa7..aa90a41 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -733,6 +733,7 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
GFileInfo *info,
char **afcinfo,
const char *basename,
+ const char *path,
GFileAttributeMatcher *matcher,
GFileQueryInfoFlags flags)
{
@@ -742,6 +743,7 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
char *display_name;
char *linktarget = NULL;
char **afctargetinfo = NULL;
+ gboolean hidden = FALSE;
int i;
/* get file attributes from info list */
@@ -859,7 +861,7 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
{
/* query the linktarget instead and merge the file info of it */
if (AFC_E_SUCCESS == afc_get_file_info (self->afc_cli, linktarget, &afctargetinfo))
- g_vfs_backend_afc_set_info_from_afcinfo (self, info, afctargetinfo, linktarget, matcher, flags);
+ g_vfs_backend_afc_set_info_from_afcinfo (self, info, afctargetinfo, linktarget, NULL, matcher, flags);
if (afctargetinfo)
g_strfreev (afctargetinfo);
}
@@ -886,8 +888,69 @@ g_vfs_backend_afc_set_info_from_afcinfo (GVfsBackendAfc *self,
/* mark dot files as hidden */
if (basename != NULL && basename[0] == '.')
- g_file_info_set_is_hidden (info, TRUE);
+ hidden = TRUE;
+
+ g_file_info_set_is_hidden (info, hidden);
+
+ /* Check for matching thumbnail in .MISC directory */
+ if (path != NULL &&
+ g_str_has_prefix (path, "/DCIM/") &&
+ hidden == FALSE &&
+ basename != NULL &&
+ type == G_FILE_TYPE_REGULAR &&
+ strlen (path) > 1 &&
+ strlen (basename) > 4 &&
+ basename[strlen(basename) - 4] == '.')
+ {
+ char *thumb_uri, *thumb_base, *thumb_path;
+ char *parent, *ptr, *no_suffix;
+ char **thumb_afcinfo;
+ GFile *thumb_file;
+
+ GMountSpec *mount_spec;
+ const char *port;
+
+ /* Parent directory */
+ ptr = strrchr (path, '/');
+ if (ptr == NULL)
+ return;
+ parent = g_strndup (path, ptr - path);
+
+ /* Basename with suffix replaced */
+ no_suffix = g_strndup (basename, strlen (basename) - 3);
+ thumb_base = g_strdup_printf ("%s%s", no_suffix, "THM");
+ g_free (no_suffix);
+
+ /* Full thumbnail path */
+ thumb_path = g_build_filename (parent, ".MISC", thumb_base, NULL);
+ g_free (parent);
+ g_free (thumb_base);
+
+ thumb_afcinfo = NULL;
+ if (afc_get_file_info (self->afc_cli, thumb_path, &thumb_afcinfo) != 0)
+ {
+ g_strfreev (thumb_afcinfo);
+ g_free (thumb_path);
+ return;
+ }
+ g_strfreev (thumb_afcinfo);
+
+ /* Get the URI for the thumbnail file */
+ mount_spec = g_vfs_backend_get_mount_spec (G_VFS_BACKEND (self));
+ port = g_mount_spec_get (mount_spec, "port");
+ thumb_uri = g_strdup_printf ("afc://%s%s%s", self->uuid, port ? port : "", thumb_path);
+ thumb_file = g_file_new_for_uri (thumb_uri);
+ g_free (thumb_uri);
+
+ /* Set preview icon */
+ icon = g_file_icon_new (thumb_file);
+ g_object_unref (thumb_file);
+ g_file_info_set_attribute_object (info,
+ G_FILE_ATTRIBUTE_PREVIEW_ICON,
+ G_OBJECT (icon));
+ g_object_unref (icon);
+ }
}
/* Callback for iterating over a directory. */
@@ -934,7 +997,7 @@ g_vfs_backend_afc_enumerate (GVfsBackend *backend,
if (G_LIKELY(afc_get_file_info(self->afc_cli, file_path, &afcinfo) == AFC_E_SUCCESS))
{
info = g_file_info_new ();
- g_vfs_backend_afc_set_info_from_afcinfo (self, info, afcinfo, *ptr, matcher, flags);
+ g_vfs_backend_afc_set_info_from_afcinfo (self, info, afcinfo, *ptr, file_path, matcher, flags);
g_vfs_job_enumerate_add_info (job, info);
g_object_unref (G_OBJECT(info));
g_strfreev (afcinfo);
@@ -978,7 +1041,7 @@ g_vfs_backend_afc_query_info (GVfsBackend *backend,
else
basename = path;
- g_vfs_backend_afc_set_info_from_afcinfo (self, info, afcinfo, basename, matcher, flags);
+ g_vfs_backend_afc_set_info_from_afcinfo (self, info, afcinfo, basename, path, matcher, flags);
if (afcinfo)
g_strfreev (afcinfo);
--
cgit v0.8.3.1
gvfs-1.4.1-afc-x-content-types.patch:
gvfsbackendafc.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
--- NEW FILE gvfs-1.4.1-afc-x-content-types.patch ---
>From 92c179d6ce2682595e7ce1a77e301ffc49e25526 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Fri, 06 Nov 2009 00:49:17 +0000
Subject: [afc] Add x-content types for AFC backend
https://bugzilla.gnome.org/show_bug.cgi?id=597805
---
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index aa90a41..0c34e8b 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -255,6 +255,9 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
int retries;
iphone_error_t err;
lockdownd_client_t lockdown_cli = NULL;
+ char *camera_x_content_types[] = { "x-content/audio-player", "x-content/image-dcf", NULL};
+ char *media_player_x_content_types[] = {"x-content/audio-player", NULL};
+ char **dcim_afcinfo;
self = G_VFS_BACKEND_AFC(backend);
self->connected = FALSE;
@@ -384,6 +387,14 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
/* lockdown connection is not needed anymore */
lockdownd_client_free (lockdown_cli);
+ /* Add camera item if necessary */
+ dcim_afcinfo = NULL;
+ if (afc_get_file_info (self->afc_cli, "/DCIM", &dcim_afcinfo) == AFC_E_SUCCESS)
+ g_vfs_backend_set_x_content_types (backend, camera_x_content_types);
+ else
+ g_vfs_backend_set_x_content_types (backend, media_player_x_content_types);
+ g_strfreev (dcim_afcinfo);
+
self->connected = TRUE;
g_vfs_job_succeeded (G_VFS_JOB(job));
return;
--
cgit v0.8.3.1
gvfs-1.5.3-afc-new-libiphone.patch:
configure.ac | 2 +-
daemon/gvfsbackendafc.c | 9 +++++----
monitor/afc/afcvolume.c | 5 ++---
3 files changed, 8 insertions(+), 8 deletions(-)
--- NEW FILE gvfs-1.5.3-afc-new-libiphone.patch ---
>From a496883e99676e30e56280b7a43551c796552d5f Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Tue, 26 Jan 2010 14:30:56 +0000
Subject: Update AFC backend and volume monitor for libiphone 0.9.6
---
diff --git a/configure.ac b/configure.ac
index b3a96f3..b47f091 100644
--- a/configure.ac
+++ b/configure.ac
@@ -331,7 +331,7 @@ AFC_LIBS=
AFC_CFLAGS=
if test "x$enable_afc" != "xno" ; then
- PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.4, msg_afc=yes)
+ PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.6, msg_afc=yes)
if test "x$msg_afc" = "xyes"; then
PKG_CHECK_MODULES(AFC, libiphone-1.0)
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 783ed86..2d42d15 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -249,7 +249,8 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
const char *str;
char *tmp;
char *display_name;
- int port, virtual_port;
+ guint16 port;
+ int virtual_port;
GMountSpec *real_spec;
GVfsBackendAfc *self;
int retries;
@@ -330,8 +331,9 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
if (G_UNLIKELY(g_vfs_backend_iphone_check(err, G_VFS_JOB(job))))
goto out_destroy_service;
- if (G_UNLIKELY(g_vfs_backend_lockdownd_check (lockdownd_client_new (self->dev,
- &lockdown_cli),
+ if (G_UNLIKELY(g_vfs_backend_lockdownd_check (lockdownd_client_new_with_handshake (self->dev,
+ &lockdown_cli,
+ "gvfsd-afc"),
G_VFS_JOB(job))))
{
goto out_destroy_dev;
@@ -1305,7 +1307,6 @@ g_vfs_backend_afc_init (GVfsBackendAfc *self)
{
/* enable full debugging */
iphone_set_debug_level (1);
- iphone_set_debug_mask (DBGMASK_ALL);
}
}
diff --git a/monitor/afc/afcvolume.c b/monitor/afc/afcvolume.c
index 3af4661..a0413ec 100644
--- a/monitor/afc/afcvolume.c
+++ b/monitor/afc/afcvolume.c
@@ -77,7 +77,7 @@ _g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
iphone_error_t err;
guint retries;
char *model, *display_name;
- int port;
+ guint16 port;
retries = 0;
do {
@@ -90,7 +90,7 @@ _g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
if (err != IPHONE_E_SUCCESS)
return 0;
- if (lockdownd_client_new (dev, &lockdown_cli) != LOCKDOWN_E_SUCCESS)
+ if (lockdownd_client_new_with_handshake (dev, &lockdown_cli, "gvfs-afc-volume-monitor") != LOCKDOWN_E_SUCCESS)
{
iphone_device_free (dev);
return 0;
--
cgit v0.8.3.1
gvfs-1.5.3-use-libimobiledevice.patch:
configure.ac | 4 +--
daemon/gvfsbackendafc.c | 44 ++++++++++++++++++++---------------------
monitor/afc/afcvolume.c | 22 ++++++++++----------
monitor/afc/afcvolumemonitor.c | 11 ++++------
4 files changed, 40 insertions(+), 41 deletions(-)
--- NEW FILE gvfs-1.5.3-use-libimobiledevice.patch ---
>From 3f3f130072c94e38d6f07ef37d425a1c86bddd29 Mon Sep 17 00:00:00 2001
From: Nikias Bassen <nikias at gmx.li>
Date: Sun, 31 Jan 2010 11:54:44 +0000
Subject: Update AFC backend and volume monitor for libimobiledevice 0.9.7
---
diff --git a/configure.ac b/configure.ac
index b47f091..f366d3a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -331,10 +331,10 @@ AFC_LIBS=
AFC_CFLAGS=
if test "x$enable_afc" != "xno" ; then
- PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.6, msg_afc=yes)
+ PKG_CHECK_EXISTS(libimobiledevice-1.0 >= 0.9.7, msg_afc=yes)
if test "x$msg_afc" = "xyes"; then
- PKG_CHECK_MODULES(AFC, libiphone-1.0)
+ PKG_CHECK_MODULES(AFC, libimobiledevice-1.0)
AC_DEFINE(HAVE_AFC, 1, [Define to 1 if AFC is going to be built])
fi
fi
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
index 2d42d15..c056718 100644
--- a/daemon/gvfsbackendafc.c
+++ b/daemon/gvfsbackendafc.c
@@ -16,9 +16,9 @@
#include <glib/gi18n.h>
#include <errno.h>
-#include <libiphone/libiphone.h>
-#include <libiphone/lockdown.h>
-#include <libiphone/afc.h>
+#include <libimobiledevice/libimobiledevice.h>
+#include <libimobiledevice/lockdown.h>
+#include <libimobiledevice/afc.h>
#include "gvfsbackendafc.h"
#include "gvfsjobopenforread.h"
@@ -46,7 +46,7 @@ struct _GVfsBackendAfc {
char *model;
gboolean connected;
- iphone_device_t dev;
+ idevice_t dev;
afc_client_t afc_cli;
};
@@ -124,7 +124,7 @@ g_vfs_backend_afc_close_connection (GVfsBackendAfc *self)
afc_client_free (self->afc_cli);
g_free (self->model);
self->model = NULL;
- iphone_device_free (self->dev);
+ idevice_free (self->dev);
}
self->connected = FALSE;
}
@@ -194,23 +194,23 @@ g_vfs_backend_lockdownd_check (lockdownd_error_t cond, GVfsJob *job)
}
static int
-g_vfs_backend_iphone_check (iphone_error_t cond, GVfsJob *job)
+g_vfs_backend_idevice_check (idevice_error_t cond, GVfsJob *job)
{
- if (G_LIKELY(cond == IPHONE_E_SUCCESS))
+ if (G_LIKELY(cond == IDEVICE_E_SUCCESS))
return 0;
switch (cond)
{
- case IPHONE_E_INVALID_ARG:
+ case IDEVICE_E_INVALID_ARG:
g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("iPhone Device Error: Invalid Argument"));
+ _("libimobiledevice Error: Invalid Argument"));
break;
- case IPHONE_E_NO_DEVICE:
+ case IDEVICE_E_NO_DEVICE:
g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("iPhone Device Error: No device found. Make sure usbmuxd is set up correctly."));
+ _("libimobiledevice Error: No device found. Make sure usbmuxd is set up correctly."));
default:
g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Unhandled iPhone Device error (%d)"), cond);
+ _("Unhandled libimobiledevice error (%d)"), cond);
break;
}
@@ -218,12 +218,12 @@ g_vfs_backend_iphone_check (iphone_error_t cond, GVfsJob *job)
}
static void
-_iphone_event_cb (const iphone_event_t *event, void *user_data)
+_idevice_event_cb (const idevice_event_t *event, void *user_data)
{
GVfsBackendAfc *afc_backend = G_VFS_BACKEND_AFC (user_data);
g_return_if_fail (afc_backend->uuid != NULL);
- if (event->event != IPHONE_DEVICE_REMOVE)
+ if (event->event != IDEVICE_DEVICE_REMOVE)
return;
if (g_str_equal (event->uuid, afc_backend->uuid) == FALSE)
return;
@@ -232,7 +232,7 @@ _iphone_event_cb (const iphone_event_t *event, void *user_data)
g_vfs_backend_afc_close_connection (afc_backend);
- iphone_event_unsubscribe ();
+ idevice_event_unsubscribe ();
/* TODO: need a cleaner way to force unmount ourselves */
exit (1);
@@ -254,7 +254,7 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
GMountSpec *real_spec;
GVfsBackendAfc *self;
int retries;
- iphone_error_t err;
+ idevice_error_t err;
lockdownd_client_t lockdown_cli = NULL;
char *camera_x_content_types[] = { "x-content/audio-player", "x-content/image-dcf", NULL};
char *media_player_x_content_types[] = {"x-content/audio-player", NULL};
@@ -263,7 +263,7 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
self = G_VFS_BACKEND_AFC(backend);
self->connected = FALSE;
- iphone_event_subscribe (_iphone_event_cb, self);
+ idevice_event_subscribe (_idevice_event_cb, self);
/* setup afc */
@@ -323,13 +323,13 @@ g_vfs_backend_afc_mount (GVfsBackend *backend,
retries = 0;
do {
- err = iphone_device_new(&self->dev, self->uuid);
- if (err == IPHONE_E_SUCCESS)
+ err = idevice_new(&self->dev, self->uuid);
+ if (err == IDEVICE_E_SUCCESS)
break;
g_usleep (G_USEC_PER_SEC);
} while (retries++ < 10);
- if (G_UNLIKELY(g_vfs_backend_iphone_check(err, G_VFS_JOB(job))))
+ if (G_UNLIKELY(g_vfs_backend_idevice_check(err, G_VFS_JOB(job))))
goto out_destroy_service;
if (G_UNLIKELY(g_vfs_backend_lockdownd_check (lockdownd_client_new_with_handshake (self->dev,
&lockdown_cli,
@@ -408,7 +408,7 @@ out_destroy_lockdown:
lockdownd_client_free (lockdown_cli);
out_destroy_dev:
- iphone_device_free (self->dev);
+ idevice_free (self->dev);
out_destroy_service:
g_free (self->service);
@@ -1306,7 +1306,7 @@ g_vfs_backend_afc_init (GVfsBackendAfc *self)
if (g_getenv ("GVFS_DEBUG") != NULL)
{
/* enable full debugging */
- iphone_set_debug_level (1);
+ idevice_set_debug_level (1);
}
}
diff --git a/monitor/afc/afcvolume.c b/monitor/afc/afcvolume.c
index a0413ec..26da41f 100644
--- a/monitor/afc/afcvolume.c
+++ b/monitor/afc/afcvolume.c
@@ -9,9 +9,9 @@
#include <glib.h>
#include <gio/gio.h>
-#include <libiphone/libiphone.h>
-#include <libiphone/lockdown.h>
-#include <libiphone/afc.h>
+#include <libimobiledevice/libimobiledevice.h>
+#include <libimobiledevice/lockdown.h>
+#include <libimobiledevice/afc.h>
#include "afcvolume.h"
@@ -71,28 +71,28 @@ g_vfs_afc_volume_class_init (GVfsAfcVolumeClass *klass)
static int
_g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
{
- iphone_device_t dev;
+ idevice_t dev;
afc_client_t afc_cli;
lockdownd_client_t lockdown_cli = NULL;
- iphone_error_t err;
+ idevice_error_t err;
guint retries;
char *model, *display_name;
guint16 port;
retries = 0;
do {
- err = iphone_device_new (&dev, self->uuid);
- if (err == IPHONE_E_SUCCESS)
+ err = idevice_new (&dev, self->uuid);
+ if (err == IDEVICE_E_SUCCESS)
break;
g_usleep (G_USEC_PER_SEC);
} while (retries++ < 10);
- if (err != IPHONE_E_SUCCESS)
+ if (err != IDEVICE_E_SUCCESS)
return 0;
if (lockdownd_client_new_with_handshake (dev, &lockdown_cli, "gvfs-afc-volume-monitor") != LOCKDOWN_E_SUCCESS)
{
- iphone_device_free (dev);
+ idevice_free (dev);
return 0;
}
@@ -106,7 +106,7 @@ _g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
if (lockdownd_start_service (lockdown_cli, DEFAULT_SERVICE, &port) != LOCKDOWN_E_SUCCESS)
{
lockdownd_client_free (lockdown_cli);
- iphone_device_free (dev);
+ idevice_free (dev);
return 0;
}
@@ -127,7 +127,7 @@ _g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
}
lockdownd_client_free (lockdown_cli);
- iphone_device_free (dev);
+ idevice_free (dev);
return 1;
}
diff --git a/monitor/afc/afcvolumemonitor.c b/monitor/afc/afcvolumemonitor.c
index 91b3e41..d10e862 100644
--- a/monitor/afc/afcvolumemonitor.c
+++ b/monitor/afc/afcvolumemonitor.c
@@ -10,7 +10,7 @@
#include <gvfsproxyvolumemonitordaemon.h>
#include <stdio.h>
#include <gio/gio.h>
-#include <libiphone/libiphone.h>
+#include <libimobiledevice/libimobiledevice.h>
#include "afcvolume.h"
#include "afcvolumemonitor.h"
@@ -70,7 +70,7 @@ g_vfs_afc_monitor_remove_volume (GVfsAfcVolumeMonitor *self,
}
static void
-g_vfs_afc_monitor_iphone_event (const iphone_event_t *event, void *user_data)
+g_vfs_afc_monitor_idevice_event (const idevice_event_t *event, void *user_data)
{
GVfsAfcVolumeMonitor *self;
@@ -78,7 +78,7 @@ g_vfs_afc_monitor_iphone_event (const iphone_event_t *event, void *user_data)
self = G_VFS_AFC_VOLUME_MONITOR(user_data);
- if (event->event == IPHONE_DEVICE_ADD)
+ if (event->event == IDEVICE_DEVICE_ADD)
g_vfs_afc_monitor_create_volume (self, event->uuid);
else
g_vfs_afc_monitor_remove_volume (self, event->uuid);
@@ -95,7 +95,7 @@ g_vfs_afc_volume_monitor_constructor (GType type, guint ncps,
self->volumes = NULL;
- iphone_event_subscribe(g_vfs_afc_monitor_iphone_event, self);
+ idevice_event_subscribe(g_vfs_afc_monitor_idevice_event, self);
g_print ("Volume monitor alive\n");
@@ -119,7 +119,7 @@ g_vfs_afc_volume_monitor_finalize (GObject *_self)
if (self->volumes)
list_free (self->volumes);
- iphone_event_unsubscribe();
+ idevice_event_unsubscribe();
if (G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->finalize)
(*G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->finalize)( G_OBJECT(self));
--
cgit v0.8.3.1
0001-Add-AFC-backend.patch:
configure.ac | 26
daemon/Makefile.am | 23
daemon/afc.mount.in | 7
daemon/gvfsbackendafc.c | 1216 ++++++++++++++++
daemon/gvfsbackendafc.h | 37
monitor/Makefile.am | 6
monitor/afc/Makefile.am | 49
monitor/afc/afc.monitor | 5
monitor/afc/afcvolume.c | 350 ++++
monitor/afc/afcvolume.h | 44
monitor/afc/afcvolumemonitor.c | 188 ++
monitor/afc/afcvolumemonitor.h | 39
monitor/afc/afcvolumemonitordaemon.c | 31
monitor/afc/org.gtk.Private.AfcVolumeMonitor.service.in | 5
14 files changed, 2023 insertions(+), 3 deletions(-)
Index: 0001-Add-AFC-backend.patch
===================================================================
RCS file: /cvs/extras/rpms/gvfs/F-12/0001-Add-AFC-backend.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- 0001-Add-AFC-backend.patch 14 Aug 2009 14:50:11 -0000 1.2
+++ 0001-Add-AFC-backend.patch 8 Feb 2010 16:44:30 -0000 1.3
@@ -1,7 +1,10 @@
-From 8675a60e030fc91292d19cfd2cd9a6d74dd1776f Mon Sep 17 00:00:00 2001
+From b6fda31fe81820259e432545b052980fa718d817 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess at hadess.net>
Date: Thu, 6 Aug 2009 22:55:47 +0100
-Subject: [PATCH] Add AFC backend
+Subject: [PATCH 125/250] =?UTF-8?q?Bug=C2=A0591005=20-=20Add=20AFC=20backend?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
Add a backend based on libiphone to access data on Apple's iPhone,
and iPod Touch.
@@ -11,22 +14,24 @@ Patrick Walton <pcwalton at cs.ucla.edu>
Martin Szulecki <opensuse at sukimashita.com>
Nikias Bassen <nikias at gmx.li>
Bastien Nocera <hadess at hadess.net>
+
+http://bugzilla.gnome.org/show_bug.cgi?id=591005
---
configure.ac | 26 +-
daemon/Makefile.am | 23 +
daemon/afc.mount.in | 7 +
- daemon/gvfsbackendafc.c | 1228 ++++++++++++++++++++
+ daemon/gvfsbackendafc.c | 1216 ++++++++++++++++++++
daemon/gvfsbackendafc.h | 37 +
monitor/Makefile.am | 6 +-
monitor/afc/Makefile.am | 49 +
monitor/afc/afc.monitor | 5 +
- monitor/afc/afcvolume.c | 353 ++++++
+ monitor/afc/afcvolume.c | 350 ++++++
monitor/afc/afcvolume.h | 44 +
- monitor/afc/afcvolumemonitor.c | 224 ++++
+ monitor/afc/afcvolumemonitor.c | 188 +++
monitor/afc/afcvolumemonitor.h | 39 +
monitor/afc/afcvolumemonitordaemon.c | 31 +
.../org.gtk.Private.AfcVolumeMonitor.service.in | 4 +
- 14 files changed, 2074 insertions(+), 2 deletions(-)
+ 14 files changed, 2023 insertions(+), 2 deletions(-)
create mode 100644 daemon/afc.mount.in
create mode 100644 daemon/gvfsbackendafc.c
create mode 100644 daemon/gvfsbackendafc.h
@@ -40,7 +45,7 @@ Bastien Nocera <hadess at hadess.net>
create mode 100644 monitor/afc/org.gtk.Private.AfcVolumeMonitor.service.in
diff --git a/configure.ac b/configure.ac
-index 9bfb8ad..6b3838c 100644
+index 2db4dcf..84543c5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -324,6 +324,28 @@ AC_SUBST(CDDA_CFLAGS)
@@ -56,10 +61,10 @@ index 9bfb8ad..6b3838c 100644
+AFC_CFLAGS=
+
+if test "x$enable_afc" != "xno" -a "x$msg_gudev" = "xyes" ; then
-+ PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.2, msg_afc=yes)
++ PKG_CHECK_EXISTS(libiphone-1.0 >= 0.9.2 libusbmuxd >= 1.0, msg_afc=yes)
+
+ if test "x$msg_afc" = "xyes"; then
-+ PKG_CHECK_MODULES(AFC, libiphone-1.0 gudev-1.0)
++ PKG_CHECK_MODULES(AFC, libiphone-1.0 libusbmuxd >= 1.0)
+ AC_DEFINE(HAVE_AFC, 1, [Define to 1 if AFC is going to be built])
+ fi
+fi
@@ -143,10 +148,10 @@ index 0000000..727d833
+
diff --git a/daemon/gvfsbackendafc.c b/daemon/gvfsbackendafc.c
new file mode 100644
-index 0000000..d30ede8
+index 0000000..8c64b0d
--- /dev/null
+++ b/daemon/gvfsbackendafc.c
-@@ -0,0 +1,1228 @@
+@@ -0,0 +1,1216 @@
+/*
+ * gvfs/daemon/gvfsbackendafc.c
+ *
@@ -165,8 +170,6 @@ index 0000000..d30ede8
+#include <glib/gi18n.h>
+#include <errno.h>
+
-+#include <gudev/gudev.h>
-+
+#include <libiphone/libiphone.h>
+#include <libiphone/lockdown.h>
+#include <libiphone/afc.h>
@@ -192,8 +195,6 @@ index 0000000..d30ede8
+struct _GVfsBackendAfc {
+ GVfsBackend backend;
+
-+ GUdevClient *client;
-+
+ char uuid[41];
+ char *service;
+ char *model;
@@ -371,27 +372,22 @@ index 0000000..d30ede8
+}
+
+static void
-+_uevent_cb (GUdevClient *client,
-+ const gchar *action,
-+ GUdevDevice *device,
-+ gpointer user_data)
++_usbmuxd_event_cb (const usbmuxd_event_t *event, void *user_data)
+{
+ GVfsBackendAfc *afc_backend = G_VFS_BACKEND_AFC (user_data);
-+ const char *uuid;
+
+ g_return_if_fail (afc_backend->uuid != NULL);
-+
-+ if (g_str_equal (action, "remove") == FALSE)
++ if (event->event != UE_DEVICE_REMOVE)
+ return;
-+ uuid = g_udev_device_get_property (device, "ID_SERIAL_SHORT");
-+ if (uuid == NULL ||
-+ g_str_equal (uuid, afc_backend->uuid) == FALSE)
++ if (g_str_equal (event->device.uuid, afc_backend->uuid) == FALSE)
+ return;
+
+ g_print ("Shutting down AFC backend for device uuid %s\n", afc_backend->uuid);
+
+ g_vfs_backend_afc_close_connection (afc_backend);
+
++ usbmuxd_unsubscribe();
++
+ /* TODO: need a cleaner way to force unmount ourselves */
+ exit (1);
+}
@@ -413,13 +409,10 @@ index 0000000..d30ede8
+ int retries;
+ iphone_error_t err;
+ lockdownd_client_t lockdown_cli = NULL;
-+ const gchar * const subsystems[] = { "usb", NULL };
+
+ self = G_VFS_BACKEND_AFC(backend);
+ self->connected = FALSE;
-+ self->client = g_udev_client_new (subsystems);
-+ g_signal_connect (G_OBJECT (self->client), "uevent",
-+ G_CALLBACK (_uevent_cb), self);
++ usbmuxd_subscribe (_usbmuxd_event_cb, self);
+
+ /* setup afc */
+
@@ -431,7 +424,7 @@ index 0000000..d30ede8
+ _("Invalid mount spec"));
+ return;
+ }
-+ if (G_UNLIKELY(sscanf(str, "%40s", &self->uuid) < 1))
++ if (G_UNLIKELY(sscanf(str, "%40s", (char *) &self->uuid) < 1))
+ {
+ g_vfs_job_failed (G_VFS_JOB(job), G_IO_ERROR, G_IO_ERROR_FAILED,
+ _("Invalid AFC location: must be in the form of "
@@ -462,7 +455,7 @@ index 0000000..d30ede8
+ g_free (display_name);
+
+ real_spec = g_mount_spec_new ("afc");
-+ tmp = g_strdup_printf ("%40s", &self->uuid);
++ tmp = g_strdup_printf ("%40s", (char *) &self->uuid);
+ g_mount_spec_set (real_spec, "host", tmp);
+ g_free (tmp);
+
@@ -1504,10 +1497,10 @@ index 0000000..1663573
+
diff --git a/monitor/afc/afcvolume.c b/monitor/afc/afcvolume.c
new file mode 100644
-index 0000000..688f75b
+index 0000000..0e3c65e
--- /dev/null
+++ b/monitor/afc/afcvolume.c
-@@ -0,0 +1,353 @@
+@@ -0,0 +1,350 @@
+/*
+ * gvfs/monitor/afc/afc-volume.c
+ *
@@ -1545,11 +1538,11 @@ index 0000000..688f75b
+ G_IMPLEMENT_INTERFACE(G_TYPE_VOLUME, g_vfs_afc_volume_iface_init))
+
+static void
-+g_vfs_afc_volume_finalize (GObject *self_)
++g_vfs_afc_volume_finalize (GObject *object)
+{
+ GVfsAfcVolume *self;
+
-+ self = G_VFS_AFC_VOLUME(self);
++ self = G_VFS_AFC_VOLUME(object);
+
+ g_free (self->uuid);
+
@@ -1805,9 +1798,6 @@ index 0000000..688f75b
+
+ res = g_ptr_array_new ();
+
-+ g_ptr_array_add (res,
-+ g_strdup (G_VOLUME_IDENTIFIER_KIND_HAL_UDI));
-+
+ if (afc_volume->uuid && *afc_volume->uuid != 0)
+ {
+ g_ptr_array_add (res,
@@ -1913,10 +1903,10 @@ index 0000000..de24cd5
+ */
diff --git a/monitor/afc/afcvolumemonitor.c b/monitor/afc/afcvolumemonitor.c
new file mode 100644
-index 0000000..93926eb
+index 0000000..e0de6ef
--- /dev/null
+++ b/monitor/afc/afcvolumemonitor.c
-@@ -0,0 +1,224 @@
+@@ -0,0 +1,188 @@
+/*
+ * gvfs/monitor/afc/afc-volume-monitor.c
+ *
@@ -1929,14 +1919,12 @@ index 0000000..93926eb
+#include <gvfsproxyvolumemonitordaemon.h>
+#include <stdio.h>
+#include <gio/gio.h>
-+#define G_UDEV_API_IS_SUBJECT_TO_CHANGE
-+#include <gudev/gudev.h>
++#include <usbmuxd.h>
+#include "afcvolume.h"
+#include "afcvolumemonitor.h"
+
+struct _GVfsAfcVolumeMonitor {
+ GNativeVolumeMonitor parent;
-+ GUdevClient *client;
+ GList *volumes;
+};
+
@@ -1990,35 +1978,18 @@ index 0000000..93926eb
+}
+
+static void
-+g_vfs_afc_monitor_uevent (GUdevClient *client,
-+ const gchar *action,
-+ GUdevDevice *device,
-+ gpointer user_data)
++g_vfs_afc_monitor_usbmuxd_event (const usbmuxd_event_t *event, void *user_data)
+{
+ GVfsAfcVolumeMonitor *self;
-+ const char *vendor, *uuid;
+
-+ self = G_VFS_AFC_VOLUME_MONITOR(user_data);
-+
-+ /* Vendor is Apple? */
-+ vendor = g_udev_device_get_property (device, "ID_VENDOR");
-+ if (vendor == NULL ||
-+ g_str_equal (vendor, "Apple_Inc.") == FALSE) {
-+ return;
-+ }
++ g_return_if_fail (event != NULL);
+
-+ /* Get us a UUID */
-+ uuid = g_udev_device_get_property (device, "ID_SERIAL_SHORT");
-+ if (uuid == NULL)
-+ {
-+ g_message ("No serial for device");
-+ return;
-+ }
++ self = G_VFS_AFC_VOLUME_MONITOR(user_data);
+
-+ if (g_str_equal (action, "add") != FALSE)
-+ g_vfs_afc_monitor_create_volume (self, uuid);
-+ else if (g_str_equal (action, "remove") != FALSE)
-+ g_vfs_afc_monitor_remove_volume (self, uuid);
++ if (event->event == UE_DEVICE_ADD)
++ g_vfs_afc_monitor_create_volume (self, event->device.uuid);
++ else
++ g_vfs_afc_monitor_remove_volume (self, event->device.uuid);
+}
+
+static GObject *
@@ -2026,26 +1997,13 @@ index 0000000..93926eb
+ GObjectConstructParam *cps)
+{
+ GVfsAfcVolumeMonitor *self;
-+ GList *devices, *l;
-+ const gchar * const subsystems[] = { "usb", NULL };
+
+ /* Boilerplate code to chain from parent. */
+ self = G_VFS_AFC_VOLUME_MONITOR((*G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->constructor)(type, ncps, cps));
+
-+ self->client = g_udev_client_new (subsystems);
-+ g_signal_connect (G_OBJECT (self->client), "uevent",
-+ G_CALLBACK (g_vfs_afc_monitor_uevent), self);
-+
+ self->volumes = NULL;
+
-+ devices = g_udev_client_query_by_subsystem (self->client, subsystems[0]);
-+ for (l = devices; l != NULL; l = l->next)
-+ {
-+ GUdevDevice *device = l->data;
-+ g_vfs_afc_monitor_uevent (self->client, "add", device, self);
-+ g_object_unref (device);
-+ }
-+ g_list_free (devices);
++ usbmuxd_subscribe(g_vfs_afc_monitor_usbmuxd_event, self);
+
+ g_print ("Volume monitor alive\n");
+
@@ -2066,15 +2024,11 @@ index 0000000..93926eb
+
+ self = G_VFS_AFC_VOLUME_MONITOR(_self);
+
++ usbmuxd_unsubscribe();
++
+ if (self->volumes)
+ list_free (self->volumes);
+
-+ if (self->client)
-+ {
-+ g_object_unref (self->client);
-+ self->client = NULL;
-+ }
-+
+ if (G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->finalize)
+ (*G_OBJECT_CLASS(g_vfs_afc_volume_monitor_parent_class)->finalize)( G_OBJECT(self));
+}
@@ -2234,5 +2188,5 @@ index 0000000..4e6bd33
+Exec=@libexecdir@/gvfs-afc-volume-monitor
+
--
-1.6.2.5
+1.6.6.1
Index: gvfs.spec
===================================================================
RCS file: /cvs/extras/rpms/gvfs/F-12/gvfs.spec,v
retrieving revision 1.180
retrieving revision 1.181
diff -u -p -r1.180 -r1.181
--- gvfs.spec 8 Feb 2010 15:05:25 -0000 1.180
+++ gvfs.spec 8 Feb 2010 16:44:31 -0000 1.181
@@ -54,6 +54,24 @@ Patch21: gvfs-1.5.2-ftp-separate-data-co
Patch22: gvfs-1.5.2-ftp-PASV-v4.patch
Patch23: gvfs-1.5.2-ftp-PASV-EPASV-v4-v6.patch
+# AFC patches from upstream
+Patch30: gvfs-1.4.1-afc-hide-dot-files.patch
+Patch31: gvfs-1.4.1-afc-fast-mime.patch
+Patch32: gvfs-1.4.1-afc-st_mtime.patch
+Patch33: gvfs-1.4.1-afc-latest-libiphone-api.patch
+Patch34: gvfs-1.4.1-afc-no-libgudev-dependency.patch
+Patch35: gvfs-1.4.1-afc-mtime-setting.patch
+Patch36: gvfs-1.4.1-afc-mtime-pre-3.1-devices.patch
+Patch37: gvfs-1.4.1-afc-dont-leak-volumes.patch
+Patch38: gvfs-1.4.1-afc-fix-mtime-setting.patch
+Patch39: gvfs-1.4.1-afc-thumbnails.patch
+Patch40: gvfs-1.4.1-afc-x-content-types.patch
+Patch41: gvfs-1.4.1-afc-preview-icon.patch
+Patch42: gvfs-1.4.1-afc-shadowed-mount.patch
+Patch43: gvfs-1.4.1-afc-indentation.patch
+Patch44: gvfs-1.5.3-afc-new-libiphone.patch
+Patch45: gvfs-1.5.3-use-libimobiledevice.patch
+
Obsoletes: gnome-mount <= 0.8
Obsoletes: gnome-mount-nautilus-properties <= 0.8
@@ -140,11 +158,11 @@ Summary: AFC support for gvfs
Group: System Environment/Libraries
Requires: %{name} = %{version}-%{release}
Requires: usbmuxd
-BuildRequires: libiphone-devel >= 0.9.2
+BuildRequires: libimobiledevice-devel >= 0.9.7
%description afc
-This package provides support for reading files on Apple iPhones and
-and iPod Touches to applications using gvfs.
+This package provides support for reading files on mobile devices
+including phones and music players to applications using gvfs.
%prep
@@ -164,6 +182,23 @@ and iPod Touches to applications using g
%patch22 -p1 -b .ftp-PASV-v4
%patch23 -p1 -b .ftp-PASV-EPASV-v4-v6
+%patch30 -p1 -b .afc-hide-dot-files.patch
+%patch31 -p1 -b .afc-fast-mime.patch
+%patch32 -p1 -b .afc-st_mtime.patch
+%patch33 -p1 -b .afc-latest-libiphone-api.patch
+%patch34 -p1 -b .afc-no-libgudev-dependency.patch
+%patch35 -p1 -b .afc-mtime-setting.patch
+%patch36 -p1 -b .afc-mtime-pre-3.1-devices.patch
+%patch37 -p1 -b .afc-dont-leak-volumes.patch
+%patch38 -p1 -b .afc-fix-mtime-setting.patch
+%patch39 -p1 -b .afc-thumbnails.patch
+%patch40 -p1 -b .afc-x-content-types.patch
+%patch41 -p1 -b .afc-preview-icon.patch
+%patch42 -p1 -b .afc-shadowed-mount.patch
+%patch43 -p1 -b .afc-indentation.patch
+%patch44 -p1 -b .afc-new-libiphone.patch
+%patch45 -p1 -b .use-libimobiledevice.patch
+
%build
# Needed for gvfs-0.2.1-archive-integration.patch
@@ -329,7 +364,8 @@ killall -USR1 gvfsd >&/dev/null || :
%changelog
* Mon Feb 8 2010 Tomas Bzatek <tbzatek at redhat.com> - 1.4.3-5
-- ftp: backport several PASV/EPSV fixes from master (#542205)
+- ftp: backport several PASV/EPSV fixes from master (#542205, #555033)
+- AFC: Use new libimobiledevice library
* Wed Feb 3 2010 Tomas Bzatek <tbzatek at redhat.com> - 1.4.3-4
- archive: fix assertion on finalize (#557545)
- Previous message: rpms/gyachi/F-11 gyachi.spec,1.47,1.48
- Next message: rpms/ocsinventory/devel ocsinventory-schema.patch, NONE, 1.1 .cvsignore, 1.6, 1.7 ocsinventory.spec, 1.12, 1.13 sources, 1.6, 1.7 ocsinventory.patch, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the scm-commits
mailing list