Inheritance: IDisposable
Beispiel #1
0
        public async Task RefreshQuotes()
        {
            Quote quote = await Task.Factory.StartNew <Quote>(() => { return(QuoteDatabase.GetQuote(Date)); });

            PART_QuoteButton.Quote      = quote;
            PART_QuoteButton.Visibility = quote != null ? Visibility.Visible : Visibility.Collapsed;
        }
Beispiel #2
0
        /// <summary>
        /// Delete all the quotes in a quote page from the database.
        /// </summary>
        /// <param name="quotePage"></param>
        public static async Task RemoveFromDatabase(QuotePage quotePage)
        {
            List <DatabaseHelpers.Quotes.Quote> delete = new List <DatabaseHelpers.Quotes.Quote>();

            await Task.Factory.StartNew(() =>
            {
                IEnumerable <DatabaseHelpers.Quotes.Quote> list = QuoteDatabase.AllQuotes();

                foreach (WikiquoteScreensaverLib.Common.Quote wikiQuote in quotePage)
                {
                    foreach (DatabaseHelpers.Quotes.Quote dbQuote in list)
                    {
                        if (dbQuote.Content == wikiQuote.Text)
                        {
                            delete.Add(dbQuote);
                            break;
                        }
                    }
                }
            });

            await Task.Factory.StartNew(() =>
            {
                foreach (DatabaseHelpers.Quotes.Quote dbQuote in delete)
                {
                    QuoteDatabase.DeleteQuote(dbQuote);
                }
            });
        }
Beispiel #3
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Args = e.Args;

            CreateJumpList();

            // Make the main process appear connected to the update process
            // in the taskbar.
            try { SetCurrentProcessExplicitAppUserModelID(GlobalAssemblyInfo.AssemblyName); }
            catch { }

            AppointmentDatabase.Load();
            AppointmentDatabase.OnSaveCompletedEvent += AppointmentDatabase_OnSaveCompletedEvent;
            ContactDatabase.Load();
            ContactDatabase.OnSaveCompletedEvent += ContactDatabase_OnSaveCompletedEvent;
            TaskDatabase.Load();
            TaskDatabase.OnSaveCompletedEvent += TaskDatabase_OnSaveCompletedEvent;
            NoteDatabase.Load();
            NoteDatabase.OnSaveCompletedEvent += NoteDatabase_OnSaveCompletedEvent;
            SyncDatabase.Load();
            SyncDatabase.OnSaveCompletedEvent += SyncDatabase_OnSaveCompletedEvent;
            QuoteDatabase.Load();
            QuoteDatabase.OnSaveCompletedEvent += QuoteDatabase_OnSaveCompletedEvent;

            ThemeHelpers.UpdateTheme(true);

            MainWindow mainWindow = new MainWindow();

            mainWindow.ContentRendered += mainWindow_ContentRendered;
            mainWindow.Show();

            SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
            SystemEvents.TimeChanged           += SystemEvents_TimeChanged;

            if (BackstageEvents.StaticUpdater == null)
            {
                BackstageEvents.StaticUpdater = new BackstageEvents();
            }

            BackstageEvents.StaticUpdater.OnForceUpdateEvent     += StaticUpdater_OnForceUpdateEvent;
            BackstageEvents.StaticUpdater.OnThemeChangedEvent    += StaticUpdater_OnThemeChangedEvent;
            BackstageEvents.StaticUpdater.OnExportEvent          += StaticUpdater_OnExportEvent;
            BackstageEvents.StaticUpdater.OnHelpEvent            += StaticUpdater_OnHelpEvent;
            BackstageEvents.StaticUpdater.OnDocumentRequestEvent += StaticUpdater_OnDocumentRequestEvent;
            BackstageEvents.StaticUpdater.OnPrintStartedEvent    += StaticUpdater_OnPrintStartedEvent;
            BackstageEvents.StaticUpdater.OnImportEvent          += StaticUpdater_OnImportEvent;
            BackstageEvents.StaticUpdater.OnQuotesChangedEvent   += StaticUpdater_OnQuotesChangedEvent;
        }
