[rygel] lms: Add trackable container support
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel] lms: Add trackable container support
- Date: Sun, 17 Jan 2016 21:32:38 +0000 (UTC)
commit 5096ad385feb148f3c3fd41aedff14b8232ea1cc
Author: Alexander Kanavin <alex kanavin gmail com>
Date: Mon May 5 16:45:27 2014 +0300
lms: Add trackable container support
(based on lms update id signal)
src/plugins/lms/rygel-lms-album.vala | 37 +++++++++++-
src/plugins/lms/rygel-lms-albums.vala | 3 +-
src/plugins/lms/rygel-lms-all-images.vala | 17 +++++-
src/plugins/lms/rygel-lms-all-music.vala | 39 +++++++++++-
src/plugins/lms/rygel-lms-all-videos.vala | 17 +++++-
src/plugins/lms/rygel-lms-artist.vala | 5 +-
src/plugins/lms/rygel-lms-artists.vala | 4 +-
src/plugins/lms/rygel-lms-category-container.vala | 56 ++++++++++++++++-
src/plugins/lms/rygel-lms-database.vala | 70 ++++++++++++++++++++-
src/plugins/lms/rygel-lms-dbus-interfaces.vala | 4 +-
src/plugins/lms/rygel-lms-image-year.vala | 23 +++++++-
src/plugins/lms/rygel-lms-image-years.vala | 4 +-
src/plugins/lms/rygel-lms-root-container.vala | 20 +-----
13 files changed, 269 insertions(+), 30 deletions(-)
---
diff --git a/src/plugins/lms/rygel-lms-album.vala b/src/plugins/lms/rygel-lms-album.vala
index 9594614..e567ee1 100644
--- a/src/plugins/lms/rygel-lms-album.vala
+++ b/src/plugins/lms/rygel-lms-album.vala
@@ -65,6 +65,32 @@ public class Rygel.LMS.Album : Rygel.LMS.CategoryContainer {
"ON audios.album_id = audio_albums.id " +
"WHERE dtime = 0 AND files.id = ? AND audios.id = files.id AND audios.album_id = %s;";
+ private static const string SQL_ADDED_TEMPLATE =
+ "SELECT files.id, files.path, files.size, " +
+ "audios.title as title, audios.trackno, audios.length, audios.channels, audios.sampling_rate,
audios.bitrate, audios.dlna_profile, audios.dlna_mime, " +
+ "audio_artists.name as artist, " +
+ "audio_albums.name " +
+ "FROM audios, files " +
+ "LEFT JOIN audio_artists " +
+ "ON audios.artist_id = audio_artists.id " +
+ "LEFT JOIN audio_albums " +
+ "ON audios.album_id = audio_albums.id " +
+ "WHERE dtime = 0 AND audios.id = files.id AND audios.album_id = %s " +
+ "AND update_id > ? AND update_id <= ?;";
+
+ private static const string SQL_REMOVED_TEMPLATE =
+ "SELECT files.id, files.path, files.size, " +
+ "audios.title as title, audios.trackno, audios.length, audios.channels, audios.sampling_rate,
audios.bitrate, audios.dlna_profile, audios.dlna_mime, " +
+ "audio_artists.name as artist, " +
+ "audio_albums.name " +
+ "FROM audios, files " +
+ "LEFT JOIN audio_artists " +
+ "ON audios.artist_id = audio_artists.id " +
+ "LEFT JOIN audio_albums " +
+ "ON audios.album_id = audio_albums.id " +
+ "WHERE dtime <> 0 AND audios.id = files.id AND audios.album_id = %s " +
+ "AND update_id > ? AND update_id <= ?;";
+
protected override MediaObject? object_from_statement (Statement statement) {
var id = statement.column_int (0);
var path = statement.column_text (1);
@@ -106,6 +132,12 @@ public class Rygel.LMS.Album : Rygel.LMS.CategoryContainer {
private static string get_sql_count (string db_id) {
return (SQL_COUNT_TEMPLATE.printf (db_id));
}
+ private static string get_sql_added (string db_id) {
+ return (SQL_ADDED_TEMPLATE.printf (db_id));
+ }
+ private static string get_sql_removed (string db_id) {
+ return (SQL_REMOVED_TEMPLATE.printf (db_id));
+ }
protected override string get_sql_all_with_filter (string filter) {
if (filter.length == 0) {
@@ -133,6 +165,9 @@ public class Rygel.LMS.Album : Rygel.LMS.CategoryContainer {
lms_db,
get_sql_all (db_id),
get_sql_find_object (db_id),
- get_sql_count (db_id));
+ get_sql_count (db_id),
+ get_sql_added (db_id),
+ get_sql_removed (db_id)
+ );
}
}
diff --git a/src/plugins/lms/rygel-lms-albums.vala b/src/plugins/lms/rygel-lms-albums.vala
index 6810299..ef8f7b5 100644
--- a/src/plugins/lms/rygel-lms-albums.vala
+++ b/src/plugins/lms/rygel-lms-albums.vala
@@ -169,6 +169,7 @@ public class Rygel.LMS.Albums : Rygel.LMS.CategoryContainer {
lms_db,
Albums.SQL_ALL,
Albums.SQL_FIND_OBJECT,
- Albums.SQL_COUNT);
+ Albums.SQL_COUNT,
+ null, null);
}
}
diff --git a/src/plugins/lms/rygel-lms-all-images.vala b/src/plugins/lms/rygel-lms-all-images.vala
index 1bf219d..0b54c7f 100644
--- a/src/plugins/lms/rygel-lms-all-images.vala
+++ b/src/plugins/lms/rygel-lms-all-images.vala
@@ -40,6 +40,18 @@ public class Rygel.LMS.AllImages : Rygel.LMS.CategoryContainer {
"FROM images, files " +
"WHERE dtime = 0 AND files.id = ? AND images.id = files.id;";
+ private static const string SQL_ADDED =
+ "SELECT images.id, title, artist, date, width, height, path, size, dlna_profile, dlna_mime " +
+ "FROM images, files " +
+ "WHERE dtime = 0 AND images.id = files.id " +
+ "AND update_id > ? AND update_id <= ?;";
+
+ private static const string SQL_REMOVED =
+ "SELECT images.id, title, artist, date, width, height, path, size, dlna_profile, dlna_mime " +
+ "FROM images, files " +
+ "WHERE dtime <> 0 AND images.id = files.id " +
+ "AND update_id > ? AND update_id <= ?;";
+
protected override MediaObject? object_from_statement (Statement statement) {
var id = statement.column_int(0);
var path = statement.column_text(6);
@@ -75,6 +87,9 @@ public class Rygel.LMS.AllImages : Rygel.LMS.CategoryContainer {
lms_db,
AllImages.SQL_ALL,
AllImages.SQL_FIND_OBJECT,
- AllImages.SQL_COUNT);
+ AllImages.SQL_COUNT,
+ AllImages.SQL_ADDED,
+ AllImages.SQL_REMOVED
+ );
}
}
diff --git a/src/plugins/lms/rygel-lms-all-music.vala b/src/plugins/lms/rygel-lms-all-music.vala
index e9107ee..027dbeb 100644
--- a/src/plugins/lms/rygel-lms-all-music.vala
+++ b/src/plugins/lms/rygel-lms-all-music.vala
@@ -70,6 +70,40 @@ public class Rygel.LMS.AllMusic : Rygel.LMS.CategoryContainer {
"ON audios.genre_id = audio_genres.id " +
"WHERE dtime = 0 AND files.id = ? AND audios.id = files.id;";
+ private static const string SQL_ADDED =
+ "SELECT files.id, files.path, files.size, " +
+ "audios.title as title, audios.trackno, audios.length, audios.channels, audios.sampling_rate,
audios.bitrate, audios.dlna_profile, audios.dlna_mime, " +
+ "audio_artists.name as artist, " +
+ "audio_albums.name, " +
+ "files.mtime, " +
+ "audio_genres.name " +
+ "FROM audios, files " +
+ "LEFT JOIN audio_artists " +
+ "ON audios.artist_id = audio_artists.id " +
+ "LEFT JOIN audio_albums " +
+ "ON audios.album_id = audio_albums.id " +
+ "LEFT JOIN audio_genres " +
+ "ON audios.genre_id = audio_genres.id " +
+ "WHERE dtime = 0 AND audios.id = files.id " +
+ "AND update_id > ? AND update_id <= ?;";
+
+ private static const string SQL_REMOVED =
+ "SELECT files.id, files.path, files.size, " +
+ "audios.title as title, audios.trackno, audios.length, audios.channels, audios.sampling_rate,
audios.bitrate, audios.dlna_profile, audios.dlna_mime, " +
+ "audio_artists.name as artist, " +
+ "audio_albums.name, " +
+ "files.mtime, " +
+ "audio_genres.name " +
+ "FROM audios, files " +
+ "LEFT JOIN audio_artists " +
+ "ON audios.artist_id = audio_artists.id " +
+ "LEFT JOIN audio_albums " +
+ "ON audios.album_id = audio_albums.id " +
+ "LEFT JOIN audio_genres " +
+ "ON audios.genre_id = audio_genres.id " +
+ "WHERE dtime <> 0 AND audios.id = files.id " +
+ "AND update_id > ? AND update_id <= ?;";
+
protected override string get_sql_all_with_filter (string filter) {
if (filter.length == 0) {
return this.sql_all;
@@ -127,6 +161,9 @@ public class Rygel.LMS.AllMusic : Rygel.LMS.CategoryContainer {
lms_db,
AllMusic.SQL_ALL_TEMPLATE.printf (""),
AllMusic.SQL_FIND_OBJECT,
- AllMusic.SQL_COUNT);
+ AllMusic.SQL_COUNT,
+ AllMusic.SQL_ADDED,
+ AllMusic.SQL_REMOVED
+ );
}
}
diff --git a/src/plugins/lms/rygel-lms-all-videos.vala b/src/plugins/lms/rygel-lms-all-videos.vala
index 76084ae..dbde0db 100644
--- a/src/plugins/lms/rygel-lms-all-videos.vala
+++ b/src/plugins/lms/rygel-lms-all-videos.vala
@@ -40,6 +40,18 @@ public class Rygel.LMS.AllVideos : Rygel.LMS.CategoryContainer {
"FROM videos, files " +
"WHERE dtime = 0 AND files.id = ? AND videos.id = files.id;";
+ private static const string SQL_ADDED =
+ "SELECT videos.id, title, artist, length, path, mtime, size, dlna_profile, dlna_mime " +
+ "FROM videos, files " +
+ "WHERE dtime = 0 AND videos.id = files.id " +
+ "AND update_id > ? AND update_id <= ?;";
+
+ private static const string SQL_REMOVED =
+ "SELECT videos.id, title, artist, length, path, mtime, size, dlna_profile, dlna_mime " +
+ "FROM videos, files " +
+ "WHERE dtime <> 0 AND videos.id = files.id " +
+ "AND update_id > ? AND update_id <= ?;";
+
protected override MediaObject? object_from_statement (Statement statement) {
var id = statement.column_int(0);
var mime_type = statement.column_text(8);
@@ -103,6 +115,9 @@ public class Rygel.LMS.AllVideos : Rygel.LMS.CategoryContainer {
lms_db,
AllVideos.SQL_ALL,
AllVideos.SQL_FIND_OBJECT,
- AllVideos.SQL_COUNT);
+ AllVideos.SQL_COUNT,
+ AllVideos.SQL_ADDED,
+ AllVideos.SQL_REMOVED
+ );
}
}
diff --git a/src/plugins/lms/rygel-lms-artist.vala b/src/plugins/lms/rygel-lms-artist.vala
index bcabda3..31e9070 100644
--- a/src/plugins/lms/rygel-lms-artist.vala
+++ b/src/plugins/lms/rygel-lms-artist.vala
@@ -67,6 +67,9 @@ public class Rygel.LMS.Artist : Rygel.LMS.CategoryContainer {
lms_db,
get_sql_all (id),
get_sql_find_object (id),
- get_sql_count (id));
+ get_sql_count (id),
+ null, // LMS does not track adding or removing albums
+ null
+ );
}
}
diff --git a/src/plugins/lms/rygel-lms-artists.vala b/src/plugins/lms/rygel-lms-artists.vala
index ebec2c3..a00b2ce 100644
--- a/src/plugins/lms/rygel-lms-artists.vala
+++ b/src/plugins/lms/rygel-lms-artists.vala
@@ -55,6 +55,8 @@ public class Rygel.LMS.Artists : Rygel.LMS.CategoryContainer {
lms_db,
Artists.SQL_ALL,
Artists.SQL_FIND_OBJECT,
- Artists.SQL_COUNT);
+ Artists.SQL_COUNT,
+ null, null
+ );
}
}
diff --git a/src/plugins/lms/rygel-lms-category-container.vala
b/src/plugins/lms/rygel-lms-category-container.vala
index 0d581e7..bb19d87 100644
--- a/src/plugins/lms/rygel-lms-category-container.vala
+++ b/src/plugins/lms/rygel-lms-category-container.vala
@@ -33,6 +33,7 @@ public errordomain Rygel.LMS.CategoryContainerError {
}
public abstract class Rygel.LMS.CategoryContainer : Rygel.MediaContainer,
+ Rygel.TrackableContainer,
Rygel.SearchableContainer {
public ArrayList<string> search_classes { get; set; }
@@ -43,9 +44,13 @@ public abstract class Rygel.LMS.CategoryContainer : Rygel.MediaContainer,
public string sql_all { get; construct; }
public string sql_find_object { get; construct; }
public string sql_count { get; construct; }
+ public string sql_added { get; construct; }
+ public string sql_removed { get; construct; }
protected Statement stmt_all;
protected Statement stmt_find_object;
+ protected Statement stmt_added;
+ protected Statement stmt_removed;
protected string child_prefix;
protected string ref_prefix;
@@ -335,13 +340,50 @@ public abstract class Rygel.LMS.CategoryContainer : Rygel.MediaContainer,
return "%s%d".printf (this.ref_prefix, db_id);
}
+ protected async void add_child (MediaObject object) {
+ }
+
+ protected async void remove_child (MediaObject object) {
+ }
+
+ private void on_db_updated(uint64 old_id, uint64 new_id) {
+ try {
+ var stmt_count = this.lms_db.prepare (this.sql_count);
+
+ if (stmt_count.step () == Sqlite.ROW) {
+ this.child_count = stmt_count.column_int (0);
+ }
+
+ Database.get_children_with_update_id_init (this.stmt_added,
+ old_id,
+ new_id);
+ while (Database.get_children_step (this.stmt_added)) {
+ this.add_child_tracked.begin(this.object_from_statement (this.stmt_added));
+ }
+
+ Database.get_children_with_update_id_init (this.stmt_removed,
+ old_id,
+ new_id);
+ while (Database.get_children_step (this.stmt_removed)) {
+ this.remove_child_tracked.begin(this.object_from_statement (this.stmt_removed));
+ }
+
+ } catch (DatabaseError e) {
+ warning ("Can't perform container update: %s", e.message);
+ }
+
+ }
+
public CategoryContainer (string db_id,
MediaContainer parent,
string title,
LMS.Database lms_db,
string sql_all,
string sql_find_object,
- string sql_count) {
+ string sql_count,
+ string? sql_added,
+ string? sql_removed
+ ) {
Object (id : "%s:%s".printf (parent.id, db_id),
db_id : db_id,
parent : parent,
@@ -349,7 +391,10 @@ public abstract class Rygel.LMS.CategoryContainer : Rygel.MediaContainer,
lms_db : lms_db,
sql_all : sql_all,
sql_find_object : sql_find_object,
- sql_count : sql_count);
+ sql_count : sql_count,
+ sql_added : sql_added,
+ sql_removed: sql_removed
+ );
}
construct {
@@ -368,6 +413,13 @@ public abstract class Rygel.LMS.CategoryContainer : Rygel.MediaContainer,
if (stmt_count.step () == Sqlite.ROW) {
this.child_count = stmt_count.column_int (0);
}
+ // some container implementations don't have a reasonable way to provide
+ // id-based statements to fetch added or removed items
+ if (this.sql_added != null && this.sql_removed != null) {
+ this.stmt_added = this.lms_db.prepare (this.sql_added);
+ this.stmt_removed = this.lms_db.prepare (this.sql_removed);
+ lms_db.db_updated.connect(this.on_db_updated);
+ }
} catch (DatabaseError e) {
warning ("Container %s: %s", this.title, e.message);
}
diff --git a/src/plugins/lms/rygel-lms-database.vala b/src/plugins/lms/rygel-lms-database.vala
index 2108ae6..53eb218 100644
--- a/src/plugins/lms/rygel-lms-database.vala
+++ b/src/plugins/lms/rygel-lms-database.vala
@@ -38,7 +38,12 @@ namespace Rygel.LMS {
}
public class Rygel.LMS.Database {
+
+ public signal void db_updated(uint64 old_update_id, uint64 new_update_id);
+
private Sqlite.Database db;
+ private LMS.DBus lms_proxy;
+ private uint64 update_id;
/**
* Function to implement the custom SQL function 'contains'
@@ -79,7 +84,25 @@ public class Rygel.LMS.Database {
return LMS.utf8_collate_str (_a, _b);
}
- public Database (string db_path) throws DatabaseError {
+ public Database () throws DatabaseError {
+ string db_path;
+ try {
+ lms_proxy = Bus.get_proxy_sync (BusType.SESSION,
+ "org.lightmediascanner",
+ "/org/lightmediascanner/Scanner1");
+ db_path = lms_proxy.data_base_path;
+ debug ("Got db path %s from LMS over dbus", db_path);
+ update_id = lms_proxy.update_id;
+ debug ("Got updated id %lld from LMS over dbus", update_id);
+ lms_proxy.g_properties_changed.connect (this.on_lms_properties_changed);
+
+ } catch (IOError e) {
+ warning("Couldn't get LMS Dbus proxy: %s", e.message);
+ db_path = Environment.get_user_config_dir() +
+ "/lightmediascannerd/db.sqlite3";
+ debug ("Using default sqlite database location %s", db_path);
+ }
+
Sqlite.Database.open (db_path, out this.db);
if (this.db.errcode () != Sqlite.OK) {
throw new DatabaseError.OPEN ("Failed to open '%s': %d",
@@ -98,8 +121,32 @@ public class Rygel.LMS.Database {
this.db.create_collation ("CASEFOLD",
Sqlite.UTF8,
LMS.Database.utf8_collate);
+
+ }
+
+ private void on_lms_properties_changed (DBusProxy lms_proxy,
+ Variant changed,
+ string[] invalidated) {
+ if (!changed.get_type().equal (VariantType.VARDICT)) {
+ return;
+ }
+
+ foreach (var changed_prop in changed) {
+ var key = (string) changed_prop.get_child_value (0);
+ var value = changed_prop.get_child_value (1).get_child_value (0);
+
+ debug ("LMS property %s changed value to %s", key, value.print(true));
+
+ switch (key) {
+ case "UpdateID":
+ db_updated(update_id, (uint64)value);
+ update_id = (uint64)value;
+ break;
+ }
+ }
}
+
public Statement prepare (string query_string) throws DatabaseError {
Statement statement;
@@ -209,6 +256,27 @@ public class Rygel.LMS.Database {
sqlite_err);
}
+ public static void get_children_with_update_id_init (Statement stmt,
+ uint64 old_id, uint64 new_id) throws DatabaseError {
+
+ int sqlite_err;
+
+ (void) stmt.reset();
+
+ if (new_id < old_id) // id value wrapped over
+ sqlite_err = stmt.bind_int64(1, 0);
+ else
+ sqlite_err = stmt.bind_int64(1, (int64)old_id);
+ if (sqlite_err != Sqlite.OK)
+ throw new DatabaseError.BIND("Unable to bind old_id %d",
+ sqlite_err);
+
+ sqlite_err = stmt.bind_int64(2, (int64)new_id);
+ if (sqlite_err != Sqlite.OK)
+ throw new DatabaseError.BIND("Unable to bind new_id %d",
+ sqlite_err);
+ }
+
public static bool get_children_step(Statement stmt) throws DatabaseError {
bool retval;
diff --git a/src/plugins/lms/rygel-lms-dbus-interfaces.vala b/src/plugins/lms/rygel-lms-dbus-interfaces.vala
index 6c14f5b..13f00cb 100644
--- a/src/plugins/lms/rygel-lms-dbus-interfaces.vala
+++ b/src/plugins/lms/rygel-lms-dbus-interfaces.vala
@@ -21,8 +21,10 @@
*/
[DBus (name = "org.lightmediascanner.Scanner1")]
-interface Rygel.LMS.DBus : Object {
+interface Rygel.LMS.DBus : DBusProxy {
public abstract string data_base_path { owned get; }
+ [DBus (name = "UpdateID")]
+ public abstract uint64 update_id { get; }
//TODO: add all the other API items which are currently unused
}
\ No newline at end of file
diff --git a/src/plugins/lms/rygel-lms-image-year.vala b/src/plugins/lms/rygel-lms-image-year.vala
index b08cacd..a7768f0 100644
--- a/src/plugins/lms/rygel-lms-image-year.vala
+++ b/src/plugins/lms/rygel-lms-image-year.vala
@@ -40,6 +40,18 @@ public class Rygel.LMS.ImageYear : Rygel.LMS.CategoryContainer {
"FROM images, files " +
"WHERE dtime = 0 AND files.id = ? AND images.id = files.id AND year = '%s';";
+ private static const string SQL_ADDED_TEMPLATE =
+ "SELECT images.id, title, artist, date, width, height, path, size, dlna_profile, dlna_mime,
strftime('%Y', date, 'unixepoch') as year " +
+ "FROM images, files " +
+ "WHERE dtime = 0 AND images.id = files.id AND year = '%s' " +
+ "AND update_id > ? AND update_id <= ?;";
+
+ private static const string SQL_REMOVED_TEMPLATE =
+ "SELECT images.id, title, artist, date, width, height, path, size, dlna_profile, dlna_mime,
strftime('%Y', date, 'unixepoch') as year " +
+ "FROM images, files " +
+ "WHERE dtime <> 0 AND images.id = files.id AND year = '%s' " +
+ "AND update_id > ? AND update_id <= ?;";
+
protected override MediaObject? object_from_statement (Statement statement) {
var id = statement.column_int(0);
var path = statement.column_text(6);
@@ -78,6 +90,12 @@ public class Rygel.LMS.ImageYear : Rygel.LMS.CategoryContainer {
private static string get_sql_count (string year) {
return (SQL_COUNT_TEMPLATE.printf (year));
}
+ private static string get_sql_added (string year) {
+ return (SQL_ADDED_TEMPLATE.printf (year));
+ }
+ private static string get_sql_removed (string year) {
+ return (SQL_REMOVED_TEMPLATE.printf (year));
+ }
public ImageYear (MediaContainer parent,
string year,
@@ -88,6 +106,9 @@ public class Rygel.LMS.ImageYear : Rygel.LMS.CategoryContainer {
lms_db,
get_sql_all (year),
get_sql_find_object (year),
- get_sql_count (year));
+ get_sql_count (year),
+ get_sql_added (year),
+ get_sql_removed (year)
+ );
}
}
diff --git a/src/plugins/lms/rygel-lms-image-years.vala b/src/plugins/lms/rygel-lms-image-years.vala
index e29851b..665b431 100644
--- a/src/plugins/lms/rygel-lms-image-years.vala
+++ b/src/plugins/lms/rygel-lms-image-years.vala
@@ -52,6 +52,8 @@ public class Rygel.LMS.ImageYears : Rygel.LMS.CategoryContainer {
lms_db,
ImageYears.SQL_ALL,
ImageYears.SQL_FIND_OBJECT,
- ImageYears.SQL_COUNT);
+ ImageYears.SQL_COUNT,
+ null, null
+ );
}
}
diff --git a/src/plugins/lms/rygel-lms-root-container.vala b/src/plugins/lms/rygel-lms-root-container.vala
index a7a7f98..1623fa3 100644
--- a/src/plugins/lms/rygel-lms-root-container.vala
+++ b/src/plugins/lms/rygel-lms-root-container.vala
@@ -38,24 +38,8 @@ public class Rygel.LMS.RootContainer : Rygel.SimpleContainer {
base.root(title);
- string db_path = null;
try {
- LMS.DBus lms_proxy = Bus.get_proxy_sync (BusType.SESSION,
- "org.lightmediascanner",
- "/org/lightmediascanner/Scanner1");
- db_path = lms_proxy.data_base_path;
- debug ("Got db path %s from LMS over dbus", db_path);
- } catch (Error e) {
- warning("Using dbus to get db location failed: %s", e.message);
- }
- if (db_path == null) {
- db_path = Environment.get_user_config_dir() +
- "/lightmediascannerd/db.sqlite3";
- debug ("Using default sqlite database location %s", db_path);
- }
-
- try {
- this.lms_db = new LMS.Database (db_path);
+ this.lms_db = new LMS.Database ();
this.add_child_container (new MusicRoot ("music", this, _("Music"), this.lms_db));
this.add_child_container (new AllVideos ("all-videos", this, _("Videos"), this.lms_db));
@@ -68,5 +52,7 @@ public class Rygel.LMS.RootContainer : Rygel.SimpleContainer {
wait for it to be created and then add folders. Best to wait for the
LMS notification API. */
}
+
}
+
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]