[gnome-games] grilo: Add GriloPlayers, GriloReleaseDate, GriloCoop & GriloGenre



commit 8a756e649e2b7fbec00288bc147ecf11efbd307e
Author: 1PunMan <saurabhsingh412 gmail com>
Date:   Tue Jun 26 00:36:13 2018 +0530

    grilo: Add GriloPlayers, GriloReleaseDate, GriloCoop & GriloGenre
    
    These will be used to make several games get players, coop status, release date & genre from
    the web using Grilo.

 po/POTFILES.in                    |  1 +
 src/grilo/grilo-coop.vala         | 51 +++++++++++++++++++++++++++++++++
 src/grilo/grilo-genre.vala        | 55 +++++++++++++++++++++++++++++++++++
 src/grilo/grilo-players.vala      | 60 +++++++++++++++++++++++++++++++++++++++
 src/grilo/grilo-release-date.vala | 50 ++++++++++++++++++++++++++++++++
 src/meson.build                   |  4 +++
 6 files changed, 221 insertions(+)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 43227ba..1889aa2 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -45,6 +45,7 @@ src/core/plugin-registrar.vala
 src/dummy/dummy-players.vala
 src/gameinfo/gameinfo-disc-id-disc-title.vala
 src/gameinfo/gameinfo-doc.vala
+src/grilo/grilo-players.vala
 src/retro/retro-core-source.vala
 src/retro/retro-platform.vala
 src/retro/retro-runner.vala
