public MediaContainer root_container;
public GUPnP.Context context;
private ArrayList<HTTPRequest> requests;
- private Thumbnailer thumbnailer;
private Cancellable cancellable;
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);
}
}
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
* 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");
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;