[gnome-games] grilo: Add GriloPlayers, GriloReleaseDate, GriloCoop & GriloGenre
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] grilo: Add GriloPlayers, GriloReleaseDate, GriloCoop & GriloGenre
- Date: Thu, 19 Jul 2018 16:45:24 +0000 (UTC)
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]