Compare commits

..

54 Commits

Author SHA1 Message Date
JustArchi
999dab7f7a Translations update 2018-05-12 04:34:21 +02:00
JustArchi
55b238f28f Packages update 2018-05-12 00:59:49 +02:00
JustArchi
2258204056 Fix build + misc 2018-05-11 23:26:13 +02:00
JustArchi
47800f0c29 Fix docker builds wrongly announced as custom 2018-05-11 23:20:25 +02:00
JustArchi
0f7e6cc553 Misc 2018-05-11 17:51:01 +02:00
Łukasz Domeradzki
298e8e017d Update issue templates 2018-05-11 00:01:21 +02:00
JustArchi
1122959c59 Cleanup 2018-05-10 23:55:53 +02:00
Łukasz Domeradzki
900d921377 Update issue templates 2018-05-10 23:55:02 +02:00
Łukasz Domeradzki
42a25acd24 Update issue templates 2018-05-10 23:45:35 +02:00
Łukasz Domeradzki
392e862bad Merge pull request #787 from JustArchi/ci-improvements
CI improvements
2018-05-10 22:45:58 +02:00
JustArchi
7ba429de6e --no-restore improvements 2018-05-10 21:35:03 +02:00
JustArchi
e823546788 Translations update 2018-05-10 16:06:57 +02:00
JustArchi
3453f1c027 Bump 2018-05-09 13:35:13 +02:00
JustArchi
94d9778e21 Fix NRE 2018-05-09 13:33:22 +02:00
JustArchi
9a649d57bf Bump 2018-05-09 10:07:53 +02:00
JustArchi
25524c19d2 Translations update 2018-05-09 08:32:16 +02:00
JustArchi
2d53a52ba9 Translations update 2018-05-09 08:29:47 +02:00
JustArchi
005704bd81 Translations update 2018-05-09 08:02:49 +02:00
JustArchi
8386cc4562 Translations update 2018-05-09 07:59:31 +02:00
JustArchi
ee52f3d888 Translations update 2018-05-09 07:46:45 +02:00
JustArchi
4bf062fa94 Translations update 2018-05-09 07:03:42 +02:00
JustArchi
192d51632d WebConfigGenerator build 2018-05-09 06:52:49 +02:00
JustArchi
8932a904b7 Translations update 2018-05-09 06:48:45 +02:00
JustArchi
500e42f308 Misc 2018-05-09 06:48:03 +02:00
JustArchi
c8f322e9c7 Update my crowdin scripts 2018-05-09 06:47:38 +02:00
JustArchi
08ad3450c9 Update schema.js 2018-05-09 05:48:58 +02:00
JustArchi
083b628b3f Consider only WebProxyPassword to be sensitive 2018-05-09 05:47:43 +02:00
JustArchi
14d373cbbf Packages update 2018-05-09 05:36:29 +02:00
JustArchi
acda39ca7f Move Steam store to https
Hopefully it's ready this time, thanks Valve!
2018-05-09 05:34:08 +02:00
JustArchi
000a722275 Misc 2018-05-09 05:32:04 +02:00
JustArchi
fce94c3fa4 Add proxy support
https://www.youtube.com/watch?v=g54aPmNjMM4
2018-05-09 05:31:48 +02:00
JustArchi
85fedfda88 Misc 2018-05-08 16:33:07 +02:00
JustArchi
eafd9d623b Translations update 2018-05-08 12:26:27 +02:00
JustArchi
5f5205ba3c Final crowdin update (I hope) 2018-05-08 11:49:28 +02:00
JustArchi
9bc2f5b980 Translations update 2018-05-08 11:38:15 +02:00
JustArchi
406372cdf8 Translations update 2018-05-08 11:17:55 +02:00
JustArchi
a68a55bb43 One more crowdin update 2018-05-08 10:53:36 +02:00
JustArchi
cdc2290c19 Translations update 2018-05-08 10:34:14 +02:00
JustArchi
8855d4ffbf Misc 2018-05-08 09:58:21 +02:00
JustArchi
f4a603a606 Update crowdin scripts for wiki 2018-05-08 09:50:50 +02:00
JustArchi
41c7d2e559 Translations update 2018-05-08 09:45:23 +02:00
JustArchi
83fef07f98 Translations update 2018-05-08 09:39:29 +02:00
JustArchi
30cb16f404 Misc 2018-05-08 09:25:50 +02:00
JustArchi
20c9c6c478 Update crowdin for wiki localization 2018-05-08 09:19:56 +02:00
JustArchi
221aad25eb Add wiki submodule 2018-05-08 08:49:57 +02:00
JustArchi
3f365423e0 Define language version as fixed
This way compiler can verify if it knows how to handle it instead of running into generic compilation issues. In addition to that it ensures I won't use C# 7.3 feature that didn't make it into stable yet.
2018-05-08 00:41:04 +02:00
JustArchi
45b42cdf28 Closes #786 2018-05-08 00:27:55 +02:00
JustArchi
53156f0329 Misc 2018-05-07 18:17:26 +02:00
JustArchi
275c0da002 Translations update 2018-05-06 17:24:38 +02:00
JustArchi
384e48e3cd Packages update 2018-05-06 17:23:50 +02:00
JustArchi
ca4bf71384 Misc 2018-05-03 05:41:48 +02:00
JustArchi
a652418f02 WebConfigGenerator build 2018-05-02 02:45:09 +02:00
JustArchi
747af6df7e Schema update 2018-05-02 02:41:26 +02:00
JustArchi
a5d941e5a7 Bump 2018-05-02 02:41:05 +02:00
43 changed files with 528 additions and 270 deletions

View File

