[rygel] make it work with gvfs (non-local directories)
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: svn-commits-list gnome org
- Subject: [rygel] make it work with gvfs (non-local directories)
- Date: Sun, 3 May 2009 15:15:50 -0400 (EDT)
commit 6664567cc9b136abb5410c6ee6ccf7caee9ece42
Author: Jens Georg <mail jensge org>
Date: Fri May 1 02:09:39 2009 +0200
make it work with gvfs (non-local directories)
---
.../folder/rygel-folder-directorysearch.vala | 79 ++++++++++++++-----
.../folder/rygel-folder-foldercontainer.vala | 3 +-
src/plugins/folder/rygel-folder-plugin.vala | 3 +-
src/plugins/folder/rygel-folder-rootcontainer.vala | 6 +-
4 files changed, 65 insertions(+), 26 deletions(-)
diff --git a/src/plugins/folder/rygel-folder-directorysearch.vala b/src/plugins/folder/rygel-folder-directorysearch.vala
index 1a1ef89..3de32ef 100644
--- a/src/plugins/folder/rygel-folder-directorysearch.vala
+++ b/src/plugins/folder/rygel-folder-directorysearch.vala
@@ -25,6 +25,9 @@ using GLib;
public class Folder.DirectorySearchResult : Rygel.SimpleAsyncResult<Gee.List<MediaObject>> {
private uint max_count;
private uint offset;
+ private File file;
+
+ private const int MAX_CHILDREN = 10;
public DirectorySearchResult(MediaContainer parent, uint offset, uint max_count, AsyncReadyCallback callback) {
base(parent, callback);
@@ -34,36 +37,70 @@ public class Folder.DirectorySearchResult : Rygel.SimpleAsyncResult<Gee.List<Med
this.max_count = max_count;
}
- public void enumerate_children_ready(Object obj, AsyncResult res) {
- File file = (File)obj;
+ public void enumerator_closed(Object obj, AsyncResult res) {
+ var enumerator = (FileEnumerator)obj;
try {
- var enumerator = file.enumerate_children_finish(res);
- var file_info = enumerator.next_file(null);
- while (file_info != null) {
- var f = file.get_child(file_info.get_name());
- try {
- MediaObject item = null;
- if (file_info.get_file_type() == FileType.DIRECTORY) {
- item = new FolderContainer((MediaContainer)source_object,
- Checksum.compute_for_string(ChecksumType.MD5, f.get_path()),
- f.get_path(), false);
+ enumerator.close_finish(res);
+ }
+ catch (Error e) {
+ this.error = e;
+ }
+ this.complete();
+ }
+ public void enumerate_next_ready(Object obj, AsyncResult res) {
+ var enumerator = (FileEnumerator)obj;
+ try {
+ var list = enumerator.next_files_finish(res);
+ if (list != null) {
+ foreach (FileInfo file_info in list) {
+ debug("new file info");
+ var f = file.get_child(file_info.get_name());
+ try {
+ MediaObject item = null;
+ if (file_info.get_file_type() == FileType.DIRECTORY) {
+ item = new FolderContainer((MediaContainer)source_object,
+ Checksum.compute_for_string(ChecksumType.MD5, f.get_uri()),
+ f.get_uri(), false);
+
+ }
+ else {
+ item = new FilesystemMediaItem((MediaContainer)source_object, f, file_info);
+ }
+ if (item != null)
+ data.add(item);
+ } catch (MediaItemError err) {
+ // most likely invalid content type
}
- else {
- item = new FilesystemMediaItem((MediaContainer)source_object, f, file_info);
- }
- if (item != null)
- data.add(item);
- } catch (MediaItemError err) {
- // most likely invalid content type
+
}
- file_info = enumerator.next_file(null);
+ enumerator.next_files_async(MAX_CHILDREN,
+ Priority.DEFAULT,
+ null, enumerate_next_ready);
}
-
+ else {
+ enumerator.close_async(Priority.DEFAULT,
+ null, enumerator_closed);
+ }
+ }
+ catch (Error e) {
+ this.error = e;
this.complete();
}
+ }
+
+ public void enumerate_children_ready(Object obj, AsyncResult res) {
+ file = (File)obj;
+ debug("enumerate ready");
+ try {
+ var enumerator = file.enumerate_children_finish(res);
+ enumerator.next_files_async(MAX_CHILDREN,
+ Priority.DEFAULT,
+ null, enumerate_next_ready);
+ }
catch (Error error) {
this.error = error;
+ debug("Error %s", error.message);
this.complete();
}
}
diff --git a/src/plugins/folder/rygel-folder-foldercontainer.vala b/src/plugins/folder/rygel-folder-foldercontainer.vala
index 210fb75..8dbd926 100644
--- a/src/plugins/folder/rygel-folder-foldercontainer.vala
+++ b/src/plugins/folder/rygel-folder-foldercontainer.vala
@@ -49,6 +49,7 @@ public class Folder.FolderContainer : MediaContainer {
Cancellable? cancellable,
AsyncReadyCallback callback)
{
+ debug("GetChildren called");
if (items.size == 0) {
DirectorySearchResult res = new DirectorySearchResult(this, offset, max_count, callback);
root_dir.enumerate_children_async(FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE + "," +
@@ -141,7 +142,7 @@ public class Folder.FolderContainer : MediaContainer {
*/
public FolderContainer (MediaContainer parent, string id, string directory_path, bool full) {
base(id, parent, directory_path, 0);
- this.root_dir = GLib.File.new_for_path(directory_path);
+ this.root_dir = GLib.File.new_for_uri(directory_path);
if (!full && parent is FolderContainer) {
this.title = ((FolderContainer)parent).strip_parent(root_dir);
diff --git a/src/plugins/folder/rygel-folder-plugin.vala b/src/plugins/folder/rygel-folder-plugin.vala
index b133df1..da4a7b0 100644
--- a/src/plugins/folder/rygel-folder-plugin.vala
+++ b/src/plugins/folder/rygel-folder-plugin.vala
@@ -55,7 +55,8 @@ public class Folder.FolderContentDir : ContentDirectory {
try {
string dir = client.get_string("/apps/rygel/Folder/folder");
message("Using folder %s", dir);
- return new FolderRootContainer (dir);
+ File f = File.new_for_commandline_arg(dir);
+ return new FolderRootContainer (f.get_uri());
}
catch (GLib.Error error) {
return null;
diff --git a/src/plugins/folder/rygel-folder-rootcontainer.vala b/src/plugins/folder/rygel-folder-rootcontainer.vala
index 1b8287f..1b05952 100644
--- a/src/plugins/folder/rygel-folder-rootcontainer.vala
+++ b/src/plugins/folder/rygel-folder-rootcontainer.vala
@@ -90,10 +90,10 @@ public class Folder.FolderRootContainer : MediaContainer {
*
* @parameter directory_path, directory you want to expose
*/
- public FolderRootContainer (string directory_path) {
- base.root(directory_path, 0);
+ public FolderRootContainer (string uri) {
+ base.root(uri, 0);
this.items = new ArrayList<FolderContainer> ();
- items.add(new FolderContainer(this, "12", directory_path, true));
+ items.add(new FolderContainer(this, "12", uri, true));
this.child_count = 1;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]