summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2011-07-01 14:35:50 +0200
committerJens Georg <mail@jensge.org>2011-07-01 14:35:50 +0200
commit989d16e62b57051b6441950f0a107ad368513b3f (patch)
tree1106aef59daceda34ecbd5d639982e4363a63bbc
parentf77a13222b9b27fd22f158b624a0b61e0e4fa81e (diff)
downloadrygel-989d16e62b57051b6441950f0a107ad368513b3f.tar.gz
core,doc,tracker: Add option for upload folders
-rw-r--r--data/rygel.conf12
-rw-r--r--doc/man/rygel.conf.xml24
-rw-r--r--src/plugins/tracker/rygel-tracker-music-item-factory.vala12
-rw-r--r--src/plugins/tracker/rygel-tracker-picture-item-factory.vala12
-rw-r--r--src/plugins/tracker/rygel-tracker-video-item-factory.vala12
-rw-r--r--src/rygel/rygel-cmdline-config.vala12
-rw-r--r--src/rygel/rygel-configuration.vala6
-rw-r--r--src/rygel/rygel-environment-config.vala12
-rw-r--r--src/rygel/rygel-meta-config.vala44
-rw-r--r--src/rygel/rygel-user-config.vala19
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