@@ -1,80 +0,0 @@
I fully read and understood contributing guidelines of ASF available above, especially the point that GITHUB IS NOT TECHNICAL SUPPORT - IT'S THE PLACE ONLY FOR ASF BUGS AND SUGGESTIONS.
I admit that THIS IS NOT A QUESTION OR TECHNICAL ISSUE - I fully understand that ASF GitHub is ONLY for ASF development purpose. I strongly believe that the bug I'm reporting here affects majority of ASF users, and the enhancement I'm suggesting could benefit ASF in long-run.
If my issue is not meeting contributing guidelines specified above, especially if it's a question or technical issue that is not related to ASF development in any way, please close it immediately - I won't complain.
-----
Now that you read and understood our notice, remove it entirely so it won't clutter the issue, pick appropriate bug/suggestion template below and fill it with your details.
-----
## Bug
### Description
<!-- Short explanation what you were going to do. -->
### Expected behavior
<!-- What did you expect to happen? -->
### Actual behavior
<!-- What happened instead? -->
### Steps to reproduce
<!-- Every command or action done after launching ASF that leads to the bug. -->
### Full log.txt recorded during reproducing the problem
```
Paste here
```
### Global ASF.json config
```json
Paste here
```
### BotName.json config of all affected bot instances (if more than one)
```json
Paste here
Ensure that config has hidden/redacted SteamLogin and SteamPassword properties.
```
### Additional info
<!-- Everything else you consider worthy that we didn't ask for. -->
-----
## Suggestion
### Purpose
<!-- Detailed suggestion explanation - what should be implemented and what it should do, as well as expected usage and benefits. -->
### How can ASF users benefit from this suggestion?
<!-- You're not suggesting things only for yourself, so explain to us how it's going to be useful for everyone. -->
### Why currently available solutions are not sufficient?
<!-- If something you're suggesting is already possible, then explain to us why current solution is not sufficient. -->
### Does your suggestion fall into ASF scope?
<!-- Is ASF really the proper tool to include your enhancement in the first place? Is it connected with idling Steam cards? -->
### Is your suggestion abiding to Steam ToS?
<!-- If not, it will not be accepted. Botting Steam Market is just a single example of a thing that won't happen. -->
### Additional info
<!-- Everything else you consider worthy that we didn't ask for. -->

63
.github/ISSUE_TEMPLATE/Bug_report.md vendored Normal file
View File

@@ -0,0 +1,63 @@
---
name: Bug report
about: Unexpected program behaviour that needs code correction
---
<!--
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchi/ArchiSteamFarm/blob/master/.github/CONTRIBUTING.md, especially the point that GITHUB IS NOT A TECHNICAL SUPPORT - IT'S THE PLACE ONLY FOR ASF BUGS AND SUGGESTIONS.
I admit that THIS IS NOT A QUESTION OR TECHNICAL ISSUE - I fully understand that ASF GitHub is ONLY for ASF development purpose. I strongly believe that the bug I'm reporting here affects majority of ASF users and that it's not a result of technical difficulty I'm experiencing that is explained in the FAQ or other place of the wiki.
If my issue is not meeting contributing guidelines specified above, especially if it's a question or technical issue that is not related to ASF development in any way, please close it immediately - I won't complain.
-->
<!--
Now that you read and understood our notice, remove everything up to this point so it won't clutter the issue and fill the template below with your details.
-->
## Bug report
### Description
<!-- Short explanation what you were going to do. -->
### Expected behavior
<!-- What did you expect to happen? -->
### Actual behavior
<!-- What happened instead? -->
### Steps to reproduce
<!-- Every command or action done after launching ASF that leads to the bug. -->
### Full log.txt recorded during reproducing the problem
```
Paste here, in-between triple backtick tags
Ensure that your log was NOT recorded in Debug mode, as it might contain sensitive information that should not be shared, as stated on the wiki
```
### Global ASF.json config
```json
Paste here, in-between triple backtick tags
Ensure that config has hidden/redacted potentially-sensitive properties, such as: IPCPassword, WebProxyPassword, IPCPrefixes (optionally), SteamOwnerID (optionally), WebProxy (optionally), WebProxyUsername (optionally)
```
### BotName.json config of all affected bot instances (if more than one)
```json
Paste here, in-between triple backtick tags
Ensure that config has hidden/redacted potentially-sensitive properties, such as: SteamLogin, SteamParentalPIN, SteamPassword, SteamMasterClanID (optionally), SteamTradeToken (optionally), SteamUserPermissions (only steamIDs, optionally)
```
### Additional info
<!-- Everything else you consider worthy that we didn't ask for. -->

View File

@@ -0,0 +1,43 @@
---
name: Feature request
about: General idea for improving the project
---
<!--
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchi/ArchiSteamFarm/blob/master/.github/CONTRIBUTING.md, especially the point that GITHUB IS NOT A TECHNICAL SUPPORT - IT'S THE PLACE ONLY FOR ASF BUGS AND SUGGESTIONS.
I admit that THIS IS NOT A QUESTION OR TECHNICAL ISSUE - I fully understand that ASF GitHub is ONLY for ASF development purpose. I strongly believe that the enhancement I'm suggesting here will benefit ASF and its users in the long-run, and that it's definitely not related to any technical difficulty I'm experiencing that is explained in the FAQ or other place of the wiki.
If my issue is not meeting contributing guidelines specified above, especially if it's a question or technical issue that is not related to ASF development in any way, please close it immediately - I won't complain.
-->
<!--
Now that you read and understood our notice, remove everything up to this point so it won't clutter the issue and fill the template below with your details.
-->
## Feature request
### Purpose
<!-- Purpose of the feature request - if it solves some problem, precise what in particular. If it benefits the program in some other way, precise in particular why. Present the underlying reason why this feature request makes sense. -->
### Solution
<!-- What would you like to see as a solution to the purpose specified by you above? -->
### Why currently available solutions are not sufficient?
<!-- If something you're suggesting is already possible, then explain to us why currently available solutions are not sufficient. If it's not possible yet, then explain to us why it should be. -->
### Does your suggestion fall into ASF scope?
<!-- Is ASF really the proper tool to include your enhancement in the first place? Is it connected with idling Steam cards? -->
### Is your suggestion abiding to Steam ToS?
<!-- If not, it will not be considered. Botting Steam Market is just a single example of a thing that won't happen - https://store.steampowered.com/subscriber_agreement. -->
### Additional info
<!-- Everything else you consider worthy that we didn't ask for. -->

2
.gitignore vendored
View File

@@ -19,7 +19,7 @@ out
ArchiSteamFarm/out
# Ignore crowdin CLI secret
tools/crowdin-cli/crowdin_identity.yaml
tools/crowdin-cli/crowdin_identity.yml
#################
## Visual Studio

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "wiki"]
path = wiki
url = https://github.com/JustArchi/ArchiSteamFarm.wiki.git

View File

