[gnome-calculator/wip/currency-conversion-plugins] Make command-line conversions work (fixes #33)
- From: Robert Roth <robertroth src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calculator/wip/currency-conversion-plugins] Make command-line conversions work (fixes #33)
- Date: Thu, 14 Jan 2021 14:27:02 +0000 (UTC)
commit 5beed7c1009007b27c745145fd148baf7575c2c3
Author: Robert Roth <robert roth off gmail com>
Date: Thu Jan 14 16:26:25 2021 +0200
Make command-line conversions work (fixes #33)
lib/currency-provider.vala | 8 ++++----
lib/currency.vala | 20 ++++++++++++++------
lib/equation.vala | 13 +++++++++++++
lib/math-equation.vala | 1 -
src/gcalccmd.vala | 6 +++++-
src/gnome-calculator.vala | 23 +++++++++--------------
6 files changed, 45 insertions(+), 26 deletions(-)
---
diff --git a/lib/currency-provider.vala b/lib/currency-provider.vala
index 5625a9ee..53c7c4ce 100644
--- a/lib/currency-provider.vala
+++ b/lib/currency-provider.vala
@@ -4,7 +4,7 @@ public interface CurrencyProvider : Object {
public abstract void update_rates (bool asyncLoad = true);
- public abstract void set_refresh_interval (int interval);
+ public abstract void set_refresh_interval (int interval, bool asyncLoad = true);
}
abstract class AbstractCurrencyProvider : Object, CurrencyProvider {
@@ -15,12 +15,12 @@ abstract class AbstractCurrencyProvider : Object, CurrencyProvider {
public abstract string source_name {get;}
- public int refresh_interval { get; set; }
+ public int refresh_interval { get; private set; }
- public void set_refresh_interval (int interval) {
+ public void set_refresh_interval (int interval, bool asyncLoad = true) {
loaded = false;
this.refresh_interval = interval;
- update_rates ();
+ update_rates (asyncLoad);
}
private bool loading;
diff --git a/lib/currency.vala b/lib/currency.vala
index 03b031d0..351bd38e 100644
--- a/lib/currency.vala
+++ b/lib/currency.vala
@@ -17,19 +17,27 @@ public class CurrencyManager : Object
private List<CurrencyProvider> providers;
private int _refresh_interval;
- public int refresh_interval { get { return _refresh_interval;}
+ public int refresh_interval { get { return _refresh_interval; }
set
{
_refresh_interval = value;
- foreach (var p in default_currency_manager.providers) {
- p.set_refresh_interval(_refresh_interval);
- }
}
}
public signal void updated ();
- public static CurrencyManager get_default ()
+ public void refresh_sync () {
+ foreach (var p in default_currency_manager.providers) {
+ p.set_refresh_interval(_refresh_interval, false);
+ }
+ }
+ public void refresh_async () {
+ foreach (var p in default_currency_manager.providers) {
+ p.set_refresh_interval(_refresh_interval, true);
+ }
+ }
+
+ public static CurrencyManager get_default (bool asyncLoad = true)
{
if (default_currency_manager != null)
return default_currency_manager;
@@ -101,7 +109,7 @@ public class CurrencyManager : Object
/* Start downloading the rates if they are outdated. */
foreach (var p in default_currency_manager.providers) {
p.updated.connect ( () => { default_currency_manager.updated (); });
- p.update_rates ();
+ p.update_rates (asyncLoad);
}
return default_currency_manager;
diff --git a/lib/equation.vala b/lib/equation.vala
index e6e3a31b..9aa71716 100644
--- a/lib/equation.vala
+++ b/lib/equation.vala
@@ -153,6 +153,19 @@ public class Equation : Object
}
}
+public class ConvertEquation : Equation
+{
+ public ConvertEquation (string text)
+ {
+ base (text);
+ }
+
+ public override Number? convert (Number x, string x_units, string z_units)
+ {
+ return UnitManager.get_default ().convert_by_symbol (x, x_units, z_units);
+ }
+}
+
private class EquationParser : Parser
{
private Equation equation;
diff --git a/lib/math-equation.vala b/lib/math-equation.vala
index 73cff961..4e30307d 100644
--- a/lib/math-equation.vala
+++ b/lib/math-equation.vala
@@ -1486,7 +1486,6 @@ private class MEquation : Equation
public override Number? get_variable (string name)
{
var lower_name = name.down ();
-
if (lower_name == "rand")
return new Number.random ();
else if (lower_name == "_")
diff --git a/src/gcalccmd.vala b/src/gcalccmd.vala
index 3bf6c45e..cb3568a8 100644
--- a/src/gcalccmd.vala
+++ b/src/gcalccmd.vala
@@ -24,7 +24,7 @@ static void solve (string equation)
decimal = "";
string? error_token = null;
- var e = new Equation (equation.replace (tsep_string, "").replace (decimal, "."));
+ var e = new ConvertEquation (equation.replace (tsep_string, "").replace (decimal, "."));
e.base = 10;
e.wordlen = 32;
e.angle_units = AngleUnit.DEGREES;
@@ -63,6 +63,10 @@ public static int main (string[] args)
result_serializer = new Serializer (DisplayFormat.AUTOMATIC, 10, 9);
+ var settings = new Settings ("org.gnome.calculator");
+ CurrencyManager.get_default (false).refresh_interval = settings.get_int ("refresh-interval");
+ CurrencyManager.get_default (false).refresh_sync ();
+
if (args.length == 2) {
solve (args[1]);
return Posix.EXIT_SUCCESS;
diff --git a/src/gnome-calculator.vala b/src/gnome-calculator.vala
index 6490af2d..1090fa25 100644
--- a/src/gnome-calculator.vala
+++ b/src/gnome-calculator.vala
@@ -124,6 +124,7 @@ public class Calculator : Gtk.Application
// restore the first window position from the settings
load_window_position (last_opened_window);
CurrencyManager.get_default ().refresh_interval = settings.get_int ("refresh-interval");
+ CurrencyManager.get_default ().refresh_async ();
}
private MathWindow get_active_math_window ()
@@ -218,7 +219,7 @@ public class Calculator : Gtk.Application
settings = new Settings ("org.gnome.calculator");
var angle_units = (AngleUnit) settings.get_enum ("angle-units");
- var e = new SolveEquation (solve_equation.replace (tsep_string, "").replace (decimal, "."));
+ var e = new ConvertEquation (solve_equation.replace (tsep_string, "").replace (decimal, "."));
e.base = 10;
e.wordlen = 32;
e.angle_units = angle_units;
@@ -227,6 +228,13 @@ public class Calculator : Gtk.Application
string? error_token = null;
uint representation_base;
var result = e.parse (out representation_base, out error, out error_token);
+
+ // if unknown conversion, try force reloading conversion rates and retry conversion
+ if (error == ErrorCode.UNKNOWN_CONVERSION) {
+ CurrencyManager.get_default ().refresh_interval = settings.get_int ("refresh-interval");
+ CurrencyManager.get_default ().refresh_sync ();
+ result = e.parse (out representation_base, out error, out error_token);
+ }
if (result != null)
{
var serializer = new Serializer (DisplayFormat.AUTOMATIC, 10, 9);
@@ -419,16 +427,3 @@ public class Calculator : Gtk.Application
return app.run (args);
}
}
-
-private class SolveEquation : Equation
-{
- public SolveEquation (string text)
- {
- base (text);
- }
-
- public override Number? convert (Number x, string x_units, string z_units)
- {
- return UnitManager.get_default ().convert_by_symbol (x, x_units, z_units);
- }
-}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]