diff options
-rw-r--r-- | data/rygel.conf | 12 | ||||
-rw-r--r-- | doc/man/rygel.conf.xml | 24 | ||||
-rw-r--r-- | src/plugins/tracker/rygel-tracker-music-item-factory.vala | 12 | ||||
-rw-r--r-- | src/plugins/tracker/rygel-tracker-picture-item-factory.vala | 12 | ||||
-rw-r--r-- | src/plugins/tracker/rygel-tracker-video-item-factory.vala | 12 | ||||
-rw-r--r-- | src/rygel/rygel-cmdline-config.vala | 12 | ||||
-rw-r--r-- | src/rygel/rygel-configuration.vala | 6 | ||||
-rw-r--r-- | src/rygel/rygel-environment-config.vala | 12 | ||||
-rw-r--r-- | src/rygel/rygel-meta-config.vala | 44 | ||||
-rw-r--r-- | src/rygel/rygel-user-config.vala | 19 |
10 files changed, 153 insertions, 12 deletions
diff --git a/data/rygel.conf b/data/rygel.conf index bf26771e..42614d75 100644 --- a/data/rygel.conf +++ b/data/rygel.conf @@ -26,6 +26,18 @@ enable-mp2ts-transcoder=true # Set it to 'false' if you want to disable WMV transcoding support. enable-wmv-transcoder=true +# Where video files should be saved if allow-upload is true. +# Defaults to @VIDEOS@, the standard videos folder (typically ${HOME}/Videos). +video-upload-folder=@VIDEOS@ + +# Where music files should be saved if allow-upload is true +# Defaults to @MUSIC@, the standard music folder (typically ${HOME}/Music). +music-upload-folder=@MUSIC@ + +# Where picture files should be saved if allow-upload is true +# Defaults to @PICTURES@, the standard picture folder (typically ${HOME}/Pictures). +picture-upload-folder=@PICTURES@ + # The network interface to attach rygel to. You can also use network IP or even # ESSID for wireless networks if you are using NetworkManager. Leave it blank # for dynamic configuration. diff --git a/doc/man/rygel.conf.xml b/doc/man/rygel.conf.xml index c76b88b5..1d702606 100644 --- a/doc/man/rygel.conf.xml +++ b/doc/man/rygel.conf.xml @@ -219,6 +219,30 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/ <para>Allow remote media file deletion via UPnP.</para> </listitem> </varlistentry> + <varlistentry> + <term> + <option>video-upload-folder</option> + </term> + <listitem> + <para>If <option>allow-upload</option> is <userinput>true</userinput>, use this folder to store uploaded videos. It defaults to <userinput>@VIDEOS@</userinput> which expands to the default directory for video files (usually <filename><envar>$HOME</envar>/Videos</filename>).</para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <option>music-upload-folder</option> + </term> + <listitem> + <para>If <option>allow-upload</option> is <userinput>true</userinput>, use this folder to store uploaded music files. It defaults to <userinput>@MUSIC@</userinput> which expands to the default directory for music files (usually <filename><envar>$HOME</envar>/Music</filename>).</para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <option>picture-upload-folder</option> + </term> + <listitem> + <para>If <option>allow-upload</option> is <userinput>true</userinput>, use this folder to store uploaded pictures. It defaults to <userinput>@PICTURES@</userinput> which expands to the default directory for picture files (usually <filename><envar>$HOME</envar>/Pictures</filename>).</para> + </listitem> + </varlistentry> </variablelist> <para>Sections for plugins are denoted with <option>[PluginName]</option> and can contain options specific to a plugin (see below) as well these common options: diff --git a/src/plugins/tracker/rygel-tracker-music-item-factory.vala b/src/plugins/tracker/rygel-tracker-music-item-factory.vala index 89a1e9b1..59bbcf93 100644 --- a/src/plugins/tracker/rygel-tracker-music-item-factory.vala +++ b/src/plugins/tracker/rygel-tracker-music-item-factory.vala @@ -48,10 +48,14 @@ public class Rygel.Tracker.MusicItemFactory : ItemFactory { "temp/nmm#MusicPiece"; public MusicItemFactory () { - base (CATEGORY, - CATEGORY_IRI, - MusicItem.UPNP_CLASS, - Environment.get_user_special_dir (UserDirectory.MUSIC)); + var upload_folder = Environment.get_user_special_dir + (UserDirectory.MUSIC); + try { + var config = MetaConfig.get_default (); + upload_folder = config.get_music_upload_folder (); + } catch (Error error) {}; + + base (CATEGORY, CATEGORY_IRI, MusicItem.UPNP_CLASS, upload_folder); // These must be the same order as enum MusicMetadata this.properties.add ("res@duration"); diff --git a/src/plugins/tracker/rygel-tracker-picture-item-factory.vala b/src/plugins/tracker/rygel-tracker-picture-item-factory.vala index a3ba3afd..76ac41f1 100644 --- a/src/plugins/tracker/rygel-tracker-picture-item-factory.vala +++ b/src/plugins/tracker/rygel-tracker-picture-item-factory.vala @@ -41,10 +41,14 @@ public class Rygel.Tracker.PictureItemFactory : ItemFactory { "temp/nmm#Photo"; public PictureItemFactory () { - base (CATEGORY, - CATEGORY_IRI, - PhotoItem.UPNP_CLASS, - Environment.get_user_special_dir (UserDirectory.PICTURES)); + var upload_folder = Environment.get_user_special_dir + (UserDirectory.PICTURES); + try { + var config = MetaConfig.get_default (); + upload_folder = config.get_picture_upload_folder (); + } catch (Error error) {}; + + base (CATEGORY, CATEGORY_IRI, PhotoItem.UPNP_CLASS, upload_folder); // These must be in the same order as enum PictureMetadata this.properties.add ("height"); diff --git a/src/plugins/tracker/rygel-tracker-video-item-factory.vala b/src/plugins/tracker/rygel-tracker-video-item-factory.vala index dcc2d007..0e5a8e50 100644 --- a/src/plugins/tracker/rygel-tracker-video-item-factory.vala +++ b/src/plugins/tracker/rygel-tracker-video-item-factory.vala @@ -42,10 +42,14 @@ public class Rygel.Tracker.VideoItemFactory : ItemFactory { "temp/nmm#Video"; public VideoItemFactory () { - base (CATEGORY, - CATEGORY_IRI, - VideoItem.UPNP_CLASS, - Environment.get_user_special_dir (UserDirectory.VIDEOS)); + var upload_folder = Environment.get_user_special_dir + (UserDirectory.VIDEOS); + try { + var config = MetaConfig.get_default (); + upload_folder = config.get_video_upload_folder (); + } catch (Error error) {}; + + base (CATEGORY, CATEGORY_IRI, VideoItem.UPNP_CLASS, upload_folder); // These must be in the same order as enum VideoMetadata this.properties.add ("height"); diff --git a/src/rygel/rygel-cmdline-config.vala b/src/rygel/rygel-cmdline-config.vala index 64fab87c..372c933d 100644 --- a/src/rygel/rygel-cmdline-config.vala +++ b/src/rygel/rygel-cmdline-config.vala @@ -284,6 +284,18 @@ internal class Rygel.CmdlineConfig : GLib.Object, Configuration { return config_file; } + public string get_video_upload_folder () throws GLib.Error { + throw new ConfigurationError.NO_VALUE_SET (_("No value available")); + } + + public string get_music_upload_folder () throws GLib.Error { + throw new ConfigurationError.NO_VALUE_SET (_("No value available")); + } + + public string get_picture_upload_folder () throws GLib.Error { + throw new ConfigurationError.NO_VALUE_SET (_("No value available")); + } + // Dynamic options // FIXME: How to handle them? public string get_string (string section, diff --git a/src/rygel/rygel-configuration.vala b/src/rygel/rygel-configuration.vala index b67d732e..9f59d7c9 100644 --- a/src/rygel/rygel-configuration.vala +++ b/src/rygel/rygel-configuration.vala @@ -55,6 +55,12 @@ public interface Rygel.Configuration : GLib.Object { public abstract string get_plugin_path () throws GLib.Error; + public abstract string get_video_upload_folder () throws GLib.Error; + + public abstract string get_music_upload_folder () throws GLib.Error; + + public abstract string get_picture_upload_folder () throws GLib.Error; + public abstract bool get_enabled (string section) throws GLib.Error; public abstract string get_title (string section) throws GLib.Error; diff --git a/src/rygel/rygel-environment-config.vala b/src/rygel/rygel-environment-config.vala index 5d59de72..e9695aaa 100644 --- a/src/rygel/rygel-environment-config.vala +++ b/src/rygel/rygel-environment-config.vala @@ -105,6 +105,18 @@ internal class Rygel.EnvironmentConfig : GLib.Object, Configuration { return this.get_string_variable (PLUGIN_PATH_ENV); } + public string get_video_upload_folder () throws GLib.Error { + throw new ConfigurationError.NO_VALUE_SET (_("No value available")); + } + + public string get_music_upload_folder () throws GLib.Error { + throw new ConfigurationError.NO_VALUE_SET (_("No value available")); + } + + public string get_picture_upload_folder () throws GLib.Error { + throw new ConfigurationError.NO_VALUE_SET (_("No value available")); + } + public bool get_enabled (string section) throws GLib.Error { return get_bool (section, ENABLED_KEY); } diff --git a/src/rygel/rygel-meta-config.vala b/src/rygel/rygel-meta-config.vala index ac6c8288..507f9d34 100644 --- a/src/rygel/rygel-meta-config.vala +++ b/src/rygel/rygel-meta-config.vala @@ -295,6 +295,50 @@ public class Rygel.MetaConfig : GLib.Object, Configuration { return val; } + public string get_video_upload_folder () throws GLib.Error { + unowned string default = Environment.get_user_special_dir + (UserDirectory.VIDEOS); + var value = default; + + foreach (var config in this.configs) { + try { + value = config.get_video_upload_folder (); + } catch (GLib.Error err) { } + } + + return value.replace ("@VIDEOS@", default); + } + + public string get_music_upload_folder () throws GLib.Error { + unowned string default = Environment.get_user_special_dir + (UserDirectory.MUSIC); + + var value = default; + + foreach (var config in this.configs) { + try { + value = config.get_music_upload_folder (); + } catch (GLib.Error err) {}; + } + + return value.replace ("@MUSIC@", default); + } + + public string get_picture_upload_folder () throws GLib.Error { + unowned string default = Environment.get_user_special_dir + (UserDirectory.PICTURES); + var value = default; + + foreach (var config in this.configs) { + try { + value = config.get_picture_upload_folder (); + } catch (GLib.Error err) {}; + } + + return value.replace ("@PICTURES@", default); + } + + public bool get_enabled (string section) throws GLib.Error { bool val = true; bool unavailable = true; diff --git a/src/rygel/rygel-user-config.vala b/src/rygel/rygel-user-config.vala index 9e04850f..db5ffc5a 100644 --- a/src/rygel/rygel-user-config.vala +++ b/src/rygel/rygel-user-config.vala @@ -43,6 +43,13 @@ public class Rygel.UserConfig : GLib.Object, Configuration { public static const string ALLOW_DELETION_KEY = "allow-deletion"; public static const string LOG_LEVELS_KEY = "log-level"; public static const string PLUGIN_PATH_KEY = "plugin-path"; + public static const string UPLOAD_FOLDER_KEY = "upload-folder"; + public static const string VIDEO_UPLOAD_DIR_PATH_KEY = + "video-" + UPLOAD_FOLDER_KEY; + public static const string MUSIC_UPLOAD_DIR_PATH_KEY = + "music-" + UPLOAD_FOLDER_KEY; + public static const string PICTURE_UPLOAD_DIR_PATH_KEY = + "picture-" + UPLOAD_FOLDER_KEY; // Our singleton private static UserConfig config; @@ -98,6 +105,18 @@ public class Rygel.UserConfig : GLib.Object, Configuration { return this.get_string ("general", PLUGIN_PATH_KEY); } + public string get_video_upload_folder () throws GLib.Error { + return this.get_string ("general", VIDEO_UPLOAD_DIR_PATH_KEY); + } + + public string get_music_upload_folder () throws GLib.Error { + return this.get_string ("general", MUSIC_UPLOAD_DIR_PATH_KEY); + } + + public string get_picture_upload_folder () throws GLib.Error { + return this.get_string ("general", PICTURE_UPLOAD_DIR_PATH_KEY); + } + public static UserConfig get_default () throws Error { if (config == null) { var path = Path.build_filename |