@@ -15,12 +15,10 @@ branches:
# Use latest images for building
group: travis_latest
# This is .NET Core project, we're not building with Mono
# ASF is based on .NET Core platform
dotnet: 2.1.105
mono: none
# ASF requires .NET Core 2.0+
dotnet: 2.1.104
env:
global:
- CONFIGURATION: Release
@@ -37,20 +35,19 @@ before_script:
fi
dotnet --info
dotnet restore
script:
- |
set -e
dotnet build -c "$CONFIGURATION" -o 'out/source' --no-restore /nologo
dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -o 'out/source' --no-build --no-restore
dotnet build ArchiSteamFarm -c "$CONFIGURATION" -o 'out/source' /nologo
dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -o 'out/source'
publish() {
if [ "$1" = 'generic' ]; then
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${1}" --no-restore /nologo "/p:ASFVariant=$1"
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${1}" /nologo "/p:ASFVariant=$1"
else
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${1}" -r "$1" --no-restore /nologo "/p:ASFVariant=$1" "/p:CrossGenDuringPublish=false"
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -o "out/${1}" -r "$1" /nologo "/p:ASFVariant=$1" "/p:CrossGenDuringPublish=false"
fi
# If we include any helper scripts for this variant, copy them to output directory
@@ -75,4 +72,4 @@ matrix:
sudo: false
- os: osx
# Ref: https://docs.travis-ci.com/user/reference/osx/
osx_image: xcode9.3beta
osx_image: xcode9.3

View File

@@ -27,9 +27,9 @@
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="1.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.3.0-beta2" />
<PackageReference Include="MSTest.TestFramework" Version="1.3.0-beta2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0-preview-20180510-03" />
<PackageReference Include="MSTest.TestAdapter" Version="1.3.0" />
<PackageReference Include="MSTest.TestFramework" Version="1.3.0" />
</ItemGroup>
<ItemGroup>

View File

@@ -41,7 +41,7 @@ namespace ArchiSteamFarm {
private static FileSystemWatcher FileSystemWatcher;
internal static async Task<Version> CheckAndUpdateProgram(bool updateOverride = false) {
if (SharedInfo.IsCustomBuild || (Program.GlobalConfig.UpdateChannel == GlobalConfig.EUpdateChannel.None)) {
if (!SharedInfo.BuildInfo.CanUpdate || (Program.GlobalConfig.UpdateChannel == GlobalConfig.EUpdateChannel.None)) {
return null;
}
@@ -139,7 +139,7 @@ namespace ArchiSteamFarm {
return null;
}
const string targetFile = SharedInfo.ASF + "-" + SharedInfo.Variant + ".zip";
string targetFile = SharedInfo.ASF + "-" + SharedInfo.BuildInfo.Variant + ".zip";
GitHub.ReleaseResponse.Asset binaryAsset = releaseResponse.Assets.FirstOrDefault(asset => asset.Name.Equals(targetFile, StringComparison.OrdinalIgnoreCase));
if (binaryAsset == null) {
@@ -168,7 +168,7 @@ namespace ArchiSteamFarm {
return null;
}
if (IsUnixVariant(SharedInfo.Variant)) {
if (OS.IsUnix) {
string executable = Path.Combine(targetDirectory, SharedInfo.AssemblyName);
if (File.Exists(executable)) {
OS.UnixSetFileAccessExecutable(executable);
@@ -212,22 +212,6 @@ namespace ArchiSteamFarm {
FileSystemWatcher.EnableRaisingEvents = true;
}
private static bool IsUnixVariant(string variant) {
if (string.IsNullOrEmpty(variant)) {
ArchiLogger.LogNullError(nameof(variant));
return false;
}
switch (variant) {
case "linux-arm":
case "linux-x64":
case "osx-x64":
return true;
default:
return false;
}
}
private static bool IsValidBotName(string botName) {
if (string.IsNullOrEmpty(botName)) {
ArchiLogger.LogNullError(nameof(botName));

View File

@@ -2,15 +2,15 @@
<PropertyGroup>
<ApplicationIcon>ASF.ico</ApplicationIcon>
<AssemblyVersion>3.1.2.4</AssemblyVersion>
<AssemblyVersion>3.1.2.7</AssemblyVersion>
<Authors>JustArchi</Authors>
<Company>JustArchi</Company>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
<Copyright>Copyright © ArchiSteamFarm 2015-2018</Copyright>
<Description>ASF is an application that allows you to farm steam cards using multiple steam accounts simultaneously.</Description>
<ErrorReport>none</ErrorReport>
<FileVersion>3.1.2.4</FileVersion>
<LangVersion>latest</LangVersion>
<FileVersion>3.1.2.7</FileVersion>
<LangVersion>7.2</LangVersion>
<NoWarn />
<OutputType>Exe</OutputType>
<PackageIconUrl>https://github.com/JustArchi/ArchiSteamFarm/raw/master/resources/ASF.ico</PackageIconUrl>
@@ -36,13 +36,13 @@
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="1.0.1" />
<PackageReference Include="HtmlAgilityPack" Version="1.8.1" />
<PackageReference Include="HtmlAgilityPack" Version="1.8.2" />
<PackageReference Include="Humanizer" Version="2.2.0" />
<PackageReference Include="ILLink.Tasks" Version="0.1.5-preview-1461378" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
<PackageReference Include="NLog" Version="4.5.3" />
<PackageReference Include="NLog" Version="4.5.4" />
<PackageReference Include="protobuf-net" Version="2.3.7" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.5.0-preview2-26406-04" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.5.0-rc1" />
</ItemGroup>
<ItemGroup>

View File

@@ -42,14 +42,10 @@ namespace ArchiSteamFarm {
private const string IPlayerService = "IPlayerService";
private const string ISteamUserAuth = "ISteamUserAuth";
private const string ITwoFactorService = "ITwoFactorService";
// We must use HTTPS for SteamCommunity, as http would make certain POST requests failing (trades)
private const string SteamCommunityHost = "steamcommunity.com";
private const string SteamCommunityURL = "https://" + SteamCommunityHost;
// We could (and should) use HTTPS for SteamStore, but that would make certain POST requests failing
private const string SteamStoreHost = "store.steampowered.com";
private const string SteamStoreURL = "http://" + SteamStoreHost;
private const string SteamStoreURL = "https://" + SteamStoreHost;
private static readonly SemaphoreSlim InventorySemaphore = new SemaphoreSlim(1, 1);
@@ -76,7 +72,7 @@ namespace ArchiSteamFarm {
internal ArchiWebHandler(Bot bot) {
Bot = bot ?? throw new ArgumentNullException(nameof(bot));
WebBrowser = new WebBrowser(bot.ArchiLogger);
WebBrowser = new WebBrowser(bot.ArchiLogger, Program.GlobalConfig.WebProxy);
}
public void Dispose() {

View File

@@ -23,6 +23,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Localization;
@@ -120,6 +121,81 @@ namespace ArchiSteamFarm {
[JsonProperty(Required = Required.DisallowNull)]
internal ProtocolTypes SteamProtocols { get; private set; } = DefaultSteamProtocols;
internal WebProxy WebProxy { get; private set; }
[JsonProperty]
internal string WebProxyPassword {
get => WebProxyCredentials?.Password;
set {
if (string.IsNullOrEmpty(value)) {
if (WebProxyCredentials == null) {
return;
}
WebProxyCredentials.Password = null;
if (!string.IsNullOrEmpty(WebProxyCredentials.UserName)) {
return;
}
WebProxyCredentials = null;
if (WebProxy != null) {
WebProxy.Credentials = null;
}
return;
}
if (WebProxyCredentials == null) {
WebProxyCredentials = new NetworkCredential();
}
WebProxyCredentials.Password = value;
if ((WebProxy != null) && (WebProxy.Credentials != WebProxyCredentials)) {
WebProxy.Credentials = WebProxyCredentials;
}
}
}
[JsonProperty]
internal string WebProxyUsername {
get => WebProxyCredentials?.UserName;
set {
if (string.IsNullOrEmpty(value)) {
if (WebProxyCredentials == null) {
return;
}
WebProxyCredentials.UserName = null;
if (!string.IsNullOrEmpty(WebProxyCredentials.Password)) {
return;
}
WebProxyCredentials = null;
if (WebProxy != null) {
WebProxy.Credentials = null;
}
return;
}
if (WebProxyCredentials == null) {
WebProxyCredentials = new NetworkCredential();
}
WebProxyCredentials.UserName = value;
if ((WebProxy != null) && (WebProxy.Credentials != WebProxyCredentials)) {
WebProxy.Credentials = WebProxyCredentials;
}
}
}
private bool ShouldSerializeSensitiveDetails = true;
private NetworkCredential WebProxyCredentials;
[JsonProperty(PropertyName = SharedInfo.UlongCompatibilityStringPrefix + nameof(SteamOwnerID), Required = Required.DisallowNull)]
private string SSteamOwnerID {
get => SteamOwnerID.ToString();
@@ -133,6 +209,41 @@ namespace ArchiSteamFarm {
}
}
[JsonProperty(PropertyName = nameof(WebProxy))]
private string WebProxyText {
get => WebProxy?.Address.OriginalString;
set {
if (string.IsNullOrEmpty(value)) {
if (WebProxy != null) {
WebProxy = null;
}
return;
}
Uri uri;
try {
uri = new Uri(value);
} catch (UriFormatException e) {
ASF.ArchiLogger.LogGenericException(e);
return;
}
if (WebProxy == null) {
WebProxy = new WebProxy { BypassProxyOnLocal = true };
}
WebProxy.Address = uri;
if ((WebProxyCredentials != null) && (WebProxy.Credentials != WebProxyCredentials)) {
WebProxy.Credentials = WebProxyCredentials;
}
}
}
public bool ShouldSerializeWebProxyPassword() => ShouldSerializeSensitiveDetails;
internal static GlobalConfig Load(string filePath) {
if (string.IsNullOrEmpty(filePath)) {
ASF.ArchiLogger.LogNullError(nameof(filePath));
@@ -157,6 +268,8 @@ namespace ArchiSteamFarm {
return null;
}
globalConfig.ShouldSerializeSensitiveDetails = false;
// User might not know what he's doing
// Ensure that he can't screw core ASF variables
if (globalConfig.ConnectionTimeout == 0) {

View File

@@ -273,6 +273,12 @@ namespace ArchiSteamFarm {
return true;
}
if (jsonRequest.KeepSensitiveDetails) {
if (string.IsNullOrEmpty(jsonRequest.GlobalConfig.WebProxyPassword) && !string.IsNullOrEmpty(Program.GlobalConfig.WebProxyPassword)) {
jsonRequest.GlobalConfig.WebProxyPassword = Program.GlobalConfig.WebProxyPassword;
}
}
string filePath = Path.Combine(SharedInfo.ConfigDirectory, SharedInfo.GlobalConfigFileName);
if (!await GlobalConfig.Write(filePath, jsonRequest.GlobalConfig).ConfigureAwait(false)) {
@@ -412,15 +418,15 @@ namespace ArchiSteamFarm {
string botName = WebUtility.UrlDecode(arguments[argumentsIndex]);
if (jsonRequest.KeepSensitiveDetails && Bot.Bots.TryGetValue(botName, out Bot bot)) {
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamLogin)) {
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamLogin) && !string.IsNullOrEmpty(bot.BotConfig.SteamLogin)) {
jsonRequest.BotConfig.SteamLogin = bot.BotConfig.SteamLogin;
}
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamParentalPIN)) {
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamParentalPIN) && !string.IsNullOrEmpty(bot.BotConfig.SteamParentalPIN)) {
jsonRequest.BotConfig.SteamParentalPIN = bot.BotConfig.SteamParentalPIN;
}
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamPassword)) {
if (string.IsNullOrEmpty(jsonRequest.BotConfig.SteamPassword) && !string.IsNullOrEmpty(bot.BotConfig.SteamPassword)) {
jsonRequest.BotConfig.SteamPassword = bot.BotConfig.SteamPassword;
}
}
@@ -1172,6 +1178,9 @@ namespace ArchiSteamFarm {
internal readonly GlobalConfig GlobalConfig;
#pragma warning restore 649
[JsonProperty(Required = Required.DisallowNull)]
internal readonly bool KeepSensitiveDetails = true;
// Deserialized from JSON
private ASFRequest() { }
}

View File

@@ -332,11 +332,14 @@ namespace ArchiSteamFarm.Json {
private ConfirmationDetails() { }
// REF: Internal documentation
[SuppressMessage("ReSharper", "UnusedMember.Global")]
internal enum EType : byte {
Unknown,
Generic,
Trade,
Market
Market,
// We're missing information about definition of number 4 type
ChangePhoneNumber = 5
}
}

View File

@@ -505,7 +505,10 @@ StackTrace:
<value>Bereits im Besitz: {0} | {1}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotRateLimitExceeded" xml:space="preserve">
<value>Anfragenlimit überschritten, wir versuchen es nach {0} Wartezeit erneut...</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
<value>Verbinde erneut...</value>
</data>

View File

@@ -505,7 +505,10 @@ Trazo de pila:
<value>Ya posees: {0} | {1}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotRateLimitExceeded" xml:space="preserve">
<value>Cuota excedida; se reintentará en {0} luego del tiempo de espera...</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
<value>Reconectando...</value>
</data>
@@ -653,6 +656,12 @@ Trazo de pila:
<data name="BotRefreshingPackagesData" xml:space="preserve">
<value>Actualizando datos de los paquetes...</value>
</data>
<data name="WarningDeprecated" xml:space="preserve">
<value>Uso de {0} está desaprobado y se quitará en versiones futuras del programa. Utilice en su lugar {1}.</value>
<comment>{0} will be replaced by the name of deprecated property (such as argument, config property or likewise), {1} will be replaced by the name of valid replacement (such as another argument or config property)</comment>
</data>
<data name="BotAcceptedDonationTrade" xml:space="preserve">
<value>Aceptar Intercambios de donación: {0}</value>
<comment>{0} will be replaced by trade's ID (number)</comment>
</data>
</root>

View File

@@ -506,7 +506,10 @@ StackTrace :
<value>Possède déjà : {0} | {1}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotRateLimitExceeded" xml:space="preserve">
<value>Tentatives trop nombreuses ; nouvelle tentative dans {0}...</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
<value>Reconnexion...</value>
</data>
@@ -658,5 +661,8 @@ StackTrace :
<value>L'Utilisation de {0} est désapprouvée et sera supprimée dans les prochaines versions du programme. Utilisez plutôt {1}.</value>
<comment>{0} will be replaced by the name of deprecated property (such as argument, config property or likewise), {1} will be replaced by the name of valid replacement (such as another argument or config property)</comment>
</data>
<data name="BotAcceptedDonationTrade" xml:space="preserve">
<value>Don accepté: {0}</value>
<comment>{0} will be replaced by trade's ID (number)</comment>
</data>
</root>

View File

@@ -506,7 +506,10 @@ StackTrace:
<value>Deținute deja: {0} | {1}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotRateLimitExceeded" xml:space="preserve">
<value>Limita ratei depășită, vom reîncerca după {0} de așteptare...</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
<value>Reconectare...</value>
</data>
@@ -654,6 +657,12 @@ StackTrace:
<data name="BotRefreshingPackagesData" xml:space="preserve">
<value>Se reîmprospătează datele pachetelor...</value>
</data>
<data name="WarningDeprecated" xml:space="preserve">
<value>Folosirea lui {0} este învechită și va fi eliminată în versiunile viitoare ale programului. Te rugăm să folosești în schimb {1}.</value>
<comment>{0} will be replaced by the name of deprecated property (such as argument, config property or likewise), {1} will be replaced by the name of valid replacement (such as another argument or config property)</comment>
</data>
<data name="BotAcceptedDonationTrade" xml:space="preserve">
<value>Acceptat schimbul de donație: {0}</value>
<comment>{0} will be replaced by trade's ID (number)</comment>
</data>
</root>

View File

@@ -506,7 +506,10 @@ StackTrace:
<value>Đã sở hữu: {0} | {1}</value>
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
</data>
<data name="BotRateLimitExceeded" xml:space="preserve">
<value>Vượt quá số lượng giới hạn, chúng tôi sẽ thử lại sau {0} đếm ngược...</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
</data>
<data name="BotReconnecting" xml:space="preserve">
<value>Đang kết nối lại...</value>
</data>

View File

@@ -27,6 +27,8 @@ using ArchiSteamFarm.Localization;
namespace ArchiSteamFarm {
internal static class OS {
internal static bool IsUnix => RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
internal static void Init(bool systemRequired) {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) {
DisableQuickEditMode();

View File

@@ -189,7 +189,7 @@ namespace ArchiSteamFarm {
}
private static async Task InitASF(IReadOnlyCollection<string> args) {
ASF.ArchiLogger.LogGenericInfo("ASF V" + SharedInfo.Version + " (" + SharedInfo.ModuleVersion + ")");
ASF.ArchiLogger.LogGenericInfo(SharedInfo.PublicIdentifier + " V" + SharedInfo.Version + " (" + SharedInfo.ModuleVersion + ")");
await InitGlobalConfigAndLanguage().ConfigureAwait(false);
@@ -346,7 +346,7 @@ namespace ArchiSteamFarm {
}
WebBrowser.Init();
WebBrowser = new WebBrowser(ASF.ArchiLogger, true);
WebBrowser = new WebBrowser(ASF.ArchiLogger, GlobalConfig.WebProxy, true);
if (GlobalConfig.IPC && (GlobalConfig.IPCPrefixes.Count > 0)) {
IPC.Start(GlobalConfig.IPCPrefixes);

View File

@@ -20,24 +20,11 @@
// limitations under the License.
using System;
using System.Diagnostics.CodeAnalysis;
using System.Reflection;
namespace ArchiSteamFarm {
internal static class SharedInfo {
#if ASF_VARIANT_GENERIC
internal const string Variant = "generic";
#elif ASF_VARIANT_LINUX_ARM
internal const string Variant = "linux-arm";
#elif ASF_VARIANT_LINUX_X64
internal const string Variant = "linux-x64";
#elif ASF_VARIANT_OSX_X64
internal const string Variant = "osx-x64";
#elif ASF_VARIANT_WIN_X64
internal const string Variant = "win-x64";
#else
internal const string Variant = SourceVariant;
#endif
internal const ulong ArchiSteamID = 76561198006963719;
internal const string ASF = nameof(ASF);
internal const ulong ASFGroupSteamID = 103582791440160998;
@@ -61,11 +48,38 @@ namespace ArchiSteamFarm {
internal const string UpdateDirectory = "_old";
internal const string WebsiteDirectory = "www";
private const string SourceVariant = "source";
internal static bool IsCustomBuild => Variant == SourceVariant;
internal static Guid ModuleVersion => Assembly.GetEntryAssembly().ManifestModule.ModuleVersionId;
internal static string PublicIdentifier => AssemblyName + (IsCustomBuild ? "-custom" : "");
internal static string PublicIdentifier => AssemblyName + (BuildInfo.IsCustomBuild ? "-custom" : "");
internal static Version Version => Assembly.GetEntryAssembly().GetName().Version;
[SuppressMessage("ReSharper", "ConvertToConstant.Global")]
internal static class BuildInfo {
#if ASF_VARIANT_DOCKER
internal static readonly bool CanUpdate = false;
internal static readonly string Variant = "docker";
#elif ASF_VARIANT_GENERIC
internal static readonly bool CanUpdate = true;
internal static readonly string Variant = "generic";
#elif ASF_VARIANT_LINUX_ARM
internal static readonly bool CanUpdate = true;
internal static readonly string Variant = "linux-arm";
#elif ASF_VARIANT_LINUX_X64
internal static readonly bool CanUpdate = true;
internal static readonly string Variant = "linux-x64";
#elif ASF_VARIANT_OSX_X64
internal static readonly bool CanUpdate = true;
internal static readonly string Variant = "osx-x64";
#elif ASF_VARIANT_WIN_X64
internal static readonly bool CanUpdate = true;
internal static readonly string Variant = "win-x64";
#else
internal static readonly bool CanUpdate = false;
internal static readonly string Variant = SourceVariant;
#endif
private const string SourceVariant = "source";
internal static bool IsCustomBuild => Variant == SourceVariant;
}
}
}

View File

@@ -45,7 +45,7 @@ namespace ArchiSteamFarm {
private readonly ArchiLogger ArchiLogger;
private readonly HttpClient HttpClient;
internal WebBrowser(ArchiLogger archiLogger, bool extendedTimeout = false) {
internal WebBrowser(ArchiLogger archiLogger, IWebProxy webProxy = null, bool extendedTimeout = false) {
ArchiLogger = archiLogger ?? throw new ArgumentNullException(nameof(archiLogger));
HttpClientHandler httpClientHandler = new HttpClientHandler {
@@ -53,7 +53,8 @@ namespace ArchiSteamFarm {
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
CookieContainer = CookieContainer,
MaxConnectionsPerServer = MaxConnections,
UseProxy = false
Proxy = webProxy,
UseProxy = webProxy != null
};
HttpClient = new HttpClient(httpClientHandler) { Timeout = TimeSpan.FromSeconds(extendedTimeout ? ExtendedTimeoutMultiplier * Program.GlobalConfig.ConnectionTimeout : Program.GlobalConfig.ConnectionTimeout) };

View File

@@ -26,5 +26,8 @@
"SteamProtocols": 3,
"UpdateChannel": 1,
"UpdatePeriod": 24,
"WebLimiterDelay": 200
"WebLimiterDelay": 200,
"WebProxy": null,
"WebProxyPassword": null,
"WebProxyUsername": null
}

View File

@@ -3,29 +3,29 @@
"bots-hide": "Masquer les bots",
"bots-hide-offline": "Bots hors-ligne",
"bots-hide-online": "Bots en ligne",
"bots-key": "",
"bots-key": "Voir la touche",
"bots-simple": "Information de base concernant le farming",
"bots-title": "ASF | Bots",
"command-auto-clear": "Effacer automatiquement",
"commands-title": "",
"commands-title": "ASF | Commandes",
"editor-change": "Changer de bot",
"editor-current": "En train d'éditer :",
"editor-save": "Sauvegarder",
"editor-title": "",
"editor-title": "ASF | Éditeur de configuration",
"generator-change": "Changer de mode",
"generator-current": "Mode actuel :",
"generator-download": "Téléchargement",
"generator-title": "",
"global-bots": "",
"global-boxed": "",
"global-boxed-description": "",
"global-change": "",
"global-changelog": "",
"generator-title": "ASF | Générateur de config",
"global-bots": "Bots",
"global-boxed": "Mise en page en boîtes",
"global-boxed-description": "Activer\/désactiver la mise en page en boîtes",
"global-change": "Modifier",
"global-changelog": "Liste des changements",
"global-commands": "Commandes",
"global-config": "Configuration",
"global-control-panel": "",
"global-editor": "",
"global-generator": "",
"global-control-panel": "Panneau de Configuration",
"global-editor": "Editeur",
"global-generator": "Générateur",
"global-home": "Accueil",
"global-information": "Information",
"global-language": "Langue",

View File

@@ -1,43 +1,43 @@
{
"bots-delete": "",
"bots-hide": "",
"bots-hide-offline": "",
"bots-hide-online": "",
"bots-key": "",
"bots-simple": "",
"bots-title": "",
"command-auto-clear": "",
"commands-title": "",
"editor-change": "",
"editor-current": "",
"editor-save": "",
"editor-title": "",
"generator-change": "",
"generator-current": "",
"bots-delete": "Afișează butonul de ștergere",
"bots-hide": "Ascunde boții",
"bots-hide-offline": "Boți offline",
"bots-hide-online": "Boți offline",
"bots-key": "Afișează tasta",
"bots-simple": "Informații simple privind farmarea",
"bots-title": "ASF | Boți",
"command-auto-clear": "Șterge automat",
"commands-title": "ASF | Comenzi",
"editor-change": "Schimbă botul",
"editor-current": "Se editează în prezent:",
"editor-save": "Salvează",
"editor-title": "ASF | Editor de configurații",
"generator-change": "Modifică modul",
"generator-current": "Modul actual:",
"generator-download": "Descarcă",
"generator-title": "",
"global-bots": "",
"global-boxed": "",
"global-boxed-description": "",
"global-change": "",
"global-changelog": "",
"global-commands": "",
"global-config": "",
"global-control-panel": "",
"global-editor": "",
"global-generator": "",
"generator-title": "ASF | Generator de configurații",
"global-bots": "Boți",
"global-boxed": "Aspect tip cutie",
"global-boxed-description": "Comută aspectul tip cutie",
"global-change": "Schimbă",
"global-changelog": "Jurnalul modificărilor",
"global-commands": "Comenzi",
"global-config": "Configurație",
"global-control-panel": "Panoul de control",
"global-editor": "Editor",
"global-generator": "Generator",
"global-home": "Pagina principală",
"global-information": "",
"global-language": "",
"global-layout": "",
"global-log": "",
"global-navigation": "",
"global-nightmode": "",
"global-nightmode-description": "",
"global-ram-usage": "",
"global-skins": "",
"global-uptime": "",
"global-version": "",
"global-wiki": "",
"log-title": ""
"global-information": "Informații",
"global-language": "Limbă",
"global-layout": "Aspect",
"global-log": "Log",
"global-navigation": "Comută navigarea",
"global-nightmode": "Mod nocturn",
"global-nightmode-description": "Comută modul nocturn",
"global-ram-usage": "Utilizare RAM",
"global-skins": "Skinuri",
"global-uptime": "Timp de funcționare",
"global-version": "Versiune",
"global-wiki": "Wiki",
"log-title": "ASF | Log"
}

View File

@@ -1,6 +1,6 @@
{
"bots-delete": "",
"bots-hide": "",
"bots-delete": "Hiện nút xoá",
"bots-hide": "Ẩn bot",
"bots-hide-offline": "",
"bots-hide-online": "",
"bots-key": "",
@@ -20,11 +20,11 @@
"global-boxed": "",
"global-boxed-description": "",
"global-change": "",
"global-changelog": "",
"global-changelog": "Các thay đổi",
"global-commands": "",
"global-config": "",
"global-control-panel": "",
"global-editor": "",
"global-config": "Cấu hình",
"global-control-panel": "Bảng điều khiển trung tâm",
"global-editor": "Trình biên tập",
"global-generator": "",
"global-home": "Trang chủ",
"global-information": "",

View File

@@ -2,7 +2,7 @@ FROM microsoft/dotnet:2.0-sdk AS build-env
WORKDIR /app
COPY . ./
RUN dotnet --info && \
dotnet publish ArchiSteamFarm -c Release -o out /nologo && \
dotnet publish ArchiSteamFarm -c Release -o out /nologo /p:ASFVariant=docker && \
cp "ArchiSteamFarm/scripts/generic/ArchiSteamFarm.sh" "ArchiSteamFarm/out/ArchiSteamFarm.sh"
FROM microsoft/dotnet:2.0-runtime-stretch-arm32v7

View File

@@ -2,7 +2,7 @@ FROM microsoft/dotnet:2.0-sdk AS build-env
WORKDIR /app
COPY . ./
RUN dotnet --info && \
dotnet publish ArchiSteamFarm -c Release -o out /nologo && \
dotnet publish ArchiSteamFarm -c Release -o out /nologo /p:ASFVariant=docker && \
cp "ArchiSteamFarm/scripts/generic/ArchiSteamFarm.sh" "ArchiSteamFarm/out/ArchiSteamFarm.sh"
FROM microsoft/dotnet:2.0-runtime

View File

@@ -13,13 +13,13 @@
[![Discord](https://img.shields.io/discord/267292556709068800.svg?label=Discord&maxAge=3600)](https://discord.gg/hSQgt8j)
[![Wiki](https://img.shields.io/badge/Read-wiki-cc5490.svg)](https://github.com/JustArchi/ArchiSteamFarm/wiki)
[![GitHub latest release version](https://img.shields.io/github/release/JustArchi/ArchiSteamFarm.svg?label=Latest&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![GitHub latest release date](https://img.shields.io/github/release-date/JustArchi/ArchiSteamFarm.svg?label=Released&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![Github latest release downloads](https://img.shields.io/github/downloads/JustArchi/ArchiSteamFarm/latest/total.svg?label=Downloads&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![GitHub stable release version](https://img.shields.io/github/release/JustArchi/ArchiSteamFarm.svg?label=Stable&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![GitHub stable release date](https://img.shields.io/github/release-date/JustArchi/ArchiSteamFarm.svg?label=Released&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![Github stable release downloads](https://img.shields.io/github/downloads/JustArchi/ArchiSteamFarm/latest/total.svg?label=Downloads&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases/latest)
[![GitHub next release version](https://img.shields.io/github/release/JustArchi/ArchiSteamFarm/all.svg?label=Next&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases)
[![GitHub next release date](https://img.shields.io/github/release-date-pre/JustArchi/ArchiSteamFarm.svg?label=Released&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases)
[![Github next release downloads](https://img.shields.io/github/downloads-pre/JustArchi/ArchiSteamFarm/latest/total.svg?label=Downloads&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases)
[![GitHub experimental release version](https://img.shields.io/github/release/JustArchi/ArchiSteamFarm/all.svg?label=Experimental&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases)
[![GitHub experimental release date](https://img.shields.io/github/release-date-pre/JustArchi/ArchiSteamFarm.svg?label=Released&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases)
[![Github experimental release downloads](https://img.shields.io/github/downloads-pre/JustArchi/ArchiSteamFarm/latest/total.svg?label=Downloads&maxAge=600)](https://github.com/JustArchi/ArchiSteamFarm/releases)
[![Patreon support](https://img.shields.io/badge/Patreon-support-yellow.svg)](https://www.patreon.com/JustArchi)
[![Paypal.me donate](https://img.shields.io/badge/Paypal.me-donate-yellow.svg)](https://www.paypal.me/JustArchi/5usd)

View File

@@ -1,7 +1,7 @@
import Validators from './validators';
export default {
'V3.1.2.3+': {
'V3.1.2.5+': {
asf: [
{
legend: 'schema.basic',
@@ -117,6 +117,24 @@ export default {
],
defaultValue: 0,
advanced: true
},
{
label: 'WebProxy',
field: 'WebProxy',
placeholder: '',
type: 'InputText'
},
{
label: 'WebProxyPassword',
field: 'WebProxyPassword',
placeholder: '',
type: 'InputPassword'
},
{
label: 'WebProxyUsername',
field: 'WebProxyUsername',
placeholder: '',
type: 'InputText'
}
]
},
@@ -287,7 +305,8 @@ export default {
values: [
{ value: 0, name: 'None' },
{ value: 1, name: 'RejectInvalidFriendInvites' },
{ value: 2, name: 'RejectInvalidTrades' }
{ value: 2, name: 'RejectInvalidTrades' },
{ value: 4, name: 'RejectInvalidGroupInvites' }
],
defaultValue: 0,
advanced: true

View File

@@ -29,8 +29,6 @@ before_build:
dotnet --info
dotnet restore
build_script:
- pwsh: >-
Set-StrictMode -Version Latest
@@ -40,7 +38,7 @@ build_script:
$ProgressPreference = 'SilentlyContinue'
dotnet build -c "$env:CONFIGURATION" -o 'out\source' --no-restore /nologo
dotnet build ArchiSteamFarm -c "$env:CONFIGURATION" -o 'out\source' /nologo
test_script:
- pwsh: >-
Set-StrictMode -Version Latest
@@ -50,7 +48,7 @@ test_script:
$ProgressPreference = 'SilentlyContinue'
dotnet test ArchiSteamFarm.Tests -c "$env:CONFIGURATION" -o 'out\source' --no-build --no-restore
dotnet test ArchiSteamFarm.Tests -c "$env:CONFIGURATION" -o 'out\source'
after_test:
- pwsh: >-
Set-StrictMode -Version Latest
@@ -70,9 +68,9 @@ after_test:
Set-Location -Path "$env:APPVEYOR_BUILD_FOLDER"
if ($Variant -eq 'generic') {
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$Variant" --no-restore /nologo "/p:ASFVariant=$Variant"
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$Variant" /nologo "/p:ASFVariant=$Variant"
} else {
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$Variant" -r "$Variant" --no-restore /nologo "/p:ASFVariant=$Variant" "/p:CrossGenDuringPublish=false"
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -o "out\$Variant" -r "$Variant" /nologo "/p:ASFVariant=$Variant" "/p:CrossGenDuringPublish=false"
}
# If we include any helper scripts for this variant, copy them to output directory

View File

@@ -1,8 +0,0 @@
"preserve_hierarchy": true
files:
- source: /ArchiSteamFarm/Localization/Strings.resx
translation: /ArchiSteamFarm/Localization/Strings.%locale%.resx
- source: /ArchiSteamFarm/www/locale/strings.json
translation: /ArchiSteamFarm/www/locale/strings.%locale%.json
- source: /WebConfigGenerator/src/locale/strings.json
translation: /WebConfigGenerator/src/locale/%locale%.json

24
crowdin.yml Normal file
View File

@@ -0,0 +1,24 @@
"preserve_hierarchy": true
"files": [
{
"source": "/ArchiSteamFarm/Localization/Strings.resx",
"translation": "/ArchiSteamFarm/Localization/Strings.%locale%.resx"
},
{
"source": "/ArchiSteamFarm/www/locale/strings.json",
"translation": "/ArchiSteamFarm/www/locale/strings.%locale%.json"
},
{
"source": "/WebConfigGenerator/src/locale/strings.json",
"translation": "/WebConfigGenerator/src/locale/%locale%.json"
},
{
"source": "/wiki/*.md",
"translation": "/wiki/locale/%locale%/%file_name%-%locale%.%file_extension%",
"ignore": [ "/**/_*.md" ]
},
{
"source": "/wiki/_Sidebar.md",
"translation": "/wiki/locale/%locale%/_Sidebar.md"
}
]

File diff suppressed because one or more lines are too long

View File

@@ -15,7 +15,7 @@ This tool is being used by ASF developers for synchronization of strings/transla
## Before you begin
- Make sure that your `crowdin_identity.yaml` file exists - this is the file with login credentials that is not being committed to GitHub. If it doesn't exist yet (e.g. because you've just cloned the repo), create it from `crowdin_identity_example.yaml` and fill `api_key` that can be found **[here](http://l10n.asf.justarchi.net/project/archisteamfarm/settings#api)**.
- Make sure that your `crowdin_identity.yml` file exists - this is the file with login credentials that is not being committed to GitHub. If it doesn't exist yet (e.g. because you've just cloned the repo), create it from `crowdin_identity_example.yml` and fill `api_key` that can be found **[here](http://l10n.asf.justarchi.net/project/archisteamfarm/settings#api)**.
- Ensure that `crowdin` command is recognized by your OS.
@@ -32,8 +32,8 @@ This tool is being used by ASF developers for synchronization of strings/transla
## Usage
- `archi_upload.bat` for pushing strings to Crowdin (when any `*Strings.resx` file gets modified).
- `archi_upload.ps1` for pushing strings to Crowdin.
- `archi_download.bat` for downloading translations from Crowdin (typically last commit before release).
- `archi_download.ps1` for downloading translations from Crowdin (typically last commit before release).
- `archi_sync.bat` for upload + download (tree sync, e.g. when modifying/removing original strings).
- `archi_sync.ps1` for upload + download (tree sync).

View File

@@ -1,8 +0,0 @@
@echo off
pushd %~dp0
cd ..\\..
call crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yaml download
git reset
git add -A "ArchiSteamFarm\Localization\*.resx" "ArchiSteamFarm\www\locale\*.json" "WebConfigGenerator\src\locale\*.json"
git commit -m "Translations update"
pause

View File

@@ -0,0 +1,21 @@
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
Set-Location $PSScriptRoot
Set-Location ..\\..
crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yml download
git reset
Push-Location -Path wiki
git pull
git add -A "locale\*.md"
git commit -m "Translations update"
Pop-Location
git add -A "ArchiSteamFarm\Localization\*.resx" "ArchiSteamFarm\www\locale\*.json" "WebConfigGenerator\src\locale\*.json" "wiki"
git commit -m "Translations update"
git push --recurse-submodules=on-demand
pause

View File

@@ -1,9 +0,0 @@
@echo off
pushd %~dp0
cd ..\\..
call crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yaml upload sources
call crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yaml download
git reset
git add -A "ArchiSteamFarm\Localization\*.resx" "ArchiSteamFarm\www\locale\*.json" "WebConfigGenerator\src\locale\*.json"
git commit -m "Translations update"
pause

View File

@@ -0,0 +1,29 @@
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
Set-Location $PSScriptRoot
Set-Location ..\\..
Push-Location -Path wiki
git reset --hard
git clean -fd
git pull
Pop-Location
crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yml upload sources
crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yml download
git reset
Push-Location -Path wiki
git pull
git add -A "locale\*.md"
git commit -m "Translations update"
Pop-Location
git add -A "ArchiSteamFarm\Localization\*.resx" "ArchiSteamFarm\www\locale\*.json" "WebConfigGenerator\src\locale\*.json" "wiki"
git commit -m "Translations update"
git push --recurse-submodules=on-demand
pause

View File

@@ -1,5 +0,0 @@
@echo off
pushd %~dp0
cd ..\\..
call crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yaml upload sources
pause

View File

@@ -0,0 +1,15 @@
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
Set-Location $PSScriptRoot
Set-Location ..\\..
Push-Location -Path wiki
git reset --hard
git clean -fd
git pull
Pop-Location
crowdin -b master --identity tools\\crowdin-cli\\crowdin_identity.yml upload sources
pause

1
wiki Submodule

Submodule wiki added at 2cc4940548