public string category;
public string upnp_class;
+ public string resources_class_path;
public ArrayList<ArrayList<string>> key_chains;
public TrackerItemFactory (string category,
- string upnp_class) {
+ string upnp_class,
+ string resources_class_path) {
this.category = category;
this.upnp_class = upnp_class;
+ this.resources_class_path = resources_class_path;
this.key_chains = new ArrayList<ArrayList<string>> ();
public FilterFunc filter_func;
private TrackerResourcesIface resources;
+ private TrackerResourcesClassIface resources_class;
public TrackerMetadataValues (string id,
MediaContainer parent,
}
this.fetch_metadata_values.begin ();
+
+ this.hook_to_changes ();
}
private async void fetch_metadata_values () {
+ // First thing, clear the existing hierarchy, if any
+ this.clear ();
+
int i;
var mandatory = new TrackerQueryTriplets ();
string[,] values;
try {
- /* FIXME: We need to hook to some tracker signals to keep
- * this field up2date at all times
- */
values = yield query.execute (this.resources);
} catch (DBus.Error error) {
critical ("error getting all values for '%s': %s",
this.resources = connection.get_object (TRACKER_SERVICE,
RESOURCES_PATH)
as TrackerResourcesIface;
+ this.resources_class = connection.get_object (
+ TRACKER_SERVICE,
+ this.item_factory.resources_class_path)
+ as TrackerResourcesClassIface;
+ }
+
+ private void hook_to_changes () {
+ // For any changes in subjects, just recreate hierarchy
+ this.resources_class.subjects_added.connect ((subjects) => {
+ this.fetch_metadata_values.begin ();
+ });
+ this.resources_class.subjects_removed.connect ((subjects) => {
+ this.fetch_metadata_values.begin ();
+ });
+ this.resources_class.subjects_changed.connect ((before, after) => {
+ this.fetch_metadata_values.begin ();
+ });
}
private bool is_child_id_unique (string child_id) {
private const string CATEGORY = "nmm:MusicPiece";
public TrackerMusicItemFactory () {
- base (CATEGORY, MediaItem.MUSIC_CLASS);
+ base (CATEGORY, MediaItem.MUSIC_CLASS, MUSIC_RESOURCES_CLASS_PATH);
for (var i = this.key_chains.size; i < MusicMetadata.LAST_KEY; i++) {
this.key_chains.add (new ArrayList<string> ());
private const string CATEGORY = "nmm:Photo";
public TrackerPictureItemFactory () {
- base (CATEGORY, MediaItem.IMAGE_CLASS);
+ base (CATEGORY, MediaItem.IMAGE_CLASS, PHOTO_RESOURCES_CLASS_PATH);
for (var i = this.key_chains.size; i < PictureMetadata.LAST_KEY; i++) {
this.key_chains.add (new ArrayList<string> ());
private const string CATEGORY = "nmm:Video";
public TrackerVideoItemFactory () {
- base (CATEGORY, MediaItem.VIDEO_CLASS);
+ base (CATEGORY, MediaItem.VIDEO_CLASS, VIDEO_RESOURCES_CLASS_PATH);
for (var i = this.key_chains.size; i < VideoMetadata.LAST_KEY; i++) {
this.key_chains.add (new ArrayList<string> ());