Beispiel #4
0
        /// <summary>
        /// Adds a list of new quote pages to the database, randomizing
        /// the order of the quotes.
        /// </summary>
        /// <param name="quotePage"></param>
        public static async Task AddToDatabase(IList <QuotePage> quotePage)
        {
            await Task.Factory.StartNew(() =>
            {
                int pagesCount = quotePage.Count;
                Random random  = new Random((int)DateTime.Now.TimeOfDay.Ticks);

                // We have to loop through every date from now until the future to make
                // sure we fill up any holes in the database.
                DateTime?date = DateTime.Now.Date;

                while (pagesCount > 0)
                {
                    QuotePage page = quotePage[random.Next(0, pagesCount)];

                    if (page.Count == 0)
                    {
                        quotePage.Remove(page);
                        pagesCount--;
                        continue;
                    }

                    date = QuoteDatabase.NextFreeDate(date.Value);

                    if (!date.HasValue)
                    {
                        break;
                    }

                    AddToDatabase(page.Items[0], date.Value, page.Topic);

                    date = date.Value.AddDays(1);
                    page.Items.RemoveAt(0);
                }
            });
        }
Beispiel #5
0
        /// <summary>
        /// Adds a new quote page to the database.
        /// </summary>
        /// <param name="quotePage"></param>
        public static async Task AddToDatabase(QuotePage quotePage)
        {
            //DateTime? lastDate = QuoteDatabase.GetLastDate();
            //DateTime date = lastDate.HasValue ? lastDate.Value.AddDays(1) : DateTime.Now.Date;

            //foreach (WikiquoteScreensaverLib.Common.Quote each in quotePage)
            //{
            //	QuoteDatabase.AddQuote(
            //		new DatabaseHelpers.Quotes.Quote(date, null, each.Text, each.AdditionalInformation)
            //	);

            //	date = date.AddDays(1);
            //}

            await Task.Factory.StartNew(() =>
            {
                //
                // We have to loop through every date from now until the future to make
                // sure we fill up any holes in the database.
                //
                DateTime?date = DateTime.Now.Date;

                foreach (WikiquoteScreensaverLib.Common.Quote each in quotePage)
                {
                    date = QuoteDatabase.NextFreeDate(date.Value);

                    if (!date.HasValue)
                    {
                        break;
                    }

                    AddToDatabase(each, date.Value, quotePage.Topic);
                    date = date.Value.AddDays(1);
                }
            });
        }
Beispiel #6
0
 private static void AddToDatabase(WikiquoteScreensaverLib.Common.Quote quote, DateTime date, string title)
 {
     QuoteDatabase.AddQuote(
         new DatabaseHelpers.Quotes.Quote(date, title, quote.Text, quote.AdditionalInformation)
         );
 }
Beispiel #7
0
 /// <summary>
 /// Rebuild entire database.
 /// </summary>
 /// <param name="playlist"></param>
 public static async Task RebuildDatabase(Playlist playlist)
 {
     QuoteDatabase.Clear();
     await AddToDatabase(playlist.Items);
 }
Beispiel #8
0
 public QuoteModule(IServiceProvider serviceprovider)
 {
     _qdb = serviceprovider.GetService <QuoteDatabase>();
 }
