[rygel] Add support for pretty hostnames
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] Add support for pretty hostnames
- Date: Thu, 13 Feb 2014 14:14:58 +0000 (UTC)
commit 93cc06931ddd8a7891da0ee89adba9ae70eda0e5
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Sun Oct 20 23:40:55 2013 +0200
Add support for pretty hostnames
Read and parse /etc/machine-info to obtain a pretty human readable
hostname (eg. "Bob's Laptop" instead of "bob-laptop"). If the
file is not found, or it can't be parsed, we fall back on the
normal hostname.
In GNOME, the pretty hostname can be configured in the control
center details and sharing panels. In other systems, it can be
changed using "hostnamectl --pretty".
https://bugzilla.gnome.org/show_bug.cgi?id=724138
data/rygel.conf | 2 +-
src/librygel-core/rygel-root-device-factory.vala | 25 ++++++++++++++++++++++
src/librygel-server/rygel-media-object.vala | 9 ++++++++
3 files changed, 35 insertions(+), 1 deletions(-)
---
diff --git a/data/rygel.conf b/data/rygel.conf
index 1347dc0..84dbeb8 100644
--- a/data/rygel.conf
+++ b/data/rygel.conf
@@ -115,7 +115,7 @@ virtual-folders=true
[Playbin]
enabled=true
-title=Audio/Video playback on @HOSTNAME@
+title=Audio/Video playback on @PRETTY_HOSTNAME@
[ZDFMediathek]
enabled=false
diff --git a/src/librygel-core/rygel-root-device-factory.vala
b/src/librygel-core/rygel-root-device-factory.vala
index 6e35175..926d640 100644
--- a/src/librygel-core/rygel-root-device-factory.vala
+++ b/src/librygel-core/rygel-root-device-factory.vala
@@ -32,6 +32,30 @@ public errordomain RootDeviceFactoryError {
XML_PARSE,
}
+namespace Rygel {
+ public string get_pretty_host_name () {
+ string machine_info;
+
+ try {
+ FileUtils.get_contents ("/etc/machine-info", out machine_info);
+
+ var lines = machine_info.split ("\n");
+
+ foreach (var line in lines) {
+ var parts = line.split ("=");
+
+ if (parts[0] == "PRETTY_HOSTNAME") {
+ return string.joinv("=", parts[1:parts.length]);
+ }
+ }
+ } catch (GLib.Error e) {
+ debug("Failed to parse /etc/machine-info: %s", e.message);
+ }
+
+ return Environment.get_host_name ();
+ }
+}
+
/**
* This is a factory to create #RygelRootDevice objects for
* a given UPnP context.
@@ -125,6 +149,7 @@ public class Rygel.RootDeviceFactory : Object,
title = title.replace ("@REALNAME@", Environment.get_real_name ());
title = title.replace ("@USERNAME@", Environment.get_user_name ());
title = title.replace ("@HOSTNAME@", Environment.get_host_name ());
+ title = title.replace ("@PRETTY_HOSTNAME@", get_pretty_host_name ());
return title;
}
diff --git a/src/librygel-server/rygel-media-object.vala b/src/librygel-server/rygel-media-object.vala
index 36b9ba0..039e547 100644
--- a/src/librygel-server/rygel-media-object.vala
+++ b/src/librygel-server/rygel-media-object.vala
@@ -37,6 +37,7 @@ public abstract class Rygel.MediaObject : GLib.Object {
private static Regex real_name_regex;
private static Regex user_name_regex;
private static Regex host_name_regex;
+ private static Regex pretty_name_regex;
public string id { get; set construct; }
public string ref_id { get; set; }
@@ -96,6 +97,8 @@ public abstract class Rygel.MediaObject : GLib.Object {
* - @@USERNAME@ will be substituted by the users's login ID.
* - @@HOSTNAME@ will be substituted by the name of the machine.
* - @@ADDRESS@ will be substituted by the IP address of network interface used for the UpNP
communication.
+ * - @@PRETTY_HOSTNAME@ will be substituted by the human readable name of the machine
+ * (PRETTY_HOSTNAME field of /etc/machine-info)
*/
public string title {
get {
@@ -119,6 +122,11 @@ public abstract class Rygel.MediaObject : GLib.Object {
-1,
0,
Environment.get_host_name ());
+ this._title = pretty_name_regex.replace_literal
+ (this._title,
+ -1,
+ 0,
+ get_pretty_host_name ());
} catch (GLib.RegexError err) {
assert_not_reached ();
}
@@ -138,6 +146,7 @@ public abstract class Rygel.MediaObject : GLib.Object {
real_name_regex = new Regex (Regex.escape_string ("@REALNAME@"));
user_name_regex = new Regex (Regex.escape_string ("@USERNAME@"));
host_name_regex = new Regex (Regex.escape_string ("@HOSTNAME@"));
+ pretty_name_regex = new Regex (Regex.escape_string ("@PRETTY_HOSTNAME@"));
} catch (GLib.RegexError err) {
assert_not_reached ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]