From 89fafbabf642d201c8ea026dc3ad26032cf049cb Mon Sep 17 00:00:00 2001 From: "Zeeshan Ali (Khattak)" Date: Tue, 8 Sep 2009 16:47:18 +0300 Subject: [PATCH] core: Thumbnailer should be singleton --- src/rygel/rygel-http-server.vala | 13 ++++++------- src/rygel/rygel-thumbnailer.vala | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/rygel/rygel-http-server.vala b/src/rygel/rygel-http-server.vala index 6e470a2..38b1d55 100644 --- a/src/rygel/rygel-http-server.vala +++ b/src/rygel/rygel-http-server.vala @@ -33,7 +33,6 @@ internal class Rygel.HTTPServer : Rygel.TranscodeManager, Rygel.StateMachine { public MediaContainer root_container; public GUPnP.Context context; private ArrayList requests; - private Thumbnailer thumbnailer; private Cancellable cancellable; @@ -47,12 +46,10 @@ internal class Rygel.HTTPServer : Rygel.TranscodeManager, Rygel.StateMachine { this.path_root = SERVER_PATH_PREFIX + "/" + name; - try { - this.thumbnailer = new Thumbnailer (); + var thumbnailer = Thumbnailer.get_default (); + if (thumbnailer != null) { this.context.host_path (thumbnailer.directory, this.path_root + "/thumbnails"); - } catch (ThumbnailerError err) { - warning ("No thumbnailer available: %s", err.message); } } @@ -86,13 +83,15 @@ internal class Rygel.HTTPServer : Rygel.TranscodeManager, Rygel.StateMachine { if (item.upnp_class.has_prefix (MediaItem.IMAGE_CLASS) || item.upnp_class.has_prefix (MediaItem.VIDEO_CLASS) && item.thumbnails.size == 0) { + var thumbnailer = Thumbnailer.get_default (); + // Lets see if we can provide the thumbnails - if (this.thumbnailer != null) { + if (thumbnailer != null) { foreach (var uri in item.uris) { Thumbnail thumbnail = null; try { - thumbnail = this.thumbnailer.get_thumbnail (uri); + thumbnail = thumbnailer.get_thumbnail (uri); thumbnail.add_resource (didl_item, "internal"); // Now create the HTTP URI diff --git a/src/rygel/rygel-thumbnailer.vala b/src/rygel/rygel-thumbnailer.vala index 40ae3dc..6918e21 100644 --- a/src/rygel/rygel-thumbnailer.vala +++ b/src/rygel/rygel-thumbnailer.vala @@ -31,12 +31,15 @@ internal errordomain ThumbnailerError { * Provides thumbnails for images and vidoes. */ internal class Rygel.Thumbnailer : GLib.Object { + private static Thumbnailer thumbnailer; // Our singleton object + private static bool first_time = true; + public string directory; private Thumbnail template; private string extension; - public Thumbnailer () throws ThumbnailerError { + private Thumbnailer () throws ThumbnailerError { var dir = Path.build_filename (Environment.get_home_dir (), ".thumbnails", "cropped"); @@ -70,6 +73,20 @@ internal class Rygel.Thumbnailer : GLib.Object { this.directory = dir; } + public static Thumbnailer? get_default () { + if (first_time) { + try { + thumbnailer = new Thumbnailer (); + } catch (ThumbnailerError err) { + warning ("No thumbnailer available: %s", err.message); + } + + first_time = false; + } + + return thumbnailer; + } + public Thumbnail get_thumbnail (string uri) throws ThumbnailerError { Thumbnail thumbnail = null; -- 2.7.4