diff --git a/src/grilo/grilo-coop.vala b/src/grilo/grilo-coop.vala
new file mode 100644
index 0000000..e848910
--- /dev/null
+++ b/src/grilo/grilo-coop.vala
@@ -0,0 +1,51 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+public class Games.GriloCooperative : Object, Cooperative {
+       private GriloMedia media;
+       private Uid uid;
+       private Grl.KeyID GRL_METADATA_KEY_COOP;
+       private Grl.Registry registry;
+       private bool cooperative;
+       private bool resolving;
+
+       public GriloCooperative (GriloMedia media, Uid uid) {
+               this.media = media;
+               this.uid = uid;
+               media.resolved.connect (on_media_resolved);
+               resolving = false;
+       }
+
+       public bool get_cooperative () {
+               if (resolving)
+                       return cooperative;
+
+               resolving = true;
+               media.try_resolve_media ();
+
+               return cooperative;
+       }
+
+       private void on_media_resolved () {
+               var grl_media = media.get_media ();
+
+               if (grl_media == null)
+                       return;
+
+               registry = Grl.Registry.get_default ();
+               GRL_METADATA_KEY_COOP = registry.lookup_metadata_key ("coop");
+
+               if (grl_media.length (GRL_METADATA_KEY_COOP) == 0)
+                       return;
+
+               var coop = grl_media.get_boolean (GRL_METADATA_KEY_COOP);
+               load_media_cooperative (coop);
+       }
+
+       private void load_media_cooperative(bool coop) {
+               cooperative = coop;
+               resolving = true;
+               get_cooperative ();
+
+               changed();
+       }
+}
diff --git a/src/grilo/grilo-genre.vala b/src/grilo/grilo-genre.vala
new file mode 100644
index 0000000..3403226
--- /dev/null
+++ b/src/grilo/grilo-genre.vala
@@ -0,0 +1,55 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+public class Games.GriloGenre : Object, Genre {
+       private GriloMedia media;
+       private Uid uid;
+       private List<string> genre;
+       private bool resolving;
+
+       public GriloGenre (GriloMedia media, Uid uid) {
+               this.media = media;
+               this.uid = uid;
+               media.resolved.connect (on_media_resolved);
+               resolving = false;
+       }
+
+       public unowned List<string> get_genre () {
+               if (resolving)
+                       return genre;
+
+               if (genre != null)
+                       return genre;
+
+               resolving = true;
+               media.try_resolve_media ();
+
+               return genre;
+       }
+
+       private void on_media_resolved () {
+               var grl_media = media.get_media ();
+
+               if (grl_media == null)
+                       return;
+
+               var genre_count = grl_media.length (Grl.MetadataKey.GENRE);
+
+               if (genre_count == 0)
+                       return;
+
+               var genre_list = new List<string> ();
+
+               for(uint index = 0; index < genre_count; index++)
+                       genre_list.append(grl_media.get_genre_nth (index));
+
+               load_media_genre (genre_list);
+       }
+
+       private void load_media_genre(List<string> genre_list) {
+               genre = genre_list.copy();
+               resolving = true;
+               get_genre ();
+
+               changed();
+       }
+}
diff --git a/src/grilo/grilo-players.vala b/src/grilo/grilo-players.vala
new file mode 100644
index 0000000..4a380f2
--- /dev/null
+++ b/src/grilo/grilo-players.vala
@@ -0,0 +1,60 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+public class Games.GriloPlayers : Object, Players {
+       private GriloMedia media;
+       private Uid uid;
+       private Grl.Registry registry;
+       private Grl.KeyID GRL_METADATA_KEY_PLAYERS;
+       private string players;
+       private bool resolving;
+
+       public GriloPlayers (GriloMedia media, Uid uid) {
+               this.media = media;
+               this.uid = uid;
+               media.resolved.connect (on_media_resolved);
+               resolving = false;
+       }
+
+       public string get_players () {
+               if (resolving)
+                       return players;
+
+               if (players != null)
+                       return players;
+
+               resolving = true;
+               media.try_resolve_media ();
+
+               return players;
+       }
+
+       private void on_media_resolved () {
+               var grl_media = media.get_media ();
+
+               if (grl_media == null)
+                       return;
+
+               registry = Grl.Registry.get_default ();
+               GRL_METADATA_KEY_PLAYERS = registry.lookup_metadata_key ("players");
+
+               if (grl_media.length (GRL_METADATA_KEY_PLAYERS) == 0)
+                       return;
+
+               var player = grl_media.get_string (GRL_METADATA_KEY_PLAYERS);
+
+               if (int.parse(player) == 1)
+                       player = _("Single-player");
+               else 
+                       player = _("Multi-player");
+
+               load_media_players (player);
+       }
+
+       private void load_media_players (string player) {
+               players = player;
+               resolving = true;
+               get_players ();
+
+               changed();
+       }
+}
diff --git a/src/grilo/grilo-release-date.vala b/src/grilo/grilo-release-date.vala
new file mode 100644
index 0000000..c7e806e
--- /dev/null
+++ b/src/grilo/grilo-release-date.vala
@@ -0,0 +1,50 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+public class Games.GriloReleaseDate : Object, ReleaseDate {
+       private GriloMedia media;
+       private Uid uid;
+       private DateTime release_date;
+       private bool resolving;
+
+       public GriloReleaseDate (GriloMedia media, Uid uid) {
+               this.media = media;
+               this.uid = uid;
+               media.resolved.connect (on_media_resolved);
+               resolving = false;
+       }
+
+       public DateTime get_release_date () {
+               if (resolving)
+                       return release_date;
+
+               if (release_date != null)
+                       return release_date;
+
+               resolving = true;
+               media.try_resolve_media ();
+
+               return release_date;
+       }
+
+       private void on_media_resolved () {
+               var grl_media = media.get_media ();
+
+               if (grl_media == null)
+                       return;
+
+               if (grl_media.length (Grl.MetadataKey.PUBLICATION_DATE) == 0)
+                       return;
+
+               var release = grl_media.get_publication_date ();
+               load_media_release_date (release);
+       }
+
+       private void load_media_release_date (DateTime release) {
+               release_date = release;
+               var now_string = release_date.to_string();
+               resolving = true;
+               get_release_date ();
+
+               changed();
+       }
+}
diff --git a/src/meson.build b/src/meson.build
index 3299a03..afd921d 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -75,8 +75,12 @@ vala_sources = [
   'generic/generic-uid.vala',
   'generic/generic-uri-game-factory.vala',
 
+  'grilo/grilo-coop.vala',
   'grilo/grilo-cover.vala',
+  'grilo/grilo-genre.vala',
   'grilo/grilo-media.vala',
+  'grilo/grilo-players.vala',
+  'grilo/grilo-release-date.vala',
 
   'keyboard/keyboard-mapping-builder.vala',
   'keyboard/keyboard-mapping-manager.vala',


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