[gnome-games] libretro: Fetch modules asynchronously



commit 0d98765b4e73ad91eeacb663c286574939343ce2
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Sun Feb 26 14:04:12 2017 +0100

    libretro: Fetch modules asynchronously
    
    Asynchronously fetch the Libretro core descriptors by using the new
    ModuleQuery iterator.

 plugins/libretro/src/libretro-game-source.vala |   35 ++++++++++++-----------
 1 files changed, 18 insertions(+), 17 deletions(-)
---
diff --git a/plugins/libretro/src/libretro-game-source.vala b/plugins/libretro/src/libretro-game-source.vala
index eaf1c2b..dfc10a2 100644
--- a/plugins/libretro/src/libretro-game-source.vala
+++ b/plugins/libretro/src/libretro-game-source.vala
@@ -1,17 +1,13 @@
 // This file is part of GNOME Games. License: GPLv3
 
 public class Games.LibretroGameSource : Object, GameSource {
-       private Retro.CoreDescriptor[] descriptors;
+       private Game[] games;
 
        public async void each_game (GameCallback callback) {
-               if (descriptors == null) {
-                       descriptors = {};
-                       // TODO Should yield for each core descriptor.
-                       Retro.ModuleQuery.foreach_core_descriptor (parse_core_descriptor);
-               }
+               if (games == null)
+                       yield fetch_games ();
 
-               foreach (var core_descriptor in descriptors) {
-                       var game = game_for_core_descriptor (core_descriptor);
+               foreach (var game in games) {
                        callback (game);
 
                        Idle.add (each_game.callback);
@@ -19,16 +15,21 @@ public class Games.LibretroGameSource : Object, GameSource {
                }
        }
 
-       private bool parse_core_descriptor (Retro.CoreDescriptor core_descriptor) {
-               try {
-                       if (core_descriptor.get_is_game ())
-                               descriptors += core_descriptor;
-               }
-               catch (Error e) {
-                       debug (e.message);
+       public async void fetch_games () {
+               games = {};
+               var modules = new Retro.ModuleQuery ();
+               foreach (var core_descriptor in modules) {
+                       try {
+                               if (core_descriptor.get_is_game ())
+                                       games += game_for_core_descriptor (core_descriptor);
+                       }
+                       catch (Error e) {
+                               debug (e.message);
+                       }
+
+                       Idle.add (fetch_games.callback);
+                       yield;
                }
-
-               return false;
        }
 
        private static Game game_for_core_descriptor (Retro.CoreDescriptor core_descriptor) throws Error {


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