From 29d414e39c3aa15f4877e597c1cac2d83b199078 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Fri, 27 Jul 2018 10:35:17 +0300 Subject: CurrencyRates: quotes replaced to currencyrates --- .../CurrencyRatesChart/CurrencyRatesChart.csproj | 124 +++ .../CurrencyRatesChart/Form1.Designer.cs | 123 +++ plugins/CurrencyRates/CurrencyRatesChart/Form1.cs | 155 ++++ .../CurrencyRates/CurrencyRatesChart/Form1.resx | 216 +++++ .../CurrencyRates/CurrencyRatesChart/Program.cs | 21 + .../CurrencyRatesChart/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 63 ++ .../CurrencyRatesChart/Properties/Resources.resx | 117 +++ .../Properties/Settings.Designer.cs | 26 + .../Properties/Settings.settings | 7 + .../CurrencyRates/CurrencyRatesChart/app.config | 3 + plugins/CurrencyRates/CurrencyRatesChart/main.ico | Bin 0 -> 5430 bytes .../CurrencyRates/QuotesChart/Form1.Designer.cs | 123 --- plugins/CurrencyRates/QuotesChart/Form1.cs | 155 ---- plugins/CurrencyRates/QuotesChart/Form1.resx | 216 ----- plugins/CurrencyRates/QuotesChart/Program.cs | 21 - .../QuotesChart/Properties/AssemblyInfo.cs | 36 - .../QuotesChart/Properties/Resources.Designer.cs | 63 -- .../QuotesChart/Properties/Resources.resx | 117 --- .../QuotesChart/Properties/Settings.Designer.cs | 26 - .../QuotesChart/Properties/Settings.settings | 7 - .../CurrencyRates/QuotesChart/QuotesChart.csproj | 124 --- plugins/CurrencyRates/QuotesChart/app.config | 3 - .../QuotesChart/bin/x32/QuotesChart.exe | Bin 23552 -> 0 bytes .../QuotesChart/bin/x64/QuotesChart.exe | Bin 23040 -> 0 bytes plugins/CurrencyRates/QuotesChart/main.ico | Bin 5430 -> 0 bytes plugins/CurrencyRates/docs/Utility/cc.xml | 676 ++++++++-------- .../proto_CurrencyRates/res/proto_CurrencyRates.rc | 2 +- plugins/CurrencyRates/res/Export currencyrates.ico | Bin 0 -> 1150 bytes plugins/CurrencyRates/res/Export quotes.ico | Bin 1150 -> 0 bytes plugins/CurrencyRates/res/Forex.rc | 24 +- plugins/CurrencyRates/res/Import currencyrates.ico | Bin 0 -> 1150 bytes plugins/CurrencyRates/res/Import quotes.ico | Bin 1150 -> 0 bytes plugins/CurrencyRates/res/currencyrate.ico | Bin 0 -> 1150 bytes plugins/CurrencyRates/res/quote.ico | Bin 1150 -> 0 bytes plugins/CurrencyRates/src/ComHelper.cpp | 2 +- plugins/CurrencyRates/src/CommonOptionDlg.cpp | 52 +- plugins/CurrencyRates/src/CommonOptionDlg.h | 8 +- plugins/CurrencyRates/src/CreateFilePath.cpp | 2 +- plugins/CurrencyRates/src/CurrencyConverter.cpp | 86 +- plugins/CurrencyRates/src/CurrencyConverter.h | 2 +- plugins/CurrencyRates/src/CurrencyRateChart.cpp | 101 +++ plugins/CurrencyRates/src/CurrencyRateChart.h | 12 + plugins/CurrencyRates/src/CurrencyRateInfoDlg.cpp | 263 ++++++ plugins/CurrencyRates/src/CurrencyRateInfoDlg.h | 11 + .../src/CurrencyRatesProviderBase.cpp | 883 +++++++++++++++++++++ .../CurrencyRates/src/CurrencyRatesProviderBase.h | 119 +++ .../src/CurrencyRatesProviderCurrencyConverter.cpp | 425 ++++++++++ .../src/CurrencyRatesProviderCurrencyConverter.h | 29 + .../src/CurrencyRatesProviderVisitor.h | 25 + .../src/CurrencyRatesProviderVisitorDbSettings.cpp | 70 ++ .../src/CurrencyRatesProviderVisitorDbSettings.h | 44 + ...rencyRatesProviderVisitorFormatSpecificator.cpp | 62 ++ ...urrencyRatesProviderVisitorFormatSpecificator.h | 33 + .../src/CurrencyRatesProviderVisitorFormater.cpp | 122 +++ .../src/CurrencyRatesProviderVisitorFormater.h | 27 + .../src/CurrencyRatesProviderVisitorTendency.cpp | 24 + .../src/CurrencyRatesProviderVisitorTendency.h | 25 + .../CurrencyRates/src/CurrencyRatesProviders.cpp | 90 +++ plugins/CurrencyRates/src/CurrencyRatesProviders.h | 29 + plugins/CurrencyRates/src/DBUtils.cpp | 8 +- plugins/CurrencyRates/src/DBUtils.h | 10 +- plugins/CurrencyRates/src/EconomicRateInfo.h | 50 +- plugins/CurrencyRates/src/ExtraImages.cpp | 10 +- plugins/CurrencyRates/src/ExtraImages.h | 2 +- plugins/CurrencyRates/src/Forex.cpp | 160 ++-- plugins/CurrencyRates/src/HTTPSession.cpp | 8 +- plugins/CurrencyRates/src/ICurrencyRatesProvider.h | 39 + plugins/CurrencyRates/src/IQuotesProvider.h | 39 - plugins/CurrencyRates/src/IconLib.cpp | 18 +- plugins/CurrencyRates/src/IconLib.h | 8 +- plugins/CurrencyRates/src/ImportExport.cpp | 90 +-- plugins/CurrencyRates/src/ImportExport.h | 8 +- plugins/CurrencyRates/src/Locale.cpp | 4 +- plugins/CurrencyRates/src/Locale.h | 4 +- plugins/CurrencyRates/src/Log.cpp | 4 +- plugins/CurrencyRates/src/ModuleInfo.cpp | 10 +- plugins/CurrencyRates/src/ModuleInfo.h | 6 +- plugins/CurrencyRates/src/QuoteChart.cpp | 101 --- plugins/CurrencyRates/src/QuoteChart.h | 12 - plugins/CurrencyRates/src/QuoteInfoDlg.cpp | 263 ------ plugins/CurrencyRates/src/QuoteInfoDlg.h | 11 - plugins/CurrencyRates/src/QuotesProviderBase.cpp | 883 --------------------- plugins/CurrencyRates/src/QuotesProviderBase.h | 119 --- .../src/QuotesProviderCurrencyConverter.cpp | 425 ---------- .../src/QuotesProviderCurrencyConverter.h | 29 - plugins/CurrencyRates/src/QuotesProviderVisitor.h | 25 - .../src/QuotesProviderVisitorDbSettings.cpp | 70 -- .../src/QuotesProviderVisitorDbSettings.h | 44 - .../QuotesProviderVisitorFormatSpecificator.cpp | 62 -- .../src/QuotesProviderVisitorFormatSpecificator.h | 33 - .../src/QuotesProviderVisitorFormater.cpp | 122 --- .../src/QuotesProviderVisitorFormater.h | 27 - .../src/QuotesProviderVisitorTendency.cpp | 24 - .../src/QuotesProviderVisitorTendency.h | 25 - plugins/CurrencyRates/src/QuotesProviders.cpp | 90 --- plugins/CurrencyRates/src/QuotesProviders.h | 29 - plugins/CurrencyRates/src/SettingsDlg.cpp | 202 ++--- plugins/CurrencyRates/src/SettingsDlg.h | 16 +- plugins/CurrencyRates/src/WinCtrlHelper.cpp | 10 +- plugins/CurrencyRates/src/WinCtrlHelper.h | 8 +- plugins/CurrencyRates/src/resource.h | 12 +- plugins/CurrencyRates/src/stdafx.h | 24 +- plugins/ExternalAPI/m_CurrencyRates.h | 16 +- 104 files changed, 4095 insertions(+), 4095 deletions(-) create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/CurrencyRatesChart.csproj create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Form1.Designer.cs create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Form1.cs create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Form1.resx create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Program.cs create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Properties/AssemblyInfo.cs create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Properties/Resources.Designer.cs create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Properties/Resources.resx create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Properties/Settings.Designer.cs create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/Properties/Settings.settings create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/app.config create mode 100644 plugins/CurrencyRates/CurrencyRatesChart/main.ico delete mode 100644 plugins/CurrencyRates/QuotesChart/Form1.Designer.cs delete mode 100644 plugins/CurrencyRates/QuotesChart/Form1.cs delete mode 100644 plugins/CurrencyRates/QuotesChart/Form1.resx delete mode 100644 plugins/CurrencyRates/QuotesChart/Program.cs delete mode 100644 plugins/CurrencyRates/QuotesChart/Properties/AssemblyInfo.cs delete mode 100644 plugins/CurrencyRates/QuotesChart/Properties/Resources.Designer.cs delete mode 100644 plugins/CurrencyRates/QuotesChart/Properties/Resources.resx delete mode 100644 plugins/CurrencyRates/QuotesChart/Properties/Settings.Designer.cs delete mode 100644 plugins/CurrencyRates/QuotesChart/Properties/Settings.settings delete mode 100644 plugins/CurrencyRates/QuotesChart/QuotesChart.csproj delete mode 100644 plugins/CurrencyRates/QuotesChart/app.config delete mode 100644 plugins/CurrencyRates/QuotesChart/bin/x32/QuotesChart.exe delete mode 100644 plugins/CurrencyRates/QuotesChart/bin/x64/QuotesChart.exe delete mode 100644 plugins/CurrencyRates/QuotesChart/main.ico create mode 100644 plugins/CurrencyRates/res/Export currencyrates.ico delete mode 100644 plugins/CurrencyRates/res/Export quotes.ico create mode 100644 plugins/CurrencyRates/res/Import currencyrates.ico delete mode 100644 plugins/CurrencyRates/res/Import quotes.ico create mode 100644 plugins/CurrencyRates/res/currencyrate.ico delete mode 100644 plugins/CurrencyRates/res/quote.ico create mode 100644 plugins/CurrencyRates/src/CurrencyRateChart.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRateChart.h create mode 100644 plugins/CurrencyRates/src/CurrencyRateInfoDlg.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRateInfoDlg.h create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderBase.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderBase.h create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderCurrencyConverter.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderCurrencyConverter.h create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitor.h create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitorDbSettings.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitorDbSettings.h create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormatSpecificator.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormatSpecificator.h create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormater.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormater.h create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitorTendency.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviderVisitorTendency.h create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviders.cpp create mode 100644 plugins/CurrencyRates/src/CurrencyRatesProviders.h create mode 100644 plugins/CurrencyRates/src/ICurrencyRatesProvider.h delete mode 100644 plugins/CurrencyRates/src/IQuotesProvider.h delete mode 100644 plugins/CurrencyRates/src/QuoteChart.cpp delete mode 100644 plugins/CurrencyRates/src/QuoteChart.h delete mode 100644 plugins/CurrencyRates/src/QuoteInfoDlg.cpp delete mode 100644 plugins/CurrencyRates/src/QuoteInfoDlg.h delete mode 100644 plugins/CurrencyRates/src/QuotesProviderBase.cpp delete mode 100644 plugins/CurrencyRates/src/QuotesProviderBase.h delete mode 100644 plugins/CurrencyRates/src/QuotesProviderCurrencyConverter.cpp delete mode 100644 plugins/CurrencyRates/src/QuotesProviderCurrencyConverter.h delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitor.h delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitorDbSettings.cpp delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitorDbSettings.h delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitorFormatSpecificator.cpp delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitorFormatSpecificator.h delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitorFormater.cpp delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitorFormater.h delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitorTendency.cpp delete mode 100644 plugins/CurrencyRates/src/QuotesProviderVisitorTendency.h delete mode 100644 plugins/CurrencyRates/src/QuotesProviders.cpp delete mode 100644 plugins/CurrencyRates/src/QuotesProviders.h diff --git a/plugins/CurrencyRates/CurrencyRatesChart/CurrencyRatesChart.csproj b/plugins/CurrencyRates/CurrencyRatesChart/CurrencyRatesChart.csproj new file mode 100644 index 0000000000..d58b687ce4 --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/CurrencyRatesChart.csproj @@ -0,0 +1,124 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {C255CA56-D05E-4389-A32E-CA3EBE412684} + WinExe + Properties + CurrencyRatesChart + CurrencyRatesChart + v4.0 + 512 + + + + x86 + true + full + false + bin\x32\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\x32\Release\ + TRACE + prompt + 4 + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + bin\Debug\CurrencyRatesChart.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + bin\Release\CurrencyRatesChart.exe.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + + + main.ico + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + \ No newline at end of file diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Form1.Designer.cs b/plugins/CurrencyRates/CurrencyRatesChart/Form1.Designer.cs new file mode 100644 index 0000000000..f00dc61cf4 --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Form1.Designer.cs @@ -0,0 +1,123 @@ +namespace CurrencyRatesChart +{ + partial class FormMirandaCurrencyRatesChart + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMirandaCurrencyRatesChart)); + this.chartCurrencyRates = new System.Windows.Forms.DataVisualization.Charting.Chart(); + this.label1 = new System.Windows.Forms.Label(); + this.dateFrom = new System.Windows.Forms.DateTimePicker(); + this.dateTo = new System.Windows.Forms.DateTimePicker(); + this.label2 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.chartCurrencyRates)).BeginInit(); + this.SuspendLayout(); + // + // chartCurrencyRates + // + this.chartCurrencyRates.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + chartArea1.Name = "ChartArea1"; + this.chartCurrencyRates.ChartAreas.Add(chartArea1); + legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Bottom; + legend1.Name = "Legend1"; + this.chartCurrencyRates.Legends.Add(legend1); + this.chartCurrencyRates.Location = new System.Drawing.Point(2, 45); + this.chartCurrencyRates.Name = "chartCurrencyRates"; + this.chartCurrencyRates.Size = new System.Drawing.Size(423, 433); + this.chartCurrencyRates.TabIndex = 0; + this.chartCurrencyRates.Text = "chart1"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(-1, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(30, 13); + this.label1.TabIndex = 1; + this.label1.Text = "From"; + // + // dateFrom + // + this.dateFrom.Format = System.Windows.Forms.DateTimePickerFormat.Short; + this.dateFrom.Location = new System.Drawing.Point(35, 9); + this.dateFrom.Name = "dateFrom"; + this.dateFrom.Size = new System.Drawing.Size(98, 20); + this.dateFrom.TabIndex = 2; + this.dateFrom.ValueChanged += new System.EventHandler(this.dateFrom_ValueChanged); + // + // dateTo + // + this.dateTo.Format = System.Windows.Forms.DateTimePickerFormat.Short; + this.dateTo.Location = new System.Drawing.Point(177, 10); + this.dateTo.Name = "dateTo"; + this.dateTo.Size = new System.Drawing.Size(98, 20); + this.dateTo.TabIndex = 4; + this.dateTo.ValueChanged += new System.EventHandler(this.dateTo_ValueChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(151, 16); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(20, 13); + this.label2.TabIndex = 3; + this.label2.Text = "To"; + // + // FormMirandaCurrencyRatesChart + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(425, 477); + this.Controls.Add(this.dateTo); + this.Controls.Add(this.label2); + this.Controls.Add(this.dateFrom); + this.Controls.Add(this.label1); + this.Controls.Add(this.chartCurrencyRates); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FormMirandaCurrencyRatesChart"; + this.Text = "Miranda CurrencyRates Chart"; + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.chartCurrencyRates)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataVisualization.Charting.Chart chartCurrencyRates; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DateTimePicker dateFrom; + private System.Windows.Forms.DateTimePicker dateTo; + private System.Windows.Forms.Label label2; + } +} + diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Form1.cs b/plugins/CurrencyRates/CurrencyRatesChart/Form1.cs new file mode 100644 index 0000000000..d26457e39f --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Form1.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using Microsoft.VisualBasic.FileIO; +using System.Runtime.InteropServices; + +namespace CurrencyRatesChart +{ + public partial class FormMirandaCurrencyRatesChart : Form + { + public FormMirandaCurrencyRatesChart() + { + InitializeComponent(); + } + + private void Form1_Load(object sender, EventArgs e) + { + string[] cmd_line_args = Environment.GetCommandLineArgs(); + + for (int i = 1; i < cmd_line_args.Length; ++i) + { + string data_file = cmd_line_args[i]; + AddDataFromFile(data_file); + } + } + + private void dateFrom_ValueChanged(object sender, EventArgs e) + { + if (dateFrom.Value < dateTo.Value) + { + chartCurrencyRates.ChartAreas[0].AxisX.Minimum = dateFrom.Value.ToOADate(); + chartCurrencyRates.Invalidate(); + } + } + + private void dateTo_ValueChanged(object sender, EventArgs e) + { + if (dateTo.Value > dateFrom.Value) + { + chartCurrencyRates.ChartAreas[0].AxisX.Maximum = dateTo.Value.ToOADate(); + chartCurrencyRates.Invalidate(); + } + } + + int WM_COPYDATA = 0x4A; + + public struct COPYDATASTRUCT + { + public IntPtr dwData; + public int cbData; + [MarshalAs(UnmanagedType.LPWStr)] + public String lpData; + } + + protected override void WndProc(ref Message msg) + { + if (msg.Msg == WM_COPYDATA) + { + COPYDATASTRUCT cp = (COPYDATASTRUCT)Marshal.PtrToStructure(msg.LParam, typeof(COPYDATASTRUCT)); + + if (/**(cp.dwData) == 0x1945 && */cp.lpData != null) + { + AddDataFromFile(cp.lpData); + } + + } + base.WndProc(ref msg); + } + + private void AddDataFromFile(string data_file) + { + using (TextFieldParser parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(data_file)) + { + parser.TrimWhiteSpace = true; + parser.TextFieldType = FieldType.Delimited; + parser.SetDelimiters("\t"); + + System.Windows.Forms.DataVisualization.Charting.Series series = null; + while (true) + { + string[] parts = parser.ReadFields(); + if (parts == null) + { + break; + } + + if (parts.Length >= 3) + { + string name = parts[0]; + string date = parts[1]; + string value = parts[2]; + + if (series == null) + { + if (chartCurrencyRates.Series.FindByName(name) == null) + { + chartCurrencyRates.Series.Add(name); + series = chartCurrencyRates.Series[name]; + series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + } + else + { + break; + } + } + + DateTime dt; + double d; + if (Double.TryParse(value, out d) && DateTime.TryParse(date, out dt)) + { + series.Points.AddXY(dt, d); + + if (!dateMin.HasValue) + { + dateMin = new DateTime(); + dateMin = dt; + } + else if (dt < dateMin) + { + dateMin = dt; + } + + if (!dateMax.HasValue) + { + dateMax = new DateTime(); + dateMax = dt; + } + else if (dt > dateMax) + { + dateMax = dt; + } + } + } + } + } + + if (dateMin.HasValue && dateMax.HasValue) + { + chartCurrencyRates.ChartAreas[0].AxisX.Minimum = dateMin.Value.ToOADate(); + chartCurrencyRates.ChartAreas[0].AxisX.Maximum = dateMax.Value.ToOADate(); + + dateFrom.Value = dateMin.Value; + dateTo.Value = dateMax.Value; + } + } + + private DateTime? dateMin = null; + private DateTime? dateMax = null; + } +} diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Form1.resx b/plugins/CurrencyRates/CurrencyRatesChart/Form1.resx new file mode 100644 index 0000000000..3d63dcc355 --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Form1.resx @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAIAQ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAFgAAABwAAAAgAAAAIAAAABwAAAAWAAAADgAA + AAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAASAAAAJgAAADQAAABAAAAARAAAAEgAAABIAAAARAAA + AEAAAAA0AAAAJgAAABIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAOAx80NAZKcmoUdaazH47D4ymh0vktrNf/L7DZ/yyo + 1v8lmMzzHYa72Q1ciJsFNldwAAAAPgAAACoAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFAdCb1QSgLO/MKjW71XI6/9l1PT/b9n4/3Xb + +v923Pr/cdn5/2nV9v9gz/L/Rbji+yecy+kIW42jAx0yWAAAADAAAAAUAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQjPBoQcqKPKqPS81jR9P9j2fr/TtX6/zXQ + +f8eyvn/Esf4/wzE+P8Vxvj/Jcj4/zjM+P9R0fn/W9P4/z+75/8fkMXnBjVUcAMIDD4AAAAUAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFK0sWD2+mhzO14fdS0fb/RdP6/ybM + +f8PyPn/B8f5/wbH+f8Gx/n/Bsb5/wbE+P8Hw/j/CsL3/xXD9/8qx/j/Rcz3/1HN8/9RoLflO01JgQAA + ADAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA14roMosuD3RNH6/ynN + +f8Kx/n/Bcj6/wTK+v8Eyvr/BMr7/wTK+v8Fyfr/Bcj6/wbG+f8GxPj/B8L3/wjA9/8ryvb/ecfE/8uj + Q/+ogjLxMicYZAAAACoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKW5g+Gp7R7zTJ + 9P8iyvn/Ccf5/wXJ+v8Ey/r/BMz7/wPN+/8Dzfv/A837/wTM+/8Eyvr/Bcj5/wbG+f8Hw/j/F8j4/2LC + wP+4mzT/4a40/9anNf9+YizHJBwWUAAAABIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACViSEgyG + wLElw/H/I8r5/wnG+f8FyPr/BMv7/wPN+/8C0Pz/AtD8/wLR/f8C0Pz/A8/8/wPN+/8Eyvr/Bcj6/x7N + +P9hxcL/xZMY/9yiGP/epR//4Kwv/7uPKvtkTSSXAAAAJgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAJcrBEEqDV6yPI+P8Sxvn/Bcf5/wXK+v8Dzfv/A8/8/wLS/f8B0/3/AdP9/wHS/f8C0fz/A8/8/wTM + +/8Rzfr/YsjE/7ecMP/doxf/3aMY/92jGf/epyT/1qMq/5ZzLd8AAAA0AAAADgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAyEv5kYtef/GMf4/wnF+P8FyPr/BMv6/wPO/P8C0fz/AdP9/wHV/v8A1v7/AdT+/wHS + /f8C0Pz/GdT7/2PMxf/JnBT/4asU/+CoFf/epRb/3aMX/92kG//eqCj/v5Aj/0U3KWoAAAAWAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAADo3J1xi+8P8Rxfj/BsX5/wXI+v8Ey/v/A8/8/wLR/f8B1P7/ANb+/wDX + //8A1v7/AdP9/wzT/f9lz8b/vqgs/+ayEf/lrxL/4qwT/+CoFf/epBf/3aMY/96oJP/RnSD/bFMvnQAA + ABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOmdD3GMH0/wzD+P8Gxfj/Bcj6/wTL+v8Dzvz/AtH8/wHU + /f8B1f7/ANb+/wTV/v8d2v3/ZdLG/9CqDv/svAz/67kN/+m1D//msBH/46wT/+CnFv/epBf/3qYf/9ij + I/+IZiS5AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2h1f8Ywvb/CcL4/wfE+P8FyPr/BMr6/wPO + +/8C0Pz/AtL9/wzW/f844/7/Tub9/17Gyv/Fujz/8sQI//HCCf/uvgv/7LoN/+i0EP/lrxL/4aoU/9+m + Fv/dpB3/3KYl/5hxGb0AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqbY/xnD9/8Iwff/B8P4/wfG + +f8Qzfr/JNf8/zPZ+v9IwOb/SaLU/yFZs/8MGZH/JCqJ/7+rXP/4zRD/9cgH//LDCf/vvwv/6rgO/+ey + Ef/jrBP/4KgV/96lHf/eqCX/oXYTuwAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoNT9HcP2/w7C + 9/8izvn/R9/8/0nW9f81isj/Jlmy/xQ1sf8LGaz/DBu0/w0ct/8NHLD/Q0WF//zaOv/4zQj/9McH//DB + Cf/rug3/6LQP/+OtE//gqRX/3qYe/9umJf+Ych25AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACql + 1PNNze//UbLc/zqOz/8UOKv/CRel/woavf8KG8f/ChvH/wobx/8KG8T/CxvB/wwcvP8MGrH/mItl//nW + KP/2yQb/8sMJ/+28DP/ptQ//5K4S/+GqFP/fqCH/1aEj/4ZlLKcAAAAOAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAALWeswTBar/8ZL7D/Cxqz/woaw/8JG8r/CRrN/wgaz/8IG9D/CRvP/wkbzP8KG8n/ChvD/wwc + vv8qMZj/y7Zb//bLDv/ywwn/7bwM/+m1D//krhL/4aoW/+CqJv/PnCH/clk3gwAAAAYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAOGpNcGyiw8x4txv8NHsn/CBrP/wga0/8HGtf/BhnZ/wYa2v8GGtn/BxrW/wga + 0v8JGsz/ChvG/wsauv9MTIP/9tU///HDD//rug3/6LQP/+OtE//hqxz/3akq/7CGKPdLPDIqAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZlyoVI6vRJTTN/xUl0P8IGtX/Bhna/wYZ3/8FGeH/BRni/wUZ + 4f8GGd3/BxnZ/wga0v8JGsz/ChvD/woZsv+ajGb/9Msq/+q4Dv/nshH/460V/+KuJv/Woyv/mHQwxwAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoXnWgiMcb7JTXZ/wsd3P8FGeL/BBjo/wMY + 6/8DGOv/Axjq/wQZ5v8FGeD/BxnZ/wga0v8KG8n/CxvB/ywzmP/IsV7/67oa/+WvEv/iryL/4a8x/7GI + Lel6XzNEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxecFBknuM0wP9r/IDHk/wcb + 5/8DGO3/Ahfx/wIY8v8CGPD/Axjr/wQY5v8GGd3/BxnW/wkazP8KG8T/Cxu1/0xNgv/zzkH/5bIf/+S0 + OP/WpjH/i2w4l2RQPQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRemLCEw + xMs/Tun/L0Dv/w0h8/8CGff/ARf5/wEX9v8CF/D/Axjq/wUZ4f8GGdn/CRvP/wobx/8MHLz/EB+u/6OV + dv/vy17/1Kg/+515OLkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAALGKYEER6tPik4zuVJWO7/QVL3/yY4+/8HHf3/ARj5/wIX8v8DGOv/BRni/wYa2v8IG9D/DR3I/yAv + wv87R8P/ZWmt/868e/+jgT67fGJCKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAACBauJB8uxKtDUuX1WWf2/1tp+/9EVPn/L0Hz/yg67v8mOOX/Lj7f/z5M + 2v9SXtf/XmjR/1Rexf0yPaXVTEt5hwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBesGBMivmgkMsrPQE/i/Vto8P9qdvL/b3rx/3B7 + 7f9teOb/Ym3b/1Jczf8zPrHnIy+ipQ0ZjDAPGooIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIF6s8BxWveAUV + tZ0FFbalBRWzqQYWq6MJF6KHCxicXg0ZlRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////+AB///AAP//AAA//gAAH/wA + AA/8AAAP+AAAB/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA + AAf4AAAP+AAAD/wAAB/8AAA//wAA//+AAP//8Af/////////////////KAAAABAAAAAgAAAAAQAgAAAA + AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAcAAAALgAA + ADQAAAAuAAAAHAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUuTR4bfqqTQK3W5U/A + 5/1Qw+n/RbLd8yaJtL0EME1YAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxaiS40rtndSdL4/ybN + +f8PyPn/C8X4/xzG+P87zPj/Prrm+TJkc4UAAAAWAAAAAAAAAAAAAAAAAAAAAAlTihAkq9rbJsz5/wbJ + +v8Ey/v/BMz7/wXK+v8Gxvn/C8P4/3C7rP/Lnzj7Tj0faAAAAAYAAAAAAAAAAAAAAAAOjsZ8H8f2/wbI + +v8Dzfv/AtH8/wLS/f8Dz/z/CMv6/2a9rP/Xnxj/3qci/6uCKdsAAAAcAAAAAAAAAAAAAAAAFKXb2w7F + +P8Fyvr/AtD8/wHU/v8A1v7/BNL9/2jGrP/dqhP/4KgV/92kGP/TnyT/TTwlTgAAAAAAAAAAAAAAABOv + 5P0IxPj/Bcn6/wPP/P8E1P3/I93+/2nLsv/ouwv/67oN/+WwEv/fpxb/3KUh/3tcGmwAAAAAAAAAAAAA + AAAWs+b/EMX4/yrS+f8spdz/LGzG/xEqrP9NTob/+M8W//HCCf/ptg//4aoU/92mIf+KZhVoAAAAAAAA + AAAAAAAANo/J7SxixP8MIbf/CRrI/wkby/8KG8b/Cxu8/6KSYP/0xwn/67kO/+OsFP/ZpCP/dlouTgAA + AAAAAAAAAAAAABYjqJMZKcv/BxrU/wYZ3P8GGd7/BxnY/wkazP8bJ63/3bw3/+m2D//irRr/wZMr70I0 + LAwAAAAAAAAAAAAAAAAKF50eJDTN8Q4g4v8DGOz/Axju/wQY5v8HGdj/ChvG/1NTi//quiP/364v/5p3 + MnQAAAAAAAAAAAAAAAAAAAAAAAAAABopu044SOb5HjH3/wIZ+f8DGO7/Bhne/woby/8eLLz/saF//7GM + PacAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGSi+OjxK38tPXfL/TFvx/0xa5v9RXdb/RlC94zY8 + k2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxauLgUVtlAGFa9SChefOA0Z + lQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA+A8AAPAHAADgAwAAwAEAAMABAADAAQAAwAEAAMAB + AADAAQAAwAEAAMADAADgBwAA8A8AAPwfAAD//wAA + + + \ No newline at end of file diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Program.cs b/plugins/CurrencyRates/CurrencyRatesChart/Program.cs new file mode 100644 index 0000000000..732fd0fc01 --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace CurrencyRatesChart +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FormMirandaCurrencyRatesChart()); + } + } +} diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Properties/AssemblyInfo.cs b/plugins/CurrencyRates/CurrencyRatesChart/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..765def9d57 --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CurrencyRatesChart")] +[assembly: AssemblyDescription("Chart Application for Miranda CurrencyRates plugin")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Dioksin")] +[assembly: AssemblyProduct("Miranda")] +[assembly: AssemblyCopyright("Don't worry!")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("9b8250c7-ffbe-4f8a-985e-2e562e253dc4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.0.1.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Properties/Resources.Designer.cs b/plugins/CurrencyRates/CurrencyRatesChart/Properties/Resources.Designer.cs new file mode 100644 index 0000000000..141d83b862 --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CurrencyRatesChart.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CurrencyRatesChart.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Properties/Resources.resx b/plugins/CurrencyRates/CurrencyRatesChart/Properties/Resources.resx new file mode 100644 index 0000000000..af7dbebbac --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Properties/Settings.Designer.cs b/plugins/CurrencyRates/CurrencyRatesChart/Properties/Settings.Designer.cs new file mode 100644 index 0000000000..b34f77d1b3 --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CurrencyRatesChart.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/plugins/CurrencyRates/CurrencyRatesChart/Properties/Settings.settings b/plugins/CurrencyRates/CurrencyRatesChart/Properties/Settings.settings new file mode 100644 index 0000000000..39645652af --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugins/CurrencyRates/CurrencyRatesChart/app.config b/plugins/CurrencyRates/CurrencyRatesChart/app.config new file mode 100644 index 0000000000..e365603337 --- /dev/null +++ b/plugins/CurrencyRates/CurrencyRatesChart/app.config @@ -0,0 +1,3 @@ + + + diff --git a/plugins/CurrencyRates/CurrencyRatesChart/main.ico b/plugins/CurrencyRates/CurrencyRatesChart/main.ico new file mode 100644 index 0000000000..da85d1f7c6 Binary files /dev/null and b/plugins/CurrencyRates/CurrencyRatesChart/main.ico differ diff --git a/plugins/CurrencyRates/QuotesChart/Form1.Designer.cs b/plugins/CurrencyRates/QuotesChart/Form1.Designer.cs deleted file mode 100644 index 39c45d2e6d..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Form1.Designer.cs +++ /dev/null @@ -1,123 +0,0 @@ -namespace QuotesChart -{ - partial class FormMirandaQuotesChart - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); - System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMirandaQuotesChart)); - this.chartQuotes = new System.Windows.Forms.DataVisualization.Charting.Chart(); - this.label1 = new System.Windows.Forms.Label(); - this.dateFrom = new System.Windows.Forms.DateTimePicker(); - this.dateTo = new System.Windows.Forms.DateTimePicker(); - this.label2 = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.chartQuotes)).BeginInit(); - this.SuspendLayout(); - // - // chartQuotes - // - this.chartQuotes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - chartArea1.Name = "ChartArea1"; - this.chartQuotes.ChartAreas.Add(chartArea1); - legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Bottom; - legend1.Name = "Legend1"; - this.chartQuotes.Legends.Add(legend1); - this.chartQuotes.Location = new System.Drawing.Point(2, 45); - this.chartQuotes.Name = "chartQuotes"; - this.chartQuotes.Size = new System.Drawing.Size(423, 433); - this.chartQuotes.TabIndex = 0; - this.chartQuotes.Text = "chart1"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(-1, 16); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(30, 13); - this.label1.TabIndex = 1; - this.label1.Text = "From"; - // - // dateFrom - // - this.dateFrom.Format = System.Windows.Forms.DateTimePickerFormat.Short; - this.dateFrom.Location = new System.Drawing.Point(35, 9); - this.dateFrom.Name = "dateFrom"; - this.dateFrom.Size = new System.Drawing.Size(98, 20); - this.dateFrom.TabIndex = 2; - this.dateFrom.ValueChanged += new System.EventHandler(this.dateFrom_ValueChanged); - // - // dateTo - // - this.dateTo.Format = System.Windows.Forms.DateTimePickerFormat.Short; - this.dateTo.Location = new System.Drawing.Point(177, 10); - this.dateTo.Name = "dateTo"; - this.dateTo.Size = new System.Drawing.Size(98, 20); - this.dateTo.TabIndex = 4; - this.dateTo.ValueChanged += new System.EventHandler(this.dateTo_ValueChanged); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(151, 16); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(20, 13); - this.label2.TabIndex = 3; - this.label2.Text = "To"; - // - // FormMirandaQuotesChart - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(425, 477); - this.Controls.Add(this.dateTo); - this.Controls.Add(this.label2); - this.Controls.Add(this.dateFrom); - this.Controls.Add(this.label1); - this.Controls.Add(this.chartQuotes); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "FormMirandaQuotesChart"; - this.Text = "Miranda Quotes Chart"; - this.Load += new System.EventHandler(this.Form1_Load); - ((System.ComponentModel.ISupportInitialize)(this.chartQuotes)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.DataVisualization.Charting.Chart chartQuotes; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.DateTimePicker dateFrom; - private System.Windows.Forms.DateTimePicker dateTo; - private System.Windows.Forms.Label label2; - } -} - diff --git a/plugins/CurrencyRates/QuotesChart/Form1.cs b/plugins/CurrencyRates/QuotesChart/Form1.cs deleted file mode 100644 index b6295d4b56..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Form1.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using Microsoft.VisualBasic.FileIO; -using System.Runtime.InteropServices; - -namespace QuotesChart -{ - public partial class FormMirandaQuotesChart : Form - { - public FormMirandaQuotesChart() - { - InitializeComponent(); - } - - private void Form1_Load(object sender, EventArgs e) - { - string[] cmd_line_args = Environment.GetCommandLineArgs(); - - for (int i = 1; i < cmd_line_args.Length; ++i) - { - string data_file = cmd_line_args[i]; - AddDataFromFile(data_file); - } - } - - private void dateFrom_ValueChanged(object sender, EventArgs e) - { - if (dateFrom.Value < dateTo.Value) - { - chartQuotes.ChartAreas[0].AxisX.Minimum = dateFrom.Value.ToOADate(); - chartQuotes.Invalidate(); - } - } - - private void dateTo_ValueChanged(object sender, EventArgs e) - { - if (dateTo.Value > dateFrom.Value) - { - chartQuotes.ChartAreas[0].AxisX.Maximum = dateTo.Value.ToOADate(); - chartQuotes.Invalidate(); - } - } - - int WM_COPYDATA = 0x4A; - - public struct COPYDATASTRUCT - { - public IntPtr dwData; - public int cbData; - [MarshalAs(UnmanagedType.LPWStr)] - public String lpData; - } - - protected override void WndProc(ref Message msg) - { - if (msg.Msg == WM_COPYDATA) - { - COPYDATASTRUCT cp = (COPYDATASTRUCT)Marshal.PtrToStructure(msg.LParam, typeof(COPYDATASTRUCT)); - - if (/**(cp.dwData) == 0x1945 && */cp.lpData != null) - { - AddDataFromFile(cp.lpData); - } - - } - base.WndProc(ref msg); - } - - private void AddDataFromFile(string data_file) - { - using (TextFieldParser parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(data_file)) - { - parser.TrimWhiteSpace = true; - parser.TextFieldType = FieldType.Delimited; - parser.SetDelimiters("\t"); - - System.Windows.Forms.DataVisualization.Charting.Series series = null; - while (true) - { - string[] parts = parser.ReadFields(); - if (parts == null) - { - break; - } - - if (parts.Length >= 3) - { - string name = parts[0]; - string date = parts[1]; - string value = parts[2]; - - if (series == null) - { - if (chartQuotes.Series.FindByName(name) == null) - { - chartQuotes.Series.Add(name); - series = chartQuotes.Series[name]; - series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; - } - else - { - break; - } - } - - DateTime dt; - double d; - if (Double.TryParse(value, out d) && DateTime.TryParse(date, out dt)) - { - series.Points.AddXY(dt, d); - - if (!dateMin.HasValue) - { - dateMin = new DateTime(); - dateMin = dt; - } - else if (dt < dateMin) - { - dateMin = dt; - } - - if (!dateMax.HasValue) - { - dateMax = new DateTime(); - dateMax = dt; - } - else if (dt > dateMax) - { - dateMax = dt; - } - } - } - } - } - - if (dateMin.HasValue && dateMax.HasValue) - { - chartQuotes.ChartAreas[0].AxisX.Minimum = dateMin.Value.ToOADate(); - chartQuotes.ChartAreas[0].AxisX.Maximum = dateMax.Value.ToOADate(); - - dateFrom.Value = dateMin.Value; - dateTo.Value = dateMax.Value; - } - } - - private DateTime? dateMin = null; - private DateTime? dateMax = null; - } -} diff --git a/plugins/CurrencyRates/QuotesChart/Form1.resx b/plugins/CurrencyRates/QuotesChart/Form1.resx deleted file mode 100644 index 3d63dcc355..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Form1.resx +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAIAICAAAAEAIACoEAAAJgAAABAQAAABACAAaAQAAM4QAAAoAAAAIAAAAEAAAAABACAAAAAAAIAQ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAAAAFgAAABwAAAAgAAAAIAAAABwAAAAWAAAADgAA - AAYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAASAAAAJgAAADQAAABAAAAARAAAAEgAAABIAAAARAAA - AEAAAAA0AAAAJgAAABIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAOAx80NAZKcmoUdaazH47D4ymh0vktrNf/L7DZ/yyo - 1v8lmMzzHYa72Q1ciJsFNldwAAAAPgAAACoAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFAdCb1QSgLO/MKjW71XI6/9l1PT/b9n4/3Xb - +v923Pr/cdn5/2nV9v9gz/L/Rbji+yecy+kIW42jAx0yWAAAADAAAAAUAAAAAgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQjPBoQcqKPKqPS81jR9P9j2fr/TtX6/zXQ - +f8eyvn/Esf4/wzE+P8Vxvj/Jcj4/zjM+P9R0fn/W9P4/z+75/8fkMXnBjVUcAMIDD4AAAAUAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFK0sWD2+mhzO14fdS0fb/RdP6/ybM - +f8PyPn/B8f5/wbH+f8Gx/n/Bsb5/wbE+P8Hw/j/CsL3/xXD9/8qx/j/Rcz3/1HN8/9RoLflO01JgQAA - ADAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA14roMosuD3RNH6/ynN - +f8Kx/n/Bcj6/wTK+v8Eyvr/BMr7/wTK+v8Fyfr/Bcj6/wbG+f8GxPj/B8L3/wjA9/8ryvb/ecfE/8uj - Q/+ogjLxMicYZAAAACoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKW5g+Gp7R7zTJ - 9P8iyvn/Ccf5/wXJ+v8Ey/r/BMz7/wPN+/8Dzfv/A837/wTM+/8Eyvr/Bcj5/wbG+f8Hw/j/F8j4/2LC - wP+4mzT/4a40/9anNf9+YizHJBwWUAAAABIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACViSEgyG - wLElw/H/I8r5/wnG+f8FyPr/BMv7/wPN+/8C0Pz/AtD8/wLR/f8C0Pz/A8/8/wPN+/8Eyvr/Bcj6/x7N - +P9hxcL/xZMY/9yiGP/epR//4Kwv/7uPKvtkTSSXAAAAJgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAJcrBEEqDV6yPI+P8Sxvn/Bcf5/wXK+v8Dzfv/A8/8/wLS/f8B0/3/AdP9/wHS/f8C0fz/A8/8/wTM - +/8Rzfr/YsjE/7ecMP/doxf/3aMY/92jGf/epyT/1qMq/5ZzLd8AAAA0AAAADgAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAyEv5kYtef/GMf4/wnF+P8FyPr/BMv6/wPO/P8C0fz/AdP9/wHV/v8A1v7/AdT+/wHS - /f8C0Pz/GdT7/2PMxf/JnBT/4asU/+CoFf/epRb/3aMX/92kG//eqCj/v5Aj/0U3KWoAAAAWAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAADo3J1xi+8P8Rxfj/BsX5/wXI+v8Ey/v/A8/8/wLR/f8B1P7/ANb+/wDX - //8A1v7/AdP9/wzT/f9lz8b/vqgs/+ayEf/lrxL/4qwT/+CoFf/epBf/3aMY/96oJP/RnSD/bFMvnQAA - ABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOmdD3GMH0/wzD+P8Gxfj/Bcj6/wTL+v8Dzvz/AtH8/wHU - /f8B1f7/ANb+/wTV/v8d2v3/ZdLG/9CqDv/svAz/67kN/+m1D//msBH/46wT/+CnFv/epBf/3qYf/9ij - I/+IZiS5AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2h1f8Ywvb/CcL4/wfE+P8FyPr/BMr6/wPO - +/8C0Pz/AtL9/wzW/f844/7/Tub9/17Gyv/Fujz/8sQI//HCCf/uvgv/7LoN/+i0EP/lrxL/4aoU/9+m - Fv/dpB3/3KYl/5hxGb0AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqbY/xnD9/8Iwff/B8P4/wfG - +f8Qzfr/JNf8/zPZ+v9IwOb/SaLU/yFZs/8MGZH/JCqJ/7+rXP/4zRD/9cgH//LDCf/vvwv/6rgO/+ey - Ef/jrBP/4KgV/96lHf/eqCX/oXYTuwAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoNT9HcP2/w7C - 9/8izvn/R9/8/0nW9f81isj/Jlmy/xQ1sf8LGaz/DBu0/w0ct/8NHLD/Q0WF//zaOv/4zQj/9McH//DB - Cf/rug3/6LQP/+OtE//gqRX/3qYe/9umJf+Ych25AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACql - 1PNNze//UbLc/zqOz/8UOKv/CRel/woavf8KG8f/ChvH/wobx/8KG8T/CxvB/wwcvP8MGrH/mItl//nW - KP/2yQb/8sMJ/+28DP/ptQ//5K4S/+GqFP/fqCH/1aEj/4ZlLKcAAAAOAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAALWeswTBar/8ZL7D/Cxqz/woaw/8JG8r/CRrN/wgaz/8IG9D/CRvP/wkbzP8KG8n/ChvD/wwc - vv8qMZj/y7Zb//bLDv/ywwn/7bwM/+m1D//krhL/4aoW/+CqJv/PnCH/clk3gwAAAAYAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAOGpNcGyiw8x4txv8NHsn/CBrP/wga0/8HGtf/BhnZ/wYa2v8GGtn/BxrW/wga - 0v8JGsz/ChvG/wsauv9MTIP/9tU///HDD//rug3/6LQP/+OtE//hqxz/3akq/7CGKPdLPDIqAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZlyoVI6vRJTTN/xUl0P8IGtX/Bhna/wYZ3/8FGeH/BRni/wUZ - 4f8GGd3/BxnZ/wga0v8JGsz/ChvD/woZsv+ajGb/9Msq/+q4Dv/nshH/460V/+KuJv/Woyv/mHQwxwAA - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoXnWgiMcb7JTXZ/wsd3P8FGeL/BBjo/wMY - 6/8DGOv/Axjq/wQZ5v8FGeD/BxnZ/wga0v8KG8n/CxvB/ywzmP/IsV7/67oa/+WvEv/iryL/4a8x/7GI - Lel6XzNEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxecFBknuM0wP9r/IDHk/wcb - 5/8DGO3/Ahfx/wIY8v8CGPD/Axjr/wQY5v8GGd3/BxnW/wkazP8KG8T/Cxu1/0xNgv/zzkH/5bIf/+S0 - OP/WpjH/i2w4l2RQPQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRemLCEw - xMs/Tun/L0Dv/w0h8/8CGff/ARf5/wEX9v8CF/D/Axjq/wUZ4f8GGdn/CRvP/wobx/8MHLz/EB+u/6OV - dv/vy17/1Kg/+515OLkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAALGKYEER6tPik4zuVJWO7/QVL3/yY4+/8HHf3/ARj5/wIX8v8DGOv/BRni/wYa2v8IG9D/DR3I/yAv - wv87R8P/ZWmt/868e/+jgT67fGJCKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAACBauJB8uxKtDUuX1WWf2/1tp+/9EVPn/L0Hz/yg67v8mOOX/Lj7f/z5M - 2v9SXtf/XmjR/1Rexf0yPaXVTEt5hwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBesGBMivmgkMsrPQE/i/Vto8P9qdvL/b3rx/3B7 - 7f9teOb/Ym3b/1Jczf8zPrHnIy+ipQ0ZjDAPGooIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIF6s8BxWveAUV - tZ0FFbalBRWzqQYWq6MJF6KHCxicXg0ZlRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////+AB///AAP//AAA//gAAH/wA - AA/8AAAP+AAAB/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AA - AAf4AAAP+AAAD/wAAB/8AAA//wAA//+AAP//8Af/////////////////KAAAABAAAAAgAAAAAQAgAAAA - AABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAcAAAALgAA - ADQAAAAuAAAAHAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUuTR4bfqqTQK3W5U/A - 5/1Qw+n/RbLd8yaJtL0EME1YAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxaiS40rtndSdL4/ybN - +f8PyPn/C8X4/xzG+P87zPj/Prrm+TJkc4UAAAAWAAAAAAAAAAAAAAAAAAAAAAlTihAkq9rbJsz5/wbJ - +v8Ey/v/BMz7/wXK+v8Gxvn/C8P4/3C7rP/Lnzj7Tj0faAAAAAYAAAAAAAAAAAAAAAAOjsZ8H8f2/wbI - +v8Dzfv/AtH8/wLS/f8Dz/z/CMv6/2a9rP/Xnxj/3qci/6uCKdsAAAAcAAAAAAAAAAAAAAAAFKXb2w7F - +P8Fyvr/AtD8/wHU/v8A1v7/BNL9/2jGrP/dqhP/4KgV/92kGP/TnyT/TTwlTgAAAAAAAAAAAAAAABOv - 5P0IxPj/Bcn6/wPP/P8E1P3/I93+/2nLsv/ouwv/67oN/+WwEv/fpxb/3KUh/3tcGmwAAAAAAAAAAAAA - AAAWs+b/EMX4/yrS+f8spdz/LGzG/xEqrP9NTob/+M8W//HCCf/ptg//4aoU/92mIf+KZhVoAAAAAAAA - AAAAAAAANo/J7SxixP8MIbf/CRrI/wkby/8KG8b/Cxu8/6KSYP/0xwn/67kO/+OsFP/ZpCP/dlouTgAA - AAAAAAAAAAAAABYjqJMZKcv/BxrU/wYZ3P8GGd7/BxnY/wkazP8bJ63/3bw3/+m2D//irRr/wZMr70I0 - LAwAAAAAAAAAAAAAAAAKF50eJDTN8Q4g4v8DGOz/Axju/wQY5v8HGdj/ChvG/1NTi//quiP/364v/5p3 - MnQAAAAAAAAAAAAAAAAAAAAAAAAAABopu044SOb5HjH3/wIZ+f8DGO7/Bhne/woby/8eLLz/saF//7GM - PacAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGSi+OjxK38tPXfL/TFvx/0xa5v9RXdb/RlC94zY8 - k2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxauLgUVtlAGFa9SChefOA0Z - lQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA+A8AAPAHAADgAwAAwAEAAMABAADAAQAAwAEAAMAB - AADAAQAAwAEAAMADAADgBwAA8A8AAPwfAAD//wAA - - - \ No newline at end of file diff --git a/plugins/CurrencyRates/QuotesChart/Program.cs b/plugins/CurrencyRates/QuotesChart/Program.cs deleted file mode 100644 index d2c79f5966..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Program.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; - -namespace QuotesChart -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main(string[] args) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new FormMirandaQuotesChart()); - } - } -} diff --git a/plugins/CurrencyRates/QuotesChart/Properties/AssemblyInfo.cs b/plugins/CurrencyRates/QuotesChart/Properties/AssemblyInfo.cs deleted file mode 100644 index c90728eff3..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("QuotesChart")] -[assembly: AssemblyDescription("Chart Application for Miranda Quotes plugin")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Dioksin")] -[assembly: AssemblyProduct("Miranda")] -[assembly: AssemblyCopyright("Don't worry!")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9b8250c7-ffbe-4f8a-985e-2e562e253dc4")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.0.1.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/plugins/CurrencyRates/QuotesChart/Properties/Resources.Designer.cs b/plugins/CurrencyRates/QuotesChart/Properties/Resources.Designer.cs deleted file mode 100644 index 0bef6c885c..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace QuotesChart.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuotesChart.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/plugins/CurrencyRates/QuotesChart/Properties/Resources.resx b/plugins/CurrencyRates/QuotesChart/Properties/Resources.resx deleted file mode 100644 index af7dbebbac..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/plugins/CurrencyRates/QuotesChart/Properties/Settings.Designer.cs b/plugins/CurrencyRates/QuotesChart/Properties/Settings.Designer.cs deleted file mode 100644 index 02c737069d..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace QuotesChart.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/plugins/CurrencyRates/QuotesChart/Properties/Settings.settings b/plugins/CurrencyRates/QuotesChart/Properties/Settings.settings deleted file mode 100644 index 39645652af..0000000000 --- a/plugins/CurrencyRates/QuotesChart/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/plugins/CurrencyRates/QuotesChart/QuotesChart.csproj b/plugins/CurrencyRates/QuotesChart/QuotesChart.csproj deleted file mode 100644 index a502da630a..0000000000 --- a/plugins/CurrencyRates/QuotesChart/QuotesChart.csproj +++ /dev/null @@ -1,124 +0,0 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {C255CA56-D05E-4389-A32E-CA3EBE412684} - WinExe - Properties - QuotesChart - QuotesChart - v4.0 - 512 - - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - x86 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - bin\Debug\QuotesChart.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - bin\Release\QuotesChart.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules - - - main.ico - - - - - - - - - - - - - - - - - Form - - - Form1.cs - - - - - Form1.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - \ No newline at end of file diff --git a/plugins/CurrencyRates/QuotesChart/app.config b/plugins/CurrencyRates/QuotesChart/app.config deleted file mode 100644 index e365603337..0000000000 --- a/plugins/CurrencyRates/QuotesChart/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/plugins/CurrencyRates/QuotesChart/bin/x32/QuotesChart.exe b/plugins/CurrencyRates/QuotesChart/bin/x32/QuotesChart.exe deleted file mode 100644 index 5a96cbbcfb..0000000000 Binary files a/plugins/CurrencyRates/QuotesChart/bin/x32/QuotesChart.exe and /dev/null differ diff --git a/plugins/CurrencyRates/QuotesChart/bin/x64/QuotesChart.exe b/plugins/CurrencyRates/QuotesChart/bin/x64/QuotesChart.exe deleted file mode 100644 index d85e08c0f1..0000000000 Binary files a/plugins/CurrencyRates/QuotesChart/bin/x64/QuotesChart.exe and /dev/null differ diff --git a/plugins/CurrencyRates/QuotesChart/main.ico b/plugins/CurrencyRates/QuotesChart/main.ico deleted file mode 100644 index da85d1f7c6..0000000000 Binary files a/plugins/CurrencyRates/QuotesChart/main.ico and /dev/null differ diff --git a/plugins/CurrencyRates/docs/Utility/cc.xml b/plugins/CurrencyRates/docs/Utility/cc.xml index 874d03e457..232d7d6488 100644 --- a/plugins/CurrencyRates/docs/Utility/cc.xml +++ b/plugins/CurrencyRates/docs/Utility/cc.xml @@ -7,512 +7,512 @@
Currencies - + AEDAEDUnited Arab Emirates Dirham (AED) - - + + AFNAFNAfghan Afghani (AFN) - - + + ALLALLAlbanian Lek (ALL) - - + + AMDAMDArmenian Dram (AMD) - - + + ANGANGNetherlands Antillean Gulden (ANG) - - + + AOAAOAAngolan Kwanza (AOA) - - + + ARSARSArgentine Peso (ARS) - - + + AUDAUDAustralian Dollar (AUD) - - + + AWGAWGAruban Florin (AWG) - - + + AZNAZNAzerbaijani Manat (AZN) - - + + BAMBAMBosnia-Herzegovina Convertible Mark (BAM) - - + + BBDBBDBarbadian Dollar (BBD) - - + + BDTBDTBangladeshi Taka (BDT) - - + + BGNBGNBulgarian Lev (BGN) - - + + BHDBHDBahraini Dinar (BHD) - - + + BIFBIFBurundian Franc (BIF) - - + + BMDBMDBermudan Dollar (BMD) - - + + BNDBNDBrunei Dollar (BND) - - + + BOBBOBBolivian Boliviano (BOB) - - + + BRLBRLBrazilian Real (BRL) - - + + BSDBSDBahamian Dollar (BSD) - - + + BTCBTCBitcoin (BTC) - - + + BTNBTNBhutanese Ngultrum (BTN) - - + + BWPBWPBotswana Pula (BWP) - - + + BYNBYNBelarusian Ruble (BYN) - - + + BYRBYRBelarusian Ruble (2000–2016) (BYR) - - + + BZDBZDBelize Dollar (BZD) - - + + CADCADCanadian Dollar (CAD) - - + + CDFCDFCongolese Franc (CDF) - - + + CHFCHFSwiss Franc (CHF) - - + + CLFCLFChilean Unit of Account (UF) (CLF) - - + + CLPCLPChilean Peso (CLP) - - + + CNHCNHCNH (CNH) - - + + CNYCNYChinese Yuan (CNY) - - + + COPCOPColombian Peso (COP) - - + + CRCCRCCosta Rican Colón (CRC) - - + + CUPCUPCuban Peso (CUP) - - + + CVECVECape Verdean Escudo (CVE) - - + + CZKCZKCzech Koruna (CZK) - - + + DEMDEMGerman Mark (DEM) - - + + DJFDJFDjiboutian Franc (DJF) - - + + DKKDKKDanish Krone (DKK) - - + + DOPDOPDominican Peso (DOP) - - + + DZDDZDAlgerian Dinar (DZD) - - + + EGPEGPEgyptian Pound (EGP) - - + + ERNERNEritrean Nakfa (ERN) - - + + ETBETBEthiopian Birr (ETB) - - + + EUREUREuro (EUR) - - + + FIMFIMFinnish Markka (FIM) - - + + FJDFJDFijian Dollar (FJD) - - + + FKPFKPFalkland Islands Pound (FKP) - - + + FRFFRFFrench Franc (FRF) - - + + GBPGBPBritish Pound (GBP) - - + + GELGELGeorgian Lari (GEL) - - + + GHSGHSGhanaian Cedi (GHS) - - + + GIPGIPGibraltar Pound (GIP) - - + + GMDGMDGambian Dalasi (GMD) - - + + GNFGNFGuinean Franc (GNF) - - + + GTQGTQGuatemalan Quetzal (GTQ) - - + + GYDGYDGuyanaese Dollar (GYD) - - + + HKDHKDHong Kong Dollar (HKD) - - + + HNLHNLHonduran Lempira (HNL) - - + + HRKHRKCroatian Kuna (HRK) - - + + HTGHTGHaitian Gourde (HTG) - - + + HUFHUFHungarian Forint (HUF) - - + + IDRIDRIndonesian Rupiah (IDR) - - + + IEPIEPIrish Pound (IEP) - - + + ILSILSIsraeli New Shekel (ILS) - - + + INRINRIndian Rupee (INR) - - + + IQDIQDIraqi Dinar (IQD) - - + + IRRIRRIranian Rial (IRR) - - + + ISKISKIcelandic Króna (ISK) - - + + ITLITLItalian Lira (ITL) - - + + JMDJMDJamaican Dollar (JMD) - - + + JODJODJordanian Dinar (JOD) - - + + JPYJPYJapanese Yen (JPY) - - + + KESKESKenyan Shilling (KES) - - + + KGSKGSKyrgystani Som (KGS) - - + + KHRKHRCambodian Riel (KHR) - - + + KMFKMFComorian Franc (KMF) - - + + KPWKPWNorth Korean Won (KPW) - - + + KRWKRWSouth Korean Won (KRW) - - + + KWDKWDKuwaiti Dinar (KWD) - - + + KYDKYDCayman Islands Dollar (KYD) - - + + KZTKZTKazakhstani Tenge (KZT) - - + + LAKLAKLaotian Kip (LAK) - - + + LBPLBPLebanese Pound (LBP) - - + + LKRLKRSri Lankan Rupee (LKR) - - + + LRDLRDLiberian Dollar (LRD) - - + + LSLLSLLesotho Loti (LSL) - - + + LTLLTLLithuanian Litas (LTL) - - + + LVLLVLLatvian Lats (LVL) - - + + LYDLYDLibyan Dinar (LYD) - - + + MADMADMoroccan Dirham (MAD) - - + + MDLMDLMoldovan Leu (MDL) - - + + MGAMGAMalagasy Ariary (MGA) - - + + MKDMKDMacedonian Denar (MKD) - - + + MNTMNTMongolian Tugrik (MNT) - - + + MOPMOPMacanese Pataca (MOP) - - + + MROMROMauritanian Ouguiya (MRO) - - + + MURMURMauritian Rupee (MUR) - - + + MVRMVRMaldivian Rufiyaa (MVR) - - + + MWKMWKMalawian Kwacha (MWK) - - + + MXNMXNMexican Peso (MXN) - - + + MYRMYRMalaysian Ringgit (MYR) - - + + MZNMZNMozambican Metical (MZN) - - + + NADNADNamibian Dollar (NAD) - - + + NGNNGNNigerian Naira (NGN) - - + + NIONIONicaraguan Córdoba (NIO) - - + + NOKNOKNorwegian Krone (NOK) - - + + NPRNPRNepalese Rupee (NPR) - - + + NZDNZDNew Zealand Dollar (NZD) - - + + OMROMROmani Rial (OMR) - - + + PABPABPanamanian Balboa (PAB) - - + + PENPENPeruvian Nuevo Sol (PEN) - - + + PGKPGKPapua New Guinean Kina (PGK) - - + + PHPPHPPhilippine Peso (PHP) - - + + PKGPKGPKG (PKG) - - + + PKRPKRPakistani Rupee (PKR) - - + + PLNPLNPolish Zloty (PLN) - - + + PYGPYGParaguayan Guarani (PYG) - - + + QARQARQatari Riyal (QAR) - - + + RONRONNew Romanian Leu (RON) - - + + RSDRSDSerbian Dinar (RSD) - - + + RUBRUBRussian Ruble (RUB) - - + + RWFRWFRwandan Franc (RWF) - - + + SARSARSaudi Riyal (SAR) - - + + SBDSBDSolomon Islands Dollar (SBD) - - + + SCRSCRSeychellois Rupee (SCR) - - + + SDGSDGSudanese Pound (SDG) - - + + SEKSEKSwedish Krona (SEK) - - + + SGDSGDSingapore Dollar (SGD) - - + + SHPSHPSt. Helena Pound (SHP) - - + + SKKSKKSlovak Koruna (SKK) - - + + SLLSLLSierra Leonean Leone (SLL) - - + + SOSSOSSomali Shilling (SOS) - - + + SRDSRDSurinamese Dollar (SRD) - - + + STDSTDSão Tomé and Príncipe Dobra (STD) - - + + SVCSVCSalvadoran Colón (SVC) - - + + SYPSYPSyrian Pound (SYP) - - + + SZLSZLSwazi Lilangeni (SZL) - - + + THBTHBThai Baht (THB) - - + + TJSTJSTajikistani Somoni (TJS) - - + + TMTTMTTurkmenistani Manat (TMT) - - + + TNDTNDTunisian Dinar (TND) - - + + TOPTOPTongan Paʻanga (TOP) - - + + TRYTRYTurkish Lira (TRY) - - + + TTDTTDTrinidad and Tobago Dollar (TTD) - - + + TWDTWDNew Taiwan Dollar (TWD) - - + + TZSTZSTanzanian Shilling (TZS) - - + + UAHUAHUkrainian Hryvnia (UAH) - - + + UGXUGXUgandan Shilling (UGX) - - + + USDUSDUnited States Dollar (USD) - - + + UYUUYUUruguayan Peso (UYU) - - + + UZSUZSUzbekistani Som (UZS) - - + + VEFVEFVenezuelan Bolívar (VEF) - - + + VNDVNDVietnamese Dong (VND) - - + + VUVVUVVanuatu Vatu (VUV) - - + + WSTWSTSamoan Tala (WST) - - + + XAFXAFCentral African CFA Franc (FCFA) - - + + XCDXCDEast Caribbean Dollar (XCD) - - + + XDRXDRSpecial Drawing Rights (XDR) - - + + XOFXOFWest African CFA Franc (CFA) - - + + XPFXPFCFP Franc (CFPF) - - + + YERYERYemeni Rial (YER) - - + + ZARZARSouth African Rand (ZAR) - - + + ZMKZMKZambian Kwacha (1968–2012) (ZMK) - - + + ZMWZMWZambian Kwacha (ZMW) - - + + ZWLZWLZimbabwean Dollar (2009) (ZWL) - +
\ No newline at end of file diff --git a/plugins/CurrencyRates/proto_CurrencyRates/res/proto_CurrencyRates.rc b/plugins/CurrencyRates/proto_CurrencyRates/res/proto_CurrencyRates.rc index f85d1993b2..16b7546399 100644 --- a/plugins/CurrencyRates/proto_CurrencyRates/res/proto_CurrencyRates.rc +++ b/plugins/CurrencyRates/proto_CurrencyRates/res/proto_CurrencyRates.rc @@ -90,7 +90,7 @@ BEGIN VALUE "CompanyName", "Dioksin" VALUE "FileDescription", "CurrencyRates protocol icons" VALUE "FileVersion", "0, 0, 0, 1" - VALUE "InternalName", "proto_Quotes" + VALUE "InternalName", "proto_CurrencyRates" VALUE "LegalCopyright", "Do not worry!" VALUE "OriginalFilename", "proto_CurrencyRates.dll" VALUE "ProductName", "Miranda NG" diff --git a/plugins/CurrencyRates/res/Export currencyrates.ico b/plugins/CurrencyRates/res/Export currencyrates.ico new file mode 100644 index 0000000000..31c7aa2ba1 Binary files /dev/null and b/plugins/CurrencyRates/res/Export currencyrates.ico differ diff --git a/plugins/CurrencyRates/res/Export quotes.ico b/plugins/CurrencyRates/res/Export quotes.ico deleted file mode 100644 index 31c7aa2ba1..0000000000 Binary files a/plugins/CurrencyRates/res/Export quotes.ico and /dev/null differ diff --git a/plugins/CurrencyRates/res/Forex.rc b/plugins/CurrencyRates/res/Forex.rc index 088587b982..05b0d2732c 100644 --- a/plugins/CurrencyRates/res/Forex.rc +++ b/plugins/CurrencyRates/res/Forex.rc @@ -30,7 +30,7 @@ IDI_ICON_MAIN ICON "main.ico" IDI_ICON_SECTION ICON "Section.ico" -IDI_ICON_QUOTE ICON "quote.ico" +IDI_ICON_CURRENCYRATE ICON "currencyrate.ico" IDI_ICON_UP ICON "up.ico" @@ -40,11 +40,11 @@ IDI_ICON_CURRENCY_CONVERTER ICON "CurrencyConverter.ico" IDI_ICON_REFRESH ICON "Refresh.ico" -IDI_ICON_EXPORT ICON "Export quotes.ico" +IDI_ICON_EXPORT ICON "Export currencyrates.ico" IDI_ICON_SWAP ICON "swap.ico" -IDI_ICON_IMPORT ICON "Import quotes.ico" +IDI_ICON_IMPORT ICON "Import currencyrates.ico" IDI_ICON_NOTCHANGED ICON "notchanged.ico" @@ -111,7 +111,7 @@ BEGIN LTEXT "&Select File:",IDC_STATIC_SELECT_FILE,50,113,49,8 EDITTEXT IDC_EDIT_FILE_NAME,101,111,137,12,ES_AUTOHSCROLL PUSHBUTTON "&Browse...",IDC_BUTTON_BROWSE,241,111,65,12 - LTEXT "Variables Allowed: %miranda_userdata%,%quotename%",IDC_STATIC,50,126,257,8,WS_DISABLED + LTEXT "Variables Allowed: %miranda_userdata%,%currencyratename%",IDC_STATIC,50,126,257,8,WS_DISABLED LTEXT "F&ormat:",IDC_STATIC_LOG_FILE_FORMAT,50,142,47,8 EDITTEXT IDC_EDIT_LOG_FILE_FORMAT,101,140,137,12,ES_AUTOHSCROLL PUSHBUTTON "V&ariables...",IDC_BUTTON_LOG_FILE_DESCRIPTION,241,140,65,12 @@ -165,7 +165,7 @@ BEGIN LTEXT "&Select File:",IDC_STATIC_SELECT_FILE,30,101,49,8 EDITTEXT IDC_EDIT_FILE_NAME,81,99,137,12,ES_AUTOHSCROLL PUSHBUTTON "&Browse...",IDC_BUTTON_BROWSE,221,99,65,12 - LTEXT "Variables Allowed: %miranda_userdata%,%quotename%",IDC_STATIC,30,115,257,8,WS_DISABLED + LTEXT "Variables Allowed: %miranda_userdata%,%currencyratename%",IDC_STATIC,30,115,257,8,WS_DISABLED LTEXT "F&ormat:",IDC_STATIC_LOG_FILE_FORMAT,30,131,47,8 EDITTEXT IDC_EDIT_LOG_FILE_FORMAT,81,129,137,12,ES_AUTOHSCROLL PUSHBUTTON "V&ariables...",IDC_BUTTON_LOG_FILE_DESCRIPTION,221,129,65,12 @@ -208,11 +208,11 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,167,139,50,14 END -IDD_DIALOG_QUOTE_INFO DIALOGEX 0, 0, 222, 132 +IDD_DIALOG_CURRENCYRATE_INFO DIALOGEX 0, 0, 222, 132 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - CTEXT "",IDC_STATIC_QUOTE_NAME,7,7,208,8 + CTEXT "",IDC_STATIC_CURRENCYRATE_NAME,7,7,208,8 CONTROL "",IDC_SYSLINK_PROVIDER,"SysLink",WS_TABSTOP,7,110,208,14 LTEXT "Current Rate:",IDC_STATIC,21,62,72,8 EDITTEXT IDC_EDIT_RATE,97,60,61,12,ES_AUTOHSCROLL | ES_READONLY @@ -249,12 +249,12 @@ BEGIN PUSHBUTTON "&Advanced Settings...",IDC_BUTTON_ADVANCED_SETTINGS,102,211,110,14 END -IDD_DIALOG_QUOTE_INFO_1 DIALOGEX 0, 0, 222, 143 +IDD_DIALOG_CURRENCYRATE_INFO_1 DIALOGEX 0, 0, 222, 143 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Quote\\Rate Info" +CAPTION "CurrencyRate\\Rate Info" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - CTEXT "",IDC_STATIC_QUOTE_NAME,7,7,208,8 + CTEXT "",IDC_STATIC_CURRENCYRATE_NAME,7,7,208,8 CONTROL "",IDC_SYSLINK_PROVIDER,"SysLink",WS_TABSTOP,7,98,208,14 LTEXT "Current Rate:",IDC_STATIC,15,57,81,8 EDITTEXT IDC_EDIT_RATE,108,55,61,12,ES_AUTOHSCROLL | ES_READONLY @@ -314,7 +314,7 @@ BEGIN BOTTOMMARGIN, 153 END - IDD_DIALOG_QUOTE_INFO, DIALOG + IDD_DIALOG_CURRENCYRATE_INFO, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 215 @@ -331,7 +331,7 @@ BEGIN BOTTOMMARGIN, 225 END - IDD_DIALOG_QUOTE_INFO_1, DIALOG + IDD_DIALOG_CURRENCYRATE_INFO_1, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 215 diff --git a/plugins/CurrencyRates/res/Import currencyrates.ico b/plugins/CurrencyRates/res/Import currencyrates.ico new file mode 100644 index 0000000000..506aa62af3 Binary files /dev/null and b/plugins/CurrencyRates/res/Import currencyrates.ico differ diff --git a/plugins/CurrencyRates/res/Import quotes.ico b/plugins/CurrencyRates/res/Import quotes.ico deleted file mode 100644 index 506aa62af3..0000000000 Binary files a/plugins/CurrencyRates/res/Import quotes.ico and /dev/null differ diff --git a/plugins/CurrencyRates/res/currencyrate.ico b/plugins/CurrencyRates/res/currencyrate.ico new file mode 100644 index 0000000000..1367c475d6 Binary files /dev/null and b/plugins/CurrencyRates/res/currencyrate.ico differ diff --git a/plugins/CurrencyRates/res/quote.ico b/plugins/CurrencyRates/res/quote.ico deleted file mode 100644 index 1367c475d6..0000000000 Binary files a/plugins/CurrencyRates/res/quote.ico and /dev/null differ diff --git a/plugins/CurrencyRates/src/ComHelper.cpp b/plugins/CurrencyRates/src/ComHelper.cpp index 9c77e6d7ad..c4715892b5 100644 --- a/plugins/CurrencyRates/src/ComHelper.cpp +++ b/plugins/CurrencyRates/src/ComHelper.cpp @@ -24,5 +24,5 @@ void ShowComError(_com_error& e, const tstring& rsAdditionalInfo) { tstring sErrorMsg = ComException2Msg(e, rsAdditionalInfo); LogIt(sErrorMsg); - Quotes_MessageBox(nullptr, sErrorMsg.c_str(), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(nullptr, sErrorMsg.c_str(), MB_OK | MB_ICONERROR); } diff --git a/plugins/CurrencyRates/src/CommonOptionDlg.cpp b/plugins/CurrencyRates/src/CommonOptionDlg.cpp index 0fdd483abb..2878f2a91f 100644 --- a/plugins/CurrencyRates/src/CommonOptionDlg.cpp +++ b/plugins/CurrencyRates/src/CommonOptionDlg.cpp @@ -1,11 +1,11 @@ #include "StdAfx.h" typedef boost::shared_ptr TAdvSettingsPtr; -typedef std::map TAdvSettings; +typedef std::map TAdvSettings; TAdvSettings g_aAdvSettings; -CAdvProviderSettings* get_adv_settings(const IQuotesProvider* pProvider, bool bCreateIfNonExist) +CAdvProviderSettings* get_adv_settings(const ICurrencyRatesProvider* pProvider, bool bCreateIfNonExist) { TAdvSettings::iterator i = g_aAdvSettings.find(pProvider); if (i != g_aAdvSettings.end()) @@ -20,7 +20,7 @@ CAdvProviderSettings* get_adv_settings(const IQuotesProvider* pProvider, bool bC return nullptr; } -void remove_adv_settings(const IQuotesProvider *pProvider) +void remove_adv_settings(const ICurrencyRatesProvider *pProvider) { TAdvSettings::iterator i = g_aAdvSettings.find(pProvider); if (i != g_aAdvSettings.end()) @@ -32,10 +32,10 @@ void CommonOptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, CCommonDlgPr switch (msg) { case WM_INITDIALOG: { - assert(rData.m_pQuotesProvider); + assert(rData.m_pCurrencyRatesProvider); - CQuotesProviderVisitorDbSettings visitor; - rData.m_pQuotesProvider->Accept(visitor); + CCurrencyRatesProviderVisitorDbSettings visitor; + rData.m_pCurrencyRatesProvider->Accept(visitor); assert(visitor.m_pszDbRefreshRateType); assert(visitor.m_pszDbRefreshRateValue); assert(visitor.m_pszDbDisplayNameFormat); @@ -43,15 +43,15 @@ void CommonOptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, CCommonDlgPr assert(visitor.m_pszDbTendencyFormat); // set contact list display format - tstring sDspNameFrmt = Quotes_DBGetStringT(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbDisplayNameFormat, visitor.m_pszDefDisplayFormat); + tstring sDspNameFrmt = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbDisplayNameFormat, visitor.m_pszDefDisplayFormat); ::SetDlgItemText(hWnd, IDC_EDIT_CONTACT_LIST_FORMAT, sDspNameFrmt.c_str()); // set status message display format - tstring sStatusMsgFrmt = Quotes_DBGetStringT(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbStatusMsgFormat, visitor.m_pszDefStatusMsgFormat); + tstring sStatusMsgFrmt = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbStatusMsgFormat, visitor.m_pszDefStatusMsgFormat); ::SetDlgItemText(hWnd, IDC_EDIT_STATUS_MESSAGE_FORMAT, sStatusMsgFrmt.c_str()); // set tendency format - tstring sTendencyFrmt = Quotes_DBGetStringT(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbTendencyFormat, visitor.m_pszDefTendencyFormat); + tstring sTendencyFrmt = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbTendencyFormat, visitor.m_pszDefTendencyFormat); ::SetDlgItemText(hWnd, IDC_EDIT_TENDENCY_FORMAT, sTendencyFrmt.c_str()); // refresh rate @@ -60,11 +60,11 @@ void CommonOptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, CCommonDlgPr for (int i = 0; i < _countof(pszRefreshRateTypes); ++i) ::SendMessage(hwndCombo, CB_ADDSTRING, 0, reinterpret_cast(pszRefreshRateTypes[i])); - int nRefreshRateType = db_get_w(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbRefreshRateType, RRT_MINUTES); + int nRefreshRateType = db_get_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbRefreshRateType, RRT_MINUTES); if (nRefreshRateType < RRT_SECONDS || nRefreshRateType > RRT_HOURS) nRefreshRateType = RRT_MINUTES; - UINT nRate = db_get_w(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbRefreshRateValue, 1); + UINT nRate = db_get_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbRefreshRateValue, 1); switch (nRefreshRateType) { default: case RRT_SECONDS: @@ -128,10 +128,10 @@ void CommonOptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, CCommonDlgPr case BN_CLICKED: switch (LOWORD(wp)) { case IDC_BUTTON_DESCRIPTION: - show_variable_list(hWnd, rData.m_pQuotesProvider); + show_variable_list(hWnd, rData.m_pCurrencyRatesProvider); break; case IDC_BUTTON_ADVANCED_SETTINGS: - CAdvProviderSettings* pAdvSet = get_adv_settings(rData.m_pQuotesProvider, true); + CAdvProviderSettings* pAdvSet = get_adv_settings(rData.m_pCurrencyRatesProvider, true); assert(pAdvSet); if (true == ShowSettingsDlg(hWnd, pAdvSet)) PropSheet_Changed(::GetParent(hWnd), hWnd); @@ -156,14 +156,14 @@ void CommonOptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, CCommonDlgPr case RRT_SECONDS: if (FALSE == bOk || nRefreshRate < 1 || nRefreshRate > 60) { prepare_edit_ctrl_for_error(::GetDlgItem(hWnd, IDC_EDIT_REFRESH_RATE)); - Quotes_MessageBox(hWnd, TranslateT("Enter integer value between 1 and 60."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter integer value between 1 and 60."), MB_OK | MB_ICONERROR); bOk = FALSE; } break; case RRT_HOURS: if (FALSE == bOk || nRefreshRate < 1 || nRefreshRate > 24) { prepare_edit_ctrl_for_error(::GetDlgItem(hWnd, IDC_EDIT_REFRESH_RATE)); - Quotes_MessageBox(hWnd, TranslateT("Enter integer value between 1 and 24."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter integer value between 1 and 24."), MB_OK | MB_ICONERROR); bOk = FALSE; } break; @@ -176,7 +176,7 @@ void CommonOptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, CCommonDlgPr tstring s = get_window_text(hEdit); if (true == s.empty()) { prepare_edit_ctrl_for_error(hEdit); - Quotes_MessageBox(hWnd, TranslateT("Enter text to display in contact list."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter text to display in contact list."), MB_OK | MB_ICONERROR); bOk = FALSE; } } @@ -191,29 +191,29 @@ void CommonOptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, CCommonDlgPr assert(TRUE == bOk); ERefreshRateType nType = static_cast(::SendDlgItemMessage(hWnd, IDC_COMBO_REFRESH_RATE, CB_GETCURSEL, 0, 0)); - assert(rData.m_pQuotesProvider); + assert(rData.m_pCurrencyRatesProvider); - CQuotesProviderVisitorDbSettings visitor; - rData.m_pQuotesProvider->Accept(visitor); + CCurrencyRatesProviderVisitorDbSettings visitor; + rData.m_pCurrencyRatesProvider->Accept(visitor); assert(visitor.m_pszDbRefreshRateType); assert(visitor.m_pszDbRefreshRateValue); assert(visitor.m_pszDbDisplayNameFormat); assert(visitor.m_pszDbStatusMsgFormat); rData.m_bFireSetingsChangedEvent = true; - db_set_w(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbRefreshRateType, nType); - db_set_w(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbRefreshRateValue, nRefreshRate); + db_set_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbRefreshRateType, nType); + db_set_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbRefreshRateValue, nRefreshRate); tstring s = get_window_text(::GetDlgItem(hWnd, IDC_EDIT_CONTACT_LIST_FORMAT)); - db_set_ws(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbDisplayNameFormat, s.c_str()); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbDisplayNameFormat, s.c_str()); s = get_window_text(::GetDlgItem(hWnd, IDC_EDIT_STATUS_MESSAGE_FORMAT)); - db_set_ws(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbStatusMsgFormat, s.c_str()); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbStatusMsgFormat, s.c_str()); s = get_window_text(::GetDlgItem(hWnd, IDC_EDIT_TENDENCY_FORMAT)); - db_set_ws(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbTendencyFormat, s.c_str()); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbTendencyFormat, s.c_str()); - CAdvProviderSettings* pAdvSet = get_adv_settings(rData.m_pQuotesProvider, false); + CAdvProviderSettings* pAdvSet = get_adv_settings(rData.m_pCurrencyRatesProvider, false); if (pAdvSet) pAdvSet->SaveToDb(); break; @@ -222,7 +222,7 @@ void CommonOptionDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp, CCommonDlgPr break; case WM_DESTROY: - remove_adv_settings(rData.m_pQuotesProvider); + remove_adv_settings(rData.m_pCurrencyRatesProvider); break; } } diff --git a/plugins/CurrencyRates/src/CommonOptionDlg.h b/plugins/CurrencyRates/src/CommonOptionDlg.h index 5e39582da0..bc4ca8c456 100644 --- a/plugins/CurrencyRates/src/CommonOptionDlg.h +++ b/plugins/CurrencyRates/src/CommonOptionDlg.h @@ -1,14 +1,14 @@ #ifndef __c85fe710_f71b_4a58_9d44_3e39f6209c5f_CommonOptionDlg_h__ #define __c85fe710_f71b_4a58_9d44_3e39f6209c5f_CommonOptionDlg_h__ -class CQuotesProviderBase; +class CCurrencyRatesProviderBase; struct CCommonDlgProcData { - CCommonDlgProcData(const CQuotesProviderBase* pQuotesProvider) - : m_pQuotesProvider(pQuotesProvider), m_bFireSetingsChangedEvent(false){} + CCommonDlgProcData(const CCurrencyRatesProviderBase* pCurrencyRatesProvider) + : m_pCurrencyRatesProvider(pCurrencyRatesProvider), m_bFireSetingsChangedEvent(false){} - const CQuotesProviderBase* m_pQuotesProvider; + const CCurrencyRatesProviderBase* m_pCurrencyRatesProvider; bool m_bFireSetingsChangedEvent; }; diff --git a/plugins/CurrencyRates/src/CreateFilePath.cpp b/plugins/CurrencyRates/src/CreateFilePath.cpp index 449d8b7ae7..18a8896e9d 100644 --- a/plugins/CurrencyRates/src/CreateFilePath.cpp +++ b/plugins/CurrencyRates/src/CreateFilePath.cpp @@ -28,6 +28,6 @@ tstring CreateFilePath(const tstring& rsName) tstring s(rsName); prepare_name(s); tostringstream o; - o << szPath << L"\\Quotes\\" << s; + o << szPath << L"\\CurrencyRates\\" << s; return o.str(); } \ No newline at end of file diff --git a/plugins/CurrencyRates/src/CurrencyConverter.cpp b/plugins/CurrencyRates/src/CurrencyConverter.cpp index 6edf7f812b..d71655b014 100644 --- a/plugins/CurrencyRates/src/CurrencyConverter.cpp +++ b/plugins/CurrencyRates/src/CurrencyConverter.cpp @@ -1,19 +1,19 @@ #include "StdAfx.h" -#include "QuotesProviderCurrencyConverter.h" +#include "CurrencyRatesProviderCurrencyConverter.h" #define WINDOW_PREFIX "CurrenyConverter_" -#define DB_STR_CC_QUOTE_FROM_ID "CurrencyConverter_FromID" -#define DB_STR_CC_QUOTE_TO_ID "CurrencyConverter_ToID" +#define DB_STR_CC_CURRENCYRATE_FROM_ID "CurrencyConverter_FromID" +#define DB_STR_CC_CURRENCYRATE_TO_ID "CurrencyConverter_ToID" #define DB_STR_CC_AMOUNT "CurrencyConverter_Amount" -static CQuotesProviderCurrencyConverter* get_currency_converter_provider() +static CCurrencyRatesProviderCurrencyConverter* get_currency_converter_provider() { - CModuleInfo::TQuotesProvidersPtr pProviders = CModuleInfo::GetQuoteProvidersPtr(); - const CQuotesProviders::TQuotesProviders& rapQuotesProviders = pProviders->GetProviders(); - for (CQuotesProviders::TQuotesProviders::const_iterator i = rapQuotesProviders.begin(); i != rapQuotesProviders.end(); ++i) { - const CQuotesProviders::TQuotesProviderPtr& pProvider = *i; - if (auto p = dynamic_cast(pProvider.get())) + CModuleInfo::TCurrencyRatesProvidersPtr pProviders = CModuleInfo::GetCurrencyRateProvidersPtr(); + const CCurrencyRatesProviders::TCurrencyRatesProviders& rapCurrencyRatesProviders = pProviders->GetProviders(); + for (CCurrencyRatesProviders::TCurrencyRatesProviders::const_iterator i = rapCurrencyRatesProviders.begin(); i != rapCurrencyRatesProviders.end(); ++i) { + const CCurrencyRatesProviders::TCurrencyRatesProviderPtr& pProvider = *i; + if (auto p = dynamic_cast(pProvider.get())) { return p; } @@ -23,24 +23,24 @@ static CQuotesProviderCurrencyConverter* get_currency_converter_provider() return nullptr; } -CQuotesProviderBase::CQuoteSection get_quotes(const CQuotesProviderCurrencyConverter* pProvider = nullptr) +CCurrencyRatesProviderBase::CCurrencyRateSection get_currencyrates(const CCurrencyRatesProviderCurrencyConverter* pProvider = nullptr) { if (nullptr == pProvider) pProvider = get_currency_converter_provider(); if (pProvider) { - const auto& rQuotes = pProvider->GetQuotes(); - if (rQuotes.GetSectionCount() > 0) - return rQuotes.GetSection(0); + const auto& rCurrencyRates = pProvider->GetCurrencyRates(); + if (rCurrencyRates.GetSectionCount() > 0) + return rCurrencyRates.GetSection(0); } - return CQuotesProviderBase::CQuoteSection(); + return CCurrencyRatesProviderBase::CCurrencyRateSection(); } -inline tstring make_quote_name(const CQuotesProviderBase::CQuote& rQuote) +inline tstring make_currencyrate_name(const CCurrencyRatesProviderBase::CCurrencyRate& rCurrencyRate) { - const tstring& rsDesc = rQuote.GetName(); - return((false == rsDesc.empty()) ? rsDesc : rQuote.GetSymbol()); + const tstring& rsDesc = rCurrencyRate.GetName(); + return((false == rsDesc.empty()) ? rsDesc : rCurrencyRate.GetSymbol()); } inline void update_convert_button(HWND hDlg) @@ -91,49 +91,49 @@ INT_PTR CALLBACK CurrencyConverterDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM assert(hWL); WindowList_Add(hWL, hDlg); - Window_SetIcon_IcoLib(hDlg, Quotes_GetIconHandle(IDI_ICON_CURRENCY_CONVERTER)); + Window_SetIcon_IcoLib(hDlg, CurrencyRates_GetIconHandle(IDI_ICON_CURRENCY_CONVERTER)); HWND hcbxFrom = ::GetDlgItem(hDlg, IDC_COMBO_CONVERT_FROM); HWND hcbxTo = ::GetDlgItem(hDlg, IDC_COMBO_CONVERT_INTO); - tstring sFromQuoteID = Quotes_DBGetStringT(NULL, QUOTES_MODULE_NAME, DB_STR_CC_QUOTE_FROM_ID); - tstring sToQuoteID = Quotes_DBGetStringT(NULL, QUOTES_MODULE_NAME, DB_STR_CC_QUOTE_TO_ID); + tstring sFromCurrencyRateID = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_CC_CURRENCYRATE_FROM_ID); + tstring sToCurrencyRateID = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_CC_CURRENCYRATE_TO_ID); const auto pProvider = get_currency_converter_provider(); - const auto& rSection = get_quotes(pProvider); - auto cQuotes = rSection.GetQuoteCount(); - for (auto i = 0u; i < cQuotes; ++i) { - const auto& rQuote = rSection.GetQuote(i); - tstring sName = make_quote_name(rQuote); + const auto& rSection = get_currencyrates(pProvider); + auto cCurrencyRates = rSection.GetCurrencyRateCount(); + for (auto i = 0u; i < cCurrencyRates; ++i) { + const auto& rCurrencyRate = rSection.GetCurrencyRate(i); + tstring sName = make_currencyrate_name(rCurrencyRate); LPCTSTR pszName = sName.c_str(); LRESULT nFrom = ::SendMessage(hcbxFrom, CB_ADDSTRING, 0, reinterpret_cast(pszName)); LRESULT nTo = ::SendMessage(hcbxTo, CB_ADDSTRING, 0, reinterpret_cast(pszName)); - if (0 == mir_wstrcmpi(rQuote.GetID().c_str(), sFromQuoteID.c_str())) { + if (0 == mir_wstrcmpi(rCurrencyRate.GetID().c_str(), sFromCurrencyRateID.c_str())) { ::SendMessage(hcbxFrom, CB_SETCURSEL, nFrom, 0); } - if (0 == mir_wstrcmpi(rQuote.GetID().c_str(), sToQuoteID.c_str())) { + if (0 == mir_wstrcmpi(rCurrencyRate.GetID().c_str(), sToCurrencyRateID.c_str())) { ::SendMessage(hcbxTo, CB_SETCURSEL, nTo, 0); } } double dAmount = 1.0; - Quotes_DBReadDouble(NULL, QUOTES_MODULE_NAME, DB_STR_CC_AMOUNT, dAmount); + CurrencyRates_DBReadDouble(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_CC_AMOUNT, dAmount); ::SetDlgItemText(hDlg, IDC_EDIT_VALUE, double2str(dAmount).c_str()); - const IQuotesProvider::CProviderInfo& pi = pProvider->GetInfo(); + const ICurrencyRatesProvider::CProviderInfo& pi = pProvider->GetInfo(); tostringstream o; o << TranslateT("Info provided by") << L" " << pi.m_sName << L""; ::SetDlgItemText(hDlg, IDC_SYSLINK_PROVIDER, o.str().c_str()); - ::SendDlgItemMessage(hDlg, IDC_BUTTON_SWAP, BM_SETIMAGE, IMAGE_ICON, LPARAM(Quotes_LoadIconEx(IDI_ICON_SWAP))); + ::SendDlgItemMessage(hDlg, IDC_BUTTON_SWAP, BM_SETIMAGE, IMAGE_ICON, LPARAM(CurrencyRates_LoadIconEx(IDI_ICON_SWAP))); update_convert_button(hDlg); update_swap_button(hDlg); - Utils_RestoreWindowPositionNoSize(hDlg, NULL, QUOTES_PROTOCOL_NAME, WINDOW_PREFIX); + Utils_RestoreWindowPositionNoSize(hDlg, NULL, CURRENCYRATES_MODULE_NAME, WINDOW_PREFIX); ::ShowWindow(hDlg, SW_SHOW); } return TRUE; @@ -143,7 +143,7 @@ INT_PTR CALLBACK CurrencyConverterDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM MWindowList hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX, false); assert(hWL); WindowList_Remove(hWL, hDlg); - Utils_SaveWindowPosition(hDlg, NULL, QUOTES_PROTOCOL_NAME, WINDOW_PREFIX); + Utils_SaveWindowPosition(hDlg, NULL, CURRENCYRATES_MODULE_NAME, WINDOW_PREFIX); EndDialog(hDlg, 0); } return TRUE; @@ -190,19 +190,19 @@ INT_PTR CALLBACK CurrencyConverterDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM double dAmount = 1.0; if ((true == str2double(sText, dAmount)) && (dAmount > 0.0)) { - Quotes_DBWriteDouble(NULL, QUOTES_MODULE_NAME, DB_STR_CC_AMOUNT, dAmount); + CurrencyRates_DBWriteDouble(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_CC_AMOUNT, dAmount); size_t nFrom = static_cast(::SendDlgItemMessage(hDlg, IDC_COMBO_CONVERT_FROM, CB_GETCURSEL, 0, 0)); size_t nTo = static_cast(::SendDlgItemMessage(hDlg, IDC_COMBO_CONVERT_INTO, CB_GETCURSEL, 0, 0)); if ((CB_ERR != nFrom) && (CB_ERR != nTo) && (nFrom != nTo)) { - const auto& rSection = get_quotes(); - size_t cQuotes = rSection.GetQuoteCount(); - if ((nFrom < cQuotes) && (nTo < cQuotes)) { - auto from = rSection.GetQuote(nFrom); - auto to = rSection.GetQuote(nTo); + const auto& rSection = get_currencyrates(); + size_t cCurrencyRates = rSection.GetCurrencyRateCount(); + if ((nFrom < cCurrencyRates) && (nTo < cCurrencyRates)) { + auto from = rSection.GetCurrencyRate(nFrom); + auto to = rSection.GetCurrencyRate(nTo); - db_set_ws(NULL, QUOTES_MODULE_NAME, DB_STR_CC_QUOTE_FROM_ID, from.GetID().c_str()); - db_set_ws(NULL, QUOTES_MODULE_NAME, DB_STR_CC_QUOTE_TO_ID, to.GetID().c_str()); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_CC_CURRENCYRATE_FROM_ID, from.GetID().c_str()); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_CC_CURRENCYRATE_TO_ID, to.GetID().c_str()); const auto pProvider = get_currency_converter_provider(); assert(pProvider); @@ -221,7 +221,7 @@ INT_PTR CALLBACK CurrencyConverterDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM } if (false == sError.empty()) - sResult = quotes_a2t(sError.c_str());//A2T(sError.c_str()); + sResult = currencyrates_a2t(sError.c_str());//A2T(sError.c_str()); SetDlgItemText(hDlg, IDC_EDIT_RESULT, sResult.c_str()); } @@ -229,7 +229,7 @@ INT_PTR CALLBACK CurrencyConverterDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM } } else { - Quotes_MessageBox(hDlg, TranslateT("Enter positive number."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hDlg, TranslateT("Enter positive number."), MB_OK | MB_ICONERROR); prepare_edit_ctrl_for_error(GetDlgItem(hDlg, IDC_EDIT_VALUE)); } } @@ -252,7 +252,7 @@ INT_PTR CALLBACK CurrencyConverterDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM return (FALSE); } -INT_PTR QuotesMenu_CurrencyConverter(WPARAM, LPARAM) +INT_PTR CurrencyRatesMenu_CurrencyConverter(WPARAM, LPARAM) { MWindowList hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX, true); HWND hWnd = WindowList_Find(hWL, NULL); diff --git a/plugins/CurrencyRates/src/CurrencyConverter.h b/plugins/CurrencyRates/src/CurrencyConverter.h index 57988413fe..eca03ec40e 100644 --- a/plugins/CurrencyRates/src/CurrencyConverter.h +++ b/plugins/CurrencyRates/src/CurrencyConverter.h @@ -1,6 +1,6 @@ #ifndef __4FB6320B_2D02_408b_BAF5_426C185AAA11_CurrencyConverter_h__ #define __4FB6320B_2D02_408b_BAF5_426C185AAA11_CurrencyConverter_h__ -INT_PTR QuotesMenu_CurrencyConverter(WPARAM wp, LPARAM lp); +INT_PTR CurrencyRatesMenu_CurrencyConverter(WPARAM wp, LPARAM lp); #endif //__4FB6320B_2D02_408b_BAF5_426C185AAA11_CurrencyConverter_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRateChart.cpp b/plugins/CurrencyRates/src/CurrencyRateChart.cpp new file mode 100644 index 0000000000..a3208811a4 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRateChart.cpp @@ -0,0 +1,101 @@ +#include "StdAfx.h" + +#ifdef CHART_IMPLEMENT + +namespace +{ + class CMyJob : private boost::noncopyable + { + private: + CMyJob(LPCTSTR pszName = nullptr): m_hJob(::CreateJobObject(nullptr,pszName)) + { + if(m_hJob) + { + JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 }; + jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; + if(0 == ::SetInformationJobObject(m_hJob,JobObjectExtendedLimitInformation,&jeli,sizeof(jeli))) + { +#ifdef OUTPUT_TO_DEBUG_VIEWER + ::OutputDebugString(_T("Error occurred during the job initialization\n")); +#endif + } + } + + } + ~CMyJob() + { + if(m_hJob) + { + ::CloseHandle(m_hJob); + } + } + + public: + static CMyJob& GetInstance() + { + static CMyJob g_job(_T("MirandaJob_E12D5E9C_00E7_4FFA_9831_F35E45C6EBDA")); + return g_job; + } + + bool AssignProcess(HANDLE hProcess) + { + if(m_hJob && hProcess) + { + auto b = (TRUE == ::AssignProcessToJobObject(m_hJob,hProcess)); + return b; + } + + return false; + } + + private: + HANDLE m_hJob; + }; + +} + +INT_PTR CurrencyRatesMenu_Chart(WPARAM wp, LPARAM /*lp*/) +{ +#ifdef _UNICODE + MCONTACT hContact = static_cast(wp); + if (NULL == hContact) + return 0; + + auto sLogFileName = GetContactLogFileName(hContact); + + if(auto hWnd = ::FindWindow(nullptr,_T("Miranda CurrencyRates Chart"))) + { + COPYDATASTRUCT copydata_struct; + copydata_struct.cbData = static_cast(sLogFileName.size()*sizeof(TCHAR)); + copydata_struct.lpData = const_cast(static_cast(sLogFileName.c_str())); + copydata_struct.dwData = 0x1945; + + SendMessage(hWnd,WM_COPYDATA,0,reinterpret_cast(©data_struct)); + } + else + { + STARTUPINFO si; + PROCESS_INFORMATION pi; + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOWNORMAL; + ZeroMemory(&pi, sizeof(pi)); + + auto sCmdLine = CreateFilePath(_T("CurrencyRatesChart.exe")); + sCmdLine += _T(" \""); + sCmdLine += sLogFileName; + sCmdLine += _T("\""); + if(::CreateProcess(nullptr,const_cast(sCmdLine.c_str()),nullptr,nullptr,FALSE,0,nullptr,nullptr,&si,&pi)) + { + CMyJob::GetInstance().AssignProcess(pi.hProcess); + + ::CloseHandle(pi.hThread); + ::CloseHandle(pi.hProcess); + } + } +#endif + return 0; +} + +#endif //CHART_IMPLEMENT diff --git a/plugins/CurrencyRates/src/CurrencyRateChart.h b/plugins/CurrencyRates/src/CurrencyRateChart.h new file mode 100644 index 0000000000..0869c1fa1c --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRateChart.h @@ -0,0 +1,12 @@ +#ifndef __39BE8775_A837_494f_925C_0ABF7910F238_CurrencyRateChart_h__ +#define __39BE8775_A837_494f_925C_0ABF7910F238_CurrencyRateChart_h__ + +#pragma once + +#ifdef CHART_IMPLEMENT + +INT_PTR CurrencyRatesMenu_Chart(WPARAM wp, LPARAM lp); + +#endif + +#endif //__39BE8775_A837_494f_925C_0ABF7910F238_CurrencyRateChart_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRateInfoDlg.cpp b/plugins/CurrencyRates/src/CurrencyRateInfoDlg.cpp new file mode 100644 index 0000000000..927fa7197d --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRateInfoDlg.cpp @@ -0,0 +1,263 @@ +#include "StdAfx.h" + +// extern HANDLE g_hWindowListEditSettings; +extern HGENMENU g_hMenuEditSettings; +extern HGENMENU g_hMenuOpenLogFile; +#ifdef CHART_IMPLEMENT +extern HGENMENU g_hMenuChart; +#endif +extern HGENMENU g_hMenuRefresh, g_hMenuRoot; + +#define WINDOW_PREFIX_INFO "CurrencyRate Info" + +MCONTACT g_hContact; + +inline bool IsMyContact(MCONTACT hContact) +{ + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = CModuleInfo::GetCurrencyRateProvidersPtr()->GetContactProviderPtr(hContact); + return (nullptr != pProvider); +} + +inline MCONTACT get_contact(HWND hWnd) +{ + return MCONTACT(GetWindowLongPtr(hWnd, GWLP_USERDATA)); +} + +static bool get_fetch_time(time_t& rTime, MCONTACT hContact) +{ + rTime = db_get_dw(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FETCH_TIME, -1); + return (rTime != -1); +} + +INT_PTR CALLBACK CurrencyRateInfoDlgProcImpl(MCONTACT hContact, HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_INITDIALOG: + assert(hContact); + + TranslateDialogDefault(hdlg); + { + tstring sDescription = GetContactName(hContact); + ::SetDlgItemText(hdlg, IDC_STATIC_CURRENCYRATE_NAME, sDescription.c_str()); + + double dRate = 0.0; + if (true == CurrencyRates_DBReadDouble(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_PREV_VALUE, dRate)) { + tostringstream o; + o.imbue(GetSystemLocale()); + o << dRate; + + ::SetDlgItemText(hdlg, IDC_EDIT_PREVIOUS_RATE, o.str().c_str()); + } + + dRate = 0.0; + if (true == CurrencyRates_DBReadDouble(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_CURR_VALUE, dRate)) { + tostringstream o; + o.imbue(GetSystemLocale()); + o << dRate; + + ::SetDlgItemText(hdlg, IDC_EDIT_RATE, o.str().c_str()); + } + + time_t nFetchTime; + if (true == get_fetch_time(nFetchTime, hContact)) { + wchar_t szTime[50] = { 0 }; + if (0 == _tctime_s(szTime, 50, &nFetchTime)) { + ::SetDlgItemText(hdlg, IDC_EDIT_RATE_FETCH_TIME, szTime); + } + } + + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = CModuleInfo::GetCurrencyRateProvidersPtr()->GetContactProviderPtr(hContact); + + const ICurrencyRatesProvider::CProviderInfo& pi = pProvider->GetInfo(); + tostringstream o; + o << TranslateT("Info provided by") << L" " << pi.m_sName << L""; + + ::SetDlgItemText(hdlg, IDC_SYSLINK_PROVIDER, o.str().c_str()); + } + return TRUE; + + case WM_NOTIFY: + LPNMHDR pNMHDR = reinterpret_cast(lParam); + switch (pNMHDR->code) { + case NM_CLICK: + if (IDC_SYSLINK_PROVIDER == wParam) { + PNMLINK pNMLink = reinterpret_cast(pNMHDR); + ::ShellExecute(hdlg, L"open", pNMLink->item.szUrl, nullptr, nullptr, SW_SHOWNORMAL); + } + break; + } + break; + } + return FALSE; +} + +INT_PTR CALLBACK CurrencyRateInfoDlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + return CurrencyRateInfoDlgProcImpl(g_hContact, hdlg, msg, wParam, lParam); +} + +int CurrencyRatesEventFunc_OnUserInfoInit(WPARAM wp, LPARAM lp) +{ + MCONTACT hContact = MCONTACT(lp); + if (NULL == hContact) + return 0; + + if (false == IsMyContact(hContact)) + return 0; + + g_hContact = hContact; + + OPTIONSDIALOGPAGE odp = {}; + odp.pfnDlgProc = CurrencyRateInfoDlgProc; + odp.position = -2000000000; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_DIALOG_CURRENCYRATE_INFO); + odp.szTitle.a = LPGEN("CurrencyRate"); + g_plugin.addUserInfo(wp, &odp); + return 0; +} + + +INT_PTR CurrencyRatesMenu_EditSettings(WPARAM wp, LPARAM) +{ + MCONTACT hContact = MCONTACT(wp); + if (NULL != hContact) + ShowSettingsDlg(hContact); + return 0; +} + +namespace +{ + bool get_log_file(MCONTACT hContact, tstring& rsLogfile) + { + rsLogfile = GetContactLogFileName(hContact); + return ((rsLogfile.empty()) ? false : true); + } +} + +INT_PTR CurrencyRatesMenu_OpenLogFile(WPARAM wp, LPARAM) +{ + MCONTACT hContact = MCONTACT(wp); + if (NULL == hContact) + return 0; + + tstring sLogFileName; + if ((true == get_log_file(hContact, sLogFileName)) && (false == sLogFileName.empty())) + ::ShellExecute(nullptr, L"open", sLogFileName.c_str(), nullptr, nullptr, SW_SHOWNORMAL); + + return 0; +} + +INT_PTR CurrencyRatesMenu_RefreshContact(WPARAM wp, LPARAM) +{ + MCONTACT hContact = MCONTACT(wp); + if (NULL == hContact) + return 0; + + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = CModuleInfo::GetCurrencyRateProvidersPtr()->GetContactProviderPtr(hContact); + if (!pProvider) + return 0; + + pProvider->RefreshContact(hContact); + return 0; +} + +static INT_PTR CALLBACK CurrencyRateInfoDlgProc1(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + MCONTACT hContact = NULL; + MWindowList hWL; + + switch (msg) { + case WM_INITDIALOG: + hContact = MCONTACT(lParam); + hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX_INFO, false); + assert(hWL); + WindowList_Add(hWL, hdlg, hContact); + + ::SetWindowLongPtr(hdlg, GWLP_USERDATA, hContact); + Utils_RestoreWindowPositionNoSize(hdlg, hContact, CURRENCYRATES_MODULE_NAME, WINDOW_PREFIX_INFO); + ::ShowWindow(hdlg, SW_SHOW); + break; + + case WM_CLOSE: + DestroyWindow(hdlg); + return FALSE; + + case WM_DESTROY: + hContact = get_contact(hdlg); + if (hContact) { + SetWindowLongPtr(hdlg, GWLP_USERDATA, 0); + + hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX_INFO, false); + assert(hWL); + WindowList_Remove(hWL, hdlg); + Utils_SaveWindowPosition(hdlg, hContact, CURRENCYRATES_MODULE_NAME, WINDOW_PREFIX_INFO); + } + return FALSE; + + case WM_COMMAND: + if (LOWORD(wParam) == IDOK) { + ::DestroyWindow(hdlg); + return FALSE; + } + + default: + hContact = get_contact(hdlg); + break; + } + + return CurrencyRateInfoDlgProcImpl(hContact, hdlg, msg, wParam, lParam); +} + +int CurrencyRates_OnContactDoubleClick(WPARAM wp, LPARAM/* lp*/) +{ + MCONTACT hContact = MCONTACT(wp); + if (CModuleInfo::GetCurrencyRateProvidersPtr()->GetContactProviderPtr(hContact)) { + MWindowList hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX_INFO, true); + assert(hWL); + HWND hWnd = WindowList_Find(hWL, hContact); + if (nullptr != hWnd) { + SetForegroundWindow(hWnd); + SetFocus(hWnd); + } + else if (true == IsMyContact(hContact)) + CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_DIALOG_CURRENCYRATE_INFO_1), nullptr, CurrencyRateInfoDlgProc1, LPARAM(hContact)); + + return 1; + } + + return 0; +} + +int CurrencyRates_PrebuildContactMenu(WPARAM wp, LPARAM) +{ + Menu_EnableItem(g_hMenuEditSettings, false); + Menu_EnableItem(g_hMenuOpenLogFile, false); + #ifdef CHART_IMPLEMENT + Menu_EnableItem(g_hMenuChart, false); + #endif + Menu_EnableItem(g_hMenuRefresh, false); + + MCONTACT hContact = MCONTACT(wp); + char *szProto = GetContactProto(hContact); + if (mir_strcmp(szProto, CURRENCYRATES_PROTOCOL_NAME)) { + Menu_ShowItem(g_hMenuRoot, false); + return 0; + } + + Menu_ShowItem(g_hMenuRoot, true); + Menu_EnableItem(g_hMenuEditSettings, true); + + Menu_EnableItem(g_hMenuRefresh, true); + + tstring sLogFileName; + bool bThereIsLogFile = (true == get_log_file(hContact, sLogFileName)) + && (false == sLogFileName.empty()) && (0 == _waccess(sLogFileName.c_str(), 04)); + if (true == bThereIsLogFile) { + #ifdef CHART_IMPLEMENT + Menu_EnableItem(g_hMenuChart, true); + #endif + Menu_EnableItem(g_hMenuOpenLogFile, true); + } + + return 0; +} diff --git a/plugins/CurrencyRates/src/CurrencyRateInfoDlg.h b/plugins/CurrencyRates/src/CurrencyRateInfoDlg.h new file mode 100644 index 0000000000..d0df6e99c5 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRateInfoDlg.h @@ -0,0 +1,11 @@ +#ifndef __aa849fa0_ff3f_49e9_b47a_e7dd34783dc2_CurrencyRateInfoDlg_h__ +#define __aa849fa0_ff3f_49e9_b47a_e7dd34783dc2_CurrencyRateInfoDlg_h__ + +int CurrencyRatesEventFunc_OnUserInfoInit(WPARAM wp, LPARAM lp); +INT_PTR CurrencyRatesMenu_EditSettings(WPARAM wp, LPARAM lp); +INT_PTR CurrencyRatesMenu_OpenLogFile(WPARAM wp, LPARAM lp); +INT_PTR CurrencyRatesMenu_RefreshContact(WPARAM wp, LPARAM lp); +int CurrencyRates_PrebuildContactMenu(WPARAM wp, LPARAM lp); +int CurrencyRates_OnContactDoubleClick(WPARAM wp, LPARAM lp); + +#endif //__aa849fa0_ff3f_49e9_b47a_e7dd34783dc2_CurrencyRateInfoDlg_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderBase.cpp b/plugins/CurrencyRates/src/CurrencyRatesProviderBase.cpp new file mode 100644 index 0000000000..d05b977394 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderBase.cpp @@ -0,0 +1,883 @@ +#include "StdAfx.h" + +extern bool g_bAutoUpdate; +extern HANDLE g_hEventWorkThreadStop; + +struct CCurrencyRatesProviderBase::CXMLFileInfo +{ + CXMLFileInfo() : m_qs(L"Unknown") {} + ICurrencyRatesProvider::CProviderInfo m_pi; + CCurrencyRatesProviderBase::CCurrencyRateSection m_qs; + tstring m_sURL; +}; + +inline tstring get_ini_file_name(LPCTSTR pszFileName) +{ + return CreateFilePath(pszFileName); +} + +bool parse_currencyrate(const IXMLNode::TXMLNodePtr& pTop, CCurrencyRatesProviderBase::CCurrencyRate& q) +{ + tstring sSymbol; + tstring sDescription; + tstring sID; + + size_t cChild = pTop->GetChildCount(); + for (size_t i = 0; i < cChild; ++i) { + IXMLNode::TXMLNodePtr pNode = pTop->GetChildNode(i); + tstring sName = pNode->GetName(); + if (0 == mir_wstrcmpi(L"symbol", sName.c_str())) { + sSymbol = pNode->GetText(); + if (true == sSymbol.empty()) + return false; + } + else if (0 == mir_wstrcmpi(L"description", sName.c_str())) { + sDescription = pNode->GetText(); + } + else if (0 == mir_wstrcmpi(L"id", sName.c_str())) { + sID = pNode->GetText(); + if (true == sID.empty()) + return false; + } + } + + q = CCurrencyRatesProviderBase::CCurrencyRate(sID, TranslateW(sSymbol.c_str()), TranslateW(sDescription.c_str())); + return true; +} + +bool parse_section(const IXMLNode::TXMLNodePtr& pTop, CCurrencyRatesProviderBase::CCurrencyRateSection& qs) +{ + CCurrencyRatesProviderBase::CCurrencyRateSection::TSections aSections; + CCurrencyRatesProviderBase::CCurrencyRateSection::TCurrencyRates aCurrencyRates; + tstring sSectionName; + + size_t cChild = pTop->GetChildCount(); + for (size_t i = 0; i < cChild; ++i) { + IXMLNode::TXMLNodePtr pNode = pTop->GetChildNode(i); + tstring sName = pNode->GetName(); + if (0 == mir_wstrcmpi(L"section", sName.c_str())) { + CCurrencyRatesProviderBase::CCurrencyRateSection qs1; + if (true == parse_section(pNode, qs1)) + aSections.push_back(qs1); + } + else if (0 == mir_wstrcmpi(L"currencyrate", sName.c_str())) { + CCurrencyRatesProviderBase::CCurrencyRate q; + if (true == parse_currencyrate(pNode, q)) + aCurrencyRates.push_back(q); + } + else if (0 == mir_wstrcmpi(L"name", sName.c_str())) { + sSectionName = pNode->GetText(); + if (true == sSectionName.empty()) + return false; + } + } + + qs = CCurrencyRatesProviderBase::CCurrencyRateSection(TranslateW(sSectionName.c_str()), aSections, aCurrencyRates); + return true; +} + +IXMLNode::TXMLNodePtr find_provider(const IXMLNode::TXMLNodePtr& pRoot) +{ + IXMLNode::TXMLNodePtr pProvider; + size_t cChild = pRoot->GetChildCount(); + for (size_t i = 0; i < cChild; ++i) { + IXMLNode::TXMLNodePtr pNode = pRoot->GetChildNode(i); + tstring sName = pNode->GetName(); + if (0 == mir_wstrcmpi(L"Provider", sName.c_str())) { + pProvider = pNode; + break; + } + + pProvider = find_provider(pNode); + if (pProvider) + break; + } + + return pProvider; +} + +CCurrencyRatesProviderBase::CXMLFileInfo parse_ini_file(const tstring& rsXMLFile, bool& rbSucceded) +{ + CCurrencyRatesProviderBase::CXMLFileInfo res; + CCurrencyRatesProviderBase::CCurrencyRateSection::TSections aSections; + + const CModuleInfo::TXMLEnginePtr& pXMLEngine = CModuleInfo::GetXMLEnginePtr(); + IXMLNode::TXMLNodePtr pRoot = pXMLEngine->LoadFile(rsXMLFile); + if (pRoot) { + IXMLNode::TXMLNodePtr pProvider = find_provider(pRoot); + if (pProvider) { + rbSucceded = true; + size_t cChild = pProvider->GetChildCount(); + for (size_t i = 0; i < cChild; ++i) { + IXMLNode::TXMLNodePtr pNode = pProvider->GetChildNode(i); + tstring sName = pNode->GetName(); + if (0 == mir_wstrcmpi(L"section", sName.c_str())) { + CCurrencyRatesProviderBase::CCurrencyRateSection qs; + if (true == parse_section(pNode, qs)) + aSections.push_back(qs); + } + else if (0 == mir_wstrcmpi(L"Name", sName.c_str())) + res.m_pi.m_sName = pNode->GetText(); + else if (0 == mir_wstrcmpi(L"ref", sName.c_str())) + res.m_pi.m_sURL = pNode->GetText(); + else if (0 == mir_wstrcmpi(L"url", sName.c_str())) + res.m_sURL = pNode->GetText(); + } + } + } + + res.m_qs = CCurrencyRatesProviderBase::CCurrencyRateSection(res.m_pi.m_sName, aSections); + return res; +} + +CCurrencyRatesProviderBase::CXMLFileInfo init_xml_info(LPCTSTR pszFileName, bool& rbSucceded) +{ + rbSucceded = false; + tstring sIniFile = get_ini_file_name(pszFileName); + return parse_ini_file(sIniFile, rbSucceded); +} + +CCurrencyRatesProviderBase::CCurrencyRatesProviderBase() + : m_hEventSettingsChanged(::CreateEvent(nullptr, FALSE, FALSE, nullptr)), + m_hEventRefreshContact(::CreateEvent(nullptr, FALSE, FALSE, nullptr)), + m_bRefreshInProgress(false) +{ +} + +CCurrencyRatesProviderBase::~CCurrencyRatesProviderBase() +{ + ::CloseHandle(m_hEventSettingsChanged); + ::CloseHandle(m_hEventRefreshContact); +} + +bool CCurrencyRatesProviderBase::Init() +{ + bool bSucceded = m_pXMLInfo != nullptr; + if (!m_pXMLInfo) { + CCurrencyRatesProviderVisitorDbSettings visitor; + Accept(visitor); + assert(visitor.m_pszXMLIniFileName); + + m_pXMLInfo.reset(new CXMLFileInfo(init_xml_info(visitor.m_pszXMLIniFileName, bSucceded))); + } + + return bSucceded; +} + +CCurrencyRatesProviderBase::CXMLFileInfo* CCurrencyRatesProviderBase::GetXMLFileInfo()const +{ + // if(!m_pXMLInfo) + // { + // CCurrencyRatesProviderVisitorDbSettings visitor; + // Accept(visitor); + // assert(visitor.m_pszXMLIniFileName); + // m_pXMLInfo.reset(new CXMLFileInfo(init_xml_info(visitor.m_pszXMLIniFileName))); + // } + + return m_pXMLInfo.get(); +} + +const CCurrencyRatesProviderBase::CProviderInfo& CCurrencyRatesProviderBase::GetInfo()const +{ + return GetXMLFileInfo()->m_pi; +} + +const CCurrencyRatesProviderBase::CCurrencyRateSection& CCurrencyRatesProviderBase::GetCurrencyRates()const +{ + return GetXMLFileInfo()->m_qs; +} + +const tstring& CCurrencyRatesProviderBase::GetURL()const +{ + return GetXMLFileInfo()->m_sURL; +} + +bool CCurrencyRatesProviderBase::IsOnline() +{ + return /*g_bAutoUpdate*/true; +} + +void CCurrencyRatesProviderBase::AddContact(MCONTACT hContact) +{ + // CCritSection cs(m_cs); + assert(m_aContacts.end() == std::find(m_aContacts.begin(), m_aContacts.end(), hContact)); + + m_aContacts.push_back(hContact); +} + +void CCurrencyRatesProviderBase::DeleteContact(MCONTACT hContact) +{ + mir_cslock lck(m_cs); + + TContracts::iterator i = std::find(m_aContacts.begin(), m_aContacts.end(), hContact); + if (i != m_aContacts.end()) + m_aContacts.erase(i); +} + +void CCurrencyRatesProviderBase::SetContactStatus(MCONTACT hContact, int nNewStatus) +{ + int nStatus = db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_STATUS, ID_STATUS_OFFLINE); + if (nNewStatus != nStatus) { + db_set_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_STATUS, nNewStatus); + + if (ID_STATUS_ONLINE != nNewStatus) { + db_unset(hContact, LIST_MODULE_NAME, STATUS_MSG_NAME); + tstring sSymbol = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL); + if (false == sSymbol.empty()) + db_set_ws(hContact, LIST_MODULE_NAME, CONTACT_LIST_NAME, sSymbol.c_str()); + + SetContactExtraImage(hContact, eiEmpty); + } + } +} + +class CTendency +{ + enum { NumValues = 2 }; + enum EComparison + { + NonValid, + Greater, + Less, + Equal, + GreaterOrEqual, + LessOrEqual + }; + +public: + enum EResult + { + NotChanged, + Up, + Down + }; + +public: + CTendency() : m_nComparison(NonValid) {} + + bool Parse(const ICurrencyRatesProvider* pProvider, const tstring& rsFrmt, MCONTACT hContact) + { + m_abValueFlags[0] = false; + m_abValueFlags[1] = false; + m_nComparison = NonValid; + bool bValid = true; + int nCurValue = 0; + for (tstring::const_iterator i = rsFrmt.begin(); i != rsFrmt.end() && bValid && nCurValue < NumValues;) { + wchar_t chr = *i; + switch (chr) { + default: + if (false == std::isspace(chr)) + bValid = false; + else + ++i; + break; + + case '%': + ++i; + if (i != rsFrmt.end()) { + wchar_t t = *i; + ++i; + CCurrencyRatesProviderVisitorTendency visitor(hContact, t); + pProvider->Accept(visitor); + if (false == visitor.IsValid()) { + bValid = false; + } + else { + double d = visitor.GetResult(); + m_adValues[nCurValue] = d; + m_abValueFlags[nCurValue] = true; + ++nCurValue; + } + } + else bValid = false; + break; + case '>': + m_nComparison = Greater; + ++i; + break; + case '<': + m_nComparison = Less; + ++i; + break; + case '=': + switch (m_nComparison) { + default: + bValid = false; + break; + case NonValid: + m_nComparison = Equal; + break; + case Greater: + m_nComparison = GreaterOrEqual; + break; + case Less: + m_nComparison = LessOrEqual; + break; + } + ++i; + break; + } + } + + return (bValid && IsValid()); + } + + bool IsValid()const { return (m_abValueFlags[0] && m_abValueFlags[1] && (m_nComparison != NonValid)); } + + EResult Compare()const + { + switch (m_nComparison) { + case Greater: + if (true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) + return NotChanged; + + if (m_adValues[0] > m_adValues[1]) + return Up; + return Down; + + case GreaterOrEqual: + if ((true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) || (m_adValues[0] > m_adValues[1])) + return Up; + return Down; + + case Less: + if (true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) + return NotChanged; + + if (m_adValues[0] < m_adValues[1]) + return Up; + return Down; + + case LessOrEqual: + if ((true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) || (m_adValues[0] < m_adValues[1])) + return Up; + return Down; + + case Equal: + if (true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) + return Up; + return Down; + } + return NotChanged; + } + +private: + double m_adValues[NumValues]; + bool m_abValueFlags[NumValues]; + EComparison m_nComparison; +}; + +tstring format_rate(const ICurrencyRatesProvider *pProvider, MCONTACT hContact, const tstring &rsFrmt) +{ + tstring sResult; + + for (tstring::const_iterator i = rsFrmt.begin(); i != rsFrmt.end();) { + wchar_t chr = *i; + switch (chr) { + default: + sResult += chr; + ++i; + break; + + case '\\': + ++i; + if (i != rsFrmt.end()) { + wchar_t t = *i; + switch (t) { + case '%': sResult += L"%"; break; + case 't': sResult += L"\t"; break; + case 'n': sResult += L"\n"; break; + case '\\': sResult += L"\\"; break; + default: sResult += chr; sResult += t; break; + } + ++i; + } + else sResult += chr; + break; + + case '%': + ++i; + if (i != rsFrmt.end()) { + chr = *i; + + byte nWidth = 0; + if (::isdigit(chr)) { + nWidth = chr - 0x30; + ++i; + if (i == rsFrmt.end()) { + sResult += chr; + break; + } + else chr = *i; + } + + CCurrencyRatesProviderVisitorFormater visitor(hContact, chr, nWidth); + pProvider->Accept(visitor); + const tstring& s = visitor.GetResult(); + sResult += s; + ++i; + } + else sResult += chr; + break; + } + } + + return sResult; +} + +void log_to_file(const ICurrencyRatesProvider* pProvider, + MCONTACT hContact, + const tstring& rsLogFileName, + const tstring& rsFormat) +{ + std::string sPath = currencyrates_t2a(rsLogFileName.c_str()); + + std::string::size_type n = sPath.find_last_of("\\/"); + if (std::string::npos != n) + sPath.erase(n); + + DWORD dwAttributes = ::GetFileAttributesA(sPath.c_str()); + if ((0xffffffff == dwAttributes) || (0 == (dwAttributes&FILE_ATTRIBUTE_DIRECTORY))) + CreateDirectoryTree(sPath.c_str()); + + tofstream file(rsLogFileName.c_str(), std::ios::app | std::ios::out); + file.imbue(GetSystemLocale()); + if (file.good()) { + tstring s = format_rate(pProvider, hContact, rsFormat); + file << s; + } +} + +void log_to_history(const ICurrencyRatesProvider* pProvider, + MCONTACT hContact, + time_t nTime, + const tstring& rsFormat) +{ + tstring s = format_rate(pProvider, hContact, rsFormat); + T2Utf psz(s.c_str()); + + DBEVENTINFO dbei = {}; + dbei.szModule = CURRENCYRATES_MODULE_NAME; + dbei.timestamp = static_cast(nTime); + dbei.flags = DBEF_READ | DBEF_UTF; + dbei.eventType = EVENTTYPE_MESSAGE; + dbei.cbBlob = (int)::mir_strlen(psz) + 1; + dbei.pBlob = (PBYTE)(char*)psz; + db_event_add(hContact, &dbei); +} + +bool do_set_contact_extra_icon(MCONTACT hContact, const CTendency& tendency) +{ + CTendency::EResult nComparison = tendency.Compare(); + + if (CTendency::NotChanged == nComparison) + return SetContactExtraImage(hContact, eiNotChanged); + + if (CTendency::Up == nComparison) + return SetContactExtraImage(hContact, eiUp); + + if (CTendency::Down == nComparison) + return SetContactExtraImage(hContact, eiDown); + + return false; +} + +bool show_popup(const ICurrencyRatesProvider* pProvider, + MCONTACT hContact, + const CTendency& tendency, + const tstring& rsFormat, + const CPopupSettings& ps) +{ + if (!ServiceExists(MS_POPUP_ADDPOPUPT)) + return false; + + POPUPDATAT ppd; + memset(&ppd, 0, sizeof(ppd)); + ppd.lchContact = hContact; + + if (tendency.IsValid()) { + CTendency::EResult nComparison = tendency.Compare(); + if (CTendency::NotChanged == nComparison) + ppd.lchIcon = CurrencyRates_LoadIconEx(IDI_ICON_NOTCHANGED); + else if (CTendency::Up == nComparison) + ppd.lchIcon = CurrencyRates_LoadIconEx(IDI_ICON_UP); + else if (CTendency::Down == nComparison) + ppd.lchIcon = CurrencyRates_LoadIconEx(IDI_ICON_DOWN); + } + + CCurrencyRatesProviderVisitorFormater visitor(hContact, 's', 0); + pProvider->Accept(visitor); + const tstring& sTitle = visitor.GetResult(); + mir_wstrncpy(ppd.lptzContactName, sTitle.c_str(), MAX_CONTACTNAME); + { + ptrW ss(variables_parsedup((wchar_t*)rsFormat.c_str(), nullptr, hContact)); + tstring sText = format_rate(pProvider, hContact, tstring(ss)); + mir_wstrncpy(ppd.lptzText, sText.c_str(), MAX_SECONDLINE); + } + + if (CPopupSettings::colourDefault == ps.GetColourMode()) { + ppd.colorText = CPopupSettings::GetDefColourText(); + ppd.colorBack = CPopupSettings::GetDefColourBk(); + } + else { + ppd.colorText = ps.GetColourText(); + ppd.colorBack = ps.GetColourBk(); + } + + switch (ps.GetDelayMode()) { + default: + assert(!"Unknown popup delay mode"); + case CPopupSettings::delayFromPopup: + ppd.iSeconds = 0; + break; + case CPopupSettings::delayPermanent: + ppd.iSeconds = -1; + break; + case CPopupSettings::delayCustom: + ppd.iSeconds = ps.GetDelayTimeout(); + break; + } + + LPARAM lp = 0; + if (false == ps.GetHistoryFlag()) + lp |= 0x08; + + return (0 == CallService(MS_POPUP_ADDPOPUPT, reinterpret_cast(&ppd), lp)); +} + +void CCurrencyRatesProviderBase::WriteContactRate(MCONTACT hContact, double dRate, const tstring& rsSymbol/* = ""*/) +{ + time_t nTime = ::time(0); + + if (false == rsSymbol.empty()) + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL, rsSymbol.c_str()); + + double dPrev = 0.0; + bool bValidPrev = CurrencyRates_DBReadDouble(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_CURR_VALUE, dPrev); + if (true == bValidPrev) + CurrencyRates_DBWriteDouble(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_PREV_VALUE, dPrev); + + CurrencyRates_DBWriteDouble(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_CURR_VALUE, dRate); + db_set_dw(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FETCH_TIME, nTime); + + tstring sSymbol = rsSymbol; + + tostringstream oNick; + oNick.imbue(GetSystemLocale()); + if (false == m_sContactListFormat.empty()) { + tstring s = format_rate(this, hContact, m_sContactListFormat); + oNick << s; + } + else { + if (true == sSymbol.empty()) + sSymbol = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL); + + oNick << std::setfill(L' ') << std::setw(10) << std::left << sSymbol << std::setw(6) << std::right << dRate; + } + CTendency tendency; + + if (true == tendency.Parse(this, m_sTendencyFormat, hContact)) + do_set_contact_extra_icon(hContact, tendency); + + db_set_ws(hContact, LIST_MODULE_NAME, CONTACT_LIST_NAME, oNick.str().c_str()); + + tstring sStatusMsg = format_rate(this, hContact, m_sStatusMsgFormat); + if (false == sStatusMsg.empty()) + db_set_ws(hContact, LIST_MODULE_NAME, STATUS_MSG_NAME, sStatusMsg.c_str()); + else + db_unset(hContact, LIST_MODULE_NAME, STATUS_MSG_NAME); + + bool bUseContactSpecific = (db_get_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CONTACT_SPEC_SETTINGS, 0) > 0); + + CAdvProviderSettings global_settings(this); + + WORD dwMode = (bUseContactSpecific) + ? db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG, static_cast(lmDisabled)) + : global_settings.GetLogMode(); + if (dwMode&lmExternalFile) { + bool bAdd = true; + bool bOnlyIfChanged = (bUseContactSpecific) + ? (db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG_FILE_CONDITION, 1) > 0) + : global_settings.GetLogOnlyChangedFlag(); + if (true == bOnlyIfChanged) { + bAdd = ((false == bValidPrev) || (false == IsWithinAccuracy(dRate, dPrev))); + } + if (true == bAdd) { + tstring sLogFileName = (bUseContactSpecific) + ? CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG_FILE, global_settings.GetLogFileName().c_str()) + : global_settings.GetLogFileName(); + + if (true == sSymbol.empty()) { + sSymbol = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL); + } + + sLogFileName = GenerateLogFileName(sLogFileName, sSymbol); + + tstring sFormat = global_settings.GetLogFormat(); + if (bUseContactSpecific) { + CCurrencyRatesProviderVisitorDbSettings visitor; + Accept(visitor); + sFormat = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_LOG_FILE, visitor.m_pszDefLogFileFormat); + } + + log_to_file(this, hContact, sLogFileName, sFormat); + } + } + if (dwMode&lmInternalHistory) { + bool bAdd = true; + bool bOnlyIfChanged = (bUseContactSpecific) + ? (db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_HISTORY_CONDITION, 1) > 0) + : global_settings.GetHistoryOnlyChangedFlag(); + + if (true == bOnlyIfChanged) { + bAdd = ((false == bValidPrev) || (false == IsWithinAccuracy(dRate, dPrev))); + } + if (true == bAdd) { + tstring sFormat = (bUseContactSpecific) + ? CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_HISTORY, global_settings.GetHistoryFormat().c_str()) + : global_settings.GetHistoryFormat(); + + log_to_history(this, hContact, nTime, sFormat); + } + } + + if (dwMode&lmPopup) { + bool bOnlyIfChanged = (bUseContactSpecific) + ? (1 == db_get_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_CONDITION, 1) > 0) + : global_settings.GetShowPopupIfValueChangedFlag(); + if ((false == bOnlyIfChanged) + || ((true == bOnlyIfChanged) && (true == bValidPrev) && (false == IsWithinAccuracy(dRate, dPrev)))) { + tstring sFormat = (bUseContactSpecific) + ? CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_POPUP, global_settings.GetPopupFormat().c_str()) + : global_settings.GetPopupFormat(); + + CPopupSettings ps = *(global_settings.GetPopupSettingsPtr()); + ps.InitForContact(hContact); + show_popup(this, hContact, tendency, sFormat, ps); + } + } + + SetContactStatus(hContact, ID_STATUS_ONLINE); +} + +MCONTACT CCurrencyRatesProviderBase::CreateNewContact(const tstring& rsName) +{ + MCONTACT hContact = db_add_contact(); + if (hContact) { + if (0 == Proto_AddToContact(hContact, CURRENCYRATES_PROTOCOL_NAME)) { + tstring sProvName = GetInfo().m_sName; + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_PROVIDER, sProvName.c_str()); + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL, rsName.c_str()); + db_set_ws(hContact, LIST_MODULE_NAME, CONTACT_LIST_NAME, rsName.c_str()); + + mir_cslock lck(m_cs); + m_aContacts.push_back(hContact); + } + else { + db_delete_contact(hContact); + hContact = NULL; + } + } + + return hContact; +} + +DWORD get_refresh_timeout_miliseconds(const CCurrencyRatesProviderVisitorDbSettings& visitor) +{ + if (!g_bAutoUpdate) + return INFINITE; + + assert(visitor.m_pszDbRefreshRateType); + assert(visitor.m_pszDbRefreshRateValue); + + int nRefreshRateType = db_get_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbRefreshRateType, RRT_MINUTES); + if (nRefreshRateType < RRT_SECONDS || nRefreshRateType > RRT_HOURS) + nRefreshRateType = RRT_MINUTES; + + DWORD nTimeout = db_get_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbRefreshRateValue, 1); + switch (nRefreshRateType) { + default: + case RRT_SECONDS: + if (nTimeout < 1 || nTimeout > 60) + nTimeout = 1; + + nTimeout *= 1000; + break; + case RRT_MINUTES: + if (nTimeout < 1 || nTimeout > 60) + nTimeout = 1; + + nTimeout *= 1000 * 60; + break; + case RRT_HOURS: + if (nTimeout < 1 || nTimeout > 24) + nTimeout = 1; + + nTimeout *= 1000 * 60 * 60; + break; + } + + return nTimeout; +} + +class CBoolGuard +{ +public: + CBoolGuard(bool& rb) : m_b(rb) { m_b = true; } + ~CBoolGuard() { m_b = false; } + +private: + bool m_b; +}; + +void CCurrencyRatesProviderBase::Run() +{ + CCurrencyRatesProviderVisitorDbSettings visitor; + Accept(visitor); + + DWORD nTimeout = get_refresh_timeout_miliseconds(visitor); + m_sContactListFormat = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbDisplayNameFormat, visitor.m_pszDefDisplayFormat); + m_sStatusMsgFormat = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbStatusMsgFormat, visitor.m_pszDefStatusMsgFormat); + m_sTendencyFormat = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbTendencyFormat, visitor.m_pszDefTendencyFormat); + + enum + { + STOP_THREAD = 0, + SETTINGS_CHANGED = 1, + REFRESH_CONTACT = 2, + COUNT_SYNC_OBJECTS = 3 + }; + + HANDLE anEvents[COUNT_SYNC_OBJECTS]; + anEvents[STOP_THREAD] = g_hEventWorkThreadStop; + anEvents[SETTINGS_CHANGED] = m_hEventSettingsChanged; + anEvents[REFRESH_CONTACT] = m_hEventRefreshContact; + + TContracts anContacts; + { + mir_cslock lck(m_cs); + anContacts = m_aContacts; + } + + bool bGoToBed = false; + + if (g_bAutoUpdate) { + CBoolGuard bg(m_bRefreshInProgress); + RefreshCurrencyRates(anContacts); + } + + while (false == bGoToBed) { + anContacts.clear(); + + DWORD dwBegin = ::GetTickCount(); + DWORD dwResult = ::WaitForMultipleObjects(COUNT_SYNC_OBJECTS, anEvents, FALSE, nTimeout); + switch (dwResult) { + case WAIT_FAILED: + assert(!"WaitForMultipleObjects failed"); + bGoToBed = true; + break; + + case WAIT_ABANDONED_0 + STOP_THREAD: + case WAIT_ABANDONED_0 + SETTINGS_CHANGED: + case WAIT_ABANDONED_0 + REFRESH_CONTACT: + assert(!"WaitForMultipleObjects abandoned"); + + case WAIT_OBJECT_0 + STOP_THREAD: + bGoToBed = true; + break; + + case WAIT_OBJECT_0 + SETTINGS_CHANGED: + nTimeout = get_refresh_timeout_miliseconds(visitor); + m_sContactListFormat = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbDisplayNameFormat, visitor.m_pszDefDisplayFormat); + m_sStatusMsgFormat = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbStatusMsgFormat, visitor.m_pszDefStatusMsgFormat); + m_sTendencyFormat = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbTendencyFormat, visitor.m_pszDefTendencyFormat); + { + mir_cslock lck(m_cs); + anContacts = m_aContacts; + } + break; + case WAIT_OBJECT_0 + REFRESH_CONTACT: + { + DWORD dwTimeRest = ::GetTickCount() - dwBegin; + if (INFINITE != nTimeout && dwTimeRest < nTimeout) { + nTimeout -= dwTimeRest; + } + + { + mir_cslock lck(m_cs); + anContacts = m_aRefreshingContacts; + m_aRefreshingContacts.clear(); + } + + { + CBoolGuard bg(m_bRefreshInProgress); + RefreshCurrencyRates(anContacts); + } + } + break; + case WAIT_TIMEOUT: + nTimeout = get_refresh_timeout_miliseconds(visitor); + { + mir_cslock lck(m_cs); + anContacts = m_aContacts; + } + { + CBoolGuard bg(m_bRefreshInProgress); + RefreshCurrencyRates(anContacts); + } + break; + + default: + assert(!"What is the hell?"); + } + } + + OnEndRun(); +} + +void CCurrencyRatesProviderBase::OnEndRun() +{ + TContracts anContacts; + { + mir_cslock lck(m_cs); + anContacts = m_aContacts; + m_aRefreshingContacts.clear(); + } + + CBoolGuard bg(m_bRefreshInProgress); + std::for_each(anContacts.begin(), anContacts.end(), boost::bind(&SetContactStatus, _1, ID_STATUS_OFFLINE)); +} + +void CCurrencyRatesProviderBase::Accept(CCurrencyRatesProviderVisitor &visitor)const +{ + visitor.Visit(*this); +} + +void CCurrencyRatesProviderBase::RefreshSettings() +{ + BOOL b = ::SetEvent(m_hEventSettingsChanged); + assert(b && "Failed to set event"); +} + +void CCurrencyRatesProviderBase::RefreshAllContacts() +{ + {// for CCritSection + mir_cslock lck(m_cs); + m_aRefreshingContacts.clear(); + std::for_each(std::begin(m_aContacts), std::end(m_aContacts), [&](MCONTACT hContact) { m_aRefreshingContacts.push_back(hContact); }); + } + + BOOL b = ::SetEvent(m_hEventRefreshContact); + assert(b && "Failed to set event"); +} + +void CCurrencyRatesProviderBase::RefreshContact(MCONTACT hContact) +{ + {// for CCritSection + mir_cslock lck(m_cs); + m_aRefreshingContacts.push_back(hContact); + } + + BOOL b = ::SetEvent(m_hEventRefreshContact); + assert(b && "Failed to set event"); +} diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderBase.h b/plugins/CurrencyRates/src/CurrencyRatesProviderBase.h new file mode 100644 index 0000000000..ddb00ea18c --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderBase.h @@ -0,0 +1,119 @@ +#ifndef __3e6cb4ec_fc47_468f_a2c8_a77941176bc9_CurrencyRatesProviderBase_h__ +#define __3e6cb4ec_fc47_468f_a2c8_a77941176bc9_CurrencyRatesProviderBase_h__ + +class CCurrencyRatesProviderBase : public ICurrencyRatesProvider +{ +public: + class CCurrencyRate + { + public: + CCurrencyRate(const tstring& rsID = L"", const tstring& rsSymbol = L"", const tstring& rsName = L"") + : m_sSymbol(rsSymbol), m_sName(rsName), m_sID(rsID){} + + const tstring& GetSymbol()const{ return m_sSymbol; } + const tstring& GetName()const{ return m_sName; } + const tstring& GetID()const{ return m_sID; } + + private: + tstring m_sSymbol; + tstring m_sName; + tstring m_sID; + }; + + class CCurrencyRateSection + { + public: + typedef std::vector TSections; + typedef std::vector TCurrencyRates; + + public: + CCurrencyRateSection(const tstring& rsName = L"", const TSections& raSections = TSections(), const TCurrencyRates& raCurrencyRates = TCurrencyRates()) + : m_sName(rsName), m_aSections(raSections), m_aCurrencyRates(raCurrencyRates){} + + const tstring& GetName()const + { + return m_sName; + } + + size_t GetSectionCount()const + { + return m_aSections.size(); + } + CCurrencyRateSection GetSection(size_t nIndex)const + { + return ((nIndex < m_aSections.size()) ? m_aSections[nIndex] : CCurrencyRateSection()); + } + + size_t GetCurrencyRateCount()const + { + return m_aCurrencyRates.size(); + } + CCurrencyRate GetCurrencyRate(size_t nIndex)const + { + return ((nIndex < m_aCurrencyRates.size()) ? m_aCurrencyRates[nIndex] : CCurrencyRate()); + } + + private: + tstring m_sName; + TSections m_aSections; + TCurrencyRates m_aCurrencyRates; + }; + +protected: + typedef std::vector TContracts; + +public: + struct CXMLFileInfo; + +public: + CCurrencyRatesProviderBase(); + ~CCurrencyRatesProviderBase(); + + + const CCurrencyRateSection& GetCurrencyRates()const; + // void SetSettingsEvent(); + + virtual bool Init(); + virtual const CProviderInfo& GetInfo()const; + virtual void AddContact(MCONTACT hContact); + virtual void DeleteContact(MCONTACT hContact); + virtual void Run(); + virtual void Accept(CCurrencyRatesProviderVisitor& visitor)const; + virtual void RefreshAllContacts(); + virtual void RefreshSettings(); + virtual void RefreshContact(MCONTACT hContact); + // virtual void SetContactExtraIcon(MCONTACT hContact)const; + +protected: + const tstring& GetURL()const; + MCONTACT CreateNewContact(const tstring& rsName); + static bool IsOnline(); + static void SetContactStatus(MCONTACT hContact, int nNewStatus); + void WriteContactRate(MCONTACT hContact, double dRate, const tstring& rsSymbol = L""); + +private: + virtual void RefreshCurrencyRates(TContracts& anContacts) = 0; + +private: + virtual void OnEndRun(); + +private: + CXMLFileInfo* GetXMLFileInfo()const; + +protected: + TContracts m_aContacts; + mutable mir_cs m_cs; + +private: + typedef boost::scoped_ptr TXMLFileInfoPtr; + mutable TXMLFileInfoPtr m_pXMLInfo; + HANDLE m_hEventSettingsChanged; + HANDLE m_hEventRefreshContact; + tstring m_sContactListFormat; + tstring m_sStatusMsgFormat; + tstring m_sTendencyFormat; + TContracts m_aRefreshingContacts; + bool m_bRefreshInProgress; +}; + +#endif //__3e6cb4ec_fc47_468f_a2c8_a77941176bc9_CurrencyRatesProviderBase_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderCurrencyConverter.cpp b/plugins/CurrencyRates/src/CurrencyRatesProviderCurrencyConverter.cpp new file mode 100644 index 0000000000..49cd4529ee --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderCurrencyConverter.cpp @@ -0,0 +1,425 @@ +#include "stdafx.h" +#include "CurrencyRatesProviderCurrencyConverter.h" +#include +#include + +namespace +{ + tstring build_url(const tstring& rsURL, const tstring& from, const tstring& to) + { + tostringstream o; + o << rsURL << L"?q=" << from << L"_" << to << "&compact=ultra"; + return o.str(); + } + + tstring build_url(MCONTACT hContact, const tstring& rsURL) + { + tstring sFrom = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_ID); + tstring sTo = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_ID); + return build_url(rsURL, sFrom, sTo); + } + + bool parse_responce(const tstring& rsJSON, double& dRate) + { + try + { + boost::property_tree::ptree pt; + std::istringstream i_stream(currencyrates_t2a(rsJSON.c_str())); + + boost::property_tree::read_json(i_stream, pt); + if (!pt.empty()) + { + auto pt_nested = pt.begin()->second; + dRate = pt_nested.get_value(); + } + else + { + dRate = pt.get_value(); + } + + return true; + } + catch (boost::property_tree::ptree_error& ) + { + } + return false; + } + + using TWatchedRates = std::vector; + TWatchedRates g_aWatchedRates; + + INT_PTR CALLBACK OptDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) + { + auto get_provider = []()->CCurrencyRatesProviderCurrencyConverter* + { + auto pProviders = CModuleInfo::GetCurrencyRateProvidersPtr(); + const auto& rapCurrencyRatesProviders = pProviders->GetProviders(); + for (auto i = rapCurrencyRatesProviders.begin(); i != rapCurrencyRatesProviders.end(); ++i) { + const auto& pProvider = *i; + if (auto p = dynamic_cast(pProvider.get())) + { + return p; + } + } + + assert(!"We should never get here!"); + return nullptr; + }; + + auto make_currencyrate_name = [](const CCurrencyRatesProviderBase::CCurrencyRate& rCurrencyRate)->tstring + { + const tstring& rsDesc = rCurrencyRate.GetName(); + return((false == rsDesc.empty()) ? rsDesc : rCurrencyRate.GetSymbol()); + }; + + auto make_contact_name = [](const tstring& rsSymbolFrom, const tstring& rsSymbolTo)->tstring + { + tostringstream o; + o << rsSymbolFrom << L"/" << rsSymbolTo; + return o.str(); + }; + + + auto make_rate_name = [make_contact_name](const CCurrencyRatesProviderCurrencyConverter::TRateInfo& ri)->tstring + { + if ((false == ri.first.GetName().empty()) && (false == ri.second.GetName().empty())) + return make_contact_name(ri.first.GetName(), ri.second.GetName()); + + return make_contact_name(ri.first.GetSymbol(), ri.second.GetSymbol()); + }; + + + auto pProvider = get_provider(); + + CCommonDlgProcData d(pProvider); + CommonOptionDlgProc(hdlg, message, wParam, lParam, d); + + switch (message) { + case WM_NOTIFY: + { + LPNMHDR pNMHDR = reinterpret_cast(lParam); + switch (pNMHDR->code) { + case PSN_APPLY: + { + if (pProvider) { + TWatchedRates aTemp(g_aWatchedRates); + TWatchedRates aRemove; + size_t cWatchedRates = pProvider->GetWatchedRateCount(); + for (size_t i = 0; i < cWatchedRates; ++i) { + CCurrencyRatesProviderCurrencyConverter::TRateInfo ri; + if (true == pProvider->GetWatchedRateInfo(i, ri)) { + auto it = std::find_if(aTemp.begin(), aTemp.end(), [&ri](const auto& other)->bool + { + return ((0 == mir_wstrcmpi(ri.first.GetID().c_str(), other.first.GetID().c_str())) + && ((0 == mir_wstrcmpi(ri.second.GetID().c_str(), other.second.GetID().c_str())))); + }); + if (it == aTemp.end()) { + aRemove.push_back(ri); + } + else { + aTemp.erase(it); + } + } + } + + std::for_each(aRemove.begin(), aRemove.end(), [pProvider](const auto& ri) {pProvider->WatchForRate(ri, false); }); + std::for_each(aTemp.begin(), aTemp.end(), [pProvider](const auto& ri) {pProvider->WatchForRate(ri, true); }); + pProvider->RefreshSettings(); + } + } + break; + } + } + break; + + case WM_INITDIALOG: + TranslateDialogDefault(hdlg); + { + g_aWatchedRates.clear(); + + HWND hcbxFrom = ::GetDlgItem(hdlg, IDC_COMBO_CONVERT_FROM); + HWND hcbxTo = ::GetDlgItem(hdlg, IDC_COMBO_CONVERT_INTO); + + CCurrencyRatesProviderBase::CCurrencyRateSection rSection; + const auto& rCurrencyRates = pProvider->GetCurrencyRates(); + if (rCurrencyRates.GetSectionCount() > 0) + { + rSection = rCurrencyRates.GetSection(0); + } + + auto cCurrencyRates = rSection.GetCurrencyRateCount(); + for (auto i = 0u; i < cCurrencyRates; ++i) + { + const auto& rCurrencyRate = rSection.GetCurrencyRate(i); + tstring sName = make_currencyrate_name(rCurrencyRate); + LPCTSTR pszName = sName.c_str(); + ::SendMessage(hcbxFrom, CB_ADDSTRING, 0, reinterpret_cast(pszName)); + ::SendMessage(hcbxTo, CB_ADDSTRING, 0, reinterpret_cast(pszName)); + } + + auto cWatchedRates = pProvider->GetWatchedRateCount(); + for (auto i = 0u; i < cWatchedRates; ++i) + { + CCurrencyRatesProviderCurrencyConverter::TRateInfo ri; + if (true == pProvider->GetWatchedRateInfo(i, ri)) + { + g_aWatchedRates.push_back(ri); + tstring sRate = make_rate_name(ri); + LPCTSTR pszRateName = sRate.c_str(); + ::SendDlgItemMessage(hdlg, IDC_LIST_RATES, LB_ADDSTRING, 0, reinterpret_cast(pszRateName)); + } + } + + ::EnableWindow(::GetDlgItem(hdlg, IDC_BUTTON_ADD), FALSE); + ::EnableWindow(::GetDlgItem(hdlg, IDC_BUTTON_REMOVE), FALSE); + } + return TRUE; + + case WM_COMMAND: + switch (HIWORD(wParam)) { + case CBN_SELCHANGE: + switch (LOWORD(wParam)) { + case IDC_COMBO_REFRESH_RATE: + break; + case IDC_COMBO_CONVERT_FROM: + case IDC_COMBO_CONVERT_INTO: + { + int nFrom = static_cast(::SendDlgItemMessage(hdlg, IDC_COMBO_CONVERT_FROM, CB_GETCURSEL, 0, 0)); + int nTo = static_cast(::SendDlgItemMessage(hdlg, IDC_COMBO_CONVERT_INTO, CB_GETCURSEL, 0, 0)); + bool bEnableAddButton = ((CB_ERR != nFrom) && (CB_ERR != nTo) && (nFrom != nTo)); + EnableWindow(GetDlgItem(hdlg, IDC_BUTTON_ADD), bEnableAddButton); + } + break; + case IDC_LIST_RATES: + { + int nSel = ::SendDlgItemMessage(hdlg, IDC_LIST_RATES, LB_GETCURSEL, 0, 0); + ::EnableWindow(::GetDlgItem(hdlg, IDC_BUTTON_REMOVE), (LB_ERR != nSel)); + } + break; + } + break; + + case BN_CLICKED: + switch (LOWORD(wParam)) { + case IDC_BUTTON_ADD: + { + size_t nFrom = static_cast(::SendDlgItemMessage(hdlg, IDC_COMBO_CONVERT_FROM, CB_GETCURSEL, 0, 0)); + size_t nTo = static_cast(::SendDlgItemMessage(hdlg, IDC_COMBO_CONVERT_INTO, CB_GETCURSEL, 0, 0)); + if ((CB_ERR != nFrom) && (CB_ERR != nTo) && (nFrom != nTo)) + { + CCurrencyRatesProviderBase::CCurrencyRateSection rSection; + const auto& rCurrencyRates = pProvider->GetCurrencyRates(); + if (rCurrencyRates.GetSectionCount() > 0) + { + rSection = rCurrencyRates.GetSection(0); + } + + auto cCurrencyRates = rSection.GetCurrencyRateCount(); + if ((nFrom < cCurrencyRates) && (nTo < cCurrencyRates)) + { + CCurrencyRatesProviderCurrencyConverter::TRateInfo ri; + ri.first = rSection.GetCurrencyRate(nFrom); + ri.second = rSection.GetCurrencyRate(nTo); + + g_aWatchedRates.push_back(ri); + + tstring sRate = make_rate_name(ri); + LPCTSTR pszRateName = sRate.c_str(); + ::SendDlgItemMessage(hdlg, IDC_LIST_RATES, LB_ADDSTRING, 0, reinterpret_cast(pszRateName)); + PropSheet_Changed(::GetParent(hdlg), hdlg); + } + } + } + break; + + case IDC_BUTTON_REMOVE: + HWND hWnd = ::GetDlgItem(hdlg, IDC_LIST_RATES); + int nSel = ::SendMessage(hWnd, LB_GETCURSEL, 0, 0); + if (LB_ERR != nSel) { + if ((LB_ERR != ::SendMessage(hWnd, LB_DELETESTRING, nSel, 0)) + && (nSel < static_cast(g_aWatchedRates.size()))) { + + TWatchedRates::iterator i = g_aWatchedRates.begin(); + std::advance(i, nSel); + g_aWatchedRates.erase(i); + PropSheet_Changed(::GetParent(hdlg), hdlg); + } + } + + nSel = ::SendMessage(hWnd, LB_GETCURSEL, 0, 0); + ::EnableWindow(::GetDlgItem(hdlg, IDC_BUTTON_REMOVE), (LB_ERR != nSel)); + break; + } + break; + } + break; + } + + return FALSE; + } + +} + + +CCurrencyRatesProviderCurrencyConverter::CCurrencyRatesProviderCurrencyConverter() +{ +} + + +CCurrencyRatesProviderCurrencyConverter::~CCurrencyRatesProviderCurrencyConverter() +{ +} + +void CCurrencyRatesProviderCurrencyConverter::Accept(CCurrencyRatesProviderVisitor& visitor)const +{ + CCurrencyRatesProviderBase::Accept(visitor); + visitor.Visit(*this); +} + +void CCurrencyRatesProviderCurrencyConverter::ShowPropertyPage(WPARAM wp, OPTIONSDIALOGPAGE& odp) +{ + odp.pszTemplate = MAKEINTRESOURCEA(IDD_DIALOG_OPT_GOOGLE); + odp.pfnDlgProc = OptDlgProc; + odp.szTab.w = const_cast(GetInfo().m_sName.c_str()); + g_plugin.addOptions(wp, &odp); +} + +void CCurrencyRatesProviderCurrencyConverter::RefreshCurrencyRates(TContracts& anContacts) +{ + CHTTPSession http; + tstring sURL = GetURL(); + + for (TContracts::const_iterator i = anContacts.begin(); i != anContacts.end() && IsOnline(); ++i) { + MCONTACT hContact = *i; + + tstring sFullURL = build_url(hContact, sURL); + if ((true == http.OpenURL(sFullURL)) && (true == IsOnline())) { + tstring sHTML; + if ((true == http.ReadResponce(sHTML)) && (true == IsOnline())) { + double dRate = 0.0; + if ((true == parse_responce(sHTML, dRate)) && (true == IsOnline())) { + WriteContactRate(hContact, dRate); + continue; + } + } + } + + SetContactStatus(hContact, ID_STATUS_NA); + } +} + +double CCurrencyRatesProviderCurrencyConverter::Convert(double dAmount, const CCurrencyRate& from, const CCurrencyRate& to)const +{ + tstring sFullURL = build_url(GetURL(), from.GetID(), to.GetID()); + + CHTTPSession http; + if ((true == http.OpenURL(sFullURL))) { + tstring sHTML; + if ((true == http.ReadResponce(sHTML))) { + double dResult = 0.0; + if ((true == parse_responce(sHTML, dResult))) + { + return dResult*dAmount; + } + + throw std::runtime_error(Translate("Error occurred during HTML parsing.")); + } + else throw std::runtime_error(Translate("Error occurred during site access.")); + } + else throw std::runtime_error(Translate("Error occurred during site access.")); + + return 0.0; +} + +size_t CCurrencyRatesProviderCurrencyConverter::GetWatchedRateCount()const +{ + return m_aContacts.size(); +} + +bool CCurrencyRatesProviderCurrencyConverter::GetWatchedRateInfo(size_t nIndex, TRateInfo& rRateInfo) +{ + if(nIndex < m_aContacts.size()) { + MCONTACT hContact = m_aContacts[nIndex]; + tstring sSymbolFrom = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_ID); + tstring sSymbolTo = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_ID); + tstring sDescFrom = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_DESCRIPTION); + tstring sDescTo = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_DESCRIPTION); + + rRateInfo.first = CCurrencyRate(sSymbolFrom, sSymbolFrom, sDescFrom); + rRateInfo.second = CCurrencyRate(sSymbolTo, sSymbolTo, sDescTo); + return true; + } + else { + return false; + } +} + +bool CCurrencyRatesProviderCurrencyConverter::WatchForRate(const TRateInfo& ri, bool bWatch) +{ + auto i = std::find_if(m_aContacts.begin(), m_aContacts.end(), [&ri](auto hContact)->bool + { + tstring sFrom = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_ID); + tstring sTo = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_ID); + return ((0 == mir_wstrcmpi(ri.first.GetID().c_str(), sFrom.c_str())) + && (0 == mir_wstrcmpi(ri.second.GetID().c_str(), sTo.c_str()))); + }); + + auto make_contact_name = [](const tstring& rsSymbolFrom, const tstring& rsSymbolTo)->tstring + { + tostringstream o; + o << rsSymbolFrom << L"/" << rsSymbolTo; + return o.str(); + }; + + + if ((true == bWatch) && (i == m_aContacts.end())) + { + tstring sName = make_contact_name(ri.first.GetSymbol(), ri.second.GetSymbol()); + MCONTACT hContact = CreateNewContact(sName); + if (hContact) + { + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_ID, ri.first.GetID().c_str()); + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_ID, ri.second.GetID().c_str()); + if (false == ri.first.GetName().empty()) + { + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_DESCRIPTION, ri.first.GetName().c_str()); + } + if (false == ri.second.GetName().empty()) + { + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_DESCRIPTION, ri.second.GetName().c_str()); + } + + return true; + } + } + else if ((false == bWatch) && (i != m_aContacts.end())) + { + MCONTACT hContact = *i; + {// for CCritSection + mir_cslock lck(m_cs); + m_aContacts.erase(i); + } + + db_delete_contact(hContact); + return true; + } + + return false; +} + +MCONTACT CCurrencyRatesProviderCurrencyConverter::GetContactByID(const tstring& rsFromID, const tstring& rsToID)const +{ + mir_cslock lck(m_cs); + + auto i = std::find_if(m_aContacts.begin(), m_aContacts.end(), [rsFromID, rsToID](MCONTACT hContact)->bool + { + tstring sFrom = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_ID); + tstring sTo = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_ID); + return ((0 == mir_wstrcmpi(rsFromID.c_str(), sFrom.c_str())) && (0 == mir_wstrcmpi(rsToID.c_str(), sTo.c_str()))); + + }); + if (i != m_aContacts.end()) + return *i; + + return NULL; +} diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderCurrencyConverter.h b/plugins/CurrencyRates/src/CurrencyRatesProviderCurrencyConverter.h new file mode 100644 index 0000000000..66658c5c99 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderCurrencyConverter.h @@ -0,0 +1,29 @@ +#pragma once + +#define DB_STR_FROM_ID "FromID" +#define DB_STR_TO_ID "ToID" +#define DB_STR_FROM_DESCRIPTION "FromDesc" +#define DB_STR_TO_DESCRIPTION "ToDesc" + + +class CCurrencyRatesProviderCurrencyConverter : public CCurrencyRatesProviderBase +{ +public: + using TRateInfo = std::pair; + +public: + CCurrencyRatesProviderCurrencyConverter(); + ~CCurrencyRatesProviderCurrencyConverter(); + + double Convert(double dAmount, const CCurrencyRate& from, const CCurrencyRate& to)const; + size_t GetWatchedRateCount()const; + bool GetWatchedRateInfo(size_t nIndex, TRateInfo& rRateInfo); + bool WatchForRate(const TRateInfo& ri, bool bWatch); + MCONTACT GetContactByID(const tstring& rsFromID, const tstring& rsToID)const; + +private: + virtual void Accept(CCurrencyRatesProviderVisitor& visitor)const override; + virtual void ShowPropertyPage(WPARAM wp, OPTIONSDIALOGPAGE& odp)override; + virtual void RefreshCurrencyRates(TContracts& anContacts)override; +}; + diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitor.h b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitor.h new file mode 100644 index 0000000000..270ff00108 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitor.h @@ -0,0 +1,25 @@ +#ifndef __7fca59e7_17b2_4849_bd7a_02c7675f2d76_CurrencyRatesProviderVisitor_h__ +#define __7fca59e7_17b2_4849_bd7a_02c7675f2d76_CurrencyRatesProviderVisitor_h__ + +class CCurrencyRatesProviderBase; +class CCurrencyRatesProviderFinance; +class CCurrencyRatesProviderDukasCopy; +class CCurrencyRatesProviderGoogleFinance; +class CCurrencyRatesProviderYahoo; +class CCurrencyRatesProviderCurrencyConverter; + +class CCurrencyRatesProviderVisitor +{ +public: + CCurrencyRatesProviderVisitor() {} + virtual ~CCurrencyRatesProviderVisitor() {} + + virtual void Visit(const CCurrencyRatesProviderBase&){} + virtual void Visit(const CCurrencyRatesProviderFinance&){} + virtual void Visit(const CCurrencyRatesProviderDukasCopy&){} + virtual void Visit(const CCurrencyRatesProviderGoogleFinance&){} + virtual void Visit(const CCurrencyRatesProviderYahoo&){} + virtual void Visit(const CCurrencyRatesProviderCurrencyConverter&) {} +}; + +#endif //__7fca59e7_17b2_4849_bd7a_02c7675f2d76_CurrencyRatesProviderVisitor_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorDbSettings.cpp b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorDbSettings.cpp new file mode 100644 index 0000000000..72d16ccb17 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorDbSettings.cpp @@ -0,0 +1,70 @@ +#include "StdAfx.h" + +CCurrencyRatesProviderVisitorDbSettings::CCurrencyRatesProviderVisitorDbSettings() + : m_pszDbRefreshRateType(nullptr), + m_pszDbRefreshRateValue(nullptr), + m_pszDbDisplayNameFormat(nullptr), + m_pszDefDisplayFormat(nullptr), + m_pszDefLogFileFormat(nullptr), + m_pszDefHistoryFormat(nullptr), + m_pszXMLIniFileName(nullptr), + m_pszDbStatusMsgFormat(nullptr), + m_pszDefStatusMsgFormat(nullptr), + m_pszDbLogMode(nullptr), + m_pszDbHistoryFormat(nullptr), + m_pszDbHistoryCondition(nullptr), + m_pszDbLogFile(nullptr), + m_pszDbLogFormat(nullptr), + m_pszDbLogCondition(nullptr), + m_pszDbPopupFormat(nullptr), + m_pszDefPopupFormat(nullptr), + m_pszDbPopupCondition(nullptr), + m_pszDbPopupColourMode(nullptr), + m_pszDbPopupBkColour(nullptr), + m_pszDbPopupTextColour(nullptr), + m_pszDbPopupDelayMode(nullptr), + m_pszDbPopupDelayTimeout(nullptr), + m_pszDbPopupHistoryFlag(nullptr), + m_pszDbTendencyFormat(nullptr), + m_pszDefTendencyFormat(L"%r>%p") +{ +} + +CCurrencyRatesProviderVisitorDbSettings::~CCurrencyRatesProviderVisitorDbSettings() +{ +} + +void CCurrencyRatesProviderVisitorDbSettings::Visit(const CCurrencyRatesProviderBase&/* rProvider*/) +{ + m_pszDefLogFileFormat = L"%s\\t%t\\t%r\\n"; + m_pszDefHistoryFormat = L"%s %r"; + m_pszDefPopupFormat = L"\\nCurrent = %r\\nPrevious = %p"; +} + +void CCurrencyRatesProviderVisitorDbSettings::Visit(const CCurrencyRatesProviderCurrencyConverter&) +{ + m_pszDbRefreshRateType = "CC_RefreshRateType"; + m_pszDbRefreshRateValue = "CC_RefreshRateValue"; + m_pszDbDisplayNameFormat = "CC_DspNameFrmt"; + m_pszDefDisplayFormat = L"1 %f = %r %i"; + m_pszXMLIniFileName = L"CC.xml"; + m_pszDbStatusMsgFormat = "CC_StatusMessageFormat"; + + m_pszDbLogMode = "CC_LogMode"; + m_pszDbHistoryFormat = "CC_HistoryFormat"; + m_pszDbHistoryCondition = "CC_AddToHistoryOnlyIfValueIsChanged"; + m_pszDbLogFile = "CC_LogFile"; + m_pszDbLogFormat = "CC_LogFileFormat"; + m_pszDbLogCondition = "CC_AddToLogOnlyIfValueIsChanged"; + m_pszDbPopupFormat = "CC_PopupFormat"; + m_pszDbPopupCondition = "CC_ShowPopupOnlyIfValueChanged"; + + m_pszDbPopupColourMode = "CC_PopupColourMode"; + m_pszDbPopupBkColour = "CC_PopupColourBk"; + m_pszDbPopupTextColour = "CC_PopupColourText"; + m_pszDbPopupDelayMode = "CC_PopupDelayMode"; + m_pszDbPopupDelayTimeout = "CC_PopupDelayTimeout"; + m_pszDbPopupHistoryFlag = "CC_PopupHistoryFlag"; + + m_pszDbTendencyFormat = "CC_TendencyFormat"; +} diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorDbSettings.h b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorDbSettings.h new file mode 100644 index 0000000000..e5abdcb998 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorDbSettings.h @@ -0,0 +1,44 @@ +#ifndef __97cd432a_1119_4803_a96f_0abc1cc2653f_CurrencyRatesProviderVisitorDbSettings_h__ +#define __97cd432a_1119_4803_a96f_0abc1cc2653f_CurrencyRatesProviderVisitorDbSettings_h__ + +class CCurrencyRatesProviderVisitorDbSettings : public CCurrencyRatesProviderVisitor +{ +public: + CCurrencyRatesProviderVisitorDbSettings(); + ~CCurrencyRatesProviderVisitorDbSettings(); + +private: + virtual void Visit(const CCurrencyRatesProviderBase& rProvider)override; + virtual void Visit(const CCurrencyRatesProviderCurrencyConverter& rProvider)override; +public: + LPCSTR m_pszDbRefreshRateType; + LPCSTR m_pszDbRefreshRateValue; + LPCSTR m_pszDbDisplayNameFormat; + LPCTSTR m_pszDefDisplayFormat; + LPCTSTR m_pszDefLogFileFormat; + LPCTSTR m_pszDefHistoryFormat; + LPCTSTR m_pszXMLIniFileName; + LPCSTR m_pszDbStatusMsgFormat; + LPCTSTR m_pszDefStatusMsgFormat; + LPCTSTR m_pszDefPopupFormat; + LPCSTR m_pszDbTendencyFormat; + LPCTSTR m_pszDefTendencyFormat; + + //global settings + LPCSTR m_pszDbLogMode; + LPCSTR m_pszDbHistoryFormat; + LPCSTR m_pszDbHistoryCondition; + LPCSTR m_pszDbLogFile; + LPCSTR m_pszDbLogFormat; + LPCSTR m_pszDbLogCondition; + LPCSTR m_pszDbPopupFormat; + LPCSTR m_pszDbPopupCondition; + LPCSTR m_pszDbPopupColourMode; + LPCSTR m_pszDbPopupBkColour; + LPCSTR m_pszDbPopupTextColour; + LPCSTR m_pszDbPopupDelayMode; + LPCSTR m_pszDbPopupDelayTimeout; + LPCSTR m_pszDbPopupHistoryFlag; +}; + +#endif //__97cd432a_1119_4803_a96f_0abc1cc2653f_CurrencyRatesProviderVisitorDbSettings_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormatSpecificator.cpp b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormatSpecificator.cpp new file mode 100644 index 0000000000..e9f6450d94 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormatSpecificator.cpp @@ -0,0 +1,62 @@ +#include "StdAfx.h" + +CCurrencyRatesProviderVisitorFormatSpecificator::CCurrencyRatesProviderVisitorFormatSpecificator() +{ +} + +CCurrencyRatesProviderVisitorFormatSpecificator::~CCurrencyRatesProviderVisitorFormatSpecificator() +{ +} + +void CCurrencyRatesProviderVisitorFormatSpecificator::Visit(const CCurrencyRatesProviderDukasCopy&/* rProvider*/) +{ + m_aSpecificators.push_back(CFormatSpecificator(L"%s", TranslateT("CurrencyRate Symbol"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%d", TranslateT("CurrencyRate Name"))); +} + +void CCurrencyRatesProviderVisitorFormatSpecificator::Visit(const CCurrencyRatesProviderBase&/* rProvider*/) +{ + m_aSpecificators.push_back(CFormatSpecificator(L"%S", TranslateT("Source of Information"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%r", TranslateT("Rate Value"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%p", TranslateT("Previous Rate Value"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%X", TranslateT("Fetch Time"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%x", TranslateT("Fetch Date"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%t", TranslateT("Fetch Time and Date"))); + m_aSpecificators.push_back(CFormatSpecificator(L"\\%", TranslateT("Percentage Character (%)"))); + m_aSpecificators.push_back(CFormatSpecificator(L"\\t", TranslateT("Tabulation"))); + m_aSpecificators.push_back(CFormatSpecificator(L"\\\\", TranslateT("Left slash (\\)"))); +} + +void CCurrencyRatesProviderVisitorFormatSpecificator::Visit(const CCurrencyRatesProviderGoogleFinance&/* rProvider*/) +{ + m_aSpecificators.push_back(CFormatSpecificator(L"%s", TranslateT("CurrencyRate Symbol"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%n", TranslateT("CurrencyRate Name"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%o", TranslateT("Open Price"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%d", TranslateT("Percent Change to After Hours"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%y", TranslateT("Percent Change to Yesterday Close"))); +} + +const CCurrencyRatesProviderVisitorFormatSpecificator::TFormatSpecificators& CCurrencyRatesProviderVisitorFormatSpecificator::GetSpecificators()const +{ + return m_aSpecificators; +} + +void CCurrencyRatesProviderVisitorFormatSpecificator::Visit(const CCurrencyRatesProviderYahoo&) +{ + m_aSpecificators.push_back(CFormatSpecificator(L"%s", TranslateT("CurrencyRate Symbol"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%n", TranslateT("CurrencyRate Name"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%o", TranslateT("Open Price"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%h", TranslateT("Day's High"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%g", TranslateT("Day's Low"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%P", TranslateT("Previous Close"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%c", TranslateT("Change"))); +} + +void CCurrencyRatesProviderVisitorFormatSpecificator::Visit(const CCurrencyRatesProviderCurrencyConverter&) +{ + m_aSpecificators.push_back(CFormatSpecificator(L"%F", TranslateT("From Currency Full Name"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%f", TranslateT("From Currency Short Name"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%I", TranslateT("Into Currency Full Name"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%i", TranslateT("Into Currency Short Name"))); + m_aSpecificators.push_back(CFormatSpecificator(L"%s", TranslateT("Short notation for \"%f/%i\""))); +} \ No newline at end of file diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormatSpecificator.h b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormatSpecificator.h new file mode 100644 index 0000000000..f2e11b7f44 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormatSpecificator.h @@ -0,0 +1,33 @@ +#ifndef __00c159f3_525a_41e9_8fc5_00464b6fafa3_CurrencyRatesProviderVisitorFormatSpecificator_h__ +#define __00c159f3_525a_41e9_8fc5_00464b6fafa3_CurrencyRatesProviderVisitorFormatSpecificator_h__ + +class CCurrencyRatesProviderVisitorFormatSpecificator : public CCurrencyRatesProviderVisitor +{ +public: + struct CFormatSpecificator + { + CFormatSpecificator(const tstring& rsSymbol = L"", const tstring& rsDec = L"") + : m_sSymbol(rsSymbol), m_sDesc(rsDec){} + + tstring m_sSymbol; + tstring m_sDesc; + }; + typedef std::vector TFormatSpecificators; + +public: + CCurrencyRatesProviderVisitorFormatSpecificator(); + ~CCurrencyRatesProviderVisitorFormatSpecificator(); + + const TFormatSpecificators& GetSpecificators()const; + +private: + virtual void Visit(const CCurrencyRatesProviderDukasCopy& rProvider)override; + virtual void Visit(const CCurrencyRatesProviderBase& rProvider)override; + virtual void Visit(const CCurrencyRatesProviderGoogleFinance& rProvider)override; + virtual void Visit(const CCurrencyRatesProviderYahoo& rProvider)override; + virtual void Visit(const CCurrencyRatesProviderCurrencyConverter& rProvider)override; +private: + TFormatSpecificators m_aSpecificators; +}; + +#endif//__00c159f3_525a_41e9_8fc5_00464b6fafa3_CurrencyRatesProviderVisitorFormatSpecificator_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormater.cpp b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormater.cpp new file mode 100644 index 0000000000..e46354c2e4 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormater.cpp @@ -0,0 +1,122 @@ +#include "StdAfx.h" +#include "CurrencyRatesProviderCurrencyConverter.h" + +CCurrencyRatesProviderVisitorFormater::CCurrencyRatesProviderVisitorFormater(MCONTACT hContact, wchar_t chr, int nWidth) + : m_hContact(hContact), + m_chr(chr), + m_nWidth(nWidth) +{ +} + +CCurrencyRatesProviderVisitorFormater::~CCurrencyRatesProviderVisitorFormater() +{ +} + +const tstring& CCurrencyRatesProviderVisitorFormater::GetResult()const +{ + return m_sResult; +} + +static bool get_fetch_time(MCONTACT hContact, time_t& rTime) +{ + DBVARIANT dbv; + if (db_get(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FETCH_TIME, &dbv) || (DBVT_DWORD != dbv.type)) + return false; + + rTime = dbv.dVal; + return true; +} + +static tstring format_fetch_time(const CCurrencyRatesProviderBase&, MCONTACT hContact, const tstring& rsFormat) +{ + time_t nTime; + if (true == get_fetch_time(hContact, nTime)) { + boost::posix_time::ptime time = boost::date_time::c_local_adjustor::utc_to_local(boost::posix_time::from_time_t(nTime)); + tostringstream k; + k.imbue(std::locale(GetSystemLocale(), new ttime_facet(rsFormat.c_str()))); + k << time; + return k.str(); + } + + return tstring(); +} + +void CCurrencyRatesProviderVisitorFormater::Visit(const CCurrencyRatesProviderBase& rProvider) +{ + switch (m_chr) { + case '%': + case '\t': + case '\\': + m_sResult = m_chr; + break; + case 'S': + m_sResult = CurrencyRates_DBGetStringT(m_hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_PROVIDER); + break; + case 's': + m_sResult = CurrencyRates_DBGetStringT(m_hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL); + break; + case 'X': + m_sResult = format_fetch_time(rProvider, m_hContact, CurrencyRates_GetTimeFormat(true)); + break; + case 'x': + m_sResult = format_fetch_time(rProvider, m_hContact, CurrencyRates_GetDateFormat(true)); + break; + case 't': + { + tstring sFrmt = CurrencyRates_GetDateFormat(true); + sFrmt += L" "; + sFrmt += CurrencyRates_GetTimeFormat(true); + m_sResult = format_fetch_time(rProvider, m_hContact, sFrmt); + } + break; + case 'r': + case 'R': + FormatDoubleHelper(DB_STR_CURRENCYRATE_CURR_VALUE); + break; + case 'p': + FormatDoubleHelper(DB_STR_CURRENCYRATE_PREV_VALUE); + break; + } +} + + +tstring format_double(double dValue, int nWidth) +{ + tostringstream o; + o.imbue(GetSystemLocale()); + + if (nWidth > 0 && nWidth <= 9) + o << std::setprecision(nWidth) << std::showpoint << std::fixed; + + o << dValue; + + return o.str(); +} + +void CCurrencyRatesProviderVisitorFormater::FormatDoubleHelper(LPCSTR pszDbSet, + const tstring sInvalid/* = L"-"*/) +{ + double d = 0.0; + if (true == CurrencyRates_DBReadDouble(m_hContact, CURRENCYRATES_MODULE_NAME, pszDbSet, d)) + m_sResult = format_double(d, m_nWidth); + else + m_sResult = sInvalid; +} + +void CCurrencyRatesProviderVisitorFormater::Visit(const CCurrencyRatesProviderCurrencyConverter&) +{ + switch (m_chr) { + case 'F': + m_sResult = CurrencyRates_DBGetStringT(m_hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_DESCRIPTION); + break; + case 'f': + m_sResult = CurrencyRates_DBGetStringT(m_hContact, CURRENCYRATES_MODULE_NAME, DB_STR_FROM_ID); + break; + case 'I': + m_sResult = CurrencyRates_DBGetStringT(m_hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_DESCRIPTION); + break; + case 'i': + m_sResult = CurrencyRates_DBGetStringT(m_hContact, CURRENCYRATES_MODULE_NAME, DB_STR_TO_ID); + break; + } +} \ No newline at end of file diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormater.h b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormater.h new file mode 100644 index 0000000000..65ce84b9e4 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorFormater.h @@ -0,0 +1,27 @@ +#ifndef __2b5ddd05_9255_4be0_9408_e59768b70568_CurrencyRatesProviderVisitorFormater_h__ +#define __2b5ddd05_9255_4be0_9408_e59768b70568_CurrencyRatesProviderVisitorFormater_h__ + +class CCurrencyRatesProviderVisitorFormater : public CCurrencyRatesProviderVisitor +{ +public: + CCurrencyRatesProviderVisitorFormater(MCONTACT hContact, wchar_t chr, int nWidth); + ~CCurrencyRatesProviderVisitorFormater(); + + const tstring& GetResult()const; + +private: + virtual void Visit(const CCurrencyRatesProviderBase& rProvider)override; + virtual void Visit(const CCurrencyRatesProviderCurrencyConverter& rProvider)override; + +private: + void FormatDoubleHelper(LPCSTR pszDbSet, const tstring sInvalid = L"-"); + // void FormatChangeValueHelper(bool bPercentage); + +private: + MCONTACT m_hContact; + wchar_t m_chr; + tstring m_sResult; + int m_nWidth; +}; + +#endif //__2b5ddd05_9255_4be0_9408_e59768b70568_CurrencyRatesProviderVisitorFormater_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorTendency.cpp b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorTendency.cpp new file mode 100644 index 0000000000..b9ed9a9d94 --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorTendency.cpp @@ -0,0 +1,24 @@ +#include "stdafx.h" + +CCurrencyRatesProviderVisitorTendency::CCurrencyRatesProviderVisitorTendency(MCONTACT hContact, wchar_t chr) + : m_hContact(hContact), m_chr(chr), m_bValid(false), m_dResult(0.0) +{ +} + +void CCurrencyRatesProviderVisitorTendency::Visit(const CCurrencyRatesProviderBase&) +{ + switch (m_chr) { + case 'r': + case 'R': + GetValue(DB_STR_CURRENCYRATE_CURR_VALUE); + break; + case 'p': + GetValue(DB_STR_CURRENCYRATE_PREV_VALUE); + break; + } +} + +void CCurrencyRatesProviderVisitorTendency::GetValue(LPCSTR pszDbKeyName) +{ + m_bValid = CurrencyRates_DBReadDouble(m_hContact, CURRENCYRATES_MODULE_NAME, pszDbKeyName, m_dResult); +} diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorTendency.h b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorTendency.h new file mode 100644 index 0000000000..d0497889ae --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviderVisitorTendency.h @@ -0,0 +1,25 @@ +#ifndef __AD721194_E9944366_9CF1_0307460EF32F_CurrencyRatesProviderVisitorTendency_h__ +#define __AD721194_E9944366_9CF1_0307460EF32F_CurrencyRatesProviderVisitorTendency_h__ + +class CCurrencyRatesProviderVisitorTendency : public CCurrencyRatesProviderVisitor +{ +public: + CCurrencyRatesProviderVisitorTendency(MCONTACT hContact, wchar_t chr); + + bool IsValid()const{ return m_bValid; } + double GetResult()const{ return m_dResult; } + +private: + virtual void Visit(const CCurrencyRatesProviderBase& rProvider); + +private: + void GetValue(LPCSTR pszDbKeyName); + +private: + MCONTACT m_hContact; + wchar_t m_chr; + bool m_bValid; + double m_dResult; +}; + +#endif //__AD721194_E9944366_9CF1_0307460EF32F_CurrencyRatesProviderVisitorTendency_h__ diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviders.cpp b/plugins/CurrencyRates/src/CurrencyRatesProviders.cpp new file mode 100644 index 0000000000..a2906c619b --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviders.cpp @@ -0,0 +1,90 @@ +#include "StdAfx.h" +#include "CurrencyRatesProviderCurrencyConverter.h" + +#define LAST_RUN_VERSION "LastRunVersion" + +CCurrencyRatesProviders::CCurrencyRatesProviders() +{ + InitProviders(); +} + +CCurrencyRatesProviders::~CCurrencyRatesProviders() +{ + ClearProviders(); +} + +const CCurrencyRatesProviders::TCurrencyRatesProviders& CCurrencyRatesProviders::GetProviders()const +{ + return m_apProviders; +} + +templatevoid create_provider(CCurrencyRatesProviders::TCurrencyRatesProviders& apProviders) +{ + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider(new T); + if (pProvider->Init()) + apProviders.push_back(pProvider); +}; + +void CCurrencyRatesProviders::CreateProviders() +{ + create_provider(m_apProviders); +} + +void CCurrencyRatesProviders::ClearProviders() +{ + m_apProviders.clear(); +} + +void convert_contact_settings(MCONTACT hContact) +{ + WORD dwLogMode = db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG, static_cast(lmDisabled)); + if ((dwLogMode&lmInternalHistory) || (dwLogMode&lmExternalFile)) + db_set_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CONTACT_SPEC_SETTINGS, 1); +} + +void CCurrencyRatesProviders::InitProviders() +{ + CreateProviders(); + + const WORD nCurrentVersion = 17; + WORD nVersion = db_get_w(NULL, CURRENCYRATES_MODULE_NAME, LAST_RUN_VERSION, 1); + + for (auto &hContact : Contacts(CURRENCYRATES_MODULE_NAME)) { + TCurrencyRatesProviderPtr pProvider = GetContactProviderPtr(hContact); + if (pProvider) { + pProvider->AddContact(hContact); + if (nVersion < nCurrentVersion) + convert_contact_settings(hContact); + } + } + + db_set_w(NULL, CURRENCYRATES_MODULE_NAME, LAST_RUN_VERSION, nCurrentVersion); +} + +CCurrencyRatesProviders::TCurrencyRatesProviderPtr CCurrencyRatesProviders::GetContactProviderPtr(MCONTACT hContact)const +{ + char* szProto = GetContactProto(hContact); + if (nullptr == szProto || 0 != ::_stricmp(szProto, CURRENCYRATES_PROTOCOL_NAME)) + return TCurrencyRatesProviderPtr(); + + tstring sProvider = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_PROVIDER); + if (true == sProvider.empty()) + return TCurrencyRatesProviderPtr(); + + return FindProvider(sProvider); +} + +CCurrencyRatesProviders::TCurrencyRatesProviderPtr CCurrencyRatesProviders::FindProvider(const tstring& rsName)const +{ + TCurrencyRatesProviderPtr pResult; + for (TCurrencyRatesProviders::const_iterator i = m_apProviders.begin(); i != m_apProviders.end(); ++i) { + const TCurrencyRatesProviderPtr& pProvider = *i; + const ICurrencyRatesProvider::CProviderInfo& rInfo = pProvider->GetInfo(); + if (0 == ::mir_wstrcmpi(rsName.c_str(), rInfo.m_sName.c_str())) { + pResult = pProvider; + break; + } + } + + return pResult; +} diff --git a/plugins/CurrencyRates/src/CurrencyRatesProviders.h b/plugins/CurrencyRates/src/CurrencyRatesProviders.h new file mode 100644 index 0000000000..da30a2522b --- /dev/null +++ b/plugins/CurrencyRates/src/CurrencyRatesProviders.h @@ -0,0 +1,29 @@ +#ifndef __148306d1_da2a_43df_b1ad_0cdc8ef8a79e_CurrencyRatesProviders_h__ +#define __148306d1_da2a_43df_b1ad_0cdc8ef8a79e_CurrencyRatesProviders_h__ + +class ICurrencyRatesProvider; + +class CCurrencyRatesProviders +{ +public: + typedef boost::shared_ptr TCurrencyRatesProviderPtr; + typedef std::vector TCurrencyRatesProviders; + +public: + CCurrencyRatesProviders(); + ~CCurrencyRatesProviders(); + + TCurrencyRatesProviderPtr FindProvider(const tstring& rsName)const; + TCurrencyRatesProviderPtr GetContactProviderPtr(MCONTACT hContact)const; + const TCurrencyRatesProviders& GetProviders()const; + +private: + void InitProviders(); + void CreateProviders(); + void ClearProviders(); + +private: + TCurrencyRatesProviders m_apProviders; +}; + +#endif //__148306d1_da2a_43df_b1ad_0cdc8ef8a79e_CurrencyRatesProviders_h__ diff --git a/plugins/CurrencyRates/src/DBUtils.cpp b/plugins/CurrencyRates/src/DBUtils.cpp index c041bbf51c..ebb816a8ea 100644 --- a/plugins/CurrencyRates/src/DBUtils.cpp +++ b/plugins/CurrencyRates/src/DBUtils.cpp @@ -1,6 +1,6 @@ #include "StdAfx.h" -std::string Quotes_DBGetStringA(MCONTACT hContact, const char* szModule, const char* szSetting, const char* pszDefValue /*= NULL*/) +std::string CurrencyRates_DBGetStringA(MCONTACT hContact, const char* szModule, const char* szSetting, const char* pszDefValue /*= NULL*/) { std::string sResult; char* pszSymbol = db_get_sa(hContact, szModule, szSetting); @@ -14,7 +14,7 @@ std::string Quotes_DBGetStringA(MCONTACT hContact, const char* szModule, const c return sResult; } -std::wstring Quotes_DBGetStringW(MCONTACT hContact, const char* szModule, const char* szSetting, const wchar_t* pszDefValue/* = NULL*/) +std::wstring CurrencyRates_DBGetStringW(MCONTACT hContact, const char* szModule, const char* szSetting, const wchar_t* pszDefValue/* = NULL*/) { std::wstring sResult; wchar_t* pszSymbol = db_get_wsa(hContact, szModule, szSetting); @@ -28,12 +28,12 @@ std::wstring Quotes_DBGetStringW(MCONTACT hContact, const char* szModule, const return sResult; } -bool Quotes_DBWriteDouble(MCONTACT hContact, const char* szModule, const char* szSetting, double dValue) +bool CurrencyRates_DBWriteDouble(MCONTACT hContact, const char* szModule, const char* szSetting, double dValue) { return 0 == db_set_blob(hContact, szModule, szSetting, &dValue, sizeof(dValue)); } -bool Quotes_DBReadDouble(MCONTACT hContact, const char* szModule, const char* szSetting, double& rdValue) +bool CurrencyRates_DBReadDouble(MCONTACT hContact, const char* szModule, const char* szSetting, double& rdValue) { DBVARIANT dbv = { 0 }; dbv.type = DBVT_BLOB; diff --git a/plugins/CurrencyRates/src/DBUtils.h b/plugins/CurrencyRates/src/DBUtils.h index ae2d1d2a00..ff53653e6a 100644 --- a/plugins/CurrencyRates/src/DBUtils.h +++ b/plugins/CurrencyRates/src/DBUtils.h @@ -1,13 +1,13 @@ #ifndef __54294385_3fdd_4f0c_98c3_c583a96e7fb4_DBUtils_h__ #define __54294385_3fdd_4f0c_98c3_c583a96e7fb4_DBUtils_h__ -std::string Quotes_DBGetStringA(MCONTACT hContact, const char* szModule, const char* szSetting, const char* pszDefValue = NULL); -std::wstring Quotes_DBGetStringW(MCONTACT hContact, const char* szModule, const char* szSetting, const wchar_t* pszDefValue = NULL); +std::string CurrencyRates_DBGetStringA(MCONTACT hContact, const char* szModule, const char* szSetting, const char* pszDefValue = NULL); +std::wstring CurrencyRates_DBGetStringW(MCONTACT hContact, const char* szModule, const char* szSetting, const wchar_t* pszDefValue = NULL); -#define Quotes_DBGetStringT Quotes_DBGetStringW +#define CurrencyRates_DBGetStringT CurrencyRates_DBGetStringW -bool Quotes_DBWriteDouble(MCONTACT hContact, const char* szModule, const char* szSetting, double dValue); -bool Quotes_DBReadDouble(MCONTACT hContact, const char* szModule, const char* szSetting, double& rdValue); +bool CurrencyRates_DBWriteDouble(MCONTACT hContact, const char* szModule, const char* szSetting, double dValue); +bool CurrencyRates_DBReadDouble(MCONTACT hContact, const char* szModule, const char* szSetting, double& rdValue); #endif //__54294385_3fdd_4f0c_98c3_c583a96e7fb4_DBUtils_h__ diff --git a/plugins/CurrencyRates/src/EconomicRateInfo.h b/plugins/CurrencyRates/src/EconomicRateInfo.h index 0e47893ee0..664649a47a 100644 --- a/plugins/CurrencyRates/src/EconomicRateInfo.h +++ b/plugins/CurrencyRates/src/EconomicRateInfo.h @@ -1,9 +1,9 @@ #ifndef __87d726e0_26c6_485d_8016_1fba819b037d_EconomicRateInfo__ #define __87d726e0_26c6_485d_8016_1fba819b037d_EconomicRateInfo__ -#define QUOTES_PROTOCOL_NAME "Quotes"// protocol name +#define CURRENCYRATES_PROTOCOL_NAME "CurrencyRates"// protocol name -#define QUOTES_MODULE_NAME "Quotes" // db settings module path +#define CURRENCYRATES_MODULE_NAME "CurrencyRates" // db settings module path enum ERefreshRateType { @@ -13,13 +13,13 @@ enum ERefreshRateType }; #define DB_STR_ENABLE_LOG "EnableLog" -#define DB_STR_QUOTE_PROVIDER "QuoteProvider" -#define DB_STR_QUOTE_ID "QuoteID" -#define DB_STR_QUOTE_SYMBOL "QuoteSymbol" -#define DB_STR_QUOTE_DESCRIPTION "QuoteDescription" -#define DB_STR_QUOTE_PREV_VALUE "PreviousQuoteValue" -#define DB_STR_QUOTE_CURR_VALUE "CurrentQuoteValue" -#define DB_STR_QUOTE_FETCH_TIME "FetchTime" +#define DB_STR_CURRENCYRATE_PROVIDER "CurrencyRateProvider" +#define DB_STR_CURRENCYRATE_ID "CurrencyRateID" +#define DB_STR_CURRENCYRATE_SYMBOL "CurrencyRateSymbol" +#define DB_STR_CURRENCYRATE_DESCRIPTION "CurrencyRateDescription" +#define DB_STR_CURRENCYRATE_PREV_VALUE "PreviousCurrencyRateValue" +#define DB_STR_CURRENCYRATE_CURR_VALUE "CurrentCurrencyRateValue" +#define DB_STR_CURRENCYRATE_FETCH_TIME "FetchTime" enum ELogMode @@ -31,22 +31,22 @@ enum ELogMode }; #define DB_STR_CONTACT_SPEC_SETTINGS "ContactSpecSettings" -#define DB_STR_QUOTE_LOG "Log" -#define DB_STR_QUOTE_LOG_FILE "LogFile" -#define DB_STR_QUOTE_FORMAT_LOG_FILE "LogFileFormat" -#define DB_STR_QUOTE_FORMAT_HISTORY "HistoryFormat" -#define DB_STR_QUOTE_LOG_FILE_CONDITION "AddToLogOnlyIfValueIsChanged" -#define DB_STR_QUOTE_HISTORY_CONDITION "AddToHistoryOnlyIfValueIsChanged" -#define DB_STR_QUOTE_EXTRA_IMAGE_SLOT "ExtraImageSlot" -#define DB_STR_QUOTE_FORMAT_POPUP "PopupFormat" -#define DB_STR_QUOTE_POPUP_CONDITION "ShowPopupOnlyIfValueIsChanged" - -#define DB_STR_QUOTE_POPUP_COLOUR_MODE "PopupColourMode" -#define DB_STR_QUOTE_POPUP_COLOUR_BK "PopupColourBk" -#define DB_STR_QUOTE_POPUP_COLOUR_TEXT "PopupColourText" -#define DB_STR_QUOTE_POPUP_DELAY_MODE "PopupDelayMode" -#define DB_STR_QUOTE_POPUP_DELAY_TIMEOUT "PopupDelayTimeout" -#define DB_STR_QUOTE_POPUP_HISTORY_FLAG "PopupHistoryFlag" +#define DB_STR_CURRENCYRATE_LOG "Log" +#define DB_STR_CURRENCYRATE_LOG_FILE "LogFile" +#define DB_STR_CURRENCYRATE_FORMAT_LOG_FILE "LogFileFormat" +#define DB_STR_CURRENCYRATE_FORMAT_HISTORY "HistoryFormat" +#define DB_STR_CURRENCYRATE_LOG_FILE_CONDITION "AddToLogOnlyIfValueIsChanged" +#define DB_STR_CURRENCYRATE_HISTORY_CONDITION "AddToHistoryOnlyIfValueIsChanged" +#define DB_STR_CURRENCYRATE_EXTRA_IMAGE_SLOT "ExtraImageSlot" +#define DB_STR_CURRENCYRATE_FORMAT_POPUP "PopupFormat" +#define DB_STR_CURRENCYRATE_POPUP_CONDITION "ShowPopupOnlyIfValueIsChanged" + +#define DB_STR_CURRENCYRATE_POPUP_COLOUR_MODE "PopupColourMode" +#define DB_STR_CURRENCYRATE_POPUP_COLOUR_BK "PopupColourBk" +#define DB_STR_CURRENCYRATE_POPUP_COLOUR_TEXT "PopupColourText" +#define DB_STR_CURRENCYRATE_POPUP_DELAY_MODE "PopupDelayMode" +#define DB_STR_CURRENCYRATE_POPUP_DELAY_TIMEOUT "PopupDelayTimeout" +#define DB_STR_CURRENCYRATE_POPUP_HISTORY_FLAG "PopupHistoryFlag" // #define DB_STR_NICK "Nick" diff --git a/plugins/CurrencyRates/src/ExtraImages.cpp b/plugins/CurrencyRates/src/ExtraImages.cpp index 2111ccf089..686f4e34e7 100644 --- a/plugins/CurrencyRates/src/ExtraImages.cpp +++ b/plugins/CurrencyRates/src/ExtraImages.cpp @@ -2,9 +2,9 @@ static HANDLE hExtraIcon; -void Quotes_InitExtraIcons() +void CurrencyRates_InitExtraIcons() { - hExtraIcon = ExtraIcon_RegisterIcolib(ICON_STR_QUOTE, QUOTES_PROTOCOL_NAME, QUOTES_PROTOCOL_NAME "_" ICON_STR_MAIN); + hExtraIcon = ExtraIcon_RegisterIcolib(ICON_STR_CURRENCYRATE, CURRENCYRATES_PROTOCOL_NAME, CURRENCYRATES_PROTOCOL_NAME "_" ICON_STR_MAIN); } bool SetContactExtraImage(MCONTACT hContact, EImageIndex nIndex) @@ -15,13 +15,13 @@ bool SetContactExtraImage(MCONTACT hContact, EImageIndex nIndex) HANDLE hIcolib; switch (nIndex) { case eiUp: - hIcolib = Quotes_GetIconHandle(IDI_ICON_UP); + hIcolib = CurrencyRates_GetIconHandle(IDI_ICON_UP); break; case eiDown: - hIcolib = Quotes_GetIconHandle(IDI_ICON_DOWN); + hIcolib = CurrencyRates_GetIconHandle(IDI_ICON_DOWN); break; case eiNotChanged: - hIcolib = Quotes_GetIconHandle(IDI_ICON_NOTCHANGED); + hIcolib = CurrencyRates_GetIconHandle(IDI_ICON_NOTCHANGED); break; default: hIcolib = nullptr; diff --git a/plugins/CurrencyRates/src/ExtraImages.h b/plugins/CurrencyRates/src/ExtraImages.h index 4888203a6d..b3ef9deaa6 100644 --- a/plugins/CurrencyRates/src/ExtraImages.h +++ b/plugins/CurrencyRates/src/ExtraImages.h @@ -11,6 +11,6 @@ enum EImageIndex bool SetContactExtraImage(MCONTACT hContact, EImageIndex nIndex); -void Quotes_InitExtraIcons(void); +void CurrencyRates_InitExtraIcons(void); #endif //__9d0dac0c_12e4_46ce_809a_db6dc7d6f269_ExtraImages_h__ diff --git a/plugins/CurrencyRates/src/Forex.cpp b/plugins/CurrencyRates/src/Forex.cpp index 6a1845cf93..cd4e6dfd53 100644 --- a/plugins/CurrencyRates/src/Forex.cpp +++ b/plugins/CurrencyRates/src/Forex.cpp @@ -22,34 +22,34 @@ THandles g_ahThreads; HGENMENU g_hEnableDisableMenu; HANDLE g_hTBButton; -LPSTR g_pszAutoUpdateCmd = "Quotes/Enable-Disable Auto Update"; -LPSTR g_pszCurrencyConverter = "Quotes/CurrencyConverter"; +LPSTR g_pszAutoUpdateCmd = "CurrencyRates/Enable-Disable Auto Update"; +LPSTR g_pszCurrencyConverter = "CurrencyRates/CurrencyConverter"; void UpdateMenu(bool bAutoUpdate) { if (bAutoUpdate) // to enable auto-update - Menu_ModifyItem(g_hEnableDisableMenu, LPGENW("Auto Update Enabled"), Quotes_GetIconHandle(IDI_ICON_MAIN)); + Menu_ModifyItem(g_hEnableDisableMenu, LPGENW("Auto Update Enabled"), CurrencyRates_GetIconHandle(IDI_ICON_MAIN)); else // to disable auto-update - Menu_ModifyItem(g_hEnableDisableMenu, LPGENW("Auto Update Disabled"), Quotes_GetIconHandle(IDI_ICON_DISABLED)); + Menu_ModifyItem(g_hEnableDisableMenu, LPGENW("Auto Update Disabled"), CurrencyRates_GetIconHandle(IDI_ICON_DISABLED)); CallService(MS_TTB_SETBUTTONSTATE, reinterpret_cast(g_hTBButton), !bAutoUpdate ? TTBST_PUSHED : 0); } -INT_PTR QuotesMenu_RefreshAll(WPARAM, LPARAM) +INT_PTR CurrencyRatesMenu_RefreshAll(WPARAM, LPARAM) { - const CQuotesProviders::TQuotesProviders& apProviders = CModuleInfo::GetQuoteProvidersPtr()->GetProviders(); - std::for_each(apProviders.begin(), apProviders.end(), boost::bind(&IQuotesProvider::RefreshAllContacts, _1)); + const CCurrencyRatesProviders::TCurrencyRatesProviders& apProviders = CModuleInfo::GetCurrencyRateProvidersPtr()->GetProviders(); + std::for_each(apProviders.begin(), apProviders.end(), boost::bind(&ICurrencyRatesProvider::RefreshAllContacts, _1)); return 0; } -INT_PTR QuotesMenu_EnableDisable(WPARAM, LPARAM) +INT_PTR CurrencyRatesMenu_EnableDisable(WPARAM, LPARAM) { g_bAutoUpdate = (g_bAutoUpdate) ? false : true; - db_set_b(NULL, QUOTES_MODULE_NAME, DB_STR_AUTO_UPDATE, g_bAutoUpdate); + db_set_b(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_AUTO_UPDATE, g_bAutoUpdate); - const CModuleInfo::TQuotesProvidersPtr& pProviders = CModuleInfo::GetQuoteProvidersPtr(); - const CQuotesProviders::TQuotesProviders& rapProviders = pProviders->GetProviders(); - std::for_each(std::begin(rapProviders), std::end(rapProviders), [](const CQuotesProviders::TQuotesProviderPtr& pProvider) { + const CModuleInfo::TCurrencyRatesProvidersPtr& pProviders = CModuleInfo::GetCurrencyRateProvidersPtr(); + const CCurrencyRatesProviders::TCurrencyRatesProviders& rapProviders = pProviders->GetProviders(); + std::for_each(std::begin(rapProviders), std::end(rapProviders), [](const CCurrencyRatesProviders::TCurrencyRatesProviderPtr& pProvider) { pProvider->RefreshSettings(); if (g_bAutoUpdate) pProvider->RefreshAllContacts(); @@ -63,102 +63,102 @@ void InitMenu() { CMenuItem mi(&g_plugin); mi.flags = CMIF_UNICODE; - mi.root = g_plugin.addRootMenu(MO_MAIN, LPGENW("Currency rates"), 0, Quotes_GetIconHandle(IDI_ICON_MAIN)); + mi.root = g_plugin.addRootMenu(MO_MAIN, LPGENW("Currency rates"), 0, CurrencyRates_GetIconHandle(IDI_ICON_MAIN)); Menu_ConfigureItem(mi.root, MCI_OPT_UID, "B474F556-22B6-42A1-A91E-22FE4F671388"); SET_UID(mi, 0x9de6716, 0x3591, 0x48c4, 0x9f, 0x64, 0x1b, 0xfd, 0xc6, 0xd1, 0x34, 0x97); mi.name.w = LPGENW("Enable/Disable Auto Update"); mi.position = 10100001; - mi.hIcolibItem = Quotes_GetIconHandle(IDI_ICON_MAIN); + mi.hIcolibItem = CurrencyRates_GetIconHandle(IDI_ICON_MAIN); mi.pszService = g_pszAutoUpdateCmd; g_hEnableDisableMenu = Menu_AddMainMenuItem(&mi); - CreateServiceFunction(mi.pszService, QuotesMenu_EnableDisable); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_EnableDisable); UpdateMenu(g_bAutoUpdate); SET_UID(mi, 0x91cbabf6, 0x5073, 0x4a78, 0x84, 0x8, 0x34, 0x61, 0xc1, 0x8a, 0x34, 0xd9); mi.name.w = LPGENW("Refresh All Rates"); mi.position = 20100001; - mi.hIcolibItem = Quotes_GetIconHandle(IDI_ICON_MAIN); - mi.pszService = "Quotes/RefreshAll"; + mi.hIcolibItem = CurrencyRates_GetIconHandle(IDI_ICON_MAIN); + mi.pszService = "CurrencyRates/RefreshAll"; Menu_AddMainMenuItem(&mi); - CreateServiceFunction(mi.pszService, QuotesMenu_RefreshAll); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_RefreshAll); SET_UID(mi, 0x3663409c, 0xbd36, 0x473b, 0x9b, 0x4f, 0xff, 0x80, 0xf6, 0x2c, 0xdf, 0x9b); mi.name.w = LPGENW("Currency Converter..."); mi.position = 20100002; - mi.hIcolibItem = Quotes_GetIconHandle(IDI_ICON_CURRENCY_CONVERTER); + mi.hIcolibItem = CurrencyRates_GetIconHandle(IDI_ICON_CURRENCY_CONVERTER); mi.pszService = g_pszCurrencyConverter; Menu_AddMainMenuItem(&mi); - CreateServiceFunction(mi.pszService, QuotesMenu_CurrencyConverter); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_CurrencyConverter); SET_UID(mi, 0x7cca4fd9, 0x903f, 0x4b7d, 0x93, 0x7a, 0x18, 0x63, 0x23, 0xd4, 0xa9, 0xa9); mi.name.w = LPGENW("Export All Currency Rates"); - mi.hIcolibItem = Quotes_GetIconHandle(IDI_ICON_EXPORT); - mi.pszService = "Quotes/ExportAll"; + mi.hIcolibItem = CurrencyRates_GetIconHandle(IDI_ICON_EXPORT); + mi.pszService = "CurrencyRates/ExportAll"; mi.position = 20100003; Menu_AddMainMenuItem(&mi); - CreateServiceFunction(mi.pszService, QuotesMenu_ExportAll); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_ExportAll); SET_UID(mi, 0xa994d3b, 0x77c2, 0x4612, 0x8d, 0x5, 0x6a, 0xae, 0x8c, 0x21, 0xbd, 0xc9); mi.name.w = LPGENW("Import All Currency Rates"); - mi.hIcolibItem = Quotes_GetIconHandle(IDI_ICON_IMPORT); - mi.pszService = "Quotes/ImportAll"; + mi.hIcolibItem = CurrencyRates_GetIconHandle(IDI_ICON_IMPORT); + mi.pszService = "CurrencyRates/ImportAll"; mi.position = 20100004; Menu_AddMainMenuItem(&mi); - CreateServiceFunction(mi.pszService, QuotesMenu_ImportAll); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_ImportAll); - HookEvent(ME_CLIST_PREBUILDCONTACTMENU, Quotes_PrebuildContactMenu); + HookEvent(ME_CLIST_PREBUILDCONTACTMENU, CurrencyRates_PrebuildContactMenu); - g_hMenuRoot = mi.root = g_plugin.addRootMenu(MO_CONTACT, _T(QUOTES_PROTOCOL_NAME), 0, Quotes_GetIconHandle(IDI_ICON_MAIN)); + g_hMenuRoot = mi.root = g_plugin.addRootMenu(MO_CONTACT, LPGENW("Currency rates"), 0, CurrencyRates_GetIconHandle(IDI_ICON_MAIN)); Menu_ConfigureItem(mi.root, MCI_OPT_UID, "C259BE01-642C-461E-997D-0E756B2A3AD6"); SET_UID(mi, 0xb9812194, 0x3235, 0x4e76, 0xa3, 0xa4, 0x73, 0x32, 0x96, 0x1c, 0x1c, 0xf4); mi.name.w = LPGENW("Refresh"); - mi.hIcolibItem = Quotes_GetIconHandle(IDI_ICON_REFRESH); - mi.pszService = "Quotes/RefreshContact"; - g_hMenuRefresh = Menu_AddContactMenuItem(&mi, QUOTES_PROTOCOL_NAME); + mi.hIcolibItem = CurrencyRates_GetIconHandle(IDI_ICON_REFRESH); + mi.pszService = "CurrencyRates/RefreshContact"; + g_hMenuRefresh = Menu_AddContactMenuItem(&mi, CURRENCYRATES_PROTOCOL_NAME); Menu_ConfigureItem(g_hMenuRefresh, MCI_OPT_EXECPARAM, INT_PTR(0)); - CreateServiceFunction(mi.pszService, QuotesMenu_RefreshContact); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_RefreshContact); SET_UID(mi, 0x19a16fa2, 0xf370, 0x4201, 0x92, 0x9, 0x25, 0xde, 0x4e, 0x55, 0xf9, 0x1a); mi.name.w = LPGENW("Open Log File..."); mi.hIcolibItem = nullptr; - mi.pszService = "Quotes/OpenLogFile"; - g_hMenuOpenLogFile = Menu_AddContactMenuItem(&mi, QUOTES_PROTOCOL_NAME); + mi.pszService = "CurrencyRates/OpenLogFile"; + g_hMenuOpenLogFile = Menu_AddContactMenuItem(&mi, CURRENCYRATES_PROTOCOL_NAME); Menu_ConfigureItem(g_hMenuOpenLogFile, MCI_OPT_EXECPARAM, 1); - CreateServiceFunction(mi.pszService, QuotesMenu_OpenLogFile); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_OpenLogFile); #ifdef CHART_IMPLEMENT SET_UID(mi, 0x65da7256, 0x43a2, 0x4857, 0xac, 0x52, 0x1c, 0xb7, 0xff, 0xd7, 0x96, 0xfa); mi.name.w = LPGENW("Chart..."); mi.hIcolibItem = nullptr; - mi.pszService = "Quotes/Chart"; - g_hMenuChart = Menu_AddContactMenuItem(&mi, QUOTES_PROTOCOL_NAME); - CreateServiceFunction(mi.pszService, QuotesMenu_Chart); + mi.pszService = "CurrencyRates/Chart"; + g_hMenuChart = Menu_AddContactMenuItem(&mi, CURRENCYRATES_PROTOCOL_NAME); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_Chart); #endif SET_UID(mi, 0xac5fc17, 0x5640, 0x4f81, 0xa3, 0x44, 0x8c, 0xb6, 0x9a, 0x5c, 0x98, 0xf); mi.name.w = LPGENW("Edit Settings..."); mi.hIcolibItem = nullptr; - mi.pszService = "Quotes/EditSettings"; - g_hMenuEditSettings = Menu_AddContactMenuItem(&mi, QUOTES_PROTOCOL_NAME); + mi.pszService = "CurrencyRates/EditSettings"; + g_hMenuEditSettings = Menu_AddContactMenuItem(&mi, CURRENCYRATES_PROTOCOL_NAME); #ifdef CHART_IMPLEMENT Menu_ConfigureItem(g_hMenuEditSettings, MCI_OPT_EXECPARAM, 3); #else Menu_ConfigureItem(g_hMenuEditSettings, MCI_OPT_EXECPARAM, 2); #endif - CreateServiceFunction(mi.pszService, QuotesMenu_EditSettings); + CreateServiceFunction(mi.pszService, CurrencyRatesMenu_EditSettings); } -int Quotes_OnToolbarLoaded(WPARAM, LPARAM) +int CurrencyRates_OnToolbarLoaded(WPARAM, LPARAM) { TTBButton ttb = {}; ttb.name = LPGEN("Enable/Disable Currency Rates Auto Update"); ttb.pszService = g_pszAutoUpdateCmd; ttb.pszTooltipUp = LPGEN("Currency Rates Auto Update Enabled"); ttb.pszTooltipDn = LPGEN("Currency Rates Auto Update Disabled"); - ttb.hIconHandleUp = Quotes_GetIconHandle(IDI_ICON_MAIN); - ttb.hIconHandleDn = Quotes_GetIconHandle(IDI_ICON_DISABLED); + ttb.hIconHandleUp = CurrencyRates_GetIconHandle(IDI_ICON_MAIN); + ttb.hIconHandleDn = CurrencyRates_GetIconHandle(IDI_ICON_DISABLED); ttb.dwFlags = ((g_bAutoUpdate) ? 0 : TTBBF_PUSHED) | TTBBF_ASPUSHBUTTON | TTBBF_VISIBLE; g_hTBButton = g_plugin.addTTB(&ttb); @@ -166,8 +166,8 @@ int Quotes_OnToolbarLoaded(WPARAM, LPARAM) ttb.pszService = g_pszCurrencyConverter; ttb.pszTooltipUp = LPGEN("Currency Converter"); ttb.pszTooltipDn = LPGEN("Currency Converter"); - ttb.hIconHandleUp = Quotes_GetIconHandle(IDI_ICON_CURRENCY_CONVERTER); - ttb.hIconHandleDn = Quotes_GetIconHandle(IDI_ICON_CURRENCY_CONVERTER); + ttb.hIconHandleUp = CurrencyRates_GetIconHandle(IDI_ICON_CURRENCY_CONVERTER); + ttb.hIconHandleDn = CurrencyRates_GetIconHandle(IDI_ICON_CURRENCY_CONVERTER); ttb.dwFlags = TTBBF_VISIBLE; g_plugin.addTTB(&ttb); @@ -176,53 +176,53 @@ int Quotes_OnToolbarLoaded(WPARAM, LPARAM) static void WorkingThread(void *pParam) { - IQuotesProvider *pProvider = reinterpret_cast(pParam); + ICurrencyRatesProvider *pProvider = reinterpret_cast(pParam); assert(pProvider); if (pProvider) pProvider->Run(); } -int QuotesEventFunc_OnModulesLoaded(WPARAM, LPARAM) +int CurrencyRatesEventFunc_OnModulesLoaded(WPARAM, LPARAM) { CHTTPSession::Init(); g_hEventWorkThreadStop = ::CreateEvent(nullptr, TRUE, FALSE, nullptr); - HookEvent(ME_USERINFO_INITIALISE, QuotesEventFunc_OnUserInfoInit); + HookEvent(ME_USERINFO_INITIALISE, CurrencyRatesEventFunc_OnUserInfoInit); - HookEvent(ME_CLIST_DOUBLECLICKED, Quotes_OnContactDoubleClick); + HookEvent(ME_CLIST_DOUBLECLICKED, CurrencyRates_OnContactDoubleClick); - HookEvent(ME_TTB_MODULELOADED, Quotes_OnToolbarLoaded); + HookEvent(ME_TTB_MODULELOADED, CurrencyRates_OnToolbarLoaded); - g_bAutoUpdate = 1 == db_get_b(NULL, QUOTES_MODULE_NAME, DB_STR_AUTO_UPDATE, 1); + g_bAutoUpdate = 1 == db_get_b(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_AUTO_UPDATE, 1); InitMenu(); BOOL b = ::ResetEvent(g_hEventWorkThreadStop); assert(b && "Failed to reset event"); - const CModuleInfo::TQuotesProvidersPtr& pProviders = CModuleInfo::GetQuoteProvidersPtr(); - const CQuotesProviders::TQuotesProviders& rapProviders = pProviders->GetProviders(); - for (CQuotesProviders::TQuotesProviders::const_iterator i = rapProviders.begin(); i != rapProviders.end(); ++i) { - const CQuotesProviders::TQuotesProviderPtr& pProvider = *i; + const CModuleInfo::TCurrencyRatesProvidersPtr& pProviders = CModuleInfo::GetCurrencyRateProvidersPtr(); + const CCurrencyRatesProviders::TCurrencyRatesProviders& rapProviders = pProviders->GetProviders(); + for (CCurrencyRatesProviders::TCurrencyRatesProviders::const_iterator i = rapProviders.begin(); i != rapProviders.end(); ++i) { + const CCurrencyRatesProviders::TCurrencyRatesProviderPtr& pProvider = *i; g_ahThreads.push_back(mir_forkthread(WorkingThread, pProvider.get())); } return 0; } -int QuotesEventFunc_OnContactDeleted(WPARAM wParam, LPARAM) +int CurrencyRatesEventFunc_OnContactDeleted(WPARAM wParam, LPARAM) { MCONTACT hContact = MCONTACT(wParam); - const CModuleInfo::TQuotesProvidersPtr& pProviders = CModuleInfo::GetQuoteProvidersPtr(); - CQuotesProviders::TQuotesProviderPtr pProvider = pProviders->GetContactProviderPtr(hContact); + const CModuleInfo::TCurrencyRatesProvidersPtr& pProviders = CModuleInfo::GetCurrencyRateProvidersPtr(); + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = pProviders->GetContactProviderPtr(hContact); if (pProvider) pProvider->DeleteContact(hContact); return 0; } -INT_PTR QuoteProtoFunc_GetCaps(WPARAM wParam, LPARAM) +INT_PTR CurrencyRateProtoFunc_GetCaps(WPARAM wParam, LPARAM) { switch (wParam) { case PFLAG_UNIQUEIDTEXT: @@ -232,7 +232,7 @@ INT_PTR QuoteProtoFunc_GetCaps(WPARAM wParam, LPARAM) return 0; } -INT_PTR QuoteProtoFunc_GetStatus(WPARAM, LPARAM) +INT_PTR CurrencyRateProtoFunc_GetStatus(WPARAM, LPARAM) { return g_bAutoUpdate ? ID_STATUS_ONLINE : ID_STATUS_OFFLINE; } @@ -247,7 +247,7 @@ void WaitForWorkingThreads() } -int QuotesEventFunc_PreShutdown(WPARAM, LPARAM) +int CurrencyRatesEventFunc_PreShutdown(WPARAM, LPARAM) { ::SetEvent(g_hEventWorkThreadStop); @@ -255,22 +255,22 @@ int QuotesEventFunc_PreShutdown(WPARAM, LPARAM) return 0; } -int QuotesEventFunc_OptInitialise(WPARAM wp, LPARAM/* lp*/) +int CurrencyRatesEventFunc_OptInitialise(WPARAM wp, LPARAM/* lp*/) { - const CModuleInfo::TQuotesProvidersPtr& pProviders = CModuleInfo::GetQuoteProvidersPtr(); - const CQuotesProviders::TQuotesProviders& rapProviders = pProviders->GetProviders(); + const CModuleInfo::TCurrencyRatesProvidersPtr& pProviders = CModuleInfo::GetCurrencyRateProvidersPtr(); + const CCurrencyRatesProviders::TCurrencyRatesProviders& rapProviders = pProviders->GetProviders(); OPTIONSDIALOGPAGE odp = {}; odp.position = 910000000; - odp.szTitle.w = _T(QUOTES_PROTOCOL_NAME); + odp.szTitle.w = LPGENW("Currency Rates"); odp.szGroup.w = LPGENW("Network"); odp.flags = ODPF_USERINFOTAB | ODPF_UNICODE; - std::for_each(rapProviders.begin(), rapProviders.end(), boost::bind(&IQuotesProvider::ShowPropertyPage, _1, wp, boost::ref(odp))); + std::for_each(rapProviders.begin(), rapProviders.end(), boost::bind(&ICurrencyRatesProvider::ShowPropertyPage, _1, wp, boost::ref(odp))); return 0; } -inline int Quotes_UnhookEvent(HANDLE h) +inline int CurrencyRates_UnhookEvent(HANDLE h) { return UnhookEvent(h); } @@ -296,10 +296,10 @@ PLUGININFOEX pluginInfoEx = }; CMPlugin::CMPlugin() : - PLUGIN(QUOTES_PROTOCOL_NAME, pluginInfoEx) + PLUGIN(CURRENCYRATES_PROTOCOL_NAME, pluginInfoEx) { RegisterProtocol(PROTOTYPE_VIRTUAL); - SetUniqueId(DB_STR_QUOTE_SYMBOL); + SetUniqueId(DB_STR_CURRENCYRATE_SYMBOL); } ///////////////////////////////////////////////////////////////////////////////////////// @@ -309,19 +309,19 @@ int CMPlugin::Load(void) if (!CModuleInfo::Verify()) return 1; - Quotes_IconsInit(); - Quotes_InitExtraIcons(); + CurrencyRates_IconsInit(); + CurrencyRates_InitExtraIcons(); - CreateProtoServiceFunction(QUOTES_PROTOCOL_NAME, PS_GETCAPS, QuoteProtoFunc_GetCaps); - CreateProtoServiceFunction(QUOTES_PROTOCOL_NAME, PS_GETSTATUS, QuoteProtoFunc_GetStatus); + CreateProtoServiceFunction(CURRENCYRATES_PROTOCOL_NAME, PS_GETCAPS, CurrencyRateProtoFunc_GetCaps); + CreateProtoServiceFunction(CURRENCYRATES_PROTOCOL_NAME, PS_GETSTATUS, CurrencyRateProtoFunc_GetStatus); - HookEvent(ME_SYSTEM_MODULESLOADED, QuotesEventFunc_OnModulesLoaded); - HookEvent(ME_DB_CONTACT_DELETED, QuotesEventFunc_OnContactDeleted); - HookEvent(ME_SYSTEM_PRESHUTDOWN, QuotesEventFunc_PreShutdown); - HookEvent(ME_OPT_INITIALISE, QuotesEventFunc_OptInitialise); + HookEvent(ME_SYSTEM_MODULESLOADED, CurrencyRatesEventFunc_OnModulesLoaded); + HookEvent(ME_DB_CONTACT_DELETED, CurrencyRatesEventFunc_OnContactDeleted); + HookEvent(ME_SYSTEM_PRESHUTDOWN, CurrencyRatesEventFunc_PreShutdown); + HookEvent(ME_OPT_INITIALISE, CurrencyRatesEventFunc_OptInitialise); - CreateServiceFunction(MS_QUOTES_EXPORT, Quotes_Export); - CreateServiceFunction(MS_QUOTES_IMPORT, Quotes_Import); + CreateServiceFunction(MS_CURRENCYRATES_EXPORT, CurrencyRates_Export); + CreateServiceFunction(MS_CURRENCYRATES_IMPORT, CurrencyRates_Import); return 0; } diff --git a/plugins/CurrencyRates/src/HTTPSession.cpp b/plugins/CurrencyRates/src/HTTPSession.cpp index 20f3498e8a..f7cb9cfb85 100644 --- a/plugins/CurrencyRates/src/HTTPSession.cpp +++ b/plugins/CurrencyRates/src/HTTPSession.cpp @@ -34,8 +34,8 @@ public: NETLIBUSER nlu = {}; nlu.flags = NUF_OUTGOING | NUF_HTTPCONNS | NUF_NOHTTPSOPTION | NUF_UNICODE; - nlu.szSettingsModule = QUOTES_PROTOCOL_NAME; - nlu.szDescriptiveName.w = TranslateT("Quotes HTTP connections"); + nlu.szSettingsModule = CURRENCYRATES_PROTOCOL_NAME; + nlu.szDescriptiveName.w = TranslateT("CurrencyRates HTTP connections"); g_hNetLib = Netlib_RegisterUser(&nlu); return (nullptr != g_hNetLib); } @@ -46,7 +46,7 @@ public: { m_aURL.clear(); - std::string s = quotes_t2a(rsURL.c_str()); + std::string s = currencyrates_t2a(rsURL.c_str()); const char* psz = s.c_str(); m_aURL.insert(m_aURL.begin(), psz, psz + mir_strlen(psz) + 1); return true; @@ -102,7 +102,7 @@ public: else { // USES_CONVERSION; // LPCTSTR p = A2CT(pResult); - rsResponce = quotes_a2t(pResult);//p; + rsResponce = currencyrates_a2t(pResult);//p; } bResult = true; diff --git a/plugins/CurrencyRates/src/ICurrencyRatesProvider.h b/plugins/CurrencyRates/src/ICurrencyRatesProvider.h new file mode 100644 index 0000000000..cbdb467bf5 --- /dev/null +++ b/plugins/CurrencyRates/src/ICurrencyRatesProvider.h @@ -0,0 +1,39 @@ +#pragma once + +#ifndef __ac71e133_786c_41a7_ab07_625b76ff2a8c_CurrencyRatesProvider_h__ +#define __ac71e133_786c_41a7_ab07_625b76ff2a8c_CurrencyRatesProvider_h__ + +class CCurrencyRatesProviderVisitor; + +class ICurrencyRatesProvider : private boost::noncopyable +{ +public: + struct CProviderInfo + { + tstring m_sName; + tstring m_sURL; + + }; + +public: + ICurrencyRatesProvider() {} + virtual ~ICurrencyRatesProvider() {} + + virtual bool Init() = 0; + virtual const CProviderInfo& GetInfo()const = 0; + + virtual void AddContact(MCONTACT hContact) = 0; + virtual void DeleteContact(MCONTACT hContact) = 0; + + virtual void ShowPropertyPage(WPARAM wp, OPTIONSDIALOGPAGE& odp) = 0; + virtual void RefreshAllContacts() = 0; + virtual void RefreshSettings() = 0; + virtual void RefreshContact(MCONTACT hContact) = 0; + // virtual void SetContactExtraIcon(MCONTACT hContact)const = 0; + + virtual void Run() = 0; + + virtual void Accept(CCurrencyRatesProviderVisitor& visitor)const = 0; +}; + +#endif //__ac71e133_786c_41a7_ab07_625b76ff2a8c_CurrencyRatesProvider_h__ diff --git a/plugins/CurrencyRates/src/IQuotesProvider.h b/plugins/CurrencyRates/src/IQuotesProvider.h deleted file mode 100644 index 763248aa7f..0000000000 --- a/plugins/CurrencyRates/src/IQuotesProvider.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#ifndef __ac71e133_786c_41a7_ab07_625b76ff2a8c_QuotesProvider_h__ -#define __ac71e133_786c_41a7_ab07_625b76ff2a8c_QuotesProvider_h__ - -class CQuotesProviderVisitor; - -class IQuotesProvider : private boost::noncopyable -{ -public: - struct CProviderInfo - { - tstring m_sName; - tstring m_sURL; - - }; - -public: - IQuotesProvider() {} - virtual ~IQuotesProvider() {} - - virtual bool Init() = 0; - virtual const CProviderInfo& GetInfo()const = 0; - - virtual void AddContact(MCONTACT hContact) = 0; - virtual void DeleteContact(MCONTACT hContact) = 0; - - virtual void ShowPropertyPage(WPARAM wp, OPTIONSDIALOGPAGE& odp) = 0; - virtual void RefreshAllContacts() = 0; - virtual void RefreshSettings() = 0; - virtual void RefreshContact(MCONTACT hContact) = 0; - // virtual void SetContactExtraIcon(MCONTACT hContact)const = 0; - - virtual void Run() = 0; - - virtual void Accept(CQuotesProviderVisitor& visitor)const = 0; -}; - -#endif //__ac71e133_786c_41a7_ab07_625b76ff2a8c_QuotesProvider_h__ diff --git a/plugins/CurrencyRates/src/IconLib.cpp b/plugins/CurrencyRates/src/IconLib.cpp index 9e0a079edc..52a3ca1acf 100644 --- a/plugins/CurrencyRates/src/IconLib.cpp +++ b/plugins/CurrencyRates/src/IconLib.cpp @@ -4,11 +4,11 @@ static IconItem iconList[] = { { LPGEN("Protocol icon"), ICON_STR_MAIN, IDI_ICON_MAIN }, { LPGEN("Auto Update Disabled"), "auto_update_disabled", IDI_ICON_DISABLED }, - { LPGEN("Quote/Rate up"), "quote_up", IDI_ICON_UP }, - { LPGEN("Quote/Rate down"), "quote_down", IDI_ICON_DOWN }, - { LPGEN("Quote/Rate not changed"), "quote_not_changed", IDI_ICON_NOTCHANGED }, - { LPGEN("Quote Section"), "quote_section", IDI_ICON_SECTION }, - { LPGEN("Quote"), ICON_STR_QUOTE, IDI_ICON_QUOTE }, + { LPGEN("CurrencyRate/Rate up"), "currencyrate_up", IDI_ICON_UP }, + { LPGEN("CurrencyRate/Rate down"), "currencyrate_down", IDI_ICON_DOWN }, + { LPGEN("CurrencyRate/Rate not changed"), "currencyrate_not_changed", IDI_ICON_NOTCHANGED }, + { LPGEN("CurrencyRate Section"), "currencyrate_section", IDI_ICON_SECTION }, + { LPGEN("CurrencyRate"), ICON_STR_CURRENCYRATE, IDI_ICON_CURRENCYRATE }, { LPGEN("Currency Converter"), "currency_converter", IDI_ICON_CURRENCY_CONVERTER }, { LPGEN("Refresh"), "refresh", IDI_ICON_REFRESH }, { LPGEN("Export"), "export", IDI_ICON_EXPORT }, @@ -16,12 +16,12 @@ static IconItem iconList[] = { LPGEN("Import"), "import", IDI_ICON_IMPORT } }; -void Quotes_IconsInit() +void CurrencyRates_IconsInit() { - ::g_plugin.registerIcon(QUOTES_PROTOCOL_NAME, iconList, QUOTES_PROTOCOL_NAME); + ::g_plugin.registerIcon(CURRENCYRATES_PROTOCOL_NAME, iconList, CURRENCYRATES_PROTOCOL_NAME); } -HICON Quotes_LoadIconEx(int iconId, bool bBig /*= false*/) +HICON CurrencyRates_LoadIconEx(int iconId, bool bBig /*= false*/) { for (int i = 0; i < _countof(iconList); i++) if (iconList[i].defIconID == iconId) @@ -30,7 +30,7 @@ HICON Quotes_LoadIconEx(int iconId, bool bBig /*= false*/) return nullptr; } -HANDLE Quotes_GetIconHandle(int iconId) +HANDLE CurrencyRates_GetIconHandle(int iconId) { for (int i = 0; i < _countof(iconList); i++) if (iconList[i].defIconID == iconId) diff --git a/plugins/CurrencyRates/src/IconLib.h b/plugins/CurrencyRates/src/IconLib.h index fff9e3a571..4e0146fba8 100644 --- a/plugins/CurrencyRates/src/IconLib.h +++ b/plugins/CurrencyRates/src/IconLib.h @@ -2,10 +2,10 @@ #define __8821d334_afac_439e_9a81_76318e1ac4ef_IconLib_h__ #define ICON_STR_MAIN "main" -#define ICON_STR_QUOTE "quote" +#define ICON_STR_CURRENCYRATE "currencyrate" -void Quotes_IconsInit(); -HICON Quotes_LoadIconEx(int iconId, bool bBig = false); -HANDLE Quotes_GetIconHandle(int iconId); +void CurrencyRates_IconsInit(); +HICON CurrencyRates_LoadIconEx(int iconId, bool bBig = false); +HANDLE CurrencyRates_GetIconHandle(int iconId); #endif //__8821d334_afac_439e_9a81_76318e1ac4ef_IconLib_h__ diff --git a/plugins/CurrencyRates/src/ImportExport.cpp b/plugins/CurrencyRates/src/ImportExport.cpp index 31bdd33913..98317a56c7 100644 --- a/plugins/CurrencyRates/src/ImportExport.cpp +++ b/plugins/CurrencyRates/src/ImportExport.cpp @@ -1,5 +1,5 @@ #include "StdAfx.h" -#include "QuotesProviderCurrencyConverter.h" +#include "CurrencyRatesProviderCurrencyConverter.h" LPCTSTR g_pszXmlValue = L"Value"; LPCTSTR g_pszXmlName = L"Name"; @@ -83,7 +83,7 @@ static int enum_contact_settings(const char* szSetting, void *lp) IXMLNode::TXMLNodePtr pXmlSet = ctx->m_pXmlEngine->CreateNode(g_pszXmlSetting, tstring()); if (pXmlSet) { - IXMLNode::TXMLNodePtr pXmlName = ctx->m_pXmlEngine->CreateNode(g_pszXmlName, quotes_a2t(szSetting)); + IXMLNode::TXMLNodePtr pXmlName = ctx->m_pXmlEngine->CreateNode(g_pszXmlName, currencyrates_a2t(szSetting)); IXMLNode::TXMLNodePtr pXmlValue = ctx->m_pXmlEngine->CreateNode(g_pszXmlValue, sValue.str()); if (pXmlName && pXmlValue) { @@ -103,7 +103,7 @@ int EnumDbModules(const char *szModuleName, void *lp) { CEnumContext *ctx = (CEnumContext*)lp; IXMLNode::TXMLNodePtr pXml = ctx->m_pNode; - IXMLNode::TXMLNodePtr pModule = ctx->m_pXmlEngine->CreateNode(g_pszXmlModule, quotes_a2t(szModuleName)/*A2CT(szModuleName)*/); + IXMLNode::TXMLNodePtr pModule = ctx->m_pXmlEngine->CreateNode(g_pszXmlModule, currencyrates_a2t(szModuleName)/*A2CT(szModuleName)*/); if (pModule) { ctx->m_pszModule = szModuleName; ctx->m_pNode = pModule; @@ -200,7 +200,7 @@ bool show_open_file_dialog(bool bOpen, tstring& rsFile) return true; } -INT_PTR Quotes_Export(WPARAM wp, LPARAM lp) +INT_PTR CurrencyRates_Export(WPARAM wp, LPARAM lp) { tstring sFileName; const char* pszFile = reinterpret_cast(lp); @@ -208,14 +208,14 @@ INT_PTR Quotes_Export(WPARAM wp, LPARAM lp) if (false == show_open_file_dialog(false, sFileName)) return -1; } - else sFileName = quotes_a2t(pszFile);//A2CT(pszFile); + else sFileName = currencyrates_a2t(pszFile);//A2CT(pszFile); CModuleInfo::TXMLEnginePtr pXmlEngine = CModuleInfo::GetInstance().GetXMLEnginePtr(); - CModuleInfo::TQuotesProvidersPtr pProviders = CModuleInfo::GetInstance().GetQuoteProvidersPtr(); + CModuleInfo::TCurrencyRatesProvidersPtr pProviders = CModuleInfo::GetInstance().GetCurrencyRateProvidersPtr(); IXMLNode::TXMLNodePtr pRoot = pXmlEngine->CreateNode(g_pszXmlContacts, tstring()); MCONTACT hContact = MCONTACT(wp); if (hContact) { - CQuotesProviders::TQuotesProviderPtr pProvider = pProviders->GetContactProviderPtr(hContact); + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = pProviders->GetContactProviderPtr(hContact); if (pProvider) { IXMLNode::TXMLNodePtr pNode = export_contact(hContact, pXmlEngine); if (pNode) @@ -223,8 +223,8 @@ INT_PTR Quotes_Export(WPARAM wp, LPARAM lp) } } else { - for (auto &cc : Contacts(QUOTES_MODULE_NAME)) { - CQuotesProviders::TQuotesProviderPtr pProvider = pProviders->GetContactProviderPtr(cc); + for (auto &cc : Contacts(CURRENCYRATES_MODULE_NAME)) { + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = pProviders->GetContactProviderPtr(cc); if (pProvider) { IXMLNode::TXMLNodePtr pNode = export_contact(cc, pXmlEngine); if (pNode) @@ -248,7 +248,7 @@ bool handle_module(MCONTACT hContact, const IXMLNode::TXMLNodePtr& pXmlModule) tstring sModuleName = pXmlModule->GetText(); if (false == sModuleName.empty()) { DBCONTACTWRITESETTING dbs; - std::string s = quotes_t2a(sModuleName.c_str()); + std::string s = currencyrates_t2a(sModuleName.c_str()); dbs.szModule = s.c_str();//T2CA(sModuleName.c_str()); bool bCListModule = 0 == mir_wstrcmpi(sModuleName.c_str(), L"CList"); @@ -276,7 +276,7 @@ bool handle_module(MCONTACT hContact, const IXMLNode::TXMLNodePtr& pXmlModule) } if ((false == sName.empty()) && (false == sType.empty())) { - std::string s1 = quotes_t2a(sName.c_str()); + std::string s1 = currencyrates_t2a(sName.c_str()); dbs.szSetting = s1.c_str(); if (0 == mir_wstrcmpi(g_pszXmlTypeByte, sType.c_str())) { tistringstream in(sValue.c_str()); @@ -390,19 +390,19 @@ struct CContactState { CContactState() : m_hContact(NULL), m_bNewContact(false) {} MCONTACT m_hContact; - CQuotesProviders::TQuotesProviderPtr m_pProvider; + CCurrencyRatesProviders::TCurrencyRatesProviderPtr m_pProvider; bool m_bNewContact; }; -IXMLNode::TXMLNodePtr find_quotes_module(const IXMLNode::TXMLNodePtr& pXmlContact) +IXMLNode::TXMLNodePtr find_currencyrates_module(const IXMLNode::TXMLNodePtr& pXmlContact) { - static const tstring g_sQuotes = quotes_a2t(QUOTES_MODULE_NAME); + static const tstring g_sCurrencyRates = currencyrates_a2t(CURRENCYRATES_MODULE_NAME); size_t cChild = pXmlContact->GetChildCount(); for (size_t i = 0; i < cChild; ++i) { IXMLNode::TXMLNodePtr pNode = pXmlContact->GetChildNode(i); tstring sName = pNode->GetName(); if ((0 == mir_wstrcmpi(g_pszXmlModule, sName.c_str())) - && (0 == mir_wstrcmpi(g_sQuotes.c_str(), pNode->GetText().c_str()))) { + && (0 == mir_wstrcmpi(g_sCurrencyRates.c_str(), pNode->GetText().c_str()))) { return pNode; } } @@ -432,47 +432,47 @@ TNameValue parse_setting_node(const IXMLNode::TXMLNodePtr& pXmlSetting) return std::make_pair(sName, sValue); } -CQuotesProviders::TQuotesProviderPtr find_provider(const IXMLNode::TXMLNodePtr& pXmlQuotesModule) +CCurrencyRatesProviders::TCurrencyRatesProviderPtr find_provider(const IXMLNode::TXMLNodePtr& pXmlCurrencyRatesModule) { // USES_CONVERSION; - static const tstring g_sQuotesProvider = quotes_a2t(DB_STR_QUOTE_PROVIDER);//A2CT(DB_STR_QUOTE_PROVIDER); - size_t cChild = pXmlQuotesModule->GetChildCount(); + static const tstring g_sCurrencyRatesProvider = currencyrates_a2t(DB_STR_CURRENCYRATE_PROVIDER);//A2CT(DB_STR_CURRENCYRATE_PROVIDER); + size_t cChild = pXmlCurrencyRatesModule->GetChildCount(); for (size_t i = 0; i < cChild; ++i) { - IXMLNode::TXMLNodePtr pXMLSetting = pXmlQuotesModule->GetChildNode(i); + IXMLNode::TXMLNodePtr pXMLSetting = pXmlCurrencyRatesModule->GetChildNode(i); if (pXMLSetting && (0 == mir_wstrcmpi(g_pszXmlSetting, pXMLSetting->GetName().c_str()))) { TNameValue Item = parse_setting_node(pXMLSetting); - if ((0 == mir_wstrcmpi(g_sQuotesProvider.c_str(), Item.first.c_str())) && (false == Item.second.empty())) { - return CModuleInfo::GetInstance().GetQuoteProvidersPtr()->FindProvider(Item.second); + if ((0 == mir_wstrcmpi(g_sCurrencyRatesProvider.c_str(), Item.first.c_str())) && (false == Item.second.empty())) { + return CModuleInfo::GetInstance().GetCurrencyRateProvidersPtr()->FindProvider(Item.second); } } } - return CQuotesProviders::TQuotesProviderPtr(); + return CCurrencyRatesProviders::TCurrencyRatesProviderPtr(); } bool get_contact_state(const IXMLNode::TXMLNodePtr& pXmlContact, CContactState& cst) { - class visitor : public CQuotesProviderVisitor + class visitor : public CCurrencyRatesProviderVisitor { public: - visitor(const IXMLNode::TXMLNodePtr& pXmlQuotes) - : m_hContact(NULL), m_pXmlQuotes(pXmlQuotes) + visitor(const IXMLNode::TXMLNodePtr& pXmlCurrencyRates) + : m_hContact(NULL), m_pXmlCurrencyRates(pXmlCurrencyRates) { } MCONTACT GetContact()const { return m_hContact; } private: - virtual void Visit(const CQuotesProviderCurrencyConverter& rProvider)override + virtual void Visit(const CCurrencyRatesProviderCurrencyConverter& rProvider)override { - static const tstring g_sFromID = quotes_a2t(DB_STR_FROM_ID);//A2CT(DB_STR_FROM_ID); - static const tstring g_sToID = quotes_a2t(DB_STR_TO_ID);//A2CT(DB_STR_TO_ID); + static const tstring g_sFromID = currencyrates_a2t(DB_STR_FROM_ID);//A2CT(DB_STR_FROM_ID); + static const tstring g_sToID = currencyrates_a2t(DB_STR_TO_ID);//A2CT(DB_STR_TO_ID); tstring sFromID; tstring sToID; - size_t cChild = m_pXmlQuotes->GetChildCount(); + size_t cChild = m_pXmlCurrencyRates->GetChildCount(); for (size_t i = 0; i < cChild; ++i) { - IXMLNode::TXMLNodePtr pNode = m_pXmlQuotes->GetChildNode(i); + IXMLNode::TXMLNodePtr pNode = m_pXmlCurrencyRates->GetChildNode(i); if (pNode && (0 == mir_wstrcmpi(g_pszXmlSetting, pNode->GetName().c_str()))) { TNameValue Item = parse_setting_node(pNode); if (0 == mir_wstrcmpi(g_sFromID.c_str(), Item.first.c_str())) { @@ -491,12 +491,12 @@ bool get_contact_state(const IXMLNode::TXMLNodePtr& pXmlContact, CContactState& tstring GetXMLNodeValue(const char* pszXMLNodeName)const { - tstring sXMLNodeName = quotes_a2t(pszXMLNodeName); + tstring sXMLNodeName = currencyrates_a2t(pszXMLNodeName); tstring sValue; - size_t cChild = m_pXmlQuotes->GetChildCount(); + size_t cChild = m_pXmlCurrencyRates->GetChildCount(); for (size_t i = 0; i < cChild; ++i) { - IXMLNode::TXMLNodePtr pNode = m_pXmlQuotes->GetChildNode(i); + IXMLNode::TXMLNodePtr pNode = m_pXmlCurrencyRates->GetChildNode(i); if (pNode && (0 == mir_wstrcmpi(g_pszXmlSetting, pNode->GetName().c_str()))) { TNameValue Item = parse_setting_node(pNode); if (0 == mir_wstrcmpi(Item.first.c_str(), sXMLNodeName.c_str())) { @@ -511,14 +511,14 @@ bool get_contact_state(const IXMLNode::TXMLNodePtr& pXmlContact, CContactState& private: MCONTACT m_hContact; - IXMLNode::TXMLNodePtr m_pXmlQuotes; + IXMLNode::TXMLNodePtr m_pXmlCurrencyRates; }; - IXMLNode::TXMLNodePtr pXmlQuotes = find_quotes_module(pXmlContact); - if (pXmlQuotes) { - cst.m_pProvider = find_provider(pXmlQuotes); + IXMLNode::TXMLNodePtr pXmlCurrencyRates = find_currencyrates_module(pXmlContact); + if (pXmlCurrencyRates) { + cst.m_pProvider = find_provider(pXmlCurrencyRates); if (cst.m_pProvider) { - visitor vs(pXmlQuotes); + visitor vs(pXmlCurrencyRates); cst.m_pProvider->Accept(vs); cst.m_hContact = vs.GetContact(); return true; @@ -539,7 +539,7 @@ bool import_contact(const IXMLNode::TXMLNodePtr& pXmlContact, CImportContext& im cst.m_hContact = db_add_contact(); cst.m_bNewContact = true; } - else if (impctx.m_nFlags & QUOTES_IMPORT_SKIP_EXISTING_CONTACTS) + else if (impctx.m_nFlags & CURRENCYRATES_IMPORT_SKIP_EXISTING_CONTACTS) return true; if (cst.m_hContact) { @@ -604,7 +604,7 @@ bool do_import(const IXMLNode::TXMLNodePtr& pXmlRoot, UINT nFlags) return (handle_contacts_node(pXmlRoot, imctx) > 0); } -INT_PTR Quotes_Import(WPARAM wp, LPARAM lp) +INT_PTR CurrencyRates_Import(WPARAM wp, LPARAM lp) { // USES_CONVERSION; @@ -614,7 +614,7 @@ INT_PTR Quotes_Import(WPARAM wp, LPARAM lp) if (false == show_open_file_dialog(true, sFileName)) return -1; } - else sFileName = quotes_a2t(pszFile);//A2CT(pszFile); + else sFileName = currencyrates_a2t(pszFile);//A2CT(pszFile); CModuleInfo::TXMLEnginePtr pXmlEngine = CModuleInfo::GetInstance().GetXMLEnginePtr(); IXMLNode::TXMLNodePtr pXmlRoot = pXmlEngine->LoadFile(sFileName); @@ -624,12 +624,12 @@ INT_PTR Quotes_Import(WPARAM wp, LPARAM lp) return 1; } -INT_PTR QuotesMenu_ImportAll(WPARAM, LPARAM) +INT_PTR CurrencyRatesMenu_ImportAll(WPARAM, LPARAM) { - return CallService(MS_QUOTES_IMPORT, 0, 0); + return CallService(MS_CURRENCYRATES_IMPORT, 0, 0); } -INT_PTR QuotesMenu_ExportAll(WPARAM, LPARAM) +INT_PTR CurrencyRatesMenu_ExportAll(WPARAM, LPARAM) { - return CallService(MS_QUOTES_EXPORT, 0, 0); + return CallService(MS_CURRENCYRATES_EXPORT, 0, 0); } diff --git a/plugins/CurrencyRates/src/ImportExport.h b/plugins/CurrencyRates/src/ImportExport.h index f6f29f68c9..3c167674ce 100644 --- a/plugins/CurrencyRates/src/ImportExport.h +++ b/plugins/CurrencyRates/src/ImportExport.h @@ -1,9 +1,9 @@ #ifndef __F86374E6_713C_4600_85FB_903A5CDF7251_IMPORT_EXPORT_H__ #define __F86374E6_713C_4600_85FB_903A5CDF7251_IMPORT_EXPORT_H__ -INT_PTR Quotes_Export(WPARAM wp, LPARAM lp); -INT_PTR Quotes_Import(WPARAM wp, LPARAM lp); +INT_PTR CurrencyRates_Export(WPARAM wp, LPARAM lp); +INT_PTR CurrencyRates_Import(WPARAM wp, LPARAM lp); -INT_PTR QuotesMenu_ImportAll(WPARAM wp, LPARAM lp); -INT_PTR QuotesMenu_ExportAll(WPARAM wp, LPARAM lp); +INT_PTR CurrencyRatesMenu_ImportAll(WPARAM wp, LPARAM lp); +INT_PTR CurrencyRatesMenu_ExportAll(WPARAM wp, LPARAM lp); #endif //__F86374E6_713C_4600_85FB_903A5CDF7251_IMPORT_EXPORT_H__ diff --git a/plugins/CurrencyRates/src/Locale.cpp b/plugins/CurrencyRates/src/Locale.cpp index f4515b847e..501015eb21 100644 --- a/plugins/CurrencyRates/src/Locale.cpp +++ b/plugins/CurrencyRates/src/Locale.cpp @@ -48,12 +48,12 @@ LPCTSTR time_win_2_boost(const tstring& sFrmt) return L"%H:%M:%S"; } -LPCTSTR Quotes_GetDateFormat(bool bShort) +LPCTSTR CurrencyRates_GetDateFormat(bool bShort) { return date_win_2_boost(get_int_registry_value(bShort ? L"sShortDate" : L"sLongDate")); } -LPCTSTR Quotes_GetTimeFormat(bool bShort) +LPCTSTR CurrencyRates_GetTimeFormat(bool bShort) { return time_win_2_boost(get_int_registry_value(bShort ? L"sShortTime" : L"sTimeFormat")); } diff --git a/plugins/CurrencyRates/src/Locale.h b/plugins/CurrencyRates/src/Locale.h index 1add176847..2ef5e320cb 100644 --- a/plugins/CurrencyRates/src/Locale.h +++ b/plugins/CurrencyRates/src/Locale.h @@ -3,7 +3,7 @@ // std::string GetLocaleInfoString(LCTYPE LCType,LCID Locale = LOCALE_USER_DEFAULT); const std::locale GetSystemLocale(); -LPCTSTR Quotes_GetDateFormat(bool bShort); -LPCTSTR Quotes_GetTimeFormat(bool bShort); +LPCTSTR CurrencyRates_GetDateFormat(bool bShort); +LPCTSTR CurrencyRates_GetTimeFormat(bool bShort); #endif //__11f7afd0_5a66_4029_8bf3_e3c66346b349_Locale_h_ diff --git a/plugins/CurrencyRates/src/Log.cpp b/plugins/CurrencyRates/src/Log.cpp index fcfb0adc35..ebc5e76a43 100644 --- a/plugins/CurrencyRates/src/Log.cpp +++ b/plugins/CurrencyRates/src/Log.cpp @@ -6,7 +6,7 @@ namespace tstring get_log_file_name() { - return CreateFilePath(L"Quotes.log"); + return CreateFilePath(L"CurrencyRates.log"); } bool is_log_enabled() @@ -14,7 +14,7 @@ namespace #ifdef _DEBUG return true; #else - return (1 == db_get_b(NULL, QUOTES_PROTOCOL_NAME, DB_STR_ENABLE_LOG, false)); + return (1 == db_get_b(NULL, CURRENCYRATES_MODULE_NAME, DB_STR_ENABLE_LOG, false)); #endif } diff --git a/plugins/CurrencyRates/src/ModuleInfo.cpp b/plugins/CurrencyRates/src/ModuleInfo.cpp index f5679630f6..a44eda3d78 100644 --- a/plugins/CurrencyRates/src/ModuleInfo.cpp +++ b/plugins/CurrencyRates/src/ModuleInfo.cpp @@ -42,9 +42,9 @@ void CModuleInfo::OnMirandaShutdown() } } -CModuleInfo::TQuotesProvidersPtr CModuleInfo::GetQuoteProvidersPtr() +CModuleInfo::TCurrencyRatesProvidersPtr CModuleInfo::GetCurrencyRateProvidersPtr() { - static TQuotesProvidersPtr pProviders(new CQuotesProviders); + static TCurrencyRatesProvidersPtr pProviders(new CCurrencyRatesProviders); return pProviders; } @@ -84,13 +84,13 @@ bool CModuleInfo::Verify() return false; if (!GetXMLEnginePtr()) { - Quotes_MessageBox(nullptr, TranslateT("Miranda could not load Quotes plugin. XML parser is missing."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(nullptr, TranslateT("Miranda could not load CurrencyRates plugin. XML parser is missing."), MB_OK | MB_ICONERROR); return false; } if (!g_pHTMLEngine && (false == CHTMLParserMS::IsInstalled())) { - Quotes_MessageBox(nullptr, - TranslateT("Miranda could not load Quotes plugin. Microsoft HTML parser is missing."), + CurrencyRates_MessageBox(nullptr, + TranslateT("Miranda could not load CurrencyRates plugin. Microsoft HTML parser is missing."), MB_YESNO | MB_ICONQUESTION); return false; } diff --git a/plugins/CurrencyRates/src/ModuleInfo.h b/plugins/CurrencyRates/src/ModuleInfo.h index f33a68ff83..b8ee955dfb 100644 --- a/plugins/CurrencyRates/src/ModuleInfo.h +++ b/plugins/CurrencyRates/src/ModuleInfo.h @@ -1,7 +1,7 @@ #ifndef __d0f22b66_3135_4bbe_bee5_a31ea631ce58_ModuleInfo__ #define __d0f22b66_3135_4bbe_bee5_a31ea631ce58_ModuleInfo__ -class CQuotesProviders; +class CCurrencyRatesProviders; class IXMLEngine; class IHTMLEngine; // class IHTMLParser; @@ -9,7 +9,7 @@ class IHTMLEngine; class CModuleInfo { public: - typedef boost::shared_ptr TQuotesProvidersPtr; + typedef boost::shared_ptr TCurrencyRatesProvidersPtr; typedef boost::shared_ptr TXMLEnginePtr; typedef boost::shared_ptr THTMLEnginePtr; @@ -25,7 +25,7 @@ public: static bool Verify(); - static TQuotesProvidersPtr GetQuoteProvidersPtr(); + static TCurrencyRatesProvidersPtr GetCurrencyRateProvidersPtr(); static TXMLEnginePtr GetXMLEnginePtr(); // static void SetXMLEnginePtr(TXMLEnginePtr pEngine); diff --git a/plugins/CurrencyRates/src/QuoteChart.cpp b/plugins/CurrencyRates/src/QuoteChart.cpp deleted file mode 100644 index b1f4ec8f91..0000000000 --- a/plugins/CurrencyRates/src/QuoteChart.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include "StdAfx.h" - -#ifdef CHART_IMPLEMENT - -namespace -{ - class CMyJob : private boost::noncopyable - { - private: - CMyJob(LPCTSTR pszName = nullptr): m_hJob(::CreateJobObject(nullptr,pszName)) - { - if(m_hJob) - { - JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 }; - jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; - if(0 == ::SetInformationJobObject(m_hJob,JobObjectExtendedLimitInformation,&jeli,sizeof(jeli))) - { -#ifdef OUTPUT_TO_DEBUG_VIEWER - ::OutputDebugString(_T("Error occurred during the job initialization\n")); -#endif - } - } - - } - ~CMyJob() - { - if(m_hJob) - { - ::CloseHandle(m_hJob); - } - } - - public: - static CMyJob& GetInstance() - { - static CMyJob g_job(_T("MirandaJob_E12D5E9C_00E7_4FFA_9831_F35E45C6EBDA")); - return g_job; - } - - bool AssignProcess(HANDLE hProcess) - { - if(m_hJob && hProcess) - { - auto b = (TRUE == ::AssignProcessToJobObject(m_hJob,hProcess)); - return b; - } - - return false; - } - - private: - HANDLE m_hJob; - }; - -} - -INT_PTR QuotesMenu_Chart(WPARAM wp, LPARAM /*lp*/) -{ -#ifdef _UNICODE - MCONTACT hContact = static_cast(wp); - if (NULL == hContact) - return 0; - - auto sLogFileName = GetContactLogFileName(hContact); - - if(auto hWnd = ::FindWindow(nullptr,_T("Miranda Quotes Chart"))) - { - COPYDATASTRUCT copydata_struct; - copydata_struct.cbData = static_cast(sLogFileName.size()*sizeof(TCHAR)); - copydata_struct.lpData = const_cast(static_cast(sLogFileName.c_str())); - copydata_struct.dwData = 0x1945; - - SendMessage(hWnd,WM_COPYDATA,0,reinterpret_cast(©data_struct)); - } - else - { - STARTUPINFO si; - PROCESS_INFORMATION pi; - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - si.dwFlags = STARTF_USESHOWWINDOW; - si.wShowWindow = SW_SHOWNORMAL; - ZeroMemory(&pi, sizeof(pi)); - - auto sCmdLine = CreateFilePath(_T("QuotesChart.exe")); - sCmdLine += _T(" \""); - sCmdLine += sLogFileName; - sCmdLine += _T("\""); - if(::CreateProcess(nullptr,const_cast(sCmdLine.c_str()),nullptr,nullptr,FALSE,0,nullptr,nullptr,&si,&pi)) - { - CMyJob::GetInstance().AssignProcess(pi.hProcess); - - ::CloseHandle(pi.hThread); - ::CloseHandle(pi.hProcess); - } - } -#endif - return 0; -} - -#endif //CHART_IMPLEMENT diff --git a/plugins/CurrencyRates/src/QuoteChart.h b/plugins/CurrencyRates/src/QuoteChart.h deleted file mode 100644 index f42ca17a53..0000000000 --- a/plugins/CurrencyRates/src/QuoteChart.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __39BE8775_A837_494f_925C_0ABF7910F238_QuoteChart_h__ -#define __39BE8775_A837_494f_925C_0ABF7910F238_QuoteChart_h__ - -#pragma once - -#ifdef CHART_IMPLEMENT - -INT_PTR QuotesMenu_Chart(WPARAM wp, LPARAM lp); - -#endif - -#endif //__39BE8775_A837_494f_925C_0ABF7910F238_QuoteChart_h__ diff --git a/plugins/CurrencyRates/src/QuoteInfoDlg.cpp b/plugins/CurrencyRates/src/QuoteInfoDlg.cpp deleted file mode 100644 index 8f48dd4252..0000000000 --- a/plugins/CurrencyRates/src/QuoteInfoDlg.cpp +++ /dev/null @@ -1,263 +0,0 @@ -#include "StdAfx.h" - -// extern HANDLE g_hWindowListEditSettings; -extern HGENMENU g_hMenuEditSettings; -extern HGENMENU g_hMenuOpenLogFile; -#ifdef CHART_IMPLEMENT -extern HGENMENU g_hMenuChart; -#endif -extern HGENMENU g_hMenuRefresh, g_hMenuRoot; - -#define WINDOW_PREFIX_INFO "Quote Info" - -MCONTACT g_hContact; - -inline bool IsMyContact(MCONTACT hContact) -{ - CQuotesProviders::TQuotesProviderPtr pProvider = CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(hContact); - return (nullptr != pProvider); -} - -inline MCONTACT get_contact(HWND hWnd) -{ - return MCONTACT(GetWindowLongPtr(hWnd, GWLP_USERDATA)); -} - -static bool get_fetch_time(time_t& rTime, MCONTACT hContact) -{ - rTime = db_get_dw(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FETCH_TIME, -1); - return (rTime != -1); -} - -INT_PTR CALLBACK QuoteInfoDlgProcImpl(MCONTACT hContact, HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_INITDIALOG: - assert(hContact); - - TranslateDialogDefault(hdlg); - { - tstring sDescription = GetContactName(hContact); - ::SetDlgItemText(hdlg, IDC_STATIC_QUOTE_NAME, sDescription.c_str()); - - double dRate = 0.0; - if (true == Quotes_DBReadDouble(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_PREV_VALUE, dRate)) { - tostringstream o; - o.imbue(GetSystemLocale()); - o << dRate; - - ::SetDlgItemText(hdlg, IDC_EDIT_PREVIOUS_RATE, o.str().c_str()); - } - - dRate = 0.0; - if (true == Quotes_DBReadDouble(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_CURR_VALUE, dRate)) { - tostringstream o; - o.imbue(GetSystemLocale()); - o << dRate; - - ::SetDlgItemText(hdlg, IDC_EDIT_RATE, o.str().c_str()); - } - - time_t nFetchTime; - if (true == get_fetch_time(nFetchTime, hContact)) { - wchar_t szTime[50] = { 0 }; - if (0 == _tctime_s(szTime, 50, &nFetchTime)) { - ::SetDlgItemText(hdlg, IDC_EDIT_RATE_FETCH_TIME, szTime); - } - } - - CQuotesProviders::TQuotesProviderPtr pProvider = CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(hContact); - - const IQuotesProvider::CProviderInfo& pi = pProvider->GetInfo(); - tostringstream o; - o << TranslateT("Info provided by") << L" " << pi.m_sName << L""; - - ::SetDlgItemText(hdlg, IDC_SYSLINK_PROVIDER, o.str().c_str()); - } - return TRUE; - - case WM_NOTIFY: - LPNMHDR pNMHDR = reinterpret_cast(lParam); - switch (pNMHDR->code) { - case NM_CLICK: - if (IDC_SYSLINK_PROVIDER == wParam) { - PNMLINK pNMLink = reinterpret_cast(pNMHDR); - ::ShellExecute(hdlg, L"open", pNMLink->item.szUrl, nullptr, nullptr, SW_SHOWNORMAL); - } - break; - } - break; - } - return FALSE; -} - -INT_PTR CALLBACK QuoteInfoDlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - return QuoteInfoDlgProcImpl(g_hContact, hdlg, msg, wParam, lParam); -} - -int QuotesEventFunc_OnUserInfoInit(WPARAM wp, LPARAM lp) -{ - MCONTACT hContact = MCONTACT(lp); - if (NULL == hContact) - return 0; - - if (false == IsMyContact(hContact)) - return 0; - - g_hContact = hContact; - - OPTIONSDIALOGPAGE odp = {}; - odp.pfnDlgProc = QuoteInfoDlgProc; - odp.position = -2000000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_DIALOG_QUOTE_INFO); - odp.szTitle.a = LPGEN("Quote"); - g_plugin.addUserInfo(wp, &odp); - return 0; -} - - -INT_PTR QuotesMenu_EditSettings(WPARAM wp, LPARAM) -{ - MCONTACT hContact = MCONTACT(wp); - if (NULL != hContact) - ShowSettingsDlg(hContact); - return 0; -} - -namespace -{ - bool get_log_file(MCONTACT hContact, tstring& rsLogfile) - { - rsLogfile = GetContactLogFileName(hContact); - return ((rsLogfile.empty()) ? false : true); - } -} - -INT_PTR QuotesMenu_OpenLogFile(WPARAM wp, LPARAM) -{ - MCONTACT hContact = MCONTACT(wp); - if (NULL == hContact) - return 0; - - tstring sLogFileName; - if ((true == get_log_file(hContact, sLogFileName)) && (false == sLogFileName.empty())) - ::ShellExecute(nullptr, L"open", sLogFileName.c_str(), nullptr, nullptr, SW_SHOWNORMAL); - - return 0; -} - -INT_PTR QuotesMenu_RefreshContact(WPARAM wp, LPARAM) -{ - MCONTACT hContact = MCONTACT(wp); - if (NULL == hContact) - return 0; - - CQuotesProviders::TQuotesProviderPtr pProvider = CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(hContact); - if (!pProvider) - return 0; - - pProvider->RefreshContact(hContact); - return 0; -} - -static INT_PTR CALLBACK QuoteInfoDlgProc1(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - MCONTACT hContact = NULL; - MWindowList hWL; - - switch (msg) { - case WM_INITDIALOG: - hContact = MCONTACT(lParam); - hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX_INFO, false); - assert(hWL); - WindowList_Add(hWL, hdlg, hContact); - - ::SetWindowLongPtr(hdlg, GWLP_USERDATA, hContact); - Utils_RestoreWindowPositionNoSize(hdlg, hContact, QUOTES_MODULE_NAME, WINDOW_PREFIX_INFO); - ::ShowWindow(hdlg, SW_SHOW); - break; - - case WM_CLOSE: - DestroyWindow(hdlg); - return FALSE; - - case WM_DESTROY: - hContact = get_contact(hdlg); - if (hContact) { - SetWindowLongPtr(hdlg, GWLP_USERDATA, 0); - - hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX_INFO, false); - assert(hWL); - WindowList_Remove(hWL, hdlg); - Utils_SaveWindowPosition(hdlg, hContact, QUOTES_MODULE_NAME, WINDOW_PREFIX_INFO); - } - return FALSE; - - case WM_COMMAND: - if (LOWORD(wParam) == IDOK) { - ::DestroyWindow(hdlg); - return FALSE; - } - - default: - hContact = get_contact(hdlg); - break; - } - - return QuoteInfoDlgProcImpl(hContact, hdlg, msg, wParam, lParam); -} - -int Quotes_OnContactDoubleClick(WPARAM wp, LPARAM/* lp*/) -{ - MCONTACT hContact = MCONTACT(wp); - if (CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(hContact)) { - MWindowList hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX_INFO, true); - assert(hWL); - HWND hWnd = WindowList_Find(hWL, hContact); - if (nullptr != hWnd) { - SetForegroundWindow(hWnd); - SetFocus(hWnd); - } - else if (true == IsMyContact(hContact)) - CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_DIALOG_QUOTE_INFO_1), nullptr, QuoteInfoDlgProc1, LPARAM(hContact)); - - return 1; - } - - return 0; -} - -int Quotes_PrebuildContactMenu(WPARAM wp, LPARAM) -{ - Menu_EnableItem(g_hMenuEditSettings, false); - Menu_EnableItem(g_hMenuOpenLogFile, false); - #ifdef CHART_IMPLEMENT - Menu_EnableItem(g_hMenuChart, false); - #endif - Menu_EnableItem(g_hMenuRefresh, false); - - MCONTACT hContact = MCONTACT(wp); - char *szProto = GetContactProto(hContact); - if (mir_strcmp(szProto, QUOTES_MODULE_NAME)) { - Menu_ShowItem(g_hMenuRoot, false); - return 0; - } - - Menu_ShowItem(g_hMenuRoot, true); - Menu_EnableItem(g_hMenuEditSettings, true); - - Menu_EnableItem(g_hMenuRefresh, true); - - tstring sLogFileName; - bool bThereIsLogFile = (true == get_log_file(hContact, sLogFileName)) - && (false == sLogFileName.empty()) && (0 == _waccess(sLogFileName.c_str(), 04)); - if (true == bThereIsLogFile) { - #ifdef CHART_IMPLEMENT - Menu_EnableItem(g_hMenuChart, true); - #endif - Menu_EnableItem(g_hMenuOpenLogFile, true); - } - - return 0; -} diff --git a/plugins/CurrencyRates/src/QuoteInfoDlg.h b/plugins/CurrencyRates/src/QuoteInfoDlg.h deleted file mode 100644 index 51bcebbf64..0000000000 --- a/plugins/CurrencyRates/src/QuoteInfoDlg.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __aa849fa0_ff3f_49e9_b47a_e7dd34783dc2_QuoteInfoDlg_h__ -#define __aa849fa0_ff3f_49e9_b47a_e7dd34783dc2_QuoteInfoDlg_h__ - -int QuotesEventFunc_OnUserInfoInit(WPARAM wp, LPARAM lp); -INT_PTR QuotesMenu_EditSettings(WPARAM wp, LPARAM lp); -INT_PTR QuotesMenu_OpenLogFile(WPARAM wp, LPARAM lp); -INT_PTR QuotesMenu_RefreshContact(WPARAM wp, LPARAM lp); -int Quotes_PrebuildContactMenu(WPARAM wp, LPARAM lp); -int Quotes_OnContactDoubleClick(WPARAM wp, LPARAM lp); - -#endif //__aa849fa0_ff3f_49e9_b47a_e7dd34783dc2_QuoteInfoDlg_h__ diff --git a/plugins/CurrencyRates/src/QuotesProviderBase.cpp b/plugins/CurrencyRates/src/QuotesProviderBase.cpp deleted file mode 100644 index 4d4dc760b5..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderBase.cpp +++ /dev/null @@ -1,883 +0,0 @@ -#include "StdAfx.h" - -extern bool g_bAutoUpdate; -extern HANDLE g_hEventWorkThreadStop; - -struct CQuotesProviderBase::CXMLFileInfo -{ - CXMLFileInfo() : m_qs(L"Unknown") {} - IQuotesProvider::CProviderInfo m_pi; - CQuotesProviderBase::CQuoteSection m_qs; - tstring m_sURL; -}; - -inline tstring get_ini_file_name(LPCTSTR pszFileName) -{ - return CreateFilePath(pszFileName); -} - -bool parse_quote(const IXMLNode::TXMLNodePtr& pTop, CQuotesProviderBase::CQuote& q) -{ - tstring sSymbol; - tstring sDescription; - tstring sID; - - size_t cChild = pTop->GetChildCount(); - for (size_t i = 0; i < cChild; ++i) { - IXMLNode::TXMLNodePtr pNode = pTop->GetChildNode(i); - tstring sName = pNode->GetName(); - if (0 == mir_wstrcmpi(L"symbol", sName.c_str())) { - sSymbol = pNode->GetText(); - if (true == sSymbol.empty()) - return false; - } - else if (0 == mir_wstrcmpi(L"description", sName.c_str())) { - sDescription = pNode->GetText(); - } - else if (0 == mir_wstrcmpi(L"id", sName.c_str())) { - sID = pNode->GetText(); - if (true == sID.empty()) - return false; - } - } - - q = CQuotesProviderBase::CQuote(sID, TranslateW(sSymbol.c_str()), TranslateW(sDescription.c_str())); - return true; -} - -bool parse_section(const IXMLNode::TXMLNodePtr& pTop, CQuotesProviderBase::CQuoteSection& qs) -{ - CQuotesProviderBase::CQuoteSection::TSections aSections; - CQuotesProviderBase::CQuoteSection::TQuotes aQuotes; - tstring sSectionName; - - size_t cChild = pTop->GetChildCount(); - for (size_t i = 0; i < cChild; ++i) { - IXMLNode::TXMLNodePtr pNode = pTop->GetChildNode(i); - tstring sName = pNode->GetName(); - if (0 == mir_wstrcmpi(L"section", sName.c_str())) { - CQuotesProviderBase::CQuoteSection qs1; - if (true == parse_section(pNode, qs1)) - aSections.push_back(qs1); - } - else if (0 == mir_wstrcmpi(L"quote", sName.c_str())) { - CQuotesProviderBase::CQuote q; - if (true == parse_quote(pNode, q)) - aQuotes.push_back(q); - } - else if (0 == mir_wstrcmpi(L"name", sName.c_str())) { - sSectionName = pNode->GetText(); - if (true == sSectionName.empty()) - return false; - } - } - - qs = CQuotesProviderBase::CQuoteSection(TranslateW(sSectionName.c_str()), aSections, aQuotes); - return true; -} - -IXMLNode::TXMLNodePtr find_provider(const IXMLNode::TXMLNodePtr& pRoot) -{ - IXMLNode::TXMLNodePtr pProvider; - size_t cChild = pRoot->GetChildCount(); - for (size_t i = 0; i < cChild; ++i) { - IXMLNode::TXMLNodePtr pNode = pRoot->GetChildNode(i); - tstring sName = pNode->GetName(); - if (0 == mir_wstrcmpi(L"Provider", sName.c_str())) { - pProvider = pNode; - break; - } - - pProvider = find_provider(pNode); - if (pProvider) - break; - } - - return pProvider; -} - -CQuotesProviderBase::CXMLFileInfo parse_ini_file(const tstring& rsXMLFile, bool& rbSucceded) -{ - CQuotesProviderBase::CXMLFileInfo res; - CQuotesProviderBase::CQuoteSection::TSections aSections; - - const CModuleInfo::TXMLEnginePtr& pXMLEngine = CModuleInfo::GetXMLEnginePtr(); - IXMLNode::TXMLNodePtr pRoot = pXMLEngine->LoadFile(rsXMLFile); - if (pRoot) { - IXMLNode::TXMLNodePtr pProvider = find_provider(pRoot); - if (pProvider) { - rbSucceded = true; - size_t cChild = pProvider->GetChildCount(); - for (size_t i = 0; i < cChild; ++i) { - IXMLNode::TXMLNodePtr pNode = pProvider->GetChildNode(i); - tstring sName = pNode->GetName(); - if (0 == mir_wstrcmpi(L"section", sName.c_str())) { - CQuotesProviderBase::CQuoteSection qs; - if (true == parse_section(pNode, qs)) - aSections.push_back(qs); - } - else if (0 == mir_wstrcmpi(L"Name", sName.c_str())) - res.m_pi.m_sName = pNode->GetText(); - else if (0 == mir_wstrcmpi(L"ref", sName.c_str())) - res.m_pi.m_sURL = pNode->GetText(); - else if (0 == mir_wstrcmpi(L"url", sName.c_str())) - res.m_sURL = pNode->GetText(); - } - } - } - - res.m_qs = CQuotesProviderBase::CQuoteSection(res.m_pi.m_sName, aSections); - return res; -} - -CQuotesProviderBase::CXMLFileInfo init_xml_info(LPCTSTR pszFileName, bool& rbSucceded) -{ - rbSucceded = false; - tstring sIniFile = get_ini_file_name(pszFileName); - return parse_ini_file(sIniFile, rbSucceded); -} - -CQuotesProviderBase::CQuotesProviderBase() - : m_hEventSettingsChanged(::CreateEvent(nullptr, FALSE, FALSE, nullptr)), - m_hEventRefreshContact(::CreateEvent(nullptr, FALSE, FALSE, nullptr)), - m_bRefreshInProgress(false) -{ -} - -CQuotesProviderBase::~CQuotesProviderBase() -{ - ::CloseHandle(m_hEventSettingsChanged); - ::CloseHandle(m_hEventRefreshContact); -} - -bool CQuotesProviderBase::Init() -{ - bool bSucceded = m_pXMLInfo != nullptr; - if (!m_pXMLInfo) { - CQuotesProviderVisitorDbSettings visitor; - Accept(visitor); - assert(visitor.m_pszXMLIniFileName); - - m_pXMLInfo.reset(new CXMLFileInfo(init_xml_info(visitor.m_pszXMLIniFileName, bSucceded))); - } - - return bSucceded; -} - -CQuotesProviderBase::CXMLFileInfo* CQuotesProviderBase::GetXMLFileInfo()const -{ - // if(!m_pXMLInfo) - // { - // CQuotesProviderVisitorDbSettings visitor; - // Accept(visitor); - // assert(visitor.m_pszXMLIniFileName); - // m_pXMLInfo.reset(new CXMLFileInfo(init_xml_info(visitor.m_pszXMLIniFileName))); - // } - - return m_pXMLInfo.get(); -} - -const CQuotesProviderBase::CProviderInfo& CQuotesProviderBase::GetInfo()const -{ - return GetXMLFileInfo()->m_pi; -} - -const CQuotesProviderBase::CQuoteSection& CQuotesProviderBase::GetQuotes()const -{ - return GetXMLFileInfo()->m_qs; -} - -const tstring& CQuotesProviderBase::GetURL()const -{ - return GetXMLFileInfo()->m_sURL; -} - -bool CQuotesProviderBase::IsOnline() -{ - return /*g_bAutoUpdate*/true; -} - -void CQuotesProviderBase::AddContact(MCONTACT hContact) -{ - // CCritSection cs(m_cs); - assert(m_aContacts.end() == std::find(m_aContacts.begin(), m_aContacts.end(), hContact)); - - m_aContacts.push_back(hContact); -} - -void CQuotesProviderBase::DeleteContact(MCONTACT hContact) -{ - mir_cslock lck(m_cs); - - TContracts::iterator i = std::find(m_aContacts.begin(), m_aContacts.end(), hContact); - if (i != m_aContacts.end()) - m_aContacts.erase(i); -} - -void CQuotesProviderBase::SetContactStatus(MCONTACT hContact, int nNewStatus) -{ - int nStatus = db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_STATUS, ID_STATUS_OFFLINE); - if (nNewStatus != nStatus) { - db_set_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_STATUS, nNewStatus); - - if (ID_STATUS_ONLINE != nNewStatus) { - db_unset(hContact, LIST_MODULE_NAME, STATUS_MSG_NAME); - tstring sSymbol = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_SYMBOL); - if (false == sSymbol.empty()) - db_set_ws(hContact, LIST_MODULE_NAME, CONTACT_LIST_NAME, sSymbol.c_str()); - - SetContactExtraImage(hContact, eiEmpty); - } - } -} - -class CTendency -{ - enum { NumValues = 2 }; - enum EComparison - { - NonValid, - Greater, - Less, - Equal, - GreaterOrEqual, - LessOrEqual - }; - -public: - enum EResult - { - NotChanged, - Up, - Down - }; - -public: - CTendency() : m_nComparison(NonValid) {} - - bool Parse(const IQuotesProvider* pProvider, const tstring& rsFrmt, MCONTACT hContact) - { - m_abValueFlags[0] = false; - m_abValueFlags[1] = false; - m_nComparison = NonValid; - bool bValid = true; - int nCurValue = 0; - for (tstring::const_iterator i = rsFrmt.begin(); i != rsFrmt.end() && bValid && nCurValue < NumValues;) { - wchar_t chr = *i; - switch (chr) { - default: - if (false == std::isspace(chr)) - bValid = false; - else - ++i; - break; - - case '%': - ++i; - if (i != rsFrmt.end()) { - wchar_t t = *i; - ++i; - CQuotesProviderVisitorTendency visitor(hContact, t); - pProvider->Accept(visitor); - if (false == visitor.IsValid()) { - bValid = false; - } - else { - double d = visitor.GetResult(); - m_adValues[nCurValue] = d; - m_abValueFlags[nCurValue] = true; - ++nCurValue; - } - } - else bValid = false; - break; - case '>': - m_nComparison = Greater; - ++i; - break; - case '<': - m_nComparison = Less; - ++i; - break; - case '=': - switch (m_nComparison) { - default: - bValid = false; - break; - case NonValid: - m_nComparison = Equal; - break; - case Greater: - m_nComparison = GreaterOrEqual; - break; - case Less: - m_nComparison = LessOrEqual; - break; - } - ++i; - break; - } - } - - return (bValid && IsValid()); - } - - bool IsValid()const { return (m_abValueFlags[0] && m_abValueFlags[1] && (m_nComparison != NonValid)); } - - EResult Compare()const - { - switch (m_nComparison) { - case Greater: - if (true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) - return NotChanged; - - if (m_adValues[0] > m_adValues[1]) - return Up; - return Down; - - case GreaterOrEqual: - if ((true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) || (m_adValues[0] > m_adValues[1])) - return Up; - return Down; - - case Less: - if (true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) - return NotChanged; - - if (m_adValues[0] < m_adValues[1]) - return Up; - return Down; - - case LessOrEqual: - if ((true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) || (m_adValues[0] < m_adValues[1])) - return Up; - return Down; - - case Equal: - if (true == IsWithinAccuracy(m_adValues[0], m_adValues[1])) - return Up; - return Down; - } - return NotChanged; - } - -private: - double m_adValues[NumValues]; - bool m_abValueFlags[NumValues]; - EComparison m_nComparison; -}; - -tstring format_rate(const IQuotesProvider *pProvider, MCONTACT hContact, const tstring &rsFrmt) -{ - tstring sResult; - - for (tstring::const_iterator i = rsFrmt.begin(); i != rsFrmt.end();) { - wchar_t chr = *i; - switch (chr) { - default: - sResult += chr; - ++i; - break; - - case '\\': - ++i; - if (i != rsFrmt.end()) { - wchar_t t = *i; - switch (t) { - case '%': sResult += L"%"; break; - case 't': sResult += L"\t"; break; - case 'n': sResult += L"\n"; break; - case '\\': sResult += L"\\"; break; - default: sResult += chr; sResult += t; break; - } - ++i; - } - else sResult += chr; - break; - - case '%': - ++i; - if (i != rsFrmt.end()) { - chr = *i; - - byte nWidth = 0; - if (::isdigit(chr)) { - nWidth = chr - 0x30; - ++i; - if (i == rsFrmt.end()) { - sResult += chr; - break; - } - else chr = *i; - } - - CQuotesProviderVisitorFormater visitor(hContact, chr, nWidth); - pProvider->Accept(visitor); - const tstring& s = visitor.GetResult(); - sResult += s; - ++i; - } - else sResult += chr; - break; - } - } - - return sResult; -} - -void log_to_file(const IQuotesProvider* pProvider, - MCONTACT hContact, - const tstring& rsLogFileName, - const tstring& rsFormat) -{ - std::string sPath = quotes_t2a(rsLogFileName.c_str()); - - std::string::size_type n = sPath.find_last_of("\\/"); - if (std::string::npos != n) - sPath.erase(n); - - DWORD dwAttributes = ::GetFileAttributesA(sPath.c_str()); - if ((0xffffffff == dwAttributes) || (0 == (dwAttributes&FILE_ATTRIBUTE_DIRECTORY))) - CreateDirectoryTree(sPath.c_str()); - - tofstream file(rsLogFileName.c_str(), std::ios::app | std::ios::out); - file.imbue(GetSystemLocale()); - if (file.good()) { - tstring s = format_rate(pProvider, hContact, rsFormat); - file << s; - } -} - -void log_to_history(const IQuotesProvider* pProvider, - MCONTACT hContact, - time_t nTime, - const tstring& rsFormat) -{ - tstring s = format_rate(pProvider, hContact, rsFormat); - T2Utf psz(s.c_str()); - - DBEVENTINFO dbei = {}; - dbei.szModule = QUOTES_PROTOCOL_NAME; - dbei.timestamp = static_cast(nTime); - dbei.flags = DBEF_READ | DBEF_UTF; - dbei.eventType = EVENTTYPE_MESSAGE; - dbei.cbBlob = (int)::mir_strlen(psz) + 1; - dbei.pBlob = (PBYTE)(char*)psz; - db_event_add(hContact, &dbei); -} - -bool do_set_contact_extra_icon(MCONTACT hContact, const CTendency& tendency) -{ - CTendency::EResult nComparison = tendency.Compare(); - - if (CTendency::NotChanged == nComparison) - return SetContactExtraImage(hContact, eiNotChanged); - - if (CTendency::Up == nComparison) - return SetContactExtraImage(hContact, eiUp); - - if (CTendency::Down == nComparison) - return SetContactExtraImage(hContact, eiDown); - - return false; -} - -bool show_popup(const IQuotesProvider* pProvider, - MCONTACT hContact, - const CTendency& tendency, - const tstring& rsFormat, - const CPopupSettings& ps) -{ - if (!ServiceExists(MS_POPUP_ADDPOPUPT)) - return false; - - POPUPDATAT ppd; - memset(&ppd, 0, sizeof(ppd)); - ppd.lchContact = hContact; - - if (tendency.IsValid()) { - CTendency::EResult nComparison = tendency.Compare(); - if (CTendency::NotChanged == nComparison) - ppd.lchIcon = Quotes_LoadIconEx(IDI_ICON_NOTCHANGED); - else if (CTendency::Up == nComparison) - ppd.lchIcon = Quotes_LoadIconEx(IDI_ICON_UP); - else if (CTendency::Down == nComparison) - ppd.lchIcon = Quotes_LoadIconEx(IDI_ICON_DOWN); - } - - CQuotesProviderVisitorFormater visitor(hContact, 's', 0); - pProvider->Accept(visitor); - const tstring& sTitle = visitor.GetResult(); - mir_wstrncpy(ppd.lptzContactName, sTitle.c_str(), MAX_CONTACTNAME); - { - ptrW ss(variables_parsedup((wchar_t*)rsFormat.c_str(), nullptr, hContact)); - tstring sText = format_rate(pProvider, hContact, tstring(ss)); - mir_wstrncpy(ppd.lptzText, sText.c_str(), MAX_SECONDLINE); - } - - if (CPopupSettings::colourDefault == ps.GetColourMode()) { - ppd.colorText = CPopupSettings::GetDefColourText(); - ppd.colorBack = CPopupSettings::GetDefColourBk(); - } - else { - ppd.colorText = ps.GetColourText(); - ppd.colorBack = ps.GetColourBk(); - } - - switch (ps.GetDelayMode()) { - default: - assert(!"Unknown popup delay mode"); - case CPopupSettings::delayFromPopup: - ppd.iSeconds = 0; - break; - case CPopupSettings::delayPermanent: - ppd.iSeconds = -1; - break; - case CPopupSettings::delayCustom: - ppd.iSeconds = ps.GetDelayTimeout(); - break; - } - - LPARAM lp = 0; - if (false == ps.GetHistoryFlag()) - lp |= 0x08; - - return (0 == CallService(MS_POPUP_ADDPOPUPT, reinterpret_cast(&ppd), lp)); -} - -void CQuotesProviderBase::WriteContactRate(MCONTACT hContact, double dRate, const tstring& rsSymbol/* = ""*/) -{ - time_t nTime = ::time(0); - - if (false == rsSymbol.empty()) - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_SYMBOL, rsSymbol.c_str()); - - double dPrev = 0.0; - bool bValidPrev = Quotes_DBReadDouble(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_CURR_VALUE, dPrev); - if (true == bValidPrev) - Quotes_DBWriteDouble(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_PREV_VALUE, dPrev); - - Quotes_DBWriteDouble(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_CURR_VALUE, dRate); - db_set_dw(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FETCH_TIME, nTime); - - tstring sSymbol = rsSymbol; - - tostringstream oNick; - oNick.imbue(GetSystemLocale()); - if (false == m_sContactListFormat.empty()) { - tstring s = format_rate(this, hContact, m_sContactListFormat); - oNick << s; - } - else { - if (true == sSymbol.empty()) - sSymbol = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_SYMBOL); - - oNick << std::setfill(L' ') << std::setw(10) << std::left << sSymbol << std::setw(6) << std::right << dRate; - } - CTendency tendency; - - if (true == tendency.Parse(this, m_sTendencyFormat, hContact)) - do_set_contact_extra_icon(hContact, tendency); - - db_set_ws(hContact, LIST_MODULE_NAME, CONTACT_LIST_NAME, oNick.str().c_str()); - - tstring sStatusMsg = format_rate(this, hContact, m_sStatusMsgFormat); - if (false == sStatusMsg.empty()) - db_set_ws(hContact, LIST_MODULE_NAME, STATUS_MSG_NAME, sStatusMsg.c_str()); - else - db_unset(hContact, LIST_MODULE_NAME, STATUS_MSG_NAME); - - bool bUseContactSpecific = (db_get_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_CONTACT_SPEC_SETTINGS, 0) > 0); - - CAdvProviderSettings global_settings(this); - - WORD dwMode = (bUseContactSpecific) - ? db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG, static_cast(lmDisabled)) - : global_settings.GetLogMode(); - if (dwMode&lmExternalFile) { - bool bAdd = true; - bool bOnlyIfChanged = (bUseContactSpecific) - ? (db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG_FILE_CONDITION, 1) > 0) - : global_settings.GetLogOnlyChangedFlag(); - if (true == bOnlyIfChanged) { - bAdd = ((false == bValidPrev) || (false == IsWithinAccuracy(dRate, dPrev))); - } - if (true == bAdd) { - tstring sLogFileName = (bUseContactSpecific) - ? Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG_FILE, global_settings.GetLogFileName().c_str()) - : global_settings.GetLogFileName(); - - if (true == sSymbol.empty()) { - sSymbol = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_SYMBOL); - } - - sLogFileName = GenerateLogFileName(sLogFileName, sSymbol); - - tstring sFormat = global_settings.GetLogFormat(); - if (bUseContactSpecific) { - CQuotesProviderVisitorDbSettings visitor; - Accept(visitor); - sFormat = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_LOG_FILE, visitor.m_pszDefLogFileFormat); - } - - log_to_file(this, hContact, sLogFileName, sFormat); - } - } - if (dwMode&lmInternalHistory) { - bool bAdd = true; - bool bOnlyIfChanged = (bUseContactSpecific) - ? (db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_HISTORY_CONDITION, 1) > 0) - : global_settings.GetHistoryOnlyChangedFlag(); - - if (true == bOnlyIfChanged) { - bAdd = ((false == bValidPrev) || (false == IsWithinAccuracy(dRate, dPrev))); - } - if (true == bAdd) { - tstring sFormat = (bUseContactSpecific) - ? Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_HISTORY, global_settings.GetHistoryFormat().c_str()) - : global_settings.GetHistoryFormat(); - - log_to_history(this, hContact, nTime, sFormat); - } - } - - if (dwMode&lmPopup) { - bool bOnlyIfChanged = (bUseContactSpecific) - ? (1 == db_get_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_CONDITION, 1) > 0) - : global_settings.GetShowPopupIfValueChangedFlag(); - if ((false == bOnlyIfChanged) - || ((true == bOnlyIfChanged) && (true == bValidPrev) && (false == IsWithinAccuracy(dRate, dPrev)))) { - tstring sFormat = (bUseContactSpecific) - ? Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_POPUP, global_settings.GetPopupFormat().c_str()) - : global_settings.GetPopupFormat(); - - CPopupSettings ps = *(global_settings.GetPopupSettingsPtr()); - ps.InitForContact(hContact); - show_popup(this, hContact, tendency, sFormat, ps); - } - } - - SetContactStatus(hContact, ID_STATUS_ONLINE); -} - -MCONTACT CQuotesProviderBase::CreateNewContact(const tstring& rsName) -{ - MCONTACT hContact = db_add_contact(); - if (hContact) { - if (0 == Proto_AddToContact(hContact, QUOTES_PROTOCOL_NAME)) { - tstring sProvName = GetInfo().m_sName; - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_PROVIDER, sProvName.c_str()); - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_SYMBOL, rsName.c_str()); - db_set_ws(hContact, LIST_MODULE_NAME, CONTACT_LIST_NAME, rsName.c_str()); - - mir_cslock lck(m_cs); - m_aContacts.push_back(hContact); - } - else { - db_delete_contact(hContact); - hContact = NULL; - } - } - - return hContact; -} - -DWORD get_refresh_timeout_miliseconds(const CQuotesProviderVisitorDbSettings& visitor) -{ - if (!g_bAutoUpdate) - return INFINITE; - - assert(visitor.m_pszDbRefreshRateType); - assert(visitor.m_pszDbRefreshRateValue); - - int nRefreshRateType = db_get_w(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbRefreshRateType, RRT_MINUTES); - if (nRefreshRateType < RRT_SECONDS || nRefreshRateType > RRT_HOURS) - nRefreshRateType = RRT_MINUTES; - - DWORD nTimeout = db_get_w(NULL, QUOTES_MODULE_NAME, visitor.m_pszDbRefreshRateValue, 1); - switch (nRefreshRateType) { - default: - case RRT_SECONDS: - if (nTimeout < 1 || nTimeout > 60) - nTimeout = 1; - - nTimeout *= 1000; - break; - case RRT_MINUTES: - if (nTimeout < 1 || nTimeout > 60) - nTimeout = 1; - - nTimeout *= 1000 * 60; - break; - case RRT_HOURS: - if (nTimeout < 1 || nTimeout > 24) - nTimeout = 1; - - nTimeout *= 1000 * 60 * 60; - break; - } - - return nTimeout; -} - -class CBoolGuard -{ -public: - CBoolGuard(bool& rb) : m_b(rb) { m_b = true; } - ~CBoolGuard() { m_b = false; } - -private: - bool m_b; -}; - -void CQuotesProviderBase::Run() -{ - CQuotesProviderVisitorDbSettings visitor; - Accept(visitor); - - DWORD nTimeout = get_refresh_timeout_miliseconds(visitor); - m_sContactListFormat = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbDisplayNameFormat, visitor.m_pszDefDisplayFormat); - m_sStatusMsgFormat = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbStatusMsgFormat, visitor.m_pszDefStatusMsgFormat); - m_sTendencyFormat = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbTendencyFormat, visitor.m_pszDefTendencyFormat); - - enum - { - STOP_THREAD = 0, - SETTINGS_CHANGED = 1, - REFRESH_CONTACT = 2, - COUNT_SYNC_OBJECTS = 3 - }; - - HANDLE anEvents[COUNT_SYNC_OBJECTS]; - anEvents[STOP_THREAD] = g_hEventWorkThreadStop; - anEvents[SETTINGS_CHANGED] = m_hEventSettingsChanged; - anEvents[REFRESH_CONTACT] = m_hEventRefreshContact; - - TContracts anContacts; - { - mir_cslock lck(m_cs); - anContacts = m_aContacts; - } - - bool bGoToBed = false; - - if (g_bAutoUpdate) { - CBoolGuard bg(m_bRefreshInProgress); - RefreshQuotes(anContacts); - } - - while (false == bGoToBed) { - anContacts.clear(); - - DWORD dwBegin = ::GetTickCount(); - DWORD dwResult = ::WaitForMultipleObjects(COUNT_SYNC_OBJECTS, anEvents, FALSE, nTimeout); - switch (dwResult) { - case WAIT_FAILED: - assert(!"WaitForMultipleObjects failed"); - bGoToBed = true; - break; - - case WAIT_ABANDONED_0 + STOP_THREAD: - case WAIT_ABANDONED_0 + SETTINGS_CHANGED: - case WAIT_ABANDONED_0 + REFRESH_CONTACT: - assert(!"WaitForMultipleObjects abandoned"); - - case WAIT_OBJECT_0 + STOP_THREAD: - bGoToBed = true; - break; - - case WAIT_OBJECT_0 + SETTINGS_CHANGED: - nTimeout = get_refresh_timeout_miliseconds(visitor); - m_sContactListFormat = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbDisplayNameFormat, visitor.m_pszDefDisplayFormat); - m_sStatusMsgFormat = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbStatusMsgFormat, visitor.m_pszDefStatusMsgFormat); - m_sTendencyFormat = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbTendencyFormat, visitor.m_pszDefTendencyFormat); - { - mir_cslock lck(m_cs); - anContacts = m_aContacts; - } - break; - case WAIT_OBJECT_0 + REFRESH_CONTACT: - { - DWORD dwTimeRest = ::GetTickCount() - dwBegin; - if (INFINITE != nTimeout && dwTimeRest < nTimeout) { - nTimeout -= dwTimeRest; - } - - { - mir_cslock lck(m_cs); - anContacts = m_aRefreshingContacts; - m_aRefreshingContacts.clear(); - } - - { - CBoolGuard bg(m_bRefreshInProgress); - RefreshQuotes(anContacts); - } - } - break; - case WAIT_TIMEOUT: - nTimeout = get_refresh_timeout_miliseconds(visitor); - { - mir_cslock lck(m_cs); - anContacts = m_aContacts; - } - { - CBoolGuard bg(m_bRefreshInProgress); - RefreshQuotes(anContacts); - } - break; - - default: - assert(!"What is the hell?"); - } - } - - OnEndRun(); -} - -void CQuotesProviderBase::OnEndRun() -{ - TContracts anContacts; - { - mir_cslock lck(m_cs); - anContacts = m_aContacts; - m_aRefreshingContacts.clear(); - } - - CBoolGuard bg(m_bRefreshInProgress); - std::for_each(anContacts.begin(), anContacts.end(), boost::bind(&SetContactStatus, _1, ID_STATUS_OFFLINE)); -} - -void CQuotesProviderBase::Accept(CQuotesProviderVisitor &visitor)const -{ - visitor.Visit(*this); -} - -void CQuotesProviderBase::RefreshSettings() -{ - BOOL b = ::SetEvent(m_hEventSettingsChanged); - assert(b && "Failed to set event"); -} - -void CQuotesProviderBase::RefreshAllContacts() -{ - {// for CCritSection - mir_cslock lck(m_cs); - m_aRefreshingContacts.clear(); - std::for_each(std::begin(m_aContacts), std::end(m_aContacts), [&](MCONTACT hContact) { m_aRefreshingContacts.push_back(hContact); }); - } - - BOOL b = ::SetEvent(m_hEventRefreshContact); - assert(b && "Failed to set event"); -} - -void CQuotesProviderBase::RefreshContact(MCONTACT hContact) -{ - {// for CCritSection - mir_cslock lck(m_cs); - m_aRefreshingContacts.push_back(hContact); - } - - BOOL b = ::SetEvent(m_hEventRefreshContact); - assert(b && "Failed to set event"); -} diff --git a/plugins/CurrencyRates/src/QuotesProviderBase.h b/plugins/CurrencyRates/src/QuotesProviderBase.h deleted file mode 100644 index 40f8c1ec24..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderBase.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef __3e6cb4ec_fc47_468f_a2c8_a77941176bc9_QuotesProviderBase_h__ -#define __3e6cb4ec_fc47_468f_a2c8_a77941176bc9_QuotesProviderBase_h__ - -class CQuotesProviderBase : public IQuotesProvider -{ -public: - class CQuote - { - public: - CQuote(const tstring& rsID = L"", const tstring& rsSymbol = L"", const tstring& rsName = L"") - : m_sSymbol(rsSymbol), m_sName(rsName), m_sID(rsID){} - - const tstring& GetSymbol()const{ return m_sSymbol; } - const tstring& GetName()const{ return m_sName; } - const tstring& GetID()const{ return m_sID; } - - private: - tstring m_sSymbol; - tstring m_sName; - tstring m_sID; - }; - - class CQuoteSection - { - public: - typedef std::vector TSections; - typedef std::vector TQuotes; - - public: - CQuoteSection(const tstring& rsName = L"", const TSections& raSections = TSections(), const TQuotes& raQuotes = TQuotes()) - : m_sName(rsName), m_aSections(raSections), m_aQuotes(raQuotes){} - - const tstring& GetName()const - { - return m_sName; - } - - size_t GetSectionCount()const - { - return m_aSections.size(); - } - CQuoteSection GetSection(size_t nIndex)const - { - return ((nIndex < m_aSections.size()) ? m_aSections[nIndex] : CQuoteSection()); - } - - size_t GetQuoteCount()const - { - return m_aQuotes.size(); - } - CQuote GetQuote(size_t nIndex)const - { - return ((nIndex < m_aQuotes.size()) ? m_aQuotes[nIndex] : CQuote()); - } - - private: - tstring m_sName; - TSections m_aSections; - TQuotes m_aQuotes; - }; - -protected: - typedef std::vector TContracts; - -public: - struct CXMLFileInfo; - -public: - CQuotesProviderBase(); - ~CQuotesProviderBase(); - - - const CQuoteSection& GetQuotes()const; - // void SetSettingsEvent(); - - virtual bool Init(); - virtual const CProviderInfo& GetInfo()const; - virtual void AddContact(MCONTACT hContact); - virtual void DeleteContact(MCONTACT hContact); - virtual void Run(); - virtual void Accept(CQuotesProviderVisitor& visitor)const; - virtual void RefreshAllContacts(); - virtual void RefreshSettings(); - virtual void RefreshContact(MCONTACT hContact); - // virtual void SetContactExtraIcon(MCONTACT hContact)const; - -protected: - const tstring& GetURL()const; - MCONTACT CreateNewContact(const tstring& rsName); - static bool IsOnline(); - static void SetContactStatus(MCONTACT hContact, int nNewStatus); - void WriteContactRate(MCONTACT hContact, double dRate, const tstring& rsSymbol = L""); - -private: - virtual void RefreshQuotes(TContracts& anContacts) = 0; - -private: - virtual void OnEndRun(); - -private: - CXMLFileInfo* GetXMLFileInfo()const; - -protected: - TContracts m_aContacts; - mutable mir_cs m_cs; - -private: - typedef boost::scoped_ptr TXMLFileInfoPtr; - mutable TXMLFileInfoPtr m_pXMLInfo; - HANDLE m_hEventSettingsChanged; - HANDLE m_hEventRefreshContact; - tstring m_sContactListFormat; - tstring m_sStatusMsgFormat; - tstring m_sTendencyFormat; - TContracts m_aRefreshingContacts; - bool m_bRefreshInProgress; -}; - -#endif //__3e6cb4ec_fc47_468f_a2c8_a77941176bc9_QuotesProviderBase_h__ diff --git a/plugins/CurrencyRates/src/QuotesProviderCurrencyConverter.cpp b/plugins/CurrencyRates/src/QuotesProviderCurrencyConverter.cpp deleted file mode 100644 index f51a662721..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderCurrencyConverter.cpp +++ /dev/null @@ -1,425 +0,0 @@ -#include "stdafx.h" -#include "QuotesProviderCurrencyConverter.h" -#include -#include - -namespace -{ - tstring build_url(const tstring& rsURL, const tstring& from, const tstring& to) - { - tostringstream o; - o << rsURL << L"?q=" << from << L"_" << to << "&compact=ultra"; - return o.str(); - } - - tstring build_url(MCONTACT hContact, const tstring& rsURL) - { - tstring sFrom = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_FROM_ID); - tstring sTo = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_TO_ID); - return build_url(rsURL, sFrom, sTo); - } - - bool parse_responce(const tstring& rsJSON, double& dRate) - { - try - { - boost::property_tree::ptree pt; - std::istringstream i_stream(quotes_t2a(rsJSON.c_str())); - - boost::property_tree::read_json(i_stream, pt); - if (!pt.empty()) - { - auto pt_nested = pt.begin()->second; - dRate = pt_nested.get_value(); - } - else - { - dRate = pt.get_value(); - } - - return true; - } - catch (boost::property_tree::ptree_error& ) - { - } - return false; - } - - using TWatchedRates = std::vector; - TWatchedRates g_aWatchedRates; - - INT_PTR CALLBACK OptDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) - { - auto get_provider = []()->CQuotesProviderCurrencyConverter* - { - auto pProviders = CModuleInfo::GetQuoteProvidersPtr(); - const auto& rapQuotesProviders = pProviders->GetProviders(); - for (auto i = rapQuotesProviders.begin(); i != rapQuotesProviders.end(); ++i) { - const auto& pProvider = *i; - if (auto p = dynamic_cast(pProvider.get())) - { - return p; - } - } - - assert(!"We should never get here!"); - return nullptr; - }; - - auto make_quote_name = [](const CQuotesProviderBase::CQuote& rQuote)->tstring - { - const tstring& rsDesc = rQuote.GetName(); - return((false == rsDesc.empty()) ? rsDesc : rQuote.GetSymbol()); - }; - - auto make_contact_name = [](const tstring& rsSymbolFrom, const tstring& rsSymbolTo)->tstring - { - tostringstream o; - o << rsSymbolFrom << L"/" << rsSymbolTo; - return o.str(); - }; - - - auto make_rate_name = [make_contact_name](const CQuotesProviderCurrencyConverter::TRateInfo& ri)->tstring - { - if ((false == ri.first.GetName().empty()) && (false == ri.second.GetName().empty())) - return make_contact_name(ri.first.GetName(), ri.second.GetName()); - - return make_contact_name(ri.first.GetSymbol(), ri.second.GetSymbol()); - }; - - - auto pProvider = get_provider(); - - CCommonDlgProcData d(pProvider); - CommonOptionDlgProc(hdlg, message, wParam, lParam, d); - - switch (message) { - case WM_NOTIFY: - { - LPNMHDR pNMHDR = reinterpret_cast(lParam); - switch (pNMHDR->code) { - case PSN_APPLY: - { - if (pProvider) { - TWatchedRates aTemp(g_aWatchedRates); - TWatchedRates aRemove; - size_t cWatchedRates = pProvider->GetWatchedRateCount(); - for (size_t i = 0; i < cWatchedRates; ++i) { - CQuotesProviderCurrencyConverter::TRateInfo ri; - if (true == pProvider->GetWatchedRateInfo(i, ri)) { - auto it = std::find_if(aTemp.begin(), aTemp.end(), [&ri](const auto& other)->bool - { - return ((0 == mir_wstrcmpi(ri.first.GetID().c_str(), other.first.GetID().c_str())) - && ((0 == mir_wstrcmpi(ri.second.GetID().c_str(), other.second.GetID().c_str())))); - }); - if (it == aTemp.end()) { - aRemove.push_back(ri); - } - else { - aTemp.erase(it); - } - } - } - - std::for_each(aRemove.begin(), aRemove.end(), [pProvider](const auto& ri) {pProvider->WatchForRate(ri, false); }); - std::for_each(aTemp.begin(), aTemp.end(), [pProvider](const auto& ri) {pProvider->WatchForRate(ri, true); }); - pProvider->RefreshSettings(); - } - } - break; - } - } - break; - - case WM_INITDIALOG: - TranslateDialogDefault(hdlg); - { - g_aWatchedRates.clear(); - - HWND hcbxFrom = ::GetDlgItem(hdlg, IDC_COMBO_CONVERT_FROM); - HWND hcbxTo = ::GetDlgItem(hdlg, IDC_COMBO_CONVERT_INTO); - - CQuotesProviderBase::CQuoteSection rSection; - const auto& rQuotes = pProvider->GetQuotes(); - if (rQuotes.GetSectionCount() > 0) - { - rSection = rQuotes.GetSection(0); - } - - auto cQuotes = rSection.GetQuoteCount(); - for (auto i = 0u; i < cQuotes; ++i) - { - const auto& rQuote = rSection.GetQuote(i); - tstring sName = make_quote_name(rQuote); - LPCTSTR pszName = sName.c_str(); - ::SendMessage(hcbxFrom, CB_ADDSTRING, 0, reinterpret_cast(pszName)); - ::SendMessage(hcbxTo, CB_ADDSTRING, 0, reinterpret_cast(pszName)); - } - - auto cWatchedRates = pProvider->GetWatchedRateCount(); - for (auto i = 0u; i < cWatchedRates; ++i) - { - CQuotesProviderCurrencyConverter::TRateInfo ri; - if (true == pProvider->GetWatchedRateInfo(i, ri)) - { - g_aWatchedRates.push_back(ri); - tstring sRate = make_rate_name(ri); - LPCTSTR pszRateName = sRate.c_str(); - ::SendDlgItemMessage(hdlg, IDC_LIST_RATES, LB_ADDSTRING, 0, reinterpret_cast(pszRateName)); - } - } - - ::EnableWindow(::GetDlgItem(hdlg, IDC_BUTTON_ADD), FALSE); - ::EnableWindow(::GetDlgItem(hdlg, IDC_BUTTON_REMOVE), FALSE); - } - return TRUE; - - case WM_COMMAND: - switch (HIWORD(wParam)) { - case CBN_SELCHANGE: - switch (LOWORD(wParam)) { - case IDC_COMBO_REFRESH_RATE: - break; - case IDC_COMBO_CONVERT_FROM: - case IDC_COMBO_CONVERT_INTO: - { - int nFrom = static_cast(::SendDlgItemMessage(hdlg, IDC_COMBO_CONVERT_FROM, CB_GETCURSEL, 0, 0)); - int nTo = static_cast(::SendDlgItemMessage(hdlg, IDC_COMBO_CONVERT_INTO, CB_GETCURSEL, 0, 0)); - bool bEnableAddButton = ((CB_ERR != nFrom) && (CB_ERR != nTo) && (nFrom != nTo)); - EnableWindow(GetDlgItem(hdlg, IDC_BUTTON_ADD), bEnableAddButton); - } - break; - case IDC_LIST_RATES: - { - int nSel = ::SendDlgItemMessage(hdlg, IDC_LIST_RATES, LB_GETCURSEL, 0, 0); - ::EnableWindow(::GetDlgItem(hdlg, IDC_BUTTON_REMOVE), (LB_ERR != nSel)); - } - break; - } - break; - - case BN_CLICKED: - switch (LOWORD(wParam)) { - case IDC_BUTTON_ADD: - { - size_t nFrom = static_cast(::SendDlgItemMessage(hdlg, IDC_COMBO_CONVERT_FROM, CB_GETCURSEL, 0, 0)); - size_t nTo = static_cast(::SendDlgItemMessage(hdlg, IDC_COMBO_CONVERT_INTO, CB_GETCURSEL, 0, 0)); - if ((CB_ERR != nFrom) && (CB_ERR != nTo) && (nFrom != nTo)) - { - CQuotesProviderBase::CQuoteSection rSection; - const auto& rQuotes = pProvider->GetQuotes(); - if (rQuotes.GetSectionCount() > 0) - { - rSection = rQuotes.GetSection(0); - } - - auto cQuotes = rSection.GetQuoteCount(); - if ((nFrom < cQuotes) && (nTo < cQuotes)) - { - CQuotesProviderCurrencyConverter::TRateInfo ri; - ri.first = rSection.GetQuote(nFrom); - ri.second = rSection.GetQuote(nTo); - - g_aWatchedRates.push_back(ri); - - tstring sRate = make_rate_name(ri); - LPCTSTR pszRateName = sRate.c_str(); - ::SendDlgItemMessage(hdlg, IDC_LIST_RATES, LB_ADDSTRING, 0, reinterpret_cast(pszRateName)); - PropSheet_Changed(::GetParent(hdlg), hdlg); - } - } - } - break; - - case IDC_BUTTON_REMOVE: - HWND hWnd = ::GetDlgItem(hdlg, IDC_LIST_RATES); - int nSel = ::SendMessage(hWnd, LB_GETCURSEL, 0, 0); - if (LB_ERR != nSel) { - if ((LB_ERR != ::SendMessage(hWnd, LB_DELETESTRING, nSel, 0)) - && (nSel < static_cast(g_aWatchedRates.size()))) { - - TWatchedRates::iterator i = g_aWatchedRates.begin(); - std::advance(i, nSel); - g_aWatchedRates.erase(i); - PropSheet_Changed(::GetParent(hdlg), hdlg); - } - } - - nSel = ::SendMessage(hWnd, LB_GETCURSEL, 0, 0); - ::EnableWindow(::GetDlgItem(hdlg, IDC_BUTTON_REMOVE), (LB_ERR != nSel)); - break; - } - break; - } - break; - } - - return FALSE; - } - -} - - -CQuotesProviderCurrencyConverter::CQuotesProviderCurrencyConverter() -{ -} - - -CQuotesProviderCurrencyConverter::~CQuotesProviderCurrencyConverter() -{ -} - -void CQuotesProviderCurrencyConverter::Accept(CQuotesProviderVisitor& visitor)const -{ - CQuotesProviderBase::Accept(visitor); - visitor.Visit(*this); -} - -void CQuotesProviderCurrencyConverter::ShowPropertyPage(WPARAM wp, OPTIONSDIALOGPAGE& odp) -{ - odp.pszTemplate = MAKEINTRESOURCEA(IDD_DIALOG_OPT_GOOGLE); - odp.pfnDlgProc = OptDlgProc; - odp.szTab.w = const_cast(GetInfo().m_sName.c_str()); - g_plugin.addOptions(wp, &odp); -} - -void CQuotesProviderCurrencyConverter::RefreshQuotes(TContracts& anContacts) -{ - CHTTPSession http; - tstring sURL = GetURL(); - - for (TContracts::const_iterator i = anContacts.begin(); i != anContacts.end() && IsOnline(); ++i) { - MCONTACT hContact = *i; - - tstring sFullURL = build_url(hContact, sURL); - if ((true == http.OpenURL(sFullURL)) && (true == IsOnline())) { - tstring sHTML; - if ((true == http.ReadResponce(sHTML)) && (true == IsOnline())) { - double dRate = 0.0; - if ((true == parse_responce(sHTML, dRate)) && (true == IsOnline())) { - WriteContactRate(hContact, dRate); - continue; - } - } - } - - SetContactStatus(hContact, ID_STATUS_NA); - } -} - -double CQuotesProviderCurrencyConverter::Convert(double dAmount, const CQuote& from, const CQuote& to)const -{ - tstring sFullURL = build_url(GetURL(), from.GetID(), to.GetID()); - - CHTTPSession http; - if ((true == http.OpenURL(sFullURL))) { - tstring sHTML; - if ((true == http.ReadResponce(sHTML))) { - double dResult = 0.0; - if ((true == parse_responce(sHTML, dResult))) - { - return dResult*dAmount; - } - - throw std::runtime_error(Translate("Error occurred during HTML parsing.")); - } - else throw std::runtime_error(Translate("Error occurred during site access.")); - } - else throw std::runtime_error(Translate("Error occurred during site access.")); - - return 0.0; -} - -size_t CQuotesProviderCurrencyConverter::GetWatchedRateCount()const -{ - return m_aContacts.size(); -} - -bool CQuotesProviderCurrencyConverter::GetWatchedRateInfo(size_t nIndex, TRateInfo& rRateInfo) -{ - if(nIndex < m_aContacts.size()) { - MCONTACT hContact = m_aContacts[nIndex]; - tstring sSymbolFrom = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_FROM_ID); - tstring sSymbolTo = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_TO_ID); - tstring sDescFrom = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_FROM_DESCRIPTION); - tstring sDescTo = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_TO_DESCRIPTION); - - rRateInfo.first = CQuote(sSymbolFrom, sSymbolFrom, sDescFrom); - rRateInfo.second = CQuote(sSymbolTo, sSymbolTo, sDescTo); - return true; - } - else { - return false; - } -} - -bool CQuotesProviderCurrencyConverter::WatchForRate(const TRateInfo& ri, bool bWatch) -{ - auto i = std::find_if(m_aContacts.begin(), m_aContacts.end(), [&ri](auto hContact)->bool - { - tstring sFrom = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_FROM_ID); - tstring sTo = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_TO_ID); - return ((0 == mir_wstrcmpi(ri.first.GetID().c_str(), sFrom.c_str())) - && (0 == mir_wstrcmpi(ri.second.GetID().c_str(), sTo.c_str()))); - }); - - auto make_contact_name = [](const tstring& rsSymbolFrom, const tstring& rsSymbolTo)->tstring - { - tostringstream o; - o << rsSymbolFrom << L"/" << rsSymbolTo; - return o.str(); - }; - - - if ((true == bWatch) && (i == m_aContacts.end())) - { - tstring sName = make_contact_name(ri.first.GetSymbol(), ri.second.GetSymbol()); - MCONTACT hContact = CreateNewContact(sName); - if (hContact) - { - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_FROM_ID, ri.first.GetID().c_str()); - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_TO_ID, ri.second.GetID().c_str()); - if (false == ri.first.GetName().empty()) - { - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_FROM_DESCRIPTION, ri.first.GetName().c_str()); - } - if (false == ri.second.GetName().empty()) - { - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_TO_DESCRIPTION, ri.second.GetName().c_str()); - } - - return true; - } - } - else if ((false == bWatch) && (i != m_aContacts.end())) - { - MCONTACT hContact = *i; - {// for CCritSection - mir_cslock lck(m_cs); - m_aContacts.erase(i); - } - - db_delete_contact(hContact); - return true; - } - - return false; -} - -MCONTACT CQuotesProviderCurrencyConverter::GetContactByID(const tstring& rsFromID, const tstring& rsToID)const -{ - mir_cslock lck(m_cs); - - auto i = std::find_if(m_aContacts.begin(), m_aContacts.end(), [rsFromID, rsToID](MCONTACT hContact)->bool - { - tstring sFrom = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_FROM_ID); - tstring sTo = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_TO_ID); - return ((0 == mir_wstrcmpi(rsFromID.c_str(), sFrom.c_str())) && (0 == mir_wstrcmpi(rsToID.c_str(), sTo.c_str()))); - - }); - if (i != m_aContacts.end()) - return *i; - - return NULL; -} diff --git a/plugins/CurrencyRates/src/QuotesProviderCurrencyConverter.h b/plugins/CurrencyRates/src/QuotesProviderCurrencyConverter.h deleted file mode 100644 index c6138756b3..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderCurrencyConverter.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#define DB_STR_FROM_ID "FromID" -#define DB_STR_TO_ID "ToID" -#define DB_STR_FROM_DESCRIPTION "FromDesc" -#define DB_STR_TO_DESCRIPTION "ToDesc" - - -class CQuotesProviderCurrencyConverter : public CQuotesProviderBase -{ -public: - using TRateInfo = std::pair; - -public: - CQuotesProviderCurrencyConverter(); - ~CQuotesProviderCurrencyConverter(); - - double Convert(double dAmount, const CQuote& from, const CQuote& to)const; - size_t GetWatchedRateCount()const; - bool GetWatchedRateInfo(size_t nIndex, TRateInfo& rRateInfo); - bool WatchForRate(const TRateInfo& ri, bool bWatch); - MCONTACT GetContactByID(const tstring& rsFromID, const tstring& rsToID)const; - -private: - virtual void Accept(CQuotesProviderVisitor& visitor)const override; - virtual void ShowPropertyPage(WPARAM wp, OPTIONSDIALOGPAGE& odp)override; - virtual void RefreshQuotes(TContracts& anContacts)override; -}; - diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitor.h b/plugins/CurrencyRates/src/QuotesProviderVisitor.h deleted file mode 100644 index 934e0f80d0..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitor.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef __7fca59e7_17b2_4849_bd7a_02c7675f2d76_QuotesProviderVisitor_h__ -#define __7fca59e7_17b2_4849_bd7a_02c7675f2d76_QuotesProviderVisitor_h__ - -class CQuotesProviderBase; -class CQuotesProviderFinance; -class CQuotesProviderDukasCopy; -class CQuotesProviderGoogleFinance; -class CQuotesProviderYahoo; -class CQuotesProviderCurrencyConverter; - -class CQuotesProviderVisitor -{ -public: - CQuotesProviderVisitor() {} - virtual ~CQuotesProviderVisitor() {} - - virtual void Visit(const CQuotesProviderBase&){} - virtual void Visit(const CQuotesProviderFinance&){} - virtual void Visit(const CQuotesProviderDukasCopy&){} - virtual void Visit(const CQuotesProviderGoogleFinance&){} - virtual void Visit(const CQuotesProviderYahoo&){} - virtual void Visit(const CQuotesProviderCurrencyConverter&) {} -}; - -#endif //__7fca59e7_17b2_4849_bd7a_02c7675f2d76_QuotesProviderVisitor_h__ diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitorDbSettings.cpp b/plugins/CurrencyRates/src/QuotesProviderVisitorDbSettings.cpp deleted file mode 100644 index 3793e91699..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitorDbSettings.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "StdAfx.h" - -CQuotesProviderVisitorDbSettings::CQuotesProviderVisitorDbSettings() - : m_pszDbRefreshRateType(nullptr), - m_pszDbRefreshRateValue(nullptr), - m_pszDbDisplayNameFormat(nullptr), - m_pszDefDisplayFormat(nullptr), - m_pszDefLogFileFormat(nullptr), - m_pszDefHistoryFormat(nullptr), - m_pszXMLIniFileName(nullptr), - m_pszDbStatusMsgFormat(nullptr), - m_pszDefStatusMsgFormat(nullptr), - m_pszDbLogMode(nullptr), - m_pszDbHistoryFormat(nullptr), - m_pszDbHistoryCondition(nullptr), - m_pszDbLogFile(nullptr), - m_pszDbLogFormat(nullptr), - m_pszDbLogCondition(nullptr), - m_pszDbPopupFormat(nullptr), - m_pszDefPopupFormat(nullptr), - m_pszDbPopupCondition(nullptr), - m_pszDbPopupColourMode(nullptr), - m_pszDbPopupBkColour(nullptr), - m_pszDbPopupTextColour(nullptr), - m_pszDbPopupDelayMode(nullptr), - m_pszDbPopupDelayTimeout(nullptr), - m_pszDbPopupHistoryFlag(nullptr), - m_pszDbTendencyFormat(nullptr), - m_pszDefTendencyFormat(L"%r>%p") -{ -} - -CQuotesProviderVisitorDbSettings::~CQuotesProviderVisitorDbSettings() -{ -} - -void CQuotesProviderVisitorDbSettings::Visit(const CQuotesProviderBase&/* rProvider*/) -{ - m_pszDefLogFileFormat = L"%s\\t%t\\t%r\\n"; - m_pszDefHistoryFormat = L"%s %r"; - m_pszDefPopupFormat = L"\\nCurrent = %r\\nPrevious = %p"; -} - -void CQuotesProviderVisitorDbSettings::Visit(const CQuotesProviderCurrencyConverter&) -{ - m_pszDbRefreshRateType = "CC_RefreshRateType"; - m_pszDbRefreshRateValue = "CC_RefreshRateValue"; - m_pszDbDisplayNameFormat = "CC_DspNameFrmt"; - m_pszDefDisplayFormat = L"1 %f = %r %i"; - m_pszXMLIniFileName = L"CC.xml"; - m_pszDbStatusMsgFormat = "CC_StatusMessageFormat"; - - m_pszDbLogMode = "CC_LogMode"; - m_pszDbHistoryFormat = "CC_HistoryFormat"; - m_pszDbHistoryCondition = "CC_AddToHistoryOnlyIfValueIsChanged"; - m_pszDbLogFile = "CC_LogFile"; - m_pszDbLogFormat = "CC_LogFileFormat"; - m_pszDbLogCondition = "CC_AddToLogOnlyIfValueIsChanged"; - m_pszDbPopupFormat = "CC_PopupFormat"; - m_pszDbPopupCondition = "CC_ShowPopupOnlyIfValueChanged"; - - m_pszDbPopupColourMode = "CC_PopupColourMode"; - m_pszDbPopupBkColour = "CC_PopupColourBk"; - m_pszDbPopupTextColour = "CC_PopupColourText"; - m_pszDbPopupDelayMode = "CC_PopupDelayMode"; - m_pszDbPopupDelayTimeout = "CC_PopupDelayTimeout"; - m_pszDbPopupHistoryFlag = "CC_PopupHistoryFlag"; - - m_pszDbTendencyFormat = "CC_TendencyFormat"; -} diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitorDbSettings.h b/plugins/CurrencyRates/src/QuotesProviderVisitorDbSettings.h deleted file mode 100644 index 6a5b180b0d..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitorDbSettings.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __97cd432a_1119_4803_a96f_0abc1cc2653f_QuotesProviderVisitorDbSettings_h__ -#define __97cd432a_1119_4803_a96f_0abc1cc2653f_QuotesProviderVisitorDbSettings_h__ - -class CQuotesProviderVisitorDbSettings : public CQuotesProviderVisitor -{ -public: - CQuotesProviderVisitorDbSettings(); - ~CQuotesProviderVisitorDbSettings(); - -private: - virtual void Visit(const CQuotesProviderBase& rProvider)override; - virtual void Visit(const CQuotesProviderCurrencyConverter& rProvider)override; -public: - LPCSTR m_pszDbRefreshRateType; - LPCSTR m_pszDbRefreshRateValue; - LPCSTR m_pszDbDisplayNameFormat; - LPCTSTR m_pszDefDisplayFormat; - LPCTSTR m_pszDefLogFileFormat; - LPCTSTR m_pszDefHistoryFormat; - LPCTSTR m_pszXMLIniFileName; - LPCSTR m_pszDbStatusMsgFormat; - LPCTSTR m_pszDefStatusMsgFormat; - LPCTSTR m_pszDefPopupFormat; - LPCSTR m_pszDbTendencyFormat; - LPCTSTR m_pszDefTendencyFormat; - - //global settings - LPCSTR m_pszDbLogMode; - LPCSTR m_pszDbHistoryFormat; - LPCSTR m_pszDbHistoryCondition; - LPCSTR m_pszDbLogFile; - LPCSTR m_pszDbLogFormat; - LPCSTR m_pszDbLogCondition; - LPCSTR m_pszDbPopupFormat; - LPCSTR m_pszDbPopupCondition; - LPCSTR m_pszDbPopupColourMode; - LPCSTR m_pszDbPopupBkColour; - LPCSTR m_pszDbPopupTextColour; - LPCSTR m_pszDbPopupDelayMode; - LPCSTR m_pszDbPopupDelayTimeout; - LPCSTR m_pszDbPopupHistoryFlag; -}; - -#endif //__97cd432a_1119_4803_a96f_0abc1cc2653f_QuotesProviderVisitorDbSettings_h__ diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitorFormatSpecificator.cpp b/plugins/CurrencyRates/src/QuotesProviderVisitorFormatSpecificator.cpp deleted file mode 100644 index 451eaa4f2f..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitorFormatSpecificator.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include "StdAfx.h" - -CQuotesProviderVisitorFormatSpecificator::CQuotesProviderVisitorFormatSpecificator() -{ -} - -CQuotesProviderVisitorFormatSpecificator::~CQuotesProviderVisitorFormatSpecificator() -{ -} - -void CQuotesProviderVisitorFormatSpecificator::Visit(const CQuotesProviderDukasCopy&/* rProvider*/) -{ - m_aSpecificators.push_back(CFormatSpecificator(L"%s", TranslateT("Quote Symbol"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%d", TranslateT("Quote Name"))); -} - -void CQuotesProviderVisitorFormatSpecificator::Visit(const CQuotesProviderBase&/* rProvider*/) -{ - m_aSpecificators.push_back(CFormatSpecificator(L"%S", TranslateT("Source of Information"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%r", TranslateT("Rate Value"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%p", TranslateT("Previous Rate Value"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%X", TranslateT("Fetch Time"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%x", TranslateT("Fetch Date"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%t", TranslateT("Fetch Time and Date"))); - m_aSpecificators.push_back(CFormatSpecificator(L"\\%", TranslateT("Percentage Character (%)"))); - m_aSpecificators.push_back(CFormatSpecificator(L"\\t", TranslateT("Tabulation"))); - m_aSpecificators.push_back(CFormatSpecificator(L"\\\\", TranslateT("Left slash (\\)"))); -} - -void CQuotesProviderVisitorFormatSpecificator::Visit(const CQuotesProviderGoogleFinance&/* rProvider*/) -{ - m_aSpecificators.push_back(CFormatSpecificator(L"%s", TranslateT("Quote Symbol"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%n", TranslateT("Quote Name"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%o", TranslateT("Open Price"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%d", TranslateT("Percent Change to After Hours"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%y", TranslateT("Percent Change to Yesterday Close"))); -} - -const CQuotesProviderVisitorFormatSpecificator::TFormatSpecificators& CQuotesProviderVisitorFormatSpecificator::GetSpecificators()const -{ - return m_aSpecificators; -} - -void CQuotesProviderVisitorFormatSpecificator::Visit(const CQuotesProviderYahoo&) -{ - m_aSpecificators.push_back(CFormatSpecificator(L"%s", TranslateT("Quote Symbol"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%n", TranslateT("Quote Name"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%o", TranslateT("Open Price"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%h", TranslateT("Day's High"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%g", TranslateT("Day's Low"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%P", TranslateT("Previous Close"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%c", TranslateT("Change"))); -} - -void CQuotesProviderVisitorFormatSpecificator::Visit(const CQuotesProviderCurrencyConverter&) -{ - m_aSpecificators.push_back(CFormatSpecificator(L"%F", TranslateT("From Currency Full Name"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%f", TranslateT("From Currency Short Name"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%I", TranslateT("Into Currency Full Name"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%i", TranslateT("Into Currency Short Name"))); - m_aSpecificators.push_back(CFormatSpecificator(L"%s", TranslateT("Short notation for \"%f/%i\""))); -} \ No newline at end of file diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitorFormatSpecificator.h b/plugins/CurrencyRates/src/QuotesProviderVisitorFormatSpecificator.h deleted file mode 100644 index 445a7d168c..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitorFormatSpecificator.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __00c159f3_525a_41e9_8fc5_00464b6fafa3_QuotesProviderVisitorFormatSpecificator_h__ -#define __00c159f3_525a_41e9_8fc5_00464b6fafa3_QuotesProviderVisitorFormatSpecificator_h__ - -class CQuotesProviderVisitorFormatSpecificator : public CQuotesProviderVisitor -{ -public: - struct CFormatSpecificator - { - CFormatSpecificator(const tstring& rsSymbol = L"", const tstring& rsDec = L"") - : m_sSymbol(rsSymbol), m_sDesc(rsDec){} - - tstring m_sSymbol; - tstring m_sDesc; - }; - typedef std::vector TFormatSpecificators; - -public: - CQuotesProviderVisitorFormatSpecificator(); - ~CQuotesProviderVisitorFormatSpecificator(); - - const TFormatSpecificators& GetSpecificators()const; - -private: - virtual void Visit(const CQuotesProviderDukasCopy& rProvider)override; - virtual void Visit(const CQuotesProviderBase& rProvider)override; - virtual void Visit(const CQuotesProviderGoogleFinance& rProvider)override; - virtual void Visit(const CQuotesProviderYahoo& rProvider)override; - virtual void Visit(const CQuotesProviderCurrencyConverter& rProvider)override; -private: - TFormatSpecificators m_aSpecificators; -}; - -#endif//__00c159f3_525a_41e9_8fc5_00464b6fafa3_QuotesProviderVisitorFormatSpecificator_h__ diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitorFormater.cpp b/plugins/CurrencyRates/src/QuotesProviderVisitorFormater.cpp deleted file mode 100644 index 50d3b7e8cc..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitorFormater.cpp +++ /dev/null @@ -1,122 +0,0 @@ -#include "StdAfx.h" -#include "QuotesProviderCurrencyConverter.h" - -CQuotesProviderVisitorFormater::CQuotesProviderVisitorFormater(MCONTACT hContact, wchar_t chr, int nWidth) - : m_hContact(hContact), - m_chr(chr), - m_nWidth(nWidth) -{ -} - -CQuotesProviderVisitorFormater::~CQuotesProviderVisitorFormater() -{ -} - -const tstring& CQuotesProviderVisitorFormater::GetResult()const -{ - return m_sResult; -} - -static bool get_fetch_time(MCONTACT hContact, time_t& rTime) -{ - DBVARIANT dbv; - if (db_get(hContact, QUOTES_MODULE_NAME, DB_STR_QUOTE_FETCH_TIME, &dbv) || (DBVT_DWORD != dbv.type)) - return false; - - rTime = dbv.dVal; - return true; -} - -static tstring format_fetch_time(const CQuotesProviderBase&, MCONTACT hContact, const tstring& rsFormat) -{ - time_t nTime; - if (true == get_fetch_time(hContact, nTime)) { - boost::posix_time::ptime time = boost::date_time::c_local_adjustor::utc_to_local(boost::posix_time::from_time_t(nTime)); - tostringstream k; - k.imbue(std::locale(GetSystemLocale(), new ttime_facet(rsFormat.c_str()))); - k << time; - return k.str(); - } - - return tstring(); -} - -void CQuotesProviderVisitorFormater::Visit(const CQuotesProviderBase& rProvider) -{ - switch (m_chr) { - case '%': - case '\t': - case '\\': - m_sResult = m_chr; - break; - case 'S': - m_sResult = Quotes_DBGetStringT(m_hContact, QUOTES_MODULE_NAME, DB_STR_QUOTE_PROVIDER); - break; - case 's': - m_sResult = Quotes_DBGetStringT(m_hContact, QUOTES_MODULE_NAME, DB_STR_QUOTE_SYMBOL); - break; - case 'X': - m_sResult = format_fetch_time(rProvider, m_hContact, Quotes_GetTimeFormat(true)); - break; - case 'x': - m_sResult = format_fetch_time(rProvider, m_hContact, Quotes_GetDateFormat(true)); - break; - case 't': - { - tstring sFrmt = Quotes_GetDateFormat(true); - sFrmt += L" "; - sFrmt += Quotes_GetTimeFormat(true); - m_sResult = format_fetch_time(rProvider, m_hContact, sFrmt); - } - break; - case 'r': - case 'R': - FormatDoubleHelper(DB_STR_QUOTE_CURR_VALUE); - break; - case 'p': - FormatDoubleHelper(DB_STR_QUOTE_PREV_VALUE); - break; - } -} - - -tstring format_double(double dValue, int nWidth) -{ - tostringstream o; - o.imbue(GetSystemLocale()); - - if (nWidth > 0 && nWidth <= 9) - o << std::setprecision(nWidth) << std::showpoint << std::fixed; - - o << dValue; - - return o.str(); -} - -void CQuotesProviderVisitorFormater::FormatDoubleHelper(LPCSTR pszDbSet, - const tstring sInvalid/* = L"-"*/) -{ - double d = 0.0; - if (true == Quotes_DBReadDouble(m_hContact, QUOTES_MODULE_NAME, pszDbSet, d)) - m_sResult = format_double(d, m_nWidth); - else - m_sResult = sInvalid; -} - -void CQuotesProviderVisitorFormater::Visit(const CQuotesProviderCurrencyConverter&) -{ - switch (m_chr) { - case 'F': - m_sResult = Quotes_DBGetStringT(m_hContact, QUOTES_MODULE_NAME, DB_STR_FROM_DESCRIPTION); - break; - case 'f': - m_sResult = Quotes_DBGetStringT(m_hContact, QUOTES_MODULE_NAME, DB_STR_FROM_ID); - break; - case 'I': - m_sResult = Quotes_DBGetStringT(m_hContact, QUOTES_MODULE_NAME, DB_STR_TO_DESCRIPTION); - break; - case 'i': - m_sResult = Quotes_DBGetStringT(m_hContact, QUOTES_MODULE_NAME, DB_STR_TO_ID); - break; - } -} \ No newline at end of file diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitorFormater.h b/plugins/CurrencyRates/src/QuotesProviderVisitorFormater.h deleted file mode 100644 index 27890694ae..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitorFormater.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __2b5ddd05_9255_4be0_9408_e59768b70568_QuotesProviderVisitorFormater_h__ -#define __2b5ddd05_9255_4be0_9408_e59768b70568_QuotesProviderVisitorFormater_h__ - -class CQuotesProviderVisitorFormater : public CQuotesProviderVisitor -{ -public: - CQuotesProviderVisitorFormater(MCONTACT hContact, wchar_t chr, int nWidth); - ~CQuotesProviderVisitorFormater(); - - const tstring& GetResult()const; - -private: - virtual void Visit(const CQuotesProviderBase& rProvider)override; - virtual void Visit(const CQuotesProviderCurrencyConverter& rProvider)override; - -private: - void FormatDoubleHelper(LPCSTR pszDbSet, const tstring sInvalid = L"-"); - // void FormatChangeValueHelper(bool bPercentage); - -private: - MCONTACT m_hContact; - wchar_t m_chr; - tstring m_sResult; - int m_nWidth; -}; - -#endif //__2b5ddd05_9255_4be0_9408_e59768b70568_QuotesProviderVisitorFormater_h__ diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitorTendency.cpp b/plugins/CurrencyRates/src/QuotesProviderVisitorTendency.cpp deleted file mode 100644 index 123fed5015..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitorTendency.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "stdafx.h" - -CQuotesProviderVisitorTendency::CQuotesProviderVisitorTendency(MCONTACT hContact, wchar_t chr) - : m_hContact(hContact), m_chr(chr), m_bValid(false), m_dResult(0.0) -{ -} - -void CQuotesProviderVisitorTendency::Visit(const CQuotesProviderBase&) -{ - switch (m_chr) { - case 'r': - case 'R': - GetValue(DB_STR_QUOTE_CURR_VALUE); - break; - case 'p': - GetValue(DB_STR_QUOTE_PREV_VALUE); - break; - } -} - -void CQuotesProviderVisitorTendency::GetValue(LPCSTR pszDbKeyName) -{ - m_bValid = Quotes_DBReadDouble(m_hContact, QUOTES_MODULE_NAME, pszDbKeyName, m_dResult); -} diff --git a/plugins/CurrencyRates/src/QuotesProviderVisitorTendency.h b/plugins/CurrencyRates/src/QuotesProviderVisitorTendency.h deleted file mode 100644 index ef867423d9..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviderVisitorTendency.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef __AD721194_E9944366_9CF1_0307460EF32F_QuotesProviderVisitorTendency_h__ -#define __AD721194_E9944366_9CF1_0307460EF32F_QuotesProviderVisitorTendency_h__ - -class CQuotesProviderVisitorTendency : public CQuotesProviderVisitor -{ -public: - CQuotesProviderVisitorTendency(MCONTACT hContact, wchar_t chr); - - bool IsValid()const{ return m_bValid; } - double GetResult()const{ return m_dResult; } - -private: - virtual void Visit(const CQuotesProviderBase& rProvider); - -private: - void GetValue(LPCSTR pszDbKeyName); - -private: - MCONTACT m_hContact; - wchar_t m_chr; - bool m_bValid; - double m_dResult; -}; - -#endif //__AD721194_E9944366_9CF1_0307460EF32F_QuotesProviderVisitorTendency_h__ diff --git a/plugins/CurrencyRates/src/QuotesProviders.cpp b/plugins/CurrencyRates/src/QuotesProviders.cpp deleted file mode 100644 index 384df4277e..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviders.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "StdAfx.h" -#include "QuotesProviderCurrencyConverter.h" - -#define LAST_RUN_VERSION "LastRunVersion" - -CQuotesProviders::CQuotesProviders() -{ - InitProviders(); -} - -CQuotesProviders::~CQuotesProviders() -{ - ClearProviders(); -} - -const CQuotesProviders::TQuotesProviders& CQuotesProviders::GetProviders()const -{ - return m_apProviders; -} - -templatevoid create_provider(CQuotesProviders::TQuotesProviders& apProviders) -{ - CQuotesProviders::TQuotesProviderPtr pProvider(new T); - if (pProvider->Init()) - apProviders.push_back(pProvider); -}; - -void CQuotesProviders::CreateProviders() -{ - create_provider(m_apProviders); -} - -void CQuotesProviders::ClearProviders() -{ - m_apProviders.clear(); -} - -void convert_contact_settings(MCONTACT hContact) -{ - WORD dwLogMode = db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG, static_cast(lmDisabled)); - if ((dwLogMode&lmInternalHistory) || (dwLogMode&lmExternalFile)) - db_set_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_CONTACT_SPEC_SETTINGS, 1); -} - -void CQuotesProviders::InitProviders() -{ - CreateProviders(); - - const WORD nCurrentVersion = 17; - WORD nVersion = db_get_w(NULL, QUOTES_MODULE_NAME, LAST_RUN_VERSION, 1); - - for (auto &hContact : Contacts(QUOTES_MODULE_NAME)) { - TQuotesProviderPtr pProvider = GetContactProviderPtr(hContact); - if (pProvider) { - pProvider->AddContact(hContact); - if (nVersion < nCurrentVersion) - convert_contact_settings(hContact); - } - } - - db_set_w(NULL, QUOTES_MODULE_NAME, LAST_RUN_VERSION, nCurrentVersion); -} - -CQuotesProviders::TQuotesProviderPtr CQuotesProviders::GetContactProviderPtr(MCONTACT hContact)const -{ - char* szProto = GetContactProto(hContact); - if (nullptr == szProto || 0 != ::_stricmp(szProto, QUOTES_PROTOCOL_NAME)) - return TQuotesProviderPtr(); - - tstring sProvider = Quotes_DBGetStringT(hContact, QUOTES_MODULE_NAME, DB_STR_QUOTE_PROVIDER); - if (true == sProvider.empty()) - return TQuotesProviderPtr(); - - return FindProvider(sProvider); -} - -CQuotesProviders::TQuotesProviderPtr CQuotesProviders::FindProvider(const tstring& rsName)const -{ - TQuotesProviderPtr pResult; - for (TQuotesProviders::const_iterator i = m_apProviders.begin(); i != m_apProviders.end(); ++i) { - const TQuotesProviderPtr& pProvider = *i; - const IQuotesProvider::CProviderInfo& rInfo = pProvider->GetInfo(); - if (0 == ::mir_wstrcmpi(rsName.c_str(), rInfo.m_sName.c_str())) { - pResult = pProvider; - break; - } - } - - return pResult; -} diff --git a/plugins/CurrencyRates/src/QuotesProviders.h b/plugins/CurrencyRates/src/QuotesProviders.h deleted file mode 100644 index 71aca86303..0000000000 --- a/plugins/CurrencyRates/src/QuotesProviders.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __148306d1_da2a_43df_b1ad_0cdc8ef8a79e_QuotesProviders_h__ -#define __148306d1_da2a_43df_b1ad_0cdc8ef8a79e_QuotesProviders_h__ - -class IQuotesProvider; - -class CQuotesProviders -{ -public: - typedef boost::shared_ptr TQuotesProviderPtr; - typedef std::vector TQuotesProviders; - -public: - CQuotesProviders(); - ~CQuotesProviders(); - - TQuotesProviderPtr FindProvider(const tstring& rsName)const; - TQuotesProviderPtr GetContactProviderPtr(MCONTACT hContact)const; - const TQuotesProviders& GetProviders()const; - -private: - void InitProviders(); - void CreateProviders(); - void ClearProviders(); - -private: - TQuotesProviders m_apProviders; -}; - -#endif //__148306d1_da2a_43df_b1ad_0cdc8ef8a79e_QuotesProviders_h__ diff --git a/plugins/CurrencyRates/src/SettingsDlg.cpp b/plugins/CurrencyRates/src/SettingsDlg.cpp index a3de4ddea1..e24b0e381c 100644 --- a/plugins/CurrencyRates/src/SettingsDlg.cpp +++ b/plugins/CurrencyRates/src/SettingsDlg.cpp @@ -2,7 +2,7 @@ #define WINDOW_PREFIX_SETTINGS "Edit Settings_" -LPCTSTR g_pszVariableQuoteName = L"%quotename%"; +LPCTSTR g_pszVariableCurrencyRateName = L"%currencyratename%"; LPCTSTR g_pszVariableUserProfile = L"%miranda_userdata%"; void update_file_controls(HWND hDlg) @@ -211,7 +211,7 @@ INT_PTR CALLBACK EditPopupSettingsDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM nModeDelay = CPopupSettings::delayCustom; else { prepare_edit_ctrl_for_error(::GetDlgItem(hWnd, IDC_DELAY)); - Quotes_MessageBox(hWnd, TranslateT("Enter integer value"), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter integer value"), MB_OK | MB_ICONERROR); bError = true; } } @@ -259,52 +259,52 @@ INT_PTR CALLBACK EditSettingsPerContactDlgProc(HWND hWnd, UINT msg, WPARAM wp, L tstring sName = GetContactName(hContact); ::SetDlgItemText(hWnd, IDC_EDIT_NAME, sName.c_str()); - CQuotesProviders::TQuotesProviderPtr pProvider = CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(hContact); + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = CModuleInfo::GetCurrencyRateProvidersPtr()->GetContactProviderPtr(hContact); - BYTE bUseContactSpecific = db_get_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_CONTACT_SPEC_SETTINGS, 0); + BYTE bUseContactSpecific = db_get_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CONTACT_SPEC_SETTINGS, 0); ::CheckDlgButton(hWnd, IDC_CHECK_CONTACT_SPECIFIC, bUseContactSpecific ? BST_CHECKED : BST_UNCHECKED); CAdvProviderSettings setGlobal(pProvider.get()); // log to history - WORD dwLogMode = db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG, setGlobal.GetLogMode()); + WORD dwLogMode = db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG, setGlobal.GetLogMode()); UINT nCheck = (dwLogMode&lmInternalHistory) ? 1 : 0; ::CheckDlgButton(hWnd, IDC_CHECK_INTERNAL_HISTORY, nCheck ? BST_CHECKED : BST_UNCHECKED); - tstring sHistoryFrmt = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_HISTORY, setGlobal.GetHistoryFormat().c_str()); + tstring sHistoryFrmt = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_HISTORY, setGlobal.GetHistoryFormat().c_str()); ::SetDlgItemText(hWnd, IDC_EDIT_HISTORY_FORMAT, sHistoryFrmt.c_str()); - WORD wOnlyIfChanged = db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_HISTORY_CONDITION, setGlobal.GetHistoryOnlyChangedFlag()); + WORD wOnlyIfChanged = db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_HISTORY_CONDITION, setGlobal.GetHistoryOnlyChangedFlag()); ::CheckDlgButton(hWnd, IDC_CHECK_HISTORY_CONDITION, (1 == wOnlyIfChanged) ? BST_CHECKED : BST_UNCHECKED); // log to file nCheck = (dwLogMode&lmExternalFile) ? 1 : 0; ::CheckDlgButton(hWnd, IDC_CHECK_EXTERNAL_FILE, nCheck ? BST_CHECKED : BST_UNCHECKED); - tstring sLogFileName = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG_FILE); + tstring sLogFileName = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG_FILE); if (true == sLogFileName.empty()) { - sLogFileName = GenerateLogFileName(setGlobal.GetLogFileName(), Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_SYMBOL), glfnResolveQuoteName); + sLogFileName = GenerateLogFileName(setGlobal.GetLogFileName(), CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL), glfnResolveCurrencyRateName); } ::SetDlgItemText(hWnd, IDC_EDIT_FILE_NAME, sLogFileName.c_str()); - tstring sLogFileFrmt = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_LOG_FILE, setGlobal.GetLogFormat().c_str()); + tstring sLogFileFrmt = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_LOG_FILE, setGlobal.GetLogFormat().c_str()); ::SetDlgItemText(hWnd, IDC_EDIT_LOG_FILE_FORMAT, sLogFileFrmt.c_str()); - wOnlyIfChanged = db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG_FILE_CONDITION, setGlobal.GetLogOnlyChangedFlag()); + wOnlyIfChanged = db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG_FILE_CONDITION, setGlobal.GetLogOnlyChangedFlag()); ::CheckDlgButton(hWnd, IDC_CHECK_LOG_FILE_CONDITION, (1 == wOnlyIfChanged) ? BST_CHECKED : BST_UNCHECKED); // popup nCheck = (dwLogMode&lmPopup) ? 1 : 0; ::CheckDlgButton(hWnd, IDC_CHECK_SHOW_POPUP, nCheck ? BST_CHECKED : BST_UNCHECKED); - tstring sPopupFrmt = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_POPUP, setGlobal.GetPopupFormat().c_str()); + tstring sPopupFrmt = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_POPUP, setGlobal.GetPopupFormat().c_str()); ::SetDlgItemText(hWnd, IDC_EDIT_POPUP_FORMAT, sPopupFrmt.c_str()); - bool bOnlyIfChanged = 1 == db_get_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_CONDITION, setGlobal.GetShowPopupIfValueChangedFlag()); + bool bOnlyIfChanged = 1 == db_get_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_CONDITION, setGlobal.GetShowPopupIfValueChangedFlag()); ::CheckDlgButton(hWnd, IDC_CHECK_SHOW_POPUP_ONLY_VALUE_CHANGED, (bOnlyIfChanged) ? BST_CHECKED : BST_UNCHECKED); update_all_controls(hWnd); CSettingWindowParam* pParam = new CSettingWindowParam(hContact); ::SetWindowLongPtr(hWnd, GWLP_USERDATA, reinterpret_cast(pParam)); - Utils_RestoreWindowPositionNoSize(hWnd, hContact, QUOTES_MODULE_NAME, WINDOW_PREFIX_SETTINGS); + Utils_RestoreWindowPositionNoSize(hWnd, hContact, CURRENCYRATES_MODULE_NAME, WINDOW_PREFIX_SETTINGS); ::ShowWindow(hWnd, SW_SHOW); } break; @@ -315,7 +315,7 @@ INT_PTR CALLBACK EditSettingsPerContactDlgProc(HWND hWnd, UINT msg, WPARAM wp, L case IDC_BUTTON_LOG_FILE_DESCRIPTION: case IDC_BUTTON_POPUP_FORMAT_DESCRIPTION: if (BN_CLICKED == HIWORD(wp)) { - CQuotesProviders::TQuotesProviderPtr pProvider = CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(get_param(hWnd)->m_hContact); + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = CModuleInfo::GetCurrencyRateProvidersPtr()->GetContactProviderPtr(get_param(hWnd)->m_hContact); show_variable_list(hWnd, pProvider.get()); } break; @@ -345,7 +345,7 @@ INT_PTR CALLBACK EditSettingsPerContactDlgProc(HWND hWnd, UINT msg, WPARAM wp, L if (BN_CLICKED == HIWORD(wp)) { CSettingWindowParam* pParam = get_param(hWnd); if (!pParam->m_pPopupSettings) { - CQuotesProviders::TQuotesProviderPtr pProvider = CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(pParam->m_hContact); + CCurrencyRatesProviders::TCurrencyRatesProviderPtr pProvider = CModuleInfo::GetCurrencyRateProvidersPtr()->GetContactProviderPtr(pParam->m_hContact); pParam->m_pPopupSettings = new CPopupSettings(pProvider.get()); pParam->m_pPopupSettings->InitForContact(pParam->m_hContact); @@ -388,19 +388,19 @@ INT_PTR CALLBACK EditSettingsPerContactDlgProc(HWND hWnd, UINT msg, WPARAM wp, L if ((nLogMode&lmExternalFile)) { if (true == sLogFile.empty()) { prepare_edit_ctrl_for_error(hwndLogFile); - Quotes_MessageBox(hWnd, TranslateT("Enter log file name."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter log file name."), MB_OK | MB_ICONERROR); bOk = false; } else if (true == sLogFileFormat.empty()) { prepare_edit_ctrl_for_error(hwndLogFileFrmt); - Quotes_MessageBox(hWnd, TranslateT("Enter log file format."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter log file format."), MB_OK | MB_ICONERROR); bOk = false; } } if ((true == bOk) && (nLogMode&lmInternalHistory) && (true == sHistoryFormat.empty())) { prepare_edit_ctrl_for_error(hwndHistoryFrmt); - Quotes_MessageBox(hWnd, TranslateT("Enter history format."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter history format."), MB_OK | MB_ICONERROR); bOk = false; } @@ -408,7 +408,7 @@ INT_PTR CALLBACK EditSettingsPerContactDlgProc(HWND hWnd, UINT msg, WPARAM wp, L tstring sPopupFormat = get_window_text(hwndPopupFrmt); if ((true == bOk) && (nLogMode&lmPopup) && (true == sPopupFormat.empty())) { prepare_edit_ctrl_for_error(hwndPopupFrmt); - Quotes_MessageBox(hWnd, TranslateT("Enter popup window format."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter popup window format."), MB_OK | MB_ICONERROR); bOk = false; } @@ -417,15 +417,15 @@ INT_PTR CALLBACK EditSettingsPerContactDlgProc(HWND hWnd, UINT msg, WPARAM wp, L UINT nIfChangedFile = IsDlgButtonChecked(hWnd, IDC_CHECK_LOG_FILE_CONDITION); bool bIfChangedPopup = (1 == IsDlgButtonChecked(hWnd, IDC_CHECK_SHOW_POPUP_ONLY_VALUE_CHANGED)); - db_set_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_CONTACT_SPEC_SETTINGS, bUseContactSpec); - db_set_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG, nLogMode); - db_set_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG_FILE_CONDITION, nIfChangedFile); - db_set_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_HISTORY_CONDITION, nIfChangedHistory); - db_set_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_CONDITION, bIfChangedPopup); - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG_FILE, sLogFile.c_str()); - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_LOG_FILE, sLogFileFormat.c_str()); - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_HISTORY, sHistoryFormat.c_str()); - db_set_ws(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_FORMAT_POPUP, sPopupFormat.c_str()); + db_set_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CONTACT_SPEC_SETTINGS, bUseContactSpec); + db_set_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG, nLogMode); + db_set_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG_FILE_CONDITION, nIfChangedFile); + db_set_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_HISTORY_CONDITION, nIfChangedHistory); + db_set_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_CONDITION, bIfChangedPopup); + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG_FILE, sLogFile.c_str()); + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_LOG_FILE, sLogFileFormat.c_str()); + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_HISTORY, sHistoryFormat.c_str()); + db_set_ws(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_FORMAT_POPUP, sPopupFormat.c_str()); if (pParam->m_pPopupSettings) { pParam->m_pPopupSettings->SaveForContact(hContact); @@ -453,7 +453,7 @@ INT_PTR CALLBACK EditSettingsPerContactDlgProc(HWND hWnd, UINT msg, WPARAM wp, L MWindowList hWL = CModuleInfo::GetInstance().GetWindowList(WINDOW_PREFIX_SETTINGS, false); assert(hWL); WindowList_Remove(hWL, hWnd); - Utils_SaveWindowPosition(hWnd, pParam->m_hContact, QUOTES_MODULE_NAME, WINDOW_PREFIX_SETTINGS); + Utils_SaveWindowPosition(hWnd, pParam->m_hContact, CURRENCYRATES_MODULE_NAME, WINDOW_PREFIX_SETTINGS); delete pParam; break; } @@ -545,12 +545,12 @@ INT_PTR CALLBACK EditSettingsPerProviderDlgProc(HWND hWnd, UINT msg, WPARAM wp, if ((nLogMode&lmExternalFile)) { if (true == sLogFile.empty()) { prepare_edit_ctrl_for_error(hwndLogFile); - Quotes_MessageBox(hWnd, TranslateT("Enter log file name."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter log file name."), MB_OK | MB_ICONERROR); bOk = false; } else if (true == sLogFileFormat.empty()) { prepare_edit_ctrl_for_error(hwndLogFileFrmt); - Quotes_MessageBox(hWnd, TranslateT("Enter log file format."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter log file format."), MB_OK | MB_ICONERROR); bOk = false; } } @@ -559,7 +559,7 @@ INT_PTR CALLBACK EditSettingsPerProviderDlgProc(HWND hWnd, UINT msg, WPARAM wp, tstring sHistoryFormat = get_window_text(hwndHistoryFrmt); if ((true == bOk) && (nLogMode&lmInternalHistory) && (true == sHistoryFormat.empty())) { prepare_edit_ctrl_for_error(hwndHistoryFrmt); - Quotes_MessageBox(hWnd, TranslateT("Enter history format."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter history format."), MB_OK | MB_ICONERROR); bOk = false; } @@ -567,7 +567,7 @@ INT_PTR CALLBACK EditSettingsPerProviderDlgProc(HWND hWnd, UINT msg, WPARAM wp, tstring sPopupFormat = get_window_text(hwndPopupFrmt); if ((true == bOk) && (nLogMode&lmPopup) && (true == sPopupFormat.empty())) { prepare_edit_ctrl_for_error(hwndPopupFrmt); - Quotes_MessageBox(hWnd, TranslateT("Enter popup window format."), MB_OK | MB_ICONERROR); + CurrencyRates_MessageBox(hWnd, TranslateT("Enter popup window format."), MB_OK | MB_ICONERROR); bOk = false; } @@ -634,18 +634,18 @@ INT_PTR CALLBACK EditSettingsPerProviderDlgProc(HWND hWnd, UINT msg, WPARAM wp, return FALSE; } -CAdvProviderSettings::CAdvProviderSettings(const IQuotesProvider* pQuotesProvider) - : m_pQuotesProvider(pQuotesProvider), +CAdvProviderSettings::CAdvProviderSettings(const ICurrencyRatesProvider* pCurrencyRatesProvider) + : m_pCurrencyRatesProvider(pCurrencyRatesProvider), m_wLogMode(lmDisabled), m_bIsOnlyChangedHistory(false), m_bIsOnlyChangedLogFile(false), m_bShowPopupIfValueChanged(false), m_pPopupSettings(nullptr) { - assert(m_pQuotesProvider); + assert(m_pCurrencyRatesProvider); - CQuotesProviderVisitorDbSettings visitor; - m_pQuotesProvider->Accept(visitor); + CCurrencyRatesProviderVisitorDbSettings visitor; + m_pCurrencyRatesProvider->Accept(visitor); assert(visitor.m_pszDefLogFileFormat); assert(visitor.m_pszDefHistoryFormat); @@ -656,23 +656,23 @@ CAdvProviderSettings::CAdvProviderSettings(const IQuotesProvider* pQuotesProvide assert(visitor.m_pszDbLogFormat); assert(visitor.m_pszDbLogCondition); - m_wLogMode = db_get_w(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbLogMode, static_cast(lmDisabled)); - m_sFormatHistory = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbHistoryFormat, visitor.m_pszDefHistoryFormat); - m_bIsOnlyChangedHistory = 1 == db_get_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbHistoryCondition, 0); + m_wLogMode = db_get_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbLogMode, static_cast(lmDisabled)); + m_sFormatHistory = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbHistoryFormat, visitor.m_pszDefHistoryFormat); + m_bIsOnlyChangedHistory = 1 == db_get_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbHistoryCondition, 0); - m_sLogFileName = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbLogFile); + m_sLogFileName = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbLogFile); if (true == m_sLogFileName.empty()) { m_sLogFileName = g_pszVariableUserProfile; - m_sLogFileName += L"\\Quotes\\"; - m_sLogFileName += g_pszVariableQuoteName; + m_sLogFileName += L"\\CurrencyRates\\"; + m_sLogFileName += g_pszVariableCurrencyRateName; m_sLogFileName += L".log"; } - m_sFormatLogFile = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbLogFormat, visitor.m_pszDefLogFileFormat); - m_bIsOnlyChangedLogFile = (1 == db_get_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbLogCondition, 0)); + m_sFormatLogFile = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbLogFormat, visitor.m_pszDefLogFileFormat); + m_bIsOnlyChangedLogFile = (1 == db_get_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbLogCondition, 0)); - m_sPopupFormat = Quotes_DBGetStringT(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupFormat, visitor.m_pszDefPopupFormat); - m_bShowPopupIfValueChanged = (1 == db_get_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupCondition, 0)); + m_sPopupFormat = CurrencyRates_DBGetStringT(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupFormat, visitor.m_pszDefPopupFormat); + m_bShowPopupIfValueChanged = (1 == db_get_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupCondition, 0)); } CAdvProviderSettings::~CAdvProviderSettings() @@ -680,15 +680,15 @@ CAdvProviderSettings::~CAdvProviderSettings() delete m_pPopupSettings; } -const IQuotesProvider* CAdvProviderSettings::GetProviderPtr()const +const ICurrencyRatesProvider* CAdvProviderSettings::GetProviderPtr()const { - return m_pQuotesProvider; + return m_pCurrencyRatesProvider; } void CAdvProviderSettings::SaveToDb()const { - CQuotesProviderVisitorDbSettings visitor; - m_pQuotesProvider->Accept(visitor); + CCurrencyRatesProviderVisitorDbSettings visitor; + m_pCurrencyRatesProvider->Accept(visitor); assert(visitor.m_pszDbLogMode); assert(visitor.m_pszDbHistoryFormat); @@ -703,22 +703,22 @@ void CAdvProviderSettings::SaveToDb()const assert(visitor.m_pszDbPopupDelayTimeout); assert(visitor.m_pszDbPopupHistoryFlag); - db_set_w(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbLogMode, m_wLogMode); - db_set_ws(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbHistoryFormat, m_sFormatHistory.c_str()); - db_set_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbHistoryCondition, m_bIsOnlyChangedHistory); - db_set_ws(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbLogFile, m_sLogFileName.c_str()); - db_set_ws(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbLogFormat, m_sFormatLogFile.c_str()); - db_set_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbLogCondition, m_bIsOnlyChangedLogFile); - db_set_ws(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupFormat, m_sPopupFormat.c_str()); - db_set_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupCondition, m_bShowPopupIfValueChanged); + db_set_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbLogMode, m_wLogMode); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbHistoryFormat, m_sFormatHistory.c_str()); + db_set_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbHistoryCondition, m_bIsOnlyChangedHistory); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbLogFile, m_sLogFileName.c_str()); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbLogFormat, m_sFormatLogFile.c_str()); + db_set_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbLogCondition, m_bIsOnlyChangedLogFile); + db_set_ws(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupFormat, m_sPopupFormat.c_str()); + db_set_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupCondition, m_bShowPopupIfValueChanged); if (nullptr != m_pPopupSettings) { - db_set_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupColourMode, static_cast(m_pPopupSettings->GetColourMode())); - db_set_dw(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupBkColour, m_pPopupSettings->GetColourBk()); - db_set_dw(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupTextColour, m_pPopupSettings->GetColourText()); - db_set_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupDelayMode, static_cast(m_pPopupSettings->GetDelayMode())); - db_set_w(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupDelayTimeout, m_pPopupSettings->GetDelayTimeout()); - db_set_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupHistoryFlag, m_pPopupSettings->GetHistoryFlag()); + db_set_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupColourMode, static_cast(m_pPopupSettings->GetColourMode())); + db_set_dw(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupBkColour, m_pPopupSettings->GetColourBk()); + db_set_dw(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupTextColour, m_pPopupSettings->GetColourText()); + db_set_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupDelayMode, static_cast(m_pPopupSettings->GetDelayMode())); + db_set_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupDelayTimeout, m_pPopupSettings->GetDelayTimeout()); + db_set_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupHistoryFlag, m_pPopupSettings->GetHistoryFlag()); } } @@ -805,12 +805,12 @@ void CAdvProviderSettings::SetShowPopupIfValueChangedFlag(bool val) CPopupSettings* CAdvProviderSettings::GetPopupSettingsPtr()const { if (nullptr == m_pPopupSettings) - m_pPopupSettings = new CPopupSettings(m_pQuotesProvider); + m_pPopupSettings = new CPopupSettings(m_pCurrencyRatesProvider); return m_pPopupSettings; } -CPopupSettings::CPopupSettings(const IQuotesProvider* pQuotesProvider) +CPopupSettings::CPopupSettings(const ICurrencyRatesProvider* pCurrencyRatesProvider) : m_modeColour(colourDefault), m_modeDelay(delayFromPopup), m_rgbBkg(GetDefColourBk()), @@ -819,8 +819,8 @@ CPopupSettings::CPopupSettings(const IQuotesProvider* pQuotesProvider) m_bUseHistory(false) { - CQuotesProviderVisitorDbSettings visitor; - pQuotesProvider->Accept(visitor); + CCurrencyRatesProviderVisitorDbSettings visitor; + pCurrencyRatesProvider->Accept(visitor); assert(visitor.m_pszDbPopupColourMode); assert(visitor.m_pszDbPopupBkColour); @@ -829,19 +829,19 @@ CPopupSettings::CPopupSettings(const IQuotesProvider* pQuotesProvider) assert(visitor.m_pszDbPopupDelayTimeout); assert(visitor.m_pszDbPopupHistoryFlag); - BYTE m = db_get_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupColourMode, static_cast(m_modeColour)); + BYTE m = db_get_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupColourMode, static_cast(m_modeColour)); if (m >= colourDefault && m <= colourUserDefined) m_modeColour = static_cast(m); - m_rgbBkg = db_get_dw(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupBkColour, m_rgbBkg); - m_rgbText = db_get_dw(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupTextColour, m_rgbText); + m_rgbBkg = db_get_dw(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupBkColour, m_rgbBkg); + m_rgbText = db_get_dw(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupTextColour, m_rgbText); - m = db_get_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupDelayMode, static_cast(m_modeDelay)); + m = db_get_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupDelayMode, static_cast(m_modeDelay)); if (m >= delayFromPopup && m <= delayPermanent) { m_modeDelay = static_cast(m); } - m_wDelay = db_get_w(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupDelayTimeout, m_wDelay); - m_bUseHistory = (1 == db_get_b(NULL, QUOTES_PROTOCOL_NAME, visitor.m_pszDbPopupHistoryFlag, m_bUseHistory)); + m_wDelay = db_get_w(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupDelayTimeout, m_wDelay); + m_bUseHistory = (1 == db_get_b(NULL, CURRENCYRATES_MODULE_NAME, visitor.m_pszDbPopupHistoryFlag, m_bUseHistory)); } /*static */ @@ -858,30 +858,30 @@ COLORREF CPopupSettings::GetDefColourText() void CPopupSettings::InitForContact(MCONTACT hContact) { - BYTE m = db_get_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_COLOUR_MODE, static_cast(m_modeColour)); + BYTE m = db_get_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_COLOUR_MODE, static_cast(m_modeColour)); if (m >= CPopupSettings::colourDefault && m <= CPopupSettings::colourUserDefined) { m_modeColour = static_cast(m); } - m_rgbBkg = db_get_dw(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_COLOUR_BK, m_rgbBkg); - m_rgbText = db_get_dw(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_COLOUR_TEXT, m_rgbText); + m_rgbBkg = db_get_dw(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_COLOUR_BK, m_rgbBkg); + m_rgbText = db_get_dw(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_COLOUR_TEXT, m_rgbText); - m = db_get_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_DELAY_MODE, static_cast(m_modeDelay)); + m = db_get_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_DELAY_MODE, static_cast(m_modeDelay)); if (m >= CPopupSettings::delayFromPopup && m <= CPopupSettings::delayPermanent) { m_modeDelay = static_cast(m); } - m_wDelay = db_get_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_DELAY_TIMEOUT, m_wDelay); - m_bUseHistory = 1 == db_get_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_HISTORY_FLAG, m_bUseHistory); + m_wDelay = db_get_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_DELAY_TIMEOUT, m_wDelay); + m_bUseHistory = 1 == db_get_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_HISTORY_FLAG, m_bUseHistory); } void CPopupSettings::SaveForContact(MCONTACT hContact)const { - db_set_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_COLOUR_MODE, static_cast(m_modeColour)); - db_set_dw(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_COLOUR_BK, m_rgbBkg); - db_set_dw(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_COLOUR_TEXT, m_rgbText); - db_set_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_DELAY_MODE, static_cast(m_modeDelay)); - db_set_w(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_DELAY_TIMEOUT, m_wDelay); - db_set_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_POPUP_HISTORY_FLAG, m_bUseHistory); + db_set_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_COLOUR_MODE, static_cast(m_modeColour)); + db_set_dw(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_COLOUR_BK, m_rgbBkg); + db_set_dw(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_COLOUR_TEXT, m_rgbText); + db_set_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_DELAY_MODE, static_cast(m_modeDelay)); + db_set_w(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_DELAY_TIMEOUT, m_wDelay); + db_set_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_POPUP_HISTORY_FLAG, m_bUseHistory); } CPopupSettings::EColourMode CPopupSettings::GetColourMode()const @@ -967,17 +967,17 @@ static void replace_invalid_char(tstring::value_type& rChar, tstring::value_type } } -tstring GenerateLogFileName(const tstring &rsLogFilePattern, const tstring &rsQuoteSymbol, int nFlags) +tstring GenerateLogFileName(const tstring &rsLogFilePattern, const tstring &rsCurrencyRateSymbol, int nFlags) { tstring sPath = rsLogFilePattern; - if (nFlags&glfnResolveQuoteName) { - assert(false == rsQuoteSymbol.empty()); + if (nFlags&glfnResolveCurrencyRateName) { + assert(false == rsCurrencyRateSymbol.empty()); - tstring::size_type n = sPath.find(g_pszVariableQuoteName); + tstring::size_type n = sPath.find(g_pszVariableCurrencyRateName); if (tstring::npos != n) { - tstring s = rsQuoteSymbol; + tstring s = rsCurrencyRateSymbol; std::for_each(s.begin(), s.end(), boost::bind(replace_invalid_char, _1, '_')); - sPath.replace(n, mir_wstrlen(g_pszVariableQuoteName), s.c_str()); + sPath.replace(n, mir_wstrlen(g_pszVariableCurrencyRateName), s.c_str()); } } @@ -996,18 +996,18 @@ tstring GetContactLogFileName(MCONTACT hContact) { tstring result; - const CQuotesProviders::TQuotesProviderPtr& pProvider = CModuleInfo::GetQuoteProvidersPtr()->GetContactProviderPtr(hContact); + const CCurrencyRatesProviders::TCurrencyRatesProviderPtr& pProvider = CModuleInfo::GetCurrencyRateProvidersPtr()->GetContactProviderPtr(hContact); if (pProvider) { tstring sPattern; - bool bUseContactSpecific = (db_get_b(hContact, QUOTES_PROTOCOL_NAME, DB_STR_CONTACT_SPEC_SETTINGS, 0) > 0); + bool bUseContactSpecific = (db_get_b(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CONTACT_SPEC_SETTINGS, 0) > 0); if (bUseContactSpecific) - sPattern = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_LOG_FILE); + sPattern = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_LOG_FILE); else { CAdvProviderSettings global_settings(pProvider.get()); sPattern = global_settings.GetLogFileName(); } - result = GenerateLogFileName(sPattern, Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_SYMBOL)); + result = GenerateLogFileName(sPattern, CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL)); } return result; @@ -1015,9 +1015,9 @@ tstring GetContactLogFileName(MCONTACT hContact) tstring GetContactName(MCONTACT hContact) { - tstring sDescription = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_DESCRIPTION); + tstring sDescription = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_DESCRIPTION); if (sDescription.empty()) - sDescription = Quotes_DBGetStringT(hContact, QUOTES_PROTOCOL_NAME, DB_STR_QUOTE_SYMBOL); + sDescription = CurrencyRates_DBGetStringT(hContact, CURRENCYRATES_MODULE_NAME, DB_STR_CURRENCYRATE_SYMBOL); return sDescription; } diff --git a/plugins/CurrencyRates/src/SettingsDlg.h b/plugins/CurrencyRates/src/SettingsDlg.h index b462d7a901..87c7ab697a 100644 --- a/plugins/CurrencyRates/src/SettingsDlg.h +++ b/plugins/CurrencyRates/src/SettingsDlg.h @@ -1,7 +1,7 @@ #ifndef __E211E4D9_383C_43BE_A787_7EF1D585B90D_SettingsDlg_h__ #define __E211E4D9_383C_43BE_A787_7EF1D585B90D_SettingsDlg_h__ -class IQuotesProvider; +class ICurrencyRatesProvider; class CPopupSettings { @@ -20,7 +20,7 @@ public: }; public: - CPopupSettings(const IQuotesProvider* pQuotesProvider); + CPopupSettings(const ICurrencyRatesProvider* pCurrencyRatesProvider); static COLORREF GetDefColourBk(); static COLORREF GetDefColourText(); @@ -59,12 +59,12 @@ private: class CAdvProviderSettings { public: - CAdvProviderSettings(const IQuotesProvider* pQuotesProvider); + CAdvProviderSettings(const ICurrencyRatesProvider* pCurrencyRatesProvider); ~CAdvProviderSettings(); void SaveToDb()const; - const IQuotesProvider* GetProviderPtr()const; + const ICurrencyRatesProvider* GetProviderPtr()const; WORD GetLogMode()const; void SetLogMode(WORD wMode); @@ -89,7 +89,7 @@ public: CPopupSettings* GetPopupSettingsPtr()const; private: - const IQuotesProvider* m_pQuotesProvider; + const ICurrencyRatesProvider* m_pCurrencyRatesProvider; WORD m_wLogMode; tstring m_sFormatHistory; bool m_bIsOnlyChangedHistory; @@ -106,11 +106,11 @@ bool ShowSettingsDlg(HWND hWndParent, CAdvProviderSettings* pAdvSettings); enum { - glfnResolveQuoteName = 0x0001, + glfnResolveCurrencyRateName = 0x0001, glfnResolveUserProfile = 0x0002, - glfnResolveAll = glfnResolveQuoteName | glfnResolveUserProfile, + glfnResolveAll = glfnResolveCurrencyRateName | glfnResolveUserProfile, }; -tstring GenerateLogFileName(const tstring& rsLogFilePattern, const tstring& rsQuoteSymbol, int nFlags = glfnResolveAll); +tstring GenerateLogFileName(const tstring& rsLogFilePattern, const tstring& rsCurrencyRateSymbol, int nFlags = glfnResolveAll); tstring GetContactLogFileName(MCONTACT hContact); tstring GetContactName(MCONTACT hContact); diff --git a/plugins/CurrencyRates/src/WinCtrlHelper.cpp b/plugins/CurrencyRates/src/WinCtrlHelper.cpp index 03da055dbe..636b7ae9b1 100644 --- a/plugins/CurrencyRates/src/WinCtrlHelper.cpp +++ b/plugins/CurrencyRates/src/WinCtrlHelper.cpp @@ -6,14 +6,14 @@ static INT_PTR CALLBACK VariableListDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPAR case WM_INITDIALOG: TranslateDialogDefault(hWnd); { - const IQuotesProvider* pProvider = reinterpret_cast(lp); - CQuotesProviderVisitorFormatSpecificator visitor; + const ICurrencyRatesProvider* pProvider = reinterpret_cast(lp); + CCurrencyRatesProviderVisitorFormatSpecificator visitor; pProvider->Accept(visitor); tostringstream o; - const CQuotesProviderVisitorFormatSpecificator::TFormatSpecificators& raSpec = visitor.GetSpecificators(); + const CCurrencyRatesProviderVisitorFormatSpecificator::TFormatSpecificators& raSpec = visitor.GetSpecificators(); std::for_each(raSpec.begin(), raSpec.end(), - [&o](const CQuotesProviderVisitorFormatSpecificator::CFormatSpecificator& spec) + [&o](const CCurrencyRatesProviderVisitorFormatSpecificator::CFormatSpecificator& spec) { o << spec.m_sSymbol << '\t' << spec.m_sDesc << L"\r\n"; }); @@ -30,7 +30,7 @@ static INT_PTR CALLBACK VariableListDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPAR return FALSE; } -void show_variable_list(HWND hwndParent, const IQuotesProvider* pProvider) +void show_variable_list(HWND hwndParent, const ICurrencyRatesProvider* pProvider) { ::DialogBoxParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_DIALOG_VARIABLE_LIST), diff --git a/plugins/CurrencyRates/src/WinCtrlHelper.h b/plugins/CurrencyRates/src/WinCtrlHelper.h index 20444ce41e..c9e87e8ae5 100644 --- a/plugins/CurrencyRates/src/WinCtrlHelper.h +++ b/plugins/CurrencyRates/src/WinCtrlHelper.h @@ -1,7 +1,7 @@ #ifndef __a05d6852_4497_4f28_85e1_48a15a170738_WinCtrlHelper_h__ #define __a05d6852_4497_4f28_85e1_48a15a170738_WinCtrlHelper_h__ -class IQuotesProvider; +class ICurrencyRatesProvider; inline tstring get_window_text(HWND hWnd) { @@ -21,11 +21,11 @@ inline void prepare_edit_ctrl_for_error(HWND hwndEdit) ::SendMessage(hwndEdit, EM_SCROLLCARET, 0, 0); } -void show_variable_list(HWND hwndParent, const IQuotesProvider* pProvider); +void show_variable_list(HWND hwndParent, const ICurrencyRatesProvider* pProvider); -inline int Quotes_MessageBox(HWND hWnd, LPCTSTR pszText, UINT nType = MB_OK) +inline int CurrencyRates_MessageBox(HWND hWnd, LPCTSTR pszText, UINT nType = MB_OK) { - return ::MessageBox(hWnd, pszText, quotes_a2t(MIRANDANAME).c_str(), nType); + return ::MessageBox(hWnd, pszText, currencyrates_a2t(MIRANDANAME).c_str(), nType); } inline void spin_set_range(HWND hwndSpin, short nLower, short nUpper) diff --git a/plugins/CurrencyRates/src/resource.h b/plugins/CurrencyRates/src/resource.h index 46a35fe06e..ef87ff4a70 100644 --- a/plugins/CurrencyRates/src/resource.h +++ b/plugins/CurrencyRates/src/resource.h @@ -1,19 +1,19 @@ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. -// Used by C:\Code\miranda-ng-from-github\plugins\Quotes\res\Forex.rc +// Used by C:\Code\miranda-ng-from-github\plugins\CurrencyRates\res\Forex.rc // #define IDI_ICON_MAIN 102 -#define IDD_DIALOG_QUOTE_INFO 102 +#define IDD_DIALOG_CURRENCYRATE_INFO 102 #define IDD_DIALOG_OPT_GOOGLE 103 #define IDI_ICON_SECTION 110 -#define IDI_ICON_QUOTE 111 +#define IDI_ICON_CURRENCYRATE 111 #define IDI_ICON_UP 113 #define IDI_ICON_DOWN 114 #define IDD_CONTACT_SETTINGS 115 #define IDI_ICON_NOTCHANGED 116 #define IDD_CURRENCY_CONVERTER 116 #define IDI_ICON_CURRENCY_CONVERTER 117 -#define IDD_DIALOG_QUOTE_INFO_1 118 +#define IDD_DIALOG_CURRENCYRATE_INFO_1 118 #define IDI_ICON_REFRESH 118 #define IDI_ICON_IMPORT 119 #define IDI_ICON_EXPORT 120 @@ -26,10 +26,10 @@ #define IDC_EDIT_REFRESH_RATE 1002 #define IDC_SPIN_REFRESH_RATE 1003 #define IDC_COMBO_REFRESH_RATE 1004 -#define IDC_STATIC_QUOTE_NAME 1008 +#define IDC_STATIC_CURRENCYRATE_NAME 1008 #define IDC_SYSLINK_PROVIDER 1009 #define IDC_STATIC_CHART 1010 -#define IDC_STATIC_QUOTE_CHART 1010 +#define IDC_STATIC_CURRENCYRATE_CHART 1010 #define IDC_COMBO_CONVERT_FROM 1011 #define IDC_COMBO_CONVERT_INTO 1012 #define IDC_BUTTON_ADD 1013 diff --git a/plugins/CurrencyRates/src/stdafx.h b/plugins/CurrencyRates/src/stdafx.h index 83c696ad69..bae36819e7 100644 --- a/plugins/CurrencyRates/src/stdafx.h +++ b/plugins/CurrencyRates/src/stdafx.h @@ -50,7 +50,7 @@ typedef std::wistream tistream; typedef boost::posix_time::wtime_input_facet ttime_input_facet; typedef boost::posix_time::wtime_facet ttime_facet; -inline std::string quotes_t2a(const wchar_t* t) +inline std::string currencyrates_t2a(const wchar_t* t) { std::string s; char* p = mir_u2a(t); @@ -61,7 +61,7 @@ inline std::string quotes_t2a(const wchar_t* t) return s; } -inline tstring quotes_a2t(const char* s) +inline tstring currencyrates_a2t(const char* s) { tstring t; wchar_t* p = mir_a2u(s); @@ -75,7 +75,7 @@ inline tstring quotes_a2t(const char* s) #include "resource.h" #include "version.h" #include "IconLib.h" -#include "QuoteInfoDlg.h" +#include "CurrencyRateInfoDlg.h" #include "ModuleInfo.h" #include "DBUtils.h" #include "HTTPSession.h" @@ -91,17 +91,17 @@ inline tstring quotes_a2t(const char* s) #include "Locale.h" #include "ExtraImages.h" #include "IsWithinAccuracy.h" -#include "IQuotesProvider.h" -#include "QuotesProviders.h" -#include "QuotesProviderBase.h" -#include "QuotesProviderVisitor.h" -#include "QuotesProviderVisitorDbSettings.h" -#include "QuotesProviderVisitorFormater.h" -#include "QuotesProviderVisitorTendency.h" -#include "QuotesProviderVisitorFormatSpecificator.h" +#include "ICurrencyRatesProvider.h" +#include "CurrencyRatesProviders.h" +#include "CurrencyRatesProviderBase.h" +#include "CurrencyRatesProviderVisitor.h" +#include "CurrencyRatesProviderVisitorDbSettings.h" +#include "CurrencyRatesProviderVisitorFormater.h" +#include "CurrencyRatesProviderVisitorTendency.h" +#include "CurrencyRatesProviderVisitorFormatSpecificator.h" #define CHART_IMPLEMENT #ifdef CHART_IMPLEMENT -#include "QuoteChart.h" +#include "CurrencyRateChart.h" #include "Chart.h" #endif #include "IHTMLParser.h" diff --git a/plugins/ExternalAPI/m_CurrencyRates.h b/plugins/ExternalAPI/m_CurrencyRates.h index 5535b69571..f8cd8b159a 100644 --- a/plugins/ExternalAPI/m_CurrencyRates.h +++ b/plugins/ExternalAPI/m_CurrencyRates.h @@ -1,5 +1,5 @@ -#ifndef __7D8F07A4_72AF_4838_9C5C_6FDFF57D0DC6_m_Quotes_h__ -#define __7D8F07A4_72AF_4838_9C5C_6FDFF57D0DC6_m_Quotes_h__ +#ifndef __7D8F07A4_72AF_4838_9C5C_6FDFF57D0DC6_m_CurrencyRates_h__ +#define __7D8F07A4_72AF_4838_9C5C_6FDFF57D0DC6_m_CurrencyRates_h__ /* * Export the contact (or all contacts) to xml file @@ -10,7 +10,7 @@ * -1 if user canceled export and * value greater than zero if error occurred during exporting */ -#define MS_QUOTES_EXPORT "Quotes/Export" +#define MS_CURRENCYRATES_EXPORT "CurrencyRates/Export" /* * Import the contact (or all contacts) from xml file @@ -23,13 +23,13 @@ */ // if contact(s) exists user would be asked to overwrite these contacts -// #define QUOTES_IMPORT_PROMPT_TO_OVERWRITE_EXISTING_CONTACTS 0x0000 +// #define CURRENCYRATES_IMPORT_PROMPT_TO_OVERWRITE_EXISTING_CONTACTS 0x0000 // if contact(s) exists it would be overwrite without any prompt -// #define QUOTES_IMPORT_SILENT_OVERWRITE_EXISTING_CONTACTS 0x0001 +// #define CURRENCYRATES_IMPORT_SILENT_OVERWRITE_EXISTING_CONTACTS 0x0001 // if contact(s) exists during importing it would be ignored -#define QUOTES_IMPORT_SKIP_EXISTING_CONTACTS 0x0002 +#define CURRENCYRATES_IMPORT_SKIP_EXISTING_CONTACTS 0x0002 -#define MS_QUOTES_IMPORT "Quotes/Import" +#define MS_CURRENCYRATES_IMPORT "CurrencyRates/Import" -#endif //__7D8F07A4_72AF_4838_9C5C_6FDFF57D0DC6_m_Quotes_h__ +#endif //__7D8F07A4_72AF_4838_9C5C_6FDFF57D0DC6_m_CurrencyRates_h__ -- cgit v1.2.3