summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@overt.org>2012-08-19 14:13:25 -0700
committerPhilip Langdale <philipl@overt.org>2013-01-11 20:30:18 -0800
commit634086fe0ce6336440f2b4ca60b3c523eb477d4b (patch)
tree7ac4b30cbad10acb43f71ff75d0ac2b03c6fa4ec
parent10504d057757943b4cf487d46bf3e191fe911039 (diff)
downloadgvfs-634086fe0ce6336440f2b4ca60b3c523eb477d4b.tar.gz
MTP: Add support for using Representative Sample of Thumbnail fails.
I have no idea if this really works, as I don't have a device that uses it.
-rw-r--r--daemon/gvfsbackendmtp.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/daemon/gvfsbackendmtp.c b/daemon/gvfsbackendmtp.c
index 9e210845..f43c9487 100644
--- a/daemon/gvfsbackendmtp.c
+++ b/daemon/gvfsbackendmtp.c
@@ -1135,7 +1135,7 @@ do_open_icon_for_read (GVfsBackend *backend,
int ret = LIBMTP_Get_Thumbnail(G_VFS_BACKEND_MTP(backend)->device, id,
&data, &size);
if (ret == 0) {
- g_print("File %u has sampledata: %u\n", id, size);
+ g_print("File %u has thumbnail: %u\n", id, size);
GByteArray *bytes = g_byte_array_sized_new(size);
g_byte_array_append(bytes, data, size);
free(data);
@@ -1143,12 +1143,24 @@ do_open_icon_for_read (GVfsBackend *backend,
g_vfs_job_open_for_read_set_handle (G_VFS_JOB_OPEN_FOR_READ(job), bytes);
g_vfs_job_succeeded (G_VFS_JOB (job));
} else {
- g_print("File %u has no thumbnail:\n", id);
- g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND,
- _("No thumbnail for entity '%s'"),
- icon_id);
+ LIBMTP_filesampledata_t *sample_data = LIBMTP_new_filesampledata_t();
+ ret = LIBMTP_Get_Representative_Sample(G_VFS_BACKEND_MTP(backend)->device, id, sample_data);
+ if (ret == 0) {
+ g_print("File %u has sampledata: %u\n", id, size);
+ GByteArray *bytes = g_byte_array_sized_new(sample_data->size);
+ g_byte_array_append(bytes, sample_data->data, sample_data->size);
+ LIBMTP_destroy_filesampledata_t(sample_data);
+ g_vfs_job_open_for_read_set_can_seek (G_VFS_JOB_OPEN_FOR_READ(job), FALSE);
+ g_vfs_job_open_for_read_set_handle (G_VFS_JOB_OPEN_FOR_READ(job), bytes);
+ g_vfs_job_succeeded (G_VFS_JOB (job));
+ } else {
+ g_print("File %u has no thumbnail:\n", id);
+ g_vfs_job_failed (G_VFS_JOB (job),
+ G_IO_ERROR,
+ G_IO_ERROR_NOT_FOUND,
+ _("No thumbnail for entity '%s'"),
+ icon_id);
+ }
}
} else {
g_vfs_job_failed (G_VFS_JOB (job),