[gnome-games] Make Runner.check_is_valid() return an error message
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] Make Runner.check_is_valid() return an error message
- Date: Thu, 16 Feb 2017 21:59:13 +0000 (UTC)
commit 49ab2c329a400329a768dc269322471d38b68959
Author: Adrien Plazas <kekun plazas laposte net>
Date: Thu Feb 16 22:01:48 2017 +0100
Make Runner.check_is_valid() return an error message
Also display the returned message on the error display page.
This helps the users to better understand why their game doesn't run.
https://bugzilla.gnome.org/show_bug.cgi?id=778773
src/command/command-runner.vala | 11 ++++++++---
src/core/runner.vala | 2 +-
src/dummy/dummy-runner.vala | 3 ++-
src/retro/retro-runner.vala | 25 ++++++++++++++++++++++---
src/ui/application-window.vala | 8 ++++++--
5 files changed, 39 insertions(+), 10 deletions(-)
---
diff --git a/src/command/command-runner.vala b/src/command/command-runner.vala
index a96ff14..bfb14c1 100644
--- a/src/command/command-runner.vala
+++ b/src/command/command-runner.vala
@@ -25,9 +25,14 @@ public class Games.CommandRunner : Object, Runner {
this.watch_child = watch_child;
}
- public void check_is_valid () throws Error {
- if (args.length < 1)
- throw new CommandError.INVALID_COMMAND (_("Invalid command: it doesn't have any
argument."));
+ public bool check_is_valid (out string error_message) throws Error {
+ if (args.length > 0)
+ return true;
+
+ debug ("Invalid command: it doesn't have any argument.");
+ error_message = _("The game doesn't have a valid command.");
+
+ return false;
}
public Gtk.Widget get_display () {
diff --git a/src/core/runner.vala b/src/core/runner.vala
index c9684ca..4122930 100644
--- a/src/core/runner.vala
+++ b/src/core/runner.vala
@@ -8,7 +8,7 @@ public interface Games.Runner : Object {
public abstract bool can_resume { get; }
public abstract MediaSet? media_set { get; }
- public abstract void check_is_valid () throws Error;
+ public abstract bool check_is_valid (out string error_message) 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 579e89d..819e876 100644
--- a/src/dummy/dummy-runner.vala
+++ b/src/dummy/dummy-runner.vala
@@ -17,7 +17,8 @@ private class Games.DummyRunner : Object, Runner {
get { return null; }
}
- public void check_is_valid () throws Error {
+ public bool check_is_valid (out string error_message) throws Error {
+ return true;
}
public Gtk.Widget get_display () {
diff --git a/src/retro/retro-runner.vala b/src/retro/retro-runner.vala
index 9868e65..b3bf472 100644
--- a/src/retro/retro-runner.vala
+++ b/src/retro/retro-runner.vala
@@ -108,9 +108,19 @@ public class Games.RetroRunner : Object, Runner {
}
}
- public void check_is_valid () throws Error {
- load_media_data ();
- init ();
+ public bool check_is_valid (out string error_message) throws Error {
+ try {
+ load_media_data ();
+ init ();
+ }
+ catch (RetroError.MODULE_NOT_FOUND e) {
+ debug (e.message);
+ error_message = get_unsupported_system_message ();
+
+ return false;
+ }
+
+ return true;
}
public Gtk.Widget get_display () {
@@ -491,6 +501,15 @@ public class Games.RetroRunner : Object, Runner {
}
}
+ private string get_unsupported_system_message () {
+ var platform = core_source.get_platform ();
+ var platform_name = get_platform_name (platform);
+ if (platform_name == null)
+ return _("The system isn't supported yet. Full support will come!");
+ else
+ return _("The system ā%sā isn't supported yet. Full support will come!").printf
(platform_name);
+ }
+
private static string? get_platform_name (string platform) {
switch (platform) {
case "Atari2600":
diff --git a/src/ui/application-window.vala b/src/ui/application-window.vala
index c4a64d6..4ce8fd7 100644
--- a/src/ui/application-window.vala
+++ b/src/ui/application-window.vala
@@ -241,9 +241,13 @@ private class Games.ApplicationWindow : Gtk.ApplicationWindow {
private Runner? try_get_runner (Game game) {
try {
var runner = game.get_runner ();
- runner.check_is_valid ();
+ string error_message;
+ if (runner.check_is_valid (out error_message))
+ return runner;
- return runner;
+ display_box.display_running_game_failed (game, error_message);
+
+ return null;
}
catch (Error e) {
warning (e.message);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]