Beispiel #9
0
        /// <summary>
        /// посчитать прибыль по счетам
        /// </summary>
        private void CalculateAccountProfit(TradeSharpConnection ctx,
                                            List <ACCOUNT> accounts)
        {
            var performers = new List <AccountPerformance>();

            PerformersTopTotalIncome       = new List <AccountPerformance>();
            PerformersTopProfitBroker      = new List <AccountPerformance>();
            PerformersTopProfitIncome      = new List <AccountPerformance>();
            PerformersTopWorstProfitBroker = new List <AccountPerformance>();

            // получить текущие котировки
            var candles = QuoteDatabase.GetCandlesOnTime(null);

            if (candles.Count == 0)
            {
                Errors.Add("CalculateAccountProfit - " + Resource.ErrorMessageQuotNotReceived);
                return;
            }

            // посчитать доходность по каждому счету
            // в валюте брокера
            foreach (var account in accounts)
            {
                var openProfit = CalculateAccountOpenProfit(ctx, account, candles);
                var acId       = account.ID;

                // ввод-вывод и профиль по закрытым сделкам
                var profitClosed   = 0M;
                var investedTotal  = 0M;
                var withdrawnTotal = 0M;
                foreach (var bc in ctx.BALANCE_CHANGE.Where(b => b.AccountID == acId))
                {
                    if (bc.ChangeType == (int)BalanceChangeType.Profit)
                    {
                        profitClosed += bc.Amount;
                    }
                    else if (bc.ChangeType == (int)BalanceChangeType.Loss)
                    {
                        profitClosed -= bc.Amount;
                    }
                    else if (bc.ChangeType == (int)BalanceChangeType.Deposit)
                    {
                        investedTotal += bc.Amount;
                    }
                    else if (bc.ChangeType == (int)BalanceChangeType.Withdrawal)
                    {
                        withdrawnTotal += bc.Amount;
                    }
                }

                // профит по сделкам...
                var profit = profitClosed + (decimal)openProfit;

                // сводка по счету
                var performer = new AccountPerformance
                {
                    Account            = account,
                    TotalIncome        = investedTotal,
                    TotalWithdraw      = withdrawnTotal,
                    TotalProfit        = profit,
                    TotalProfitPercent = investedTotal == 0 ? 0 : 100 * profit / investedTotal
                };
                // пересчитать в валюту брокера
                string errorStr;
                performer.CalculateResultsInBrokerCurrency(candles, BrokerCurrency, out errorStr);
                if (!string.IsNullOrEmpty(errorStr))
                {
                    Errors.Add(errorStr);
                }

                performers.Add(performer);
            }

            // вывести краткую сводку по доходности
            if (performers.Count > 0)
            {
                // средние показатели
                AvgTotalIncome  = performers.Average(p => p.TotalIncomeBroker);
                AvgProfitBroker = performers.Average(p => p.TotalProfitBroker);
                AvgProfitIncome = performers.Average(p => p.TotalProfitPercent);

                // топы лучших - худших
                PerformersTopTotalIncome =
                    performers.OrderByDescending(p => p.TotalIncome).Take(TopRecordsCount).ToList();
                PerformersTopTotalIncome =
                    performers.OrderByDescending(p => p.TotalIncome).Take(TopRecordsCount).ToList();
                PerformersTopProfitBroker =
                    performers.OrderByDescending(p => p.TotalProfitBroker).Take(TopRecordsCount).ToList();
                PerformersTopWorstProfitBroker =
                    performers.OrderBy(p => p.TotalProfitBroker).Take(TopRecordsCount).ToList();
                PerformersTopProfitIncome =
                    performers.OrderByDescending(p => p.TotalProfitPercent).Take(TopRecordsCount).ToList();
            }
        }
Beispiel #10
0
 private void SyncDatabase_OnSaveCompletedEvent(object sender, EventArgs e)
 {
     QuoteDatabase.Save();
 }
