[gnome-games] libretro: Fetch modules asynchronously
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] libretro: Fetch modules asynchronously
- Date: Sun, 26 Feb 2017 13:21:13 +0000 (UTC)
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]