示例#1
0
        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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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]);
        }
示例#6
0
        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));
        }
示例#7
0
        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);
            }
        }