[gnome-games/wip/aplazas/781334-refactor-game-source: 4/8] generic: Add GenericUriGameSource



commit 16f982fcb5dc4594745b35d56aa72254ce91088a
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Wed May 3 20:09:20 2017 +0200

    generic: Add GenericUriGameSource
    
    This will be used in the next commit as a temporary transition helper
    between the game source model and the uri source and game factory model.

 src/Makefile.am                          |    1 +
 src/generic/generic-uri-game-source.vala |   32 ++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 58cc040..dbb0477 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -90,6 +90,7 @@ gnome_games_SOURCES = \
        generic/generic-title.vala \
        generic/generic-uid.vala \
        generic/generic-uri-game-factory.vala \
+       generic/generic-uri-game-source.vala \
        \
        grilo/grilo-cover.vala \
        grilo/grilo-media.vala \
diff --git a/src/generic/generic-uri-game-source.vala b/src/generic/generic-uri-game-source.vala
new file mode 100644
index 0000000..0ebd685
--- /dev/null
+++ b/src/generic/generic-uri-game-source.vala
@@ -0,0 +1,32 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+public class Games.GenericUriGameSource : Object, GameSource {
+       private UriSource[] sources;
+       private UriGameFactory[] factories;
+
+       public void add_source (UriSource source) {
+               sources += source;
+       }
+
+       public void add_factory (UriGameFactory factory) {
+               factories += factory;
+       }
+
+       public async void each_game (GameCallback callback) {
+               foreach (var source in sources)
+                       foreach (var uri in source)
+                               foreach (var factory in factories)
+                                       yield add_uri (factory, uri);
+
+               foreach (var factory in factories)
+                       yield factory.foreach_game (callback);
+       }
+
+       private static async void add_uri (UriGameFactory factory, string uri) {
+               if (factory.is_uri_valid (uri))
+                       factory.add_uri (uri);
+
+               Idle.add (add_uri.callback);
+               yield;
+       }
+}


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