[gnome-games] runner: Add check_is_valid()



commit f462f5be90a74c4c5ad6dafed3cbc2769d02483f
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Tue Mar 22 13:05:50 2016 +0100

    runner: Add check_is_valid()
    
    Move the validity check of the runners from their constructors to later
    when they are used.
    
    Allow to create a runner way before we use it which is needed to
    implement a generic game storing its runner.

 plugins/steam/src/steam-runner.vala |    5 ++++-
 src/command/command-runner.vala     |    8 +++++---
 src/core/runner.vala                |    1 +
 src/dummy/dummy-runner.vala         |    3 +++
 src/retro/retro-runner.vala         |    6 +++++-
 src/ui/application-window.vala      |    1 +
 6 files changed, 19 insertions(+), 5 deletions(-)
---
diff --git a/plugins/steam/src/steam-runner.vala b/plugins/steam/src/steam-runner.vala
index 5b5a12f..da4aff9 100644
--- a/plugins/steam/src/steam-runner.vala
+++ b/plugins/steam/src/steam-runner.vala
@@ -7,10 +7,13 @@ private class Games.SteamRunner : Object, Runner {
 
        private string game_id;
 
-       public SteamRunner (string game_id) throws Error {
+       public SteamRunner (string game_id) {
                this.game_id = game_id;
        }
 
+       public void check_is_valid () throws Error {
+       }
+
        public Gtk.Widget get_display () {
                return new RemoteDisplay ();
        }
diff --git a/src/command/command-runner.vala b/src/command/command-runner.vala
index 27e0b96..c68bf92 100644
--- a/src/command/command-runner.vala
+++ b/src/command/command-runner.vala
@@ -7,11 +7,13 @@ public class Games.CommandRunner : Object, Runner {
 
        private string[] args;
 
-       public CommandRunner (string[] args) throws Error {
+       public CommandRunner (string[] args) {
+               this.args = args;
+       }
+
+       public void check_is_valid () throws Error {
                if (args.length < 1)
                        throw new CommandError.INVALID_COMMAND ("Invalid command: it doesn't have any 
argument.");
-
-               this.args = args;
        }
 
        public Gtk.Widget get_display () {
diff --git a/src/core/runner.vala b/src/core/runner.vala
index bcf85b6..c6f2de9 100644
--- a/src/core/runner.vala
+++ b/src/core/runner.vala
@@ -5,6 +5,7 @@ public interface Games.Runner : Object {
 
        public abstract bool can_resume { get; }
 
+       public abstract void check_is_valid () throws Error;
        public abstract Gtk.Widget get_display ();
        public abstract void start () throws Error;
        public abstract void resume () throws Error;
diff --git a/src/dummy/dummy-runner.vala b/src/dummy/dummy-runner.vala
index 5e12506..ba82971 100644
--- a/src/dummy/dummy-runner.vala
+++ b/src/dummy/dummy-runner.vala
@@ -5,6 +5,9 @@ private class Games.DummyRunner : Object, Runner {
                get { return false; }
        }
 
+       public void check_is_valid () throws Error {
+       }
+
        public Gtk.Widget get_display () {
                return new DummyDisplay ();
        }
diff --git a/src/retro/retro-runner.vala b/src/retro/retro-runner.vala
index 5d38173..39ff00b 100644
--- a/src/retro/retro-runner.vala
+++ b/src/retro/retro-runner.vala
@@ -49,7 +49,7 @@ public class Games.RetroRunner : Object, Runner {
 
        private bool is_initialized;
 
-       public RetroRunner (string module_basename, string uri, Uid uid) throws Error {
+       public RetroRunner (string module_basename, string uri, Uid uid) {
                is_initialized = false;
 
                this.module_basename = module_basename;
@@ -72,6 +72,10 @@ public class Games.RetroRunner : Object, Runner {
                }
        }
 
+       public void check_is_valid () throws Error {
+               init ();
+       }
+
        public Gtk.Widget get_display () {
                return widget;
        }
diff --git a/src/ui/application-window.vala b/src/ui/application-window.vala
index a95f5c8..b434f26 100644
--- a/src/ui/application-window.vala
+++ b/src/ui/application-window.vala
@@ -138,6 +138,7 @@ private class Games.ApplicationWindow : Gtk.ApplicationWindow {
                        return runners[game];
 
                var runner = game.get_runner ();
+               runner.check_is_valid ();
                runners[game] = runner;
 
                runner.stopped.connect (remove_runner);


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