[gnome-games] grilo: Add GriloDescription & GriloRating



commit 114216bda3cf0de5f0a952358e91451945fe0375
Author: 1PunMan <saurabhsingh412 gmail com>
Date:   Tue Mar 20 04:42:52 2018 +0530

    grilo: Add GriloDescription & GriloRating
    
    These will be used to make several games get description and rating from the
    web using Grilo.

 src/grilo/grilo-description.vala | 46 ++++++++++++++++++++++++++++++++++++++++
 src/grilo/grilo-rating.vala      | 42 ++++++++++++++++++++++++++++++++++++
 src/meson.build                  |  2 ++
 3 files changed, 90 insertions(+)
---
diff --git a/src/grilo/grilo-description.vala b/src/grilo/grilo-description.vala
new file mode 100644
index 00000000..e010b24e
--- /dev/null
+++ b/src/grilo/grilo-description.vala
@@ -0,0 +1,46 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+public class Games.GriloDescription : Object, Description {
+       private GriloMedia media;
+       private string description;
+       private bool resolving;
+
+       public GriloDescription (GriloMedia media) {
+               this.media = media;
+               media.resolved.connect (on_media_resolved);
+               resolving = false;
+       }
+
+       public string get_description () {
+               if (resolving)
+                       return description;
+
+               if (description != null)
+                       return description;
+
+               resolving = true;
+               media.try_resolve_media ();
+
+               return description;
+       }
+
+       private void on_media_resolved () {
+               var grl_media = media.get_media ();
+
+               if (grl_media == null)
+                       return;
+
+               if (grl_media.length (Grl.MetadataKey.DESCRIPTION) == 0)
+                       return;
+
+               var description_string = grl_media.get_description ();
+               load_media_description (description_string);
+       }
+
+       private void load_media_description (string description_string) {
+               description = description_string;
+               resolving = true;
+
+               changed ();
+       }
+}
diff --git a/src/grilo/grilo-rating.vala b/src/grilo/grilo-rating.vala
new file mode 100644
index 00000000..2308a160
--- /dev/null
+++ b/src/grilo/grilo-rating.vala
@@ -0,0 +1,42 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+public class Games.GriloRating : Object, Rating {
+       private GriloMedia media;
+       private float rating;
+       private bool resolving;
+
+       public GriloRating (GriloMedia media) {
+               this.media = media;
+               media.resolved.connect (on_media_resolved);
+               resolving = false;
+       }
+
+       public float get_rating () {
+               if (resolving)
+                       return rating;
+
+               resolving = true;
+               media.try_resolve_media ();
+               return rating;
+       }
+
+       private void on_media_resolved () {
+               var grl_media = media.get_media ();
+
+               if (grl_media == null)
+                       return;
+
+               if (grl_media.length (Grl.MetadataKey.RATING) == 0)
+                       return;
+
+               var media_rating = grl_media.get_rating ();
+               load_media_rating (media_rating);
+       }
+
+       private void load_media_rating (float media_rating) {
+               rating = media_rating;
+               resolving = true;
+
+               changed ();
+       }
+}
diff --git a/src/meson.build b/src/meson.build
index 14d70efb..3a255b4a 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -89,11 +89,13 @@ vala_sources = [
 
   'grilo/grilo-cooperative.vala',
   'grilo/grilo-cover.vala',
+  'grilo/grilo-description.vala',
   'grilo/grilo-developer.vala',
   'grilo/grilo-genre.vala',
   'grilo/grilo-media.vala',
   'grilo/grilo-players.vala',
   'grilo/grilo-publisher.vala',
+  'grilo/grilo-rating.vala',
   'grilo/grilo-release-date.vala',
 
   'keyboard/keyboard-mapping-builder.vala',


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]