Skip to content
This repository was archived by the owner on Jul 5, 2024. It is now read-only.

Commit 8a92eb7

Browse files
committed
Изменение архитектуры
1 parent 7dbbff4 commit 8a92eb7

13 files changed

Lines changed: 300 additions & 176 deletions

MainForm.cs

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public partial class MainForm : Form
88
float USD_Steam; // Рублей за доллар (Steam)
99
float KZT_Qiwi; // Рублей за тенге (Qiwi)
1010
float USD_Qiwi; // Тенге за доллар (Qiwi)
11-
float USD_Web; // Тенге за доллар (Webmoney)
11+
float USD_Web; // Рублей за доллар (Webmoney)
1212
float RUB_Input; // Рублей до конвертации
1313
float RUB_Output; // Рублей после конвертации
1414

@@ -25,10 +25,10 @@ public MainForm()
2525

2626
if (USD_Steam != 0 && USD_Qiwi != 0 && KZT_Qiwi != 0 && USD_Web != 0)
2727
{
28-
LabelUSD.Text = "Рублей за доллар - " + Math.Round(USD_Steam, 4).ToString(CultureInfo.InvariantCulture);
29-
LabelUSDWeb.Text = "Рублей за доллар - " + Math.Round(USD_Web, 4).ToString(CultureInfo.InvariantCulture) + " (P2P)";
30-
LabelKZT.Text = "Рублей за тенге - " + Math.Round(KZT_Qiwi, 3).ToString(CultureInfo.InvariantCulture);
31-
LabelKZT_USD.Text = "Тенге за доллар - " + Math.Round(USD_Qiwi, 2).ToString(CultureInfo.InvariantCulture);
28+
LabelUSD.Text = $"Рублей за доллар - {Math.Round(USD_Steam, 4)}";
29+
LabelUSDWeb.Text = $"Рублей за доллар - {Math.Round(USD_Web, 4)} (P2P)";
30+
LabelKZT.Text = $"Рублей за тенге - {Math.Round(KZT_Qiwi, 3)}";
31+
LabelKZT_USD.Text = $"Тенге за доллар - {Math.Round(USD_Qiwi, 2)}";
3232

3333
PictureBoxUSD.Image = Properties.Resources.warn_c;
3434
PictureBoxUSDWeb.Image = Properties.Resources.warn_c;
@@ -48,77 +48,77 @@ private void ButtonGet_Click(object sender, EventArgs e)
4848
ButtonGetRates.Text = "Обновление";
4949
ButtonGetRates.Enabled = false;
5050
ButtonReverse.Enabled = false;
51-
PictureBoxKZT.Image = Properties.Resources.wait_c;
52-
PictureBoxUSD.Image = Properties.Resources.wait_c;
53-
PictureBoxUSDWeb.Image = Properties.Resources.wait_c;
54-
PictureBoxKZTUSD.Image = Properties.Resources.wait_c;
5551
TextBoxInput.Enabled = false;
5652
TextBoxOutput.Enabled = false;
5753

58-
// 1 - доллары, 5 - рубли (https://partner.steamgames.com/doc/store/pricing/currencies)
59-
SteamJson jsonUSD = SteamHttpClient.GetSteamJson(1);
60-
SteamJson jsonRUB = SteamHttpClient.GetSteamJson(5);
61-
62-
string rawUSD = jsonUSD.lowest_price[1..^4];
63-
string rawRUB = jsonRUB.lowest_price[0..^5];
64-
65-
if (jsonUSD.success == false || jsonRUB.success == false)
54+
PictureBoxUSD.Image = Properties.Resources.wait_c;
55+
SteamJson steam = new();
56+
// Рублей за доллар по курсу стима
57+
float usdSteam = steam.GetRate();
58+
if (usdSteam == 0)
6659
{
6760
PictureBoxUSD.Image = Properties.Resources.no_c;
6861
}
6962
else
7063
{
71-
float steamUSD = Convert.ToSingle(rawUSD, new CultureInfo("en-US"));
72-
float steamRUB = Convert.ToSingle(rawRUB, new CultureInfo("ru-RU"));
73-
USD_Steam = steamRUB / steamUSD;
74-
64+
USD_Steam = usdSteam;
7565
Properties.Settings.Default["USD_Steam"] = USD_Steam;
76-
LabelUSD.Text = "Рублей за доллар - " + Math.Round(USD_Steam, 4).ToString(CultureInfo.InvariantCulture);
66+
LabelUSD.Text = $"Рублей за доллар - {Math.Round(USD_Steam, 4)}";
7767
PictureBoxUSD.Image = Properties.Resources.yes_c;
78-
TextBoxInput.Enabled = true;
79-
TextBoxOutput.Enabled = true;
8068
}
8169

82-
// 398 - тенге, 643 - рубли, 840 - доллары, 978 - евро, 156 - юани
83-
QiwiJson jsonQiwi = SteamHttpClient.GetQiwiJson();
84-
85-
PictureBoxKZT.Image = Properties.Resources.no_c;
86-
PictureBoxKZTUSD.Image = Properties.Resources.no_c;
87-
foreach (var rateIter in jsonQiwi.result)
70+
PictureBoxKZT.Image = Properties.Resources.wait_c;
71+
PictureBoxKZTUSD.Image = Properties.Resources.wait_c;
72+
QiwiJson qiwi = new();
73+
qiwi = qiwi.GetData();
74+
// Рублей за тенге по курсу qiwi
75+
float kzt = qiwi.GetRate(("643", "398"));
76+
if (kzt == 0)
8877
{
89-
if (rateIter.from == "643" && rateIter.to == "398")
90-
{
91-
KZT_Qiwi = rateIter.rate;
92-
93-
Properties.Settings.Default["KZT_Qiwi"] = KZT_Qiwi;
94-
LabelKZT.Text = "Рублей за тенге - " + Math.Round(KZT_Qiwi, 3).ToString(CultureInfo.InvariantCulture);
95-
PictureBoxKZT.Image = Properties.Resources.yes_c;
96-
TextBoxInput.Enabled = true;
97-
TextBoxOutput.Enabled = true;
98-
}
99-
if (rateIter.from == "398" && rateIter.to == "840")
100-
{
101-
USD_Qiwi = rateIter.rate;
102-
103-
Properties.Settings.Default["USD_Qiwi"] = USD_Qiwi;
104-
LabelKZT_USD.Text = "Тенге за доллар - " + Math.Round(USD_Qiwi, 2).ToString(CultureInfo.InvariantCulture);
105-
PictureBoxKZTUSD.Image = Properties.Resources.yes_c;
106-
TextBoxInput.Enabled = true;
107-
TextBoxOutput.Enabled = true;
108-
}
78+
PictureBoxKZT.Image = Properties.Resources.no_c;
79+
}
80+
else
81+
{
82+
KZT_Qiwi = kzt;
83+
Properties.Settings.Default["KZT_Qiwi"] = KZT_Qiwi;
84+
LabelKZT.Text = $"Рублей за тенге - {Math.Round(KZT_Qiwi, 3)}";
85+
PictureBoxKZT.Image = Properties.Resources.yes_c;
86+
}
87+
// Тенге за доллар по курсу qiwi
88+
float usdQiwi = qiwi.GetRate(("398", "840"));
89+
if (usdQiwi == 0)
90+
{
91+
PictureBoxKZTUSD.Image = Properties.Resources.no_c;
92+
}
93+
else
94+
{
95+
USD_Qiwi = usdQiwi;
96+
Properties.Settings.Default["USD_Qiwi"] = USD_Qiwi;
97+
LabelKZT_USD.Text = $"Тенге за доллар - {Math.Round(USD_Qiwi, 2)}";
98+
PictureBoxKZTUSD.Image = Properties.Resources.yes_c;
10999
}
110100

111-
PictureBoxUSDWeb.Image = Properties.Resources.no_c;
112-
USD_Web = SteamHttpClient.GetWebMoneyRate();
113-
if (USD_Web != -1)
101+
PictureBoxUSDWeb.Image = Properties.Resources.wait_c;
102+
WMJson webmoney = new();
103+
// Рублей за доллар по курсу вебмани
104+
webmoney = webmoney.GetData();
105+
float usdWeb = webmoney.GetRate();
106+
if (usdWeb == 0 || usdWeb == -1)
107+
{
108+
PictureBoxUSDWeb.Image = Properties.Resources.no_c;
109+
}
110+
else
114111
{
112+
USD_Web = usdWeb;
115113
Properties.Settings.Default["USD_Web"] = USD_Web;
116-
LabelUSDWeb.Text = "Рублей за доллар - " + Math.Round(USD_Web, 4).ToString(CultureInfo.InvariantCulture) + " (P2P)";
114+
LabelUSDWeb.Text = $"Рублей за доллар - {Math.Round(USD_Web, 4)} (P2P)";
117115
PictureBoxUSDWeb.Image = Properties.Resources.yes_c;
118116
}
119117

120118
Properties.Settings.Default.Save();
121119
CalcPercent();
120+
TextBoxInput.Enabled = true;
121+
TextBoxOutput.Enabled = true;
122122
ButtonGetRates.Enabled = true;
123123
ButtonReverse.Enabled = true;
124124
ButtonGetRates.Text = "Обновить";
@@ -276,7 +276,7 @@ private void ButtonTargetSystem_Click(object sender, EventArgs e)
276276
TextBoxInputKZT.Visible = true;
277277
LabelKZTInput.Visible = true;
278278
}
279-
string temp = string.Empty;
279+
string temp;
280280
if (Reverse == false)
281281
{
282282
temp = TextBoxInput.Text;

QiwiJson.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
+ Runtime - только запуск приложений.
88
+ Desktop Runtime - только запуск настольных приложений для Windows.
99

10-
Для Windows 7 и 8.1 подойдёт только .Net 6, а для Windows 10 (версия 1607+) и 11 (версия 22000+) можно установить .Net 7.
10+
Для Windows 7 и 8.1 подойдёт только .Net 6, а для Windows 10 (версия 1607+) и 11 (версия 22000+) можно установить .Net 7. Начиная с версии 3.0 программы поддерживается только .Net 7 и Windows 10+
1111

1212
[Скачать программу](https://github.com/OneCodeUnit/SteamCurrency/releases/latest)
1313

14+
[Скачать старую версию для .Net 6 и Windows 7+](https://github.com/OneCodeUnit/SteamCurrency/releases/tag/v2.1.0)
15+
1416
## Работа программы
1517
Программа через Rest-запросы узнаёт у Steam, WebMoney (окольными путями) и Qiwi (через API) курсы валют и производит вычисления суммы, которая поступит, и суммы, которую "съест" конвертация. Из-за способа получения курсов у Steam, присутствует погрешность на уровне 1 рубля.
1618

@@ -21,7 +23,7 @@
2123
+ Курс стима считается через сравнение цен на торговой площадке у одного и того же товара. Возможно, есть более правильный способ, так как цены на торговой площадке округлены до двух знаков после запятой, что приводит к погрешностям при вычислениях.
2224
+ Подсказка к вводимой сумме отображается с округлением до двух знаков после запятой, что соответствует точности поля ввода на сайте Qiwi.
2325
+ Qiwi конвертирует тенге в доллары по курсу, который примерно на 4% выше того, о котором он сообщает. Я не знаю, почему так. Вариант с дополнительной валютой не подходит. Однако программа учитывает этот процент при вычислениях.
24-
+ Курс WebMoney берется на основе самого выгодного P2P-предложения, которое предполагает определенный объем сделки. Предложение для вашего объема может иметь менее выгодный курс.
26+
+ Курс WebMoney берется на основе самого выгодного P2P-предложения, которое предполагает определенный объем сделки. Предложение для вашего объема может иметь менее выгодный курс. Программа это не учитывает.
2527
+ WebMoney имеет комиссию 4% на пополнение Steam. Программа это учитывает.
2628
+ Существует вероятность, что программа может не получить или получить неправильные курсы. Подождите некоторое время и попробуйте снова.
2729
+ Не стоит проверять курсы слишком часто (речь о десятках раз в час), так как это может привести к временному бану по IP.

SteamCurrency.csproj

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>WinExe</OutputType>
5-
<TargetFramework>net6.0-windows</TargetFramework>
5+
<TargetFramework>net7.0-windows7.0</TargetFramework>
66
<Nullable>enable</Nullable>
77
<UseWindowsForms>true</UseWindowsForms>
88
<ImplicitUsings>enable</ImplicitUsings>
@@ -11,18 +11,19 @@
1111
<AnalysisLevel>latest-recommended</AnalysisLevel>
1212
<ApplicationIcon>Flag.ico</ApplicationIcon>
1313
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
14-
<AssemblyVersion>2.1.0</AssemblyVersion>
15-
<FileVersion>2.1.0</FileVersion>
16-
<Version>$(VersionPrefix)2.1.0</Version>
14+
<AssemblyVersion>3.0.0</AssemblyVersion>
15+
<FileVersion>3.0.0</FileVersion>
16+
<Version>$(VersionPrefix)3.0.0</Version>
1717
<RepositoryType>git</RepositoryType>
1818
<RepositoryUrl>https://github.com/OneCodeUnit/SteamCurrency</RepositoryUrl>
1919
<NeutralLanguage>ru</NeutralLanguage>
20-
<Title>Steam Cyrrency Calculator</Title>
20+
<Title>Steam Currency Calculator</Title>
2121
<Authors>OliveWizard</Authors>
2222
<Description>Калькулятор пополнения Steam через Qiwi</Description>
2323
<PackageReadmeFile>README.md</PackageReadmeFile>
24-
<PackageTags>Steam; Currency; Calculator; Currency rate; Qiwi</PackageTags>
25-
<PackageId>SteamCyrrencyCalculator</PackageId>
24+
<PackageTags>Steam; Currency; Calculator; Currency rate; Qiwi; WebMoney</PackageTags>
25+
<PackageId>SteamCurrencyCalculator</PackageId>
26+
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
2627
</PropertyGroup>
2728

2829
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -42,11 +43,13 @@
4243
</PropertyGroup>
4344

4445
<ItemGroup>
45-
<Content Include="Flag.ico" />
46+
<Compile Remove="SteamCurrencyLib\**" />
47+
<EmbeddedResource Remove="SteamCurrencyLib\**" />
48+
<None Remove="SteamCurrencyLib\**" />
4649
</ItemGroup>
4750

4851
<ItemGroup>
49-
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
52+
<Content Include="Flag.ico" />
5053
</ItemGroup>
5154

5255
<ItemGroup>
@@ -88,4 +91,8 @@
8891
<Folder Include="Resources\" />
8992
</ItemGroup>
9093

94+
<ItemGroup>
95+
<ProjectReference Include="SteamCurrencyLib\SteamCurrencyLib.csproj" />
96+
</ItemGroup>
97+
9198
</Project>

SteamCurrency.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ VisualStudioVersion = 17.4.33403.182
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamCurrency", "SteamCurrency.csproj", "{9B2D65AA-8397-4746-8D99-C980A526C774}"
77
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamCurrencyLib", "SteamCurrencyLib\SteamCurrencyLib.csproj", "{B084AA91-3AC0-484D-9E70-A3F26E97B12A}"
9+
EndProject
810
Global
911
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1012
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
1517
{9B2D65AA-8397-4746-8D99-C980A526C774}.Debug|Any CPU.Build.0 = Debug|Any CPU
1618
{9B2D65AA-8397-4746-8D99-C980A526C774}.Release|Any CPU.ActiveCfg = Release|Any CPU
1719
{9B2D65AA-8397-4746-8D99-C980A526C774}.Release|Any CPU.Build.0 = Release|Any CPU
20+
{B084AA91-3AC0-484D-9E70-A3F26E97B12A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21+
{B084AA91-3AC0-484D-9E70-A3F26E97B12A}.Debug|Any CPU.Build.0 = Debug|Any CPU
22+
{B084AA91-3AC0-484D-9E70-A3F26E97B12A}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{B084AA91-3AC0-484D-9E70-A3F26E97B12A}.Release|Any CPU.Build.0 = Release|Any CPU
1824
EndGlobalSection
1925
GlobalSection(SolutionProperties) = preSolution
2026
HideSolutionNode = FALSE

SteamCurrencyLib/Flag.ico

66.1 KB
Binary file not shown.

SteamCurrencyLib/QiwiJson.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using Newtonsoft.Json;
2+
using System.Collections.Generic;
3+
using System.Net.Http;
4+
5+
namespace SteamCurrencyLib
6+
{
7+
#pragma warning disable IDE1006, CS8618
8+
public class QiwiJsonResult
9+
{
10+
public string set { get; set; }
11+
public string from { get; set; }
12+
public string to { get; set; }
13+
public float rate { get; set; }
14+
}
15+
16+
public class QiwiJson
17+
{
18+
public List<QiwiJsonResult> result { get; set; }
19+
20+
public QiwiJson()
21+
{
22+
result = new List<QiwiJsonResult>();
23+
}
24+
25+
public QiwiJson GetData()
26+
{
27+
HttpResponseMessage response;
28+
try
29+
{
30+
response = SCHttpClient.Client.GetAsync("https://edge.qiwi.com/sinap/crossRates").Result;
31+
}
32+
catch
33+
{
34+
return new QiwiJson();
35+
}
36+
string text = response.Content.ReadAsStringAsync().Result;
37+
QiwiJson json = JsonConvert.DeserializeObject<QiwiJson>(text);
38+
return json;
39+
}
40+
41+
// 398 - тенге, 643 - рубли, 840 - доллары, 978 - евро, 156 - юани
42+
public float GetRate((string, string) pair)
43+
{
44+
float rate = 0;
45+
foreach (var rateIter in result)
46+
{
47+
if (rateIter.from == pair.Item1 && rateIter.to == pair.Item2)
48+
{
49+
rate = rateIter.rate;
50+
}
51+
}
52+
return rate;
53+
}
54+
}
55+
#pragma warning restore IDE1006, CS8618
56+
}

SteamCurrencyLib/SCHttpClient.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System.Net.Http;
2+
3+
namespace SteamCurrencyLib
4+
{
5+
internal class SCHttpClient
6+
{
7+
internal static readonly HttpClient Client = new HttpClient();
8+
static SCHttpClient()
9+
{
10+
Client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:110.0) Gecko/20100101 Firefox/110.0");
11+
}
12+
}
13+
}

0 commit comments

Comments
 (0)