public static async Task <bool> RefreshAllVals(string source = CryptoCompareName) { FiatConvert convert = FiatConvert; if (convert == null || (DateTime.Now - LastConvertRefresh) > TimeSpan.FromDays(1)) { var fiatResp = await Comms.Get <FiatConvert>(Comms.ConverterApi, "latest?base=USD"); if (fiatResp.Success && fiatResp.Data != null) { LastConvertRefresh = DateTime.Now; convert = fiatResp.Data; } } if (convert == null) { return(false); } FiatConvert refreshed = await RefreshCryptos(convert, source); if (refreshed != null) { FiatConvert = refreshed; SaveCache(); } return(refreshed != null); }
public static void SetupCache() { AppCache cache = App.DB.GetCache(); if (cache != null) { if (!string.IsNullOrWhiteSpace(cache.FiatPref)) { FiatPref = cache.FiatPref; } LastConvertRefresh = cache.LastConvertRefresh; FiatConvert = JsonConvert.DeserializeObject <FiatConvert>(cache.ConvertDataJson); SourcePrefIndex = cache.SourcePref; LastShownHint = cache.LastShownHint; } }
public static async Task <FiatConvert> RefreshCryptos(FiatConvert con, string source) { bool success = true; foreach (string crypto in CryptoCurrencies) { double returnedUsdToCrypto = await GetCurrentUsdtoCrypto(source, crypto); if (returnedUsdToCrypto == -1) { success = false; break; } con.UsdToCrypto[crypto] = returnedUsdToCrypto; } return((success) ? con : null); }
public static double ConvertFiat(string lhs, string rhs, double amount, FiatConvert convert = null) { // Default to cached FiatConvert if (convert == null) { convert = FiatConvert; } if (convert == null || (lhs != "USD" && !convert.Rates.ContainsKey(lhs)) || (rhs != "USD" && !convert.Rates.ContainsKey(rhs))) { return(-1); } double usdVal = (lhs == "USD") ? amount : amount / convert.Rates[lhs]; double convertedVal = (rhs == "USD") ? usdVal : usdVal * convert.Rates[rhs]; return(convertedVal); }
public static double GetCryptoValOfFiat(string currency, string crypto, double fiatAmount, FiatConvert convert = null) { if (convert == null) { convert = FiatConvert; } double inUsd = ConvertFiat(currency, "USD", fiatAmount, convert); return(inUsd / convert.UsdToCrypto[crypto]); }
public static double GetFiatValOfCrypto(string currency, string crypto, double cryptoAmount, FiatConvert convert = null) { if (convert == null) { convert = FiatConvert; } double inUsd = cryptoAmount * convert.UsdToCrypto[crypto]; return(ConvertFiat("USD", currency, inUsd, convert)); }
public override async void OnUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { UpdateWidgets(context, appWidgetManager, appWidgetIds, "Loading", null, null, Color.Blue, true); try { // Load database manually - can't use interface without initializing Xamarin Forms SQLite_Android dbManager = new SQLite_Android(); SQLiteConnection db = dbManager.GetConnection(); db.CreateTable <Transaction>(); db.CreateTable <AppCache>(); List <Transaction> transactions = (from t in db.Table <Transaction>() select t).ToList(); AppCache cache = db.Table <AppCache>().FirstOrDefault(); FiatConvert convert = JsonConvert.DeserializeObject <FiatConvert>(cache.ConvertDataJson);; if (convert == null || (DateTime.Now - cache.LastConvertRefresh) > TimeSpan.FromDays(1)) { var fiatResp = await Comms.Get <FiatConvert>(Comms.ConverterApi, "latest?base=USD"); if (fiatResp.Success && fiatResp.Data != null) { convert = fiatResp.Data; cache.LastConvertRefresh = DateTime.Now; } if (!fiatResp.Success) { throw new Exception("Failed to refresh"); } } convert = await AppUtils.RefreshCryptos(convert, AppUtils.PriceSources[cache.SourcePref]); if (convert == null) { throw new Exception("Failed to refresh"); } HodlStatus status = HodlStatus.GetCurrent(transactions, convert, cache.FiatPref); if (symbolManager == null) { symbolManager = new CurrencySymbolManager_Android(); } RegionInfo region = symbolManager.GetRegion(cache.FiatPref); CultureInfo culture = symbolManager.GetCulture(region.Name); string totalVal = string.Format(culture, "{0:C}", status.CryptoFiatVal); string profitVal = string.Format(culture, "{0:C}", status.Profit); string timeVal = string.Format("Updated: {0:t}", DateTime.Now); Color profCol = (status.Profit >= 0) ? Color.ForestGreen : Color.IndianRed; UpdateWidgets(context, appWidgetManager, appWidgetIds, timeVal, totalVal, profitVal, profCol, false, true); cache.ConvertDataJson = JsonConvert.SerializeObject(convert); db.DeleteAll <AppCache>(); db.Insert(cache); db.Close(); } catch (Exception e) { UpdateWidgets(context, appWidgetManager, appWidgetIds, string.Format("Update failed at: {0:t}", DateTime.Now), null, null, Color.Blue, false, true); Console.WriteLine("HODLR error: " + e.Message); Android.Util.Log.Error("Hodlr", "HODLR error: " + e.Message); } }