Beispiel #11
0
        private async void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            // We don't want to overwhelm the user with multiple error dialogs. However,
            // we will still log the error for debugging purposes.
            if (_isErrorDialogShowing)
            {
                e.Handled = true;

                await Task.Factory.StartNew(() => { Log(e.Exception); });

                return;
            }

            _isErrorDialogShowing = true;

            try
            {
                // We handle our own errors, so that we can write error logs
                // and attempt application recovery.
                e.Handled = true;

                if (e.Exception is NotImplementedException)
                {
                    TaskDialog td = new TaskDialog(MainWindow, "Not Implemented",
                                                   !string.IsNullOrEmpty(e.Exception.Message) ? e.Exception.Message
                                                : "This isn't hooked up yet. Check for updates and try again.", MessageType.Error);
                    td.ShowDialog();

                    _isErrorDialogShowing = false;

                    return;
                }

                await Task.Factory.StartNew(() => { Log(e.Exception); });

                // Try and save the databases, but we still place this in a catch
                // in case an error in the database caused the crash.
                bool saveError = false;

                await Task.Factory.StartNew(() => { try { AppointmentDatabase.Save(); } catch { saveError = true; } });

                if (saveError)
                {
                    saveError = false;
                    await Task.Factory.StartNew(() => { try { ContactDatabase.Save(); } catch { saveError = true; } });
                }

                if (saveError)
                {
                    saveError = false;
                    await Task.Factory.StartNew(() => { try { TaskDatabase.Save(); } catch { saveError = true; } });
                }

                if (saveError)
                {
                    saveError = false;

                    try { ((MainWindow)MainWindow).SaveNotesView(); }
                    catch { }

                    await Task.Factory.StartNew(() => { try { NoteDatabase.Save(); } catch { saveError = true; } });
                }

                if (saveError)
                {
                    saveError = false;
                    await Task.Factory.StartNew(() => { try { SyncDatabase.Save(); } catch { saveError = true; } });
                }

                if (saveError)
                {
                    saveError = false;
                    await Task.Factory.StartNew(() => { try { QuoteDatabase.Save(); } catch { saveError = true; } });
                }

                if (saveError)
                {
                    try
                    {
                        // Autorecover
                        RecoveryDatabase recovery = new RecoveryDatabase(RecoveryVersion.LastRun);

                        MainWindow window = (MainWindow)MainWindow;

                        try { recovery.RecoveryAppointment = window.LiveAppointment; }
                        catch { }
                        try { recovery.RecoveryContact = window.LiveContact; }
                        catch { }
                        try { recovery.RecoveryTask = window.LiveTask; }
                        catch { }
                    }
                    catch { }
                }

                try { new RecoveryDatabase(RecoveryVersion.Current).Delete(); }
                catch { }

                if (MainWindow != null)
                {
                    try { ((MainWindow)MainWindow).SaveSettings(); }
                    catch { }
                }

                // Try and show an error message, but again we still place this in a catch
                // in case an error in the dialog caused the crash.
                try
                {
                    Error error = new Error(null, e.Exception);
                    if (error.ShowDialog() == true)
                    {
                        Feedback f = new Feedback(FeedbackType.Error, e.Exception.ToString());

                        if (MainWindow != null && MainWindow.IsLoaded)
                        {
                            f.Owner = MainWindow;
                        }
                        else
                        {
                            f.WindowStartupLocation = WindowStartupLocation.CenterScreen;
                        }

                        f.ShowDialog();
                    }
                    else if (error.IgnoreError)
                    {
                        _isErrorDialogShowing = false;
                        return;
                    }
                }
                catch
                {
                    if (Settings.JoinedCEIP)
                    {
                        MessageBox.Show("Oops...\r\n\r\n"
                                        + e.Exception.ToString(),
                                        GlobalAssemblyInfo.AssemblyName + " Error",
                                        MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    else
                    {
                        MessageBox.Show("Oops...\r\n\r\n"
                                        + e.Exception.Message,
                                        GlobalAssemblyInfo.AssemblyName + " Error",
                                        MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }

                // Restart Dimension 4
                ProcessStartInfo restartInfo = new ProcessStartInfo(Process.GetCurrentProcess().MainModule.FileName, "/nosingleinstance");
                restartInfo.UseShellExecute = true;
                Process.Start(restartInfo);

#if DEBUG
                Debug.WriteLine(e.Exception.ToString());
#endif

                Shutdown(-1);
            }
            catch { }
        }