Compare commits

..

1353 Commits

Author SHA1 Message Date
JustArchi
2d969758f6 Add auto-migration of global config, remove unnecessary delay 2021-05-08 23:23:34 +02:00
JustArchi
55cd466a1e Use simplified logic also for global config 2021-05-08 22:21:50 +02:00
JustArchi
64b9aa409e Correct migration logic 2021-05-08 22:19:27 +02:00
JustArchi
bf89c005d7 Refactor a few bot config properties, add auto-migration 2021-05-08 22:00:25 +02:00
Renovate Bot
bf6f4b8362 Update ASF-ui commit hash to ca69b1c 2021-05-08 11:04:31 +00:00
JustArchi
fda60037bb Further refactor 2021-05-08 12:49:46 +02:00
GitHub Action
590e044391 Automatic translations update 2021-05-08 02:26:37 +00:00
JustArchi
8ffdd8bca0 Remove obsolete property 2021-05-08 01:49:06 +02:00
JustArchi
d21d2473fe RuntimeCompatibility -> Compatibility 2021-05-08 01:43:08 +02:00
JustArchi
e60b54e402 Refactor EVERYTHING
Directories structure + namespaces relevant to them
2021-05-08 01:37:22 +02:00
JustArchi
cbabde1b38 Reorganize Web directory 2021-05-08 01:03:08 +02:00
JustArchi
2f96ae9e8f Correct host of the AWH requests 2021-05-08 00:42:17 +02:00
JustArchi
5ea6a167e4 Add --no-analysis to cc.sh 2021-05-08 00:17:27 +02:00
JustArchi
daf37c723c Document all the pragmas, final code corrections 2021-05-07 23:56:45 +02:00
JustArchi
8605c71f81 Resolve CA5394 2021-05-07 23:12:58 +02:00
JustArchi
bc74c69ac5 Resolve CA5392 2021-05-07 23:04:50 +02:00
JustArchi
69a12fadcf Resolve CA5389 2021-05-07 22:57:59 +02:00
JustArchi
89d41e7cb3 Resolve CA3075 2021-05-07 21:32:09 +02:00
JustArchi
64bbfa19cd Resolve 3012 2021-05-07 21:15:20 +02:00
JustArchi
462b720d89 Resolve CA3003 2021-05-07 21:10:00 +02:00
JustArchi
48922300d0 Implement security hardening for IsValidBotName()
And add missing support on netf for it...
2021-05-07 20:22:23 +02:00
JustArchi
e7537ca996 Resolve CA2002 2021-05-07 19:04:38 +02:00
JustArchi
809a4bbfbf Resolve CA2000 2021-05-07 18:55:50 +02:00
JustArchi
1661cf4be9 Resolve CA1823 2021-05-07 18:10:51 +02:00
JustArchi
4a91b997a2 Resolve CA1812 2021-05-07 18:02:21 +02:00
JustArchi
804008a5d1 Resolve CA1819 2021-05-07 17:14:22 +02:00
JustArchi
90ff43dc98 Resolve CA1508 2021-05-07 16:49:02 +02:00
JustArchi
377df12924 Resolve CA1308 2021-05-07 16:30:57 +02:00
JustArchi
04ff460d69 Resolve CA1307 2021-05-07 15:59:06 +02:00
GitHub Action
a3d352c64d Automatic translations update 2021-05-07 02:27:06 +00:00
Renovate Bot
79a9a4e7c5 Update ASF-ui commit hash to cc48b49 2021-05-06 23:51:00 +00:00
JustArchi
5a8e2720fa Hide info about loaded assemblies under debug option 2021-05-07 00:30:31 +02:00
JustArchi
272cd1ff29 Delete 5.0-to-5.1.md 2021-05-07 00:08:26 +02:00
JustArchi
5745e00bda Resolve CA1303 2021-05-07 00:06:03 +02:00
JustArchi
0e9b956ae9 Resolve CA1063 2021-05-06 23:45:10 +02:00
JustArchi
559fdb34c6 Resolve CA1062 2021-05-06 23:32:50 +02:00
JustArchi
9a8a61e111 Resolve CA1054 2021-05-06 22:50:59 +02:00
JustArchi
143039c584 Resolve CA1044 2021-05-06 21:18:39 +02:00
JustArchi
a8e3bd6473 Cleanup round 2021-05-06 21:00:21 +02:00
JustArchi
aed11c59ee Cleanup round 2021-05-06 20:44:17 +02:00
JustArchi
ef52e076d3 Cleanup round 2021-05-06 20:28:25 +02:00
JustArchi
b6772b9b1e Resolve CA1034 2021-05-06 20:16:06 +02:00
JustArchi
57bf294553 Resolve CA1027 2021-05-06 18:53:07 +02:00
JustArchi
93c38ff4d4 Create 5.0-to-5.1.md 2021-05-06 18:34:29 +02:00
JustArchi
65dc5def01 Resolve CA1002 2021-05-06 18:26:29 +02:00
JustArchi
3903ef0dfb Misc 2021-05-06 18:07:01 +02:00
JustArchi
c9b01910d0 Update .editorconfig 2021-05-06 17:55:09 +02:00
JustArchi
4f3aa4f8f6 Fix docker build 2021-05-06 17:20:47 +02:00
JustArchi
dfffc3384b More code inspections! 2021-05-06 17:14:03 +02:00
JustArchi
ae2713c0df .editorconfig naming rules 2021-05-06 15:48:15 +02:00
JustArchi
371bbd8ff1 .editorconfig update 2021-05-06 15:28:24 +02:00
JustArchi
efb182c5c5 Remove no-longer-needed workaround 2021-05-06 10:44:19 +02:00
GitHub Action
cbf06a359d Automatic translations update 2021-05-06 02:24:53 +00:00
Renovate Bot
150e22f302 Update dependency Humanizer to v2.10.1 2021-05-05 20:56:47 +00:00
JustArchi
c818fbedd9 Update README.md 2021-05-05 10:48:50 +02:00
GitHub Action
b51bd498cd Automatic translations update 2021-05-05 02:23:57 +00:00
Renovate Bot
9a86f6f522 Update ASF-ui commit hash to 203f57b 2021-05-04 03:43:18 +00:00
GitHub Action
3f8a715334 Automatic translations update 2021-05-04 02:26:34 +00:00
Renovate Bot
7e5943bd24 Update ASF-ui commit hash to 14263a7 2021-05-04 00:31:13 +00:00
Renovate Bot
f4d7b22441 Update wiki commit hash to 73f8864 2021-05-03 12:00:19 +00:00
JustArchi
db632145fb STD: Skip AutoGrant also when doing full resolve 2021-05-03 13:42:37 +02:00
JustArchi
eb39a081d7 STD: Implement SkipAutoGrantPackages 2021-05-03 13:20:34 +02:00
JustArchi
823f077cf2 STD: Correct extra config path 2021-05-03 12:21:00 +02:00
Renovate Bot
7f283be03a Update ASF-ui commit hash to 35067d9 2021-05-03 04:47:38 +00:00
GitHub Action
6dc5cee846 Automatic translations update 2021-05-03 02:30:04 +00:00
JustArchi
9afbcee163 STD: Add feature to skip appIDs, packageIDs and depotIDs 2021-05-03 01:08:12 +02:00
JustArchi
47184cb139 Renovate: use :automergeBranch 2021-05-03 00:28:50 +02:00
renovate[bot]
96dc24ed46 Update ASF-ui commit hash to b73cdd5 (#2322)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2021-05-03 00:28:08 +02:00
Renovate Bot
59e409f320 Update crowdin/github-action action to v1.1.0 2021-05-02 21:41:07 +00:00
Renovate Bot
2ba714feb6 Update wiki commit hash to 2db3100 2021-05-02 20:35:09 +00:00
Renovate Bot
6e744e0181 Update ASF-ui commit hash to c1c1501 2021-05-02 19:23:42 +00:00
renovate[bot]
c35d1be12d Configure Renovate (#2318)
* Add renovate.json

* Configure renovate.json

* Add a rule for mono support

Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: JustArchi <JustArchi@JustArchi.net>
2021-05-02 20:03:54 +02:00
JustArchi
d6af1ae973 Bump 2021-05-02 19:59:46 +02:00
JustArchi
e26aec339f Catch proper exception instead 2021-05-02 19:39:41 +02:00
JustArchi
cac5d5fadb Try catching any exception 2021-05-02 19:18:46 +02:00
JustArchi
d394ba60c7 Add a workaround for lack of Humanizer support 2021-05-02 18:54:46 +02:00
JustArchi
bd82af62c6 Bump 2021-05-02 14:58:56 +02:00
JustArchi
ecec08af9f Fix docker build... 2021-05-02 14:56:30 +02:00
JustArchi
c524e003b5 Bump 2021-05-02 14:52:37 +02:00
Łukasz Domeradzki
0808a38f48 Manage package versions centrally (#2317)
Closes #2316

The issue we're facing right now comes from the fact of desynchronization of packages between different projects. Since I didn't find any way to "fix" the package versions of our plugins to the main ASF project, we'll instead use centralized Directory.packages.props which specifies appropriate versions
2021-05-02 14:51:08 +02:00
GitHub Action
8a2b0c9eea Automatic translations update 2021-05-01 02:29:25 +00:00
dependabot-preview[bot]
24ca82c526 Bump Swashbuckle.AspNetCore.Newtonsoft from 6.1.3 to 6.1.4
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.3 to 6.1.4.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.3...v6.1.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-30 13:18:11 +00:00
dependabot-preview[bot]
a400ebccee Bump Swashbuckle.AspNetCore from 6.1.3 to 6.1.4
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.3 to 6.1.4.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.3...v6.1.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-30 12:27:22 +00:00
dependabot-preview[bot]
c7dbaa0828 Bump Swashbuckle.AspNetCore.Annotations from 6.1.3 to 6.1.4
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.3 to 6.1.4.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.3...v6.1.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-30 11:22:29 +00:00
GitHub Action
48471ca5a8 Automatic translations update 2021-04-30 02:27:13 +00:00
dependabot-preview[bot]
687021fd08 Bump ASF-ui from 9e5c7d8 to 24a750d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `9e5c7d8` to `24a750d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](9e5c7d866f...24a750d9db)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-30 00:33:39 +00:00
GitHub Action
a6f634cae4 Automatic translations update 2021-04-29 02:26:20 +00:00
dependabot-preview[bot]
742857832a Bump ASF-ui from 7e4f3cf to 9e5c7d8
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7e4f3cf` to `9e5c7d8`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7e4f3cf81d...9e5c7d866f)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-29 00:51:34 +00:00
dependabot-preview[bot]
3ea5efe4e2 Bump wiki from 67283b7 to ee8750c
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `67283b7` to `ee8750c`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](67283b72b3...ee8750c46a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-29 00:35:36 +00:00
dependabot-preview[bot]
e7a19e0e9f Bump Humanizer from 2.8.26 to 2.9.9
Bumps [Humanizer](https://github.com/Humanizr/Humanizer) from 2.8.26 to 2.9.9.
- [Release notes](https://github.com/Humanizr/Humanizer/releases)
- [Changelog](https://github.com/Humanizr/Humanizer/blob/main/release_notes.md)
- [Commits](https://github.com/Humanizr/Humanizer/compare/v2.8.26...v2.9.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-28 09:39:18 +00:00
GitHub Action
739b3d5a9d Automatic translations update 2021-04-28 02:29:09 +00:00
JustArchi
40a9a88f43 Bump 2021-04-27 13:25:23 +02:00
GitHub Action
fcd7848643 Automatic translations update 2021-04-27 02:28:03 +00:00
JustArchi
b70af76a5e Revert "Update links"
This reverts commit 3695335927.
2021-04-26 11:01:25 +02:00
GitHub Action
1cfc3a7c71 Automatic translations update 2021-04-26 02:31:43 +00:00
dependabot-preview[bot]
198ada7d2a Bump ASF-ui from f1738d6 to 7e4f3cf
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `f1738d6` to `7e4f3cf`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](f1738d6e54...7e4f3cf81d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-26 00:47:51 +00:00
JustArchi
3695335927 Update links 2021-04-26 00:18:34 +02:00
JustArchi
890648e604 Update official markdowns mentioning the new support channel 2021-04-26 00:11:31 +02:00
JustArchi
9ed27b5f66 Finish STD localization 2021-04-25 23:44:47 +02:00
JustArchi
1cfa11d316 Correct Copy-Item not being recurse when expected 2021-04-25 20:52:06 +02:00
JustArchi
249e226662 Add a localization note 2021-04-25 20:09:02 +02:00
JustArchi
49c35108e5 Upload Strings.pl-PL.resx manually for testing purposes 2021-04-25 20:08:14 +02:00
JustArchi
dc5da86322 Add support for automatic commit for STD strings 2021-04-25 19:57:11 +02:00
JustArchi
857e9a140f Initialize localization strings for STD plugin 2021-04-25 19:55:30 +02:00
GitHub Action
426626e3fe Automatic translations update 2021-04-25 02:31:44 +00:00
GitHub Action
fb9616561d Automatic translations update 2021-04-24 02:28:42 +00:00
JustArchi
3c4755ab4c Remove unused string 2021-04-23 23:47:12 +02:00
GitHub Action
0349923a08 Automatic translations update 2021-04-23 02:31:06 +00:00
dependabot-preview[bot]
6a11b473ca Bump ASF-ui from 3ed4c3a to f1738d6
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3ed4c3a` to `f1738d6`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3ed4c3a032...f1738d6e54)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-23 00:35:18 +00:00
JustArchi
8248864133 Misc optimization 2021-04-23 00:25:30 +02:00
JustArchi
ac2551987a Make ResetSteamTimeDifference() more robust
Cover up for extremely rare situation when those two variables could get desynced due to reset + resolve happening at the same time
2021-04-23 00:22:54 +02:00
JustArchi
e99f3adcb5 Bump 2021-04-23 00:12:31 +02:00
JustArchi
260797b61c Fix a possibility of invalid Steam time cached 2021-04-23 00:01:25 +02:00
GitHub Action
4ecb5f55f8 Automatic translations update 2021-04-22 02:26:55 +00:00
JustArchi
2522bb2cf2 Bump 2021-04-21 23:50:57 +02:00
JustArchi
64ce7a15c4 Correct success when using waitIfNeeded with no IDs specified
We return success if we handled anything in this case
2021-04-21 23:15:20 +02:00
JustArchi
377c12e71b Make properties of Confirmation class public 2021-04-21 22:49:25 +02:00
JustArchi
cd261ff626 Enhance HandleTwoFactorAuthenticationConfirmations() function
This modification allows to retrieve all the details about confirmations that were actually handled
2021-04-21 22:44:47 +02:00
GitHub Action
8815fa32dd Automatic translations update 2021-04-21 02:27:03 +00:00
dependabot-preview[bot]
33bb981778 Bump Swashbuckle.AspNetCore.Newtonsoft from 6.1.2 to 6.1.3
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.2 to 6.1.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.2...v6.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-20 12:59:10 +00:00
dependabot-preview[bot]
1b8da1971f Bump Swashbuckle.AspNetCore.Annotations from 6.1.2 to 6.1.3
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.2 to 6.1.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.2...v6.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-20 12:10:18 +00:00
dependabot-preview[bot]
a32e5e4f04 Bump Swashbuckle.AspNetCore from 6.1.2 to 6.1.3
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.2 to 6.1.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.2...v6.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-20 11:06:13 +00:00
GitHub Action
975cb8184d Automatic translations update 2021-04-20 02:26:13 +00:00
GitHub Action
1d142f9346 Automatic translations update 2021-04-19 02:27:21 +00:00
dependabot-preview[bot]
f10caae94e Bump ASF-ui from 0b8bba5 to 3ed4c3a
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `0b8bba5` to `3ed4c3a`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](0b8bba58bd...3ed4c3a032)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-19 00:46:00 +00:00
JustArchi
e54414477f Bump 2021-04-18 13:27:26 +02:00
Łukasz Domeradzki
171e510fbe CI: Use latest SDK once again (#2285) 2021-04-18 13:23:40 +02:00
JustArchi
f4e4ea9aed Closes #2292 2021-04-18 12:22:16 +02:00
JustArchi
a77c0d0599 Closes #2293 2021-04-18 11:58:45 +02:00
GitHub Action
9387c0f0e8 Automatic translations update 2021-04-18 02:27:33 +00:00
GitHub Action
36a9319b87 Automatic translations update 2021-04-17 02:24:13 +00:00
GitHub Action
a79e9839f8 Automatic translations update 2021-04-16 02:27:07 +00:00
dependabot-preview[bot]
a1b3710ff0 Bump ASF-ui from cc46e95 to 0b8bba5
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `cc46e95` to `0b8bba5`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](cc46e95381...0b8bba58bd)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-16 01:07:32 +00:00
dependabot-preview[bot]
6d2c32a55f Bump wiki from 4b5651a to 20285f9
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `4b5651a` to `20285f9`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](4b5651a1cd...20285f9d63)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-16 00:34:47 +00:00
GitHub Action
f6299324a8 Automatic translations update 2021-04-15 02:23:57 +00:00
GitHub Action
649ff093be Automatic translations update 2021-04-14 02:25:33 +00:00
dependabot-preview[bot]
a65e9d01f6 Bump ASF-ui from 34cc7d0 to cc46e95
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `34cc7d0` to `cc46e95`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](34cc7d01c3...cc46e95381)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-14 00:52:09 +00:00
GitHub Action
f9eb6bfcff Automatic translations update 2021-04-13 02:27:58 +00:00
dependabot-preview[bot]
fa451da923 Bump ASF-ui from 3169b1e to 34cc7d0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3169b1e` to `34cc7d0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3169b1e8b6...34cc7d01c3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-13 00:37:15 +00:00
GitHub Action
3bae07682f Automatic translations update 2021-04-12 02:28:52 +00:00
dependabot-preview[bot]
17d1648064 Bump ASF-ui from a041dfe to 3169b1e
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `a041dfe` to `3169b1e`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](a041dfe309...3169b1e8b6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-12 00:51:18 +00:00
JustArchi
89264d1e70 CI: Disable fail-fast
This gives precise information which OSes failed instead of the first one that did, useful for analyzing failures related to specific OS only
2021-04-11 13:27:32 +02:00
GitHub Action
ddbec692dc Automatic translations update 2021-04-11 02:28:23 +00:00
JustArchi
efec44e593 R# code improvements & cleanups 2021-04-11 00:33:32 +02:00
GitHub Action
53a06126e8 Automatic translations update 2021-04-10 02:25:45 +00:00
JustArchi
f2eb9d9b37 Bump 2021-04-10 00:10:55 +02:00
JustArchi
6f001567fc Rewrite the BadActivationCode to CannotRedeemCodeFromClient when currency is not set
This also gives feedback to the user that we're unable to redeem the key
2021-04-10 00:07:01 +02:00
JustArchi
bb21bb3cb4 Use CannotRedeemCodeFromClient error instead of BadActivationCode for unknown wallet keys redemptions
BadActivationCode doesn't signalize to the user that we tried to redeem the key but failed and Steam didn't tell us why. CannotRedeemCodeFromClient seems more appropriate because we indeed can't redeem it from client and we don't know why.
2021-04-10 00:00:23 +02:00
dependabot-preview[bot]
4b80fbaf7a Bump Swashbuckle.AspNetCore.Newtonsoft from 6.1.1 to 6.1.2
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.1 to 6.1.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.1...v6.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-09 19:08:20 +00:00
dependabot-preview[bot]
92e1a55583 Bump Swashbuckle.AspNetCore.Annotations from 6.1.1 to 6.1.2
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.1 to 6.1.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.1...v6.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-09 18:18:34 +00:00
dependabot-preview[bot]
4a8c97353d Bump Swashbuckle.AspNetCore from 6.1.1 to 6.1.2
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.1 to 6.1.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.1...v6.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-09 17:11:41 +00:00
dependabot-preview[bot]
49d85807c7 Bump ASF-ui from f1734e9 to a041dfe
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `f1734e9` to `a041dfe`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](f1734e97fe...a041dfe309)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-09 00:33:55 +00:00
GitHub Action
68b0a34d94 Automatic translations update 2021-04-08 02:30:13 +00:00
dependabot-preview[bot]
f86c07fc06 Bump ASF-ui from d70eacf to f1734e9
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `d70eacf` to `f1734e9`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](d70eacfb34...f1734e97fe)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-07 19:27:59 +00:00
FREDERICK
17141ac982 Update lol-US.png (#2279) 2021-04-07 20:40:18 +02:00
JustArchi
d3a09ebc8c CI: Switch to 5.0.201 SDK due to problems with latest 2021-04-07 20:37:38 +02:00
GitHub Action
9cd173908f Automatic translations update 2021-04-07 02:30:44 +00:00
dependabot-preview[bot]
b6445aed86 Bump JetBrains.Annotations from 2020.3.0 to 2021.1.0
Bumps JetBrains.Annotations from 2020.3.0 to 2021.1.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-06 09:00:18 +00:00
GitHub Action
9d3c816950 Automatic translations update 2021-04-06 03:15:13 +00:00
dependabot-preview[bot]
f3baf7101f Bump ASF-ui from 62e94fb to d70eacf
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `62e94fb` to `d70eacf`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](62e94fb92f...d70eacfb34)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-06 00:32:47 +00:00
JustArchi
a07403a8af Misc cron change 2021-04-05 12:49:52 +02:00
GitHub Action
5f2dc48dac Automatic translations update 2021-04-05 10:45:30 +00:00
dependabot-preview[bot]
a5d06a406f Bump ASF-ui from 93acdb9 to 62e94fb
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `93acdb9` to `62e94fb`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](93acdb97aa...62e94fb92f)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-05 00:40:29 +00:00
GitHub Action
4033874a67 Automatic translations update 2021-04-04 02:23:42 +00:00
GitHub Action
e9afd0ea5b Automatic translations update 2021-04-03 02:21:31 +00:00
GitHub Action
f526d0f94a Automatic translations update 2021-04-02 02:27:00 +00:00
dependabot-preview[bot]
de8a83347e Bump Microsoft.NET.Test.Sdk from 16.9.1 to 16.9.4
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.9.1 to 16.9.4.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](https://github.com/microsoft/vstest/compare/v16.9.1...v16.9.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-02 01:23:25 +00:00
dependabot-preview[bot]
9b6b4fd690 Bump ASF-ui from 206f1f5 to 93acdb9
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `206f1f5` to `93acdb9`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](206f1f5883...93acdb97aa)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-02 00:53:44 +00:00
dependabot-preview[bot]
d6e82680e7 Bump wiki from ccb0725 to 231962e
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `ccb0725` to `231962e`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](ccb0725b44...231962ec0b)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-04-02 00:36:33 +00:00
JustArchi
8de7df2b9d Update LICENSE-2.0.txt
Official byte content
2021-04-01 11:30:54 +02:00
JustArchi
2bc4e8acc1 Add lol-US png flag to resources 2021-04-01 10:17:14 +02:00
GitHub Action
663b4b05fc Automatic translations update 2021-04-01 02:25:25 +00:00
GitHub Action
20cb23bc1a Automatic translations update 2021-03-31 02:21:03 +00:00
dependabot-preview[bot]
7dc47549c1 Bump wiki from cf05c7d to 16f2c14
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `cf05c7d` to `16f2c14`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](cf05c7d78b...16f2c14cea)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-31 00:33:36 +00:00
JustArchi
1317d86fb3 Bump 2021-03-30 23:40:33 +02:00
JustArchi
345ef35b00 Update ASF-ui 2021-03-30 23:40:06 +02:00
JustArchi
0d93735e59 Bump 2021-03-30 10:19:03 +02:00
JustArchi
f8e01ec0e5 Bump ASF-ui 2021-03-30 10:17:11 +02:00
JustArchi
bfe453d9ca Rename 2/2 2021-03-30 10:14:23 +02:00
JustArchi
0ae12f09f3 Rename 1/2 2021-03-30 10:12:28 +02:00
GitHub Action
27648db509 Automatic translations update 2021-03-30 02:21:27 +00:00
dependabot-preview[bot]
2288305fde Bump wiki from 0067c93 to 5d73323
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `0067c93` to `5d73323`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](0067c9328c...5d733233f3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-30 00:47:17 +00:00
dependabot-preview[bot]
cd8d095c8c Bump ASF-ui from 2d60ce3 to 35e25e8
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `2d60ce3` to `35e25e8`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](2d60ce377a...35e25e8d00)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-30 00:30:51 +00:00
JustArchi
82a007968e Bump 2021-03-30 00:18:22 +02:00
JustArchi
614f671962 Initial upload of lol-US and mapping in crowdin 2021-03-29 23:45:59 +02:00
dependabot-preview[bot]
ae4f97f5c1 Bump NLog.Web.AspNetCore from 4.11.0 to 4.12.0
Bumps [NLog.Web.AspNetCore](https://github.com/NLog/NLog.Web) from 4.11.0 to 4.12.0.
- [Release notes](https://github.com/NLog/NLog.Web/releases)
- [Changelog](https://github.com/NLog/NLog.Web/blob/master/CHANGELOG.MD)
- [Commits](https://github.com/NLog/NLog.Web/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-29 20:31:40 +00:00
JustArchi
e122939906 Misc 2021-03-29 21:47:25 +02:00
JustArchi
1c1c292082 Add April Fools easter egg 2021-03-29 21:42:42 +02:00
JustArchi
1f7a2c21d9 Correct sr-CS localization 2021-03-29 20:59:39 +02:00
JustArchi
fc3c758b5f Bump 2021-03-29 20:24:33 +02:00
GitHub Action
442c780e71 Automatic translations update 2021-03-29 02:22:32 +00:00
dependabot-preview[bot]
07ce579cd8 Bump ASF-ui from eef9b47 to 2d60ce3
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `eef9b47` to `2d60ce3`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](eef9b475b3...2d60ce377a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-29 00:43:55 +00:00
GitHub Action
8457e68639 Automatic translations update 2021-03-28 02:20:09 +00:00
JustArchi
1711a464d3 Add Mobile user interface mode 2021-03-27 16:30:38 +01:00
JustArchi
7a5a2537a3 Closes #2260 2021-03-27 15:40:37 +01:00
GitHub Action
9d7e2482f2 Automatic translations update 2021-03-27 02:21:00 +00:00
GitHub Action
ca05c83442 Automatic translations update 2021-03-26 02:13:45 +00:00
JustArchi
62e6acc037 Add log entry stating GamesPlayedWhileIdle 2021-03-25 23:58:41 +01:00
GitHub Action
b1aec367f8 Automatic translations update 2021-03-25 02:09:20 +00:00
dependabot-preview[bot]
2497ab6c41 Bump wiki from a07e578 to a0213b9
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `a07e578` to `a0213b9`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](a07e578193...a0213b9f4b)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-25 00:50:26 +00:00
dependabot-preview[bot]
5b14586ee3 Bump ASF-ui from bc05f26 to eef9b47
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `bc05f26` to `eef9b47`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](bc05f2685b...eef9b475b3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-25 00:34:37 +00:00
dependabot-preview[bot]
335f65546c Bump NLog from 4.7.8 to 4.7.9
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.8 to 4.7.9.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/v4.7.9/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/compare/v4.7.8...v4.7.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-24 22:50:52 +00:00
GitHub Action
d0c0f6ed33 Automatic translations update 2021-03-24 02:30:32 +00:00
dependabot-preview[bot]
f2487e4a03 Bump wiki from 3e57f4b to b65206a
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `3e57f4b` to `b65206a`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](3e57f4bf24...b65206a680)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-24 00:49:13 +00:00
dependabot-preview[bot]
e0fab89bdb Bump ASF-ui from 9d5736e to bc05f26
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `9d5736e` to `bc05f26`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](9d5736e45c...bc05f2685b)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-24 00:32:35 +00:00
GitHub Action
2123e0022b Automatic translations update 2021-03-23 02:29:54 +00:00
dependabot-preview[bot]
6e4e4e9157 Bump ASF-ui from 2dcd39d to 9d5736e
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `2dcd39d` to `9d5736e`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](2dcd39d0f3...9d5736e45c)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-23 00:31:04 +00:00
JustArchi
ae591d3ea8 Remove no-longer-needed warning suppressions 2021-03-22 23:35:44 +01:00
dependabot-preview[bot]
f305561f47 Bump Newtonsoft.Json from 12.0.3 to 13.0.1
Bumps [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) from 12.0.3 to 13.0.1.
- [Release notes](https://github.com/JamesNK/Newtonsoft.Json/releases)
- [Commits](https://github.com/JamesNK/Newtonsoft.Json/compare/12.0.3...13.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-22 22:25:09 +00:00
GitHub Action
511c3f956a Automatic translations update 2021-03-22 02:30:40 +00:00
dependabot-preview[bot]
1ea2a1ff8e Bump ASF-ui from effc5cf to 2dcd39d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `effc5cf` to `2dcd39d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](effc5cf3f2...2dcd39d0f3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-22 01:01:18 +00:00
dependabot-preview[bot]
ad6efc8279 Bump wiki from a335ce1 to e2fd535
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `a335ce1` to `e2fd535`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](a335ce15e2...e2fd535d58)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-22 00:46:18 +00:00
GitHub Action
e6bc1c0d1c Automatic translations update 2021-03-21 02:28:20 +00:00
JustArchi
7d0aeaa422 Correct warnings 2021-03-20 14:10:48 +00:00
dependabot-preview[bot]
2c14846c2f Bump Markdig.Signed from 0.23.0 to 0.24.0
Bumps [Markdig.Signed](https://github.com/xoofx/markdig) from 0.23.0 to 0.24.0.
- [Release notes](https://github.com/xoofx/markdig/releases)
- [Changelog](https://github.com/xoofx/markdig/blob/master/changelog.md)
- [Commits](https://github.com/xoofx/markdig/compare/0.23.0...0.24.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-20 14:10:48 +00:00
GitHub Action
9b7b595de8 Automatic translations update 2021-03-20 02:27:43 +00:00
JustArchi
c2b4a7a5fd Misc 2021-03-19 13:45:57 +01:00
JustArchi
691faced26 Update RELEASE_TEMPLATE.md 2021-03-19 13:39:50 +01:00
JustArchi
d23a75d2d1 Update README.md 2021-03-19 13:37:04 +01:00
JustArchi
0313e7a3a4 Update README.md 2021-03-19 13:31:04 +01:00
JustArchi
f39d34371b Update README.md 2021-03-19 13:30:18 +01:00
JustArchi
e7f2d4d89c Update README.md 2021-03-19 13:29:15 +01:00
GitHub Action
193e6f8078 Automatic translations update 2021-03-19 02:27:51 +00:00
GitHub Action
c68514dafc Automatic translations update 2021-03-18 02:26:37 +00:00
dependabot-preview[bot]
7a5e73667b Bump ASF-ui from 91c796f to effc5cf
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `91c796f` to `effc5cf`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](91c796fcaa...effc5cf3f2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-18 00:32:28 +00:00
GitHub Action
51828c56ae Automatic translations update 2021-03-17 02:27:16 +00:00
dependabot-preview[bot]
821dee0c37 Bump ASF-ui from ced8737 to 91c796f
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `ced8737` to `91c796f`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](ced8737aa1...91c796fcaa)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-17 00:34:29 +00:00
dependabot-preview[bot]
a7c38bb844 Bump Swashbuckle.AspNetCore from 6.1.0 to 6.1.1
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.0...v6.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 23:02:00 +00:00
Łukasz Domeradzki
6a216819fa AppVeyor: Ignore network issues (#2243) 2021-03-16 23:13:17 +01:00
dependabot-preview[bot]
50e792f8a7 Bump Swashbuckle.AspNetCore.Newtonsoft from 6.1.0 to 6.1.1
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.0...v6.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 20:08:20 +00:00
dependabot-preview[bot]
63c1f74064 Bump Swashbuckle.AspNetCore.Annotations from 6.1.0 to 6.1.1
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.1.0...v6.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 19:01:47 +00:00
dependabot-preview[bot]
f6fce273cf Bump MSTest.TestFramework from 2.2.2 to 2.2.3
Bumps [MSTest.TestFramework](https://github.com/microsoft/testfx) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/microsoft/testfx/releases)
- [Commits](https://github.com/microsoft/testfx/compare/v2.2.2...v2.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 15:02:51 +00:00
dependabot-preview[bot]
f5e1a1ce20 Bump MSTest.TestAdapter from 2.2.2 to 2.2.3
Bumps [MSTest.TestAdapter](https://github.com/microsoft/testfx) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/microsoft/testfx/releases)
- [Commits](https://github.com/microsoft/testfx/compare/v2.2.2...v2.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 14:13:45 +00:00
JustArchi
4102f59f5a Code cleanup 2021-03-16 11:07:45 +01:00
JustArchi
487cfbd733 Remove obsolete /Api/WWW/Send endpoint 2021-03-16 11:07:21 +01:00
GitHub Action
338c0ff48d Automatic translations update 2021-03-16 02:25:25 +00:00
dependabot-preview[bot]
876664d5fe Bump MSTest.TestAdapter from 2.2.1 to 2.2.2
Bumps [MSTest.TestAdapter](https://github.com/microsoft/testfx) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/microsoft/testfx/releases)
- [Commits](https://github.com/microsoft/testfx/compare/v2.2.1...v2.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 01:53:33 +00:00
dependabot-preview[bot]
e037ac885c Bump MSTest.TestFramework from 2.2.1 to 2.2.2
Bumps [MSTest.TestFramework](https://github.com/microsoft/testfx) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/microsoft/testfx/releases)
- [Commits](https://github.com/microsoft/testfx/compare/v2.2.1...v2.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 00:51:39 +00:00
dependabot-preview[bot]
34c990e5cf Bump ASF-ui from 65e470f to ced8737
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `65e470f` to `ced8737`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](65e470f3df...ced8737aa1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-16 00:35:23 +00:00
JustArchi
d1ea5755a4 Bump 2021-03-15 12:46:58 +01:00
JustArchi
47dcbb80f9 Misc 2021-03-15 12:46:08 +01:00
dependabot-preview[bot]
7ad5d63955 Bump ASF-ui from cd4fe97 to 65e470f
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `cd4fe97` to `65e470f`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](cd4fe9703f...65e470f3df)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-15 11:31:46 +00:00
GitHub Action
f60f3b313c Automatic translations update 2021-03-15 02:26:07 +00:00
JustArchi
52bc1b3845 Remove remaining tools
Originally NH2 and NHA2 were added to the repo in early days because I was too lazy to compile those myself and needed to work with them on daily basis.

Since SK2 provides up-to-date binaries now through their CIs, it clutters the repo for no good reason, as everybody who might want to make use of those tools (including me), can just download the official binaries directly.

No reason for this to stay in the repo, as it's not used for any deployment step.
2021-03-14 23:24:57 +01:00
JustArchi
b332e7b913 Correct remaining warnings 2021-03-14 14:33:26 +00:00
JustArchi
0bd8ff2d7d Correct some warnings 2021-03-14 14:33:26 +00:00
dependabot-preview[bot]
cfa8b61f31 Bump ConfigureAwaitChecker.Analyzer from 4.0.0 to 5.0.0
Bumps [ConfigureAwaitChecker.Analyzer](https://github.com/cincuranet/ConfigureAwaitChecker) from 4.0.0 to 5.0.0.
- [Release notes](https://github.com/cincuranet/ConfigureAwaitChecker/releases)
- [Commits](https://github.com/cincuranet/ConfigureAwaitChecker/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-14 14:33:26 +00:00
GitHub Action
6810e3324b Automatic translations update 2021-03-14 02:25:30 +00:00
GitHub Action
6d0583e15a Automatic translations update 2021-03-13 02:25:24 +00:00
dependabot-preview[bot]
888ce68963 Bump ASF-ui from c0dca96 to cd4fe97
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `c0dca96` to `cd4fe97`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](c0dca96cd7...cd4fe9703f)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-12 00:34:25 +00:00
dependabot-preview[bot]
0012e627c6 Bump ASF-ui from 3f23478 to c0dca96
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3f23478` to `c0dca96`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3f23478525...c0dca96cd7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-11 09:04:32 +00:00
GitHub Action
c60edf3c63 Automatic translations update 2021-03-11 02:23:46 +00:00
JustArchi
2ac3619885 Misc 2021-03-10 20:01:42 +01:00
dependabot-preview[bot]
79f3cdfb75 Bump ASF-ui from 477be73 to 3f23478
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `477be73` to `3f23478`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](477be733ad...3f23478525)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-10 00:34:32 +00:00
Sebastian Göls
69ac799ef6 Fix System.FormatException (#2228) 2021-03-09 18:49:56 +01:00
JustArchi
ee3d2cdd72 Bump 2021-03-09 10:05:29 +01:00
GitHub Action
ed802999cf Automatic translations update 2021-03-09 02:23:52 +00:00
dependabot-preview[bot]
08832816c6 Bump ASF-ui from 53f7672 to 477be73
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `53f7672` to `477be73`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](53f7672c6c...477be733ad)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-09 01:36:58 +00:00
JustArchi
a653aef04e Misc 2021-03-08 22:45:30 +01:00
JustArchi
0e29aaf20f Mark /Api/WWW/Send as obsolete 2021-03-08 22:33:26 +01:00
JustArchi
a4310d28f7 Add /Api/WWW/GitHub/Wiki/History endpoint 2021-03-08 22:27:03 +01:00
JustArchi
d7c7b3813e Misc 2021-03-08 21:48:27 +01:00
JustArchi
1f3a064dc0 Add /Api/WWW/GitHub/Wiki/Page endpoint 2021-03-08 21:46:12 +01:00
JustArchi
210e89be8e Remove /Api/WWW/Directory/{directory} endpoint
No longer used by ASF-ui
2021-03-08 20:13:29 +01:00
JustArchi
e83597db7a Misc 2021-03-08 20:04:07 +01:00
GitHub Action
dce96b9097 Automatic translations update 2021-03-08 02:28:39 +00:00
dependabot-preview[bot]
5b776dc2a0 Bump wiki from 861ead0 to fdd15a7
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `861ead0` to `fdd15a7`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](861ead0973...fdd15a71d7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-08 00:36:47 +00:00
GitHub Action
f33cd01667 Automatic translations update 2021-03-07 02:24:07 +00:00
JustArchi
9183421b0f Misc 2021-03-06 17:21:32 +01:00
dependabot-preview[bot]
6f6a9d06b5 Bump Swashbuckle.AspNetCore from 6.0.7 to 6.1.0
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.7 to 6.1.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.7...v6.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-06 10:36:45 +00:00
dependabot-preview[bot]
ffdaa87702 Bump Swashbuckle.AspNetCore.Newtonsoft from 6.0.7 to 6.1.0
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.7 to 6.1.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.7...v6.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-06 09:50:03 +00:00
dependabot-preview[bot]
e6e96cb2a6 Bump Swashbuckle.AspNetCore.Annotations from 6.0.7 to 6.1.0
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.7 to 6.1.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.7...v6.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-06 08:49:40 +00:00
GitHub Action
9cc29462a3 Automatic translations update 2021-03-06 02:21:33 +00:00
GitHub Action
61b8f83a40 Automatic translations update 2021-03-05 02:26:49 +00:00
JustArchi
998c9c47a0 Bump 2021-03-04 17:31:09 +01:00
dependabot-preview[bot]
65a1e80cf8 Bump ASF-ui from 3a4e282 to 53f7672
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3a4e282` to `53f7672`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3a4e282eb4...53f7672c6c)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-04 00:30:11 +00:00
Łukasz Domeradzki
2ef64b08f1 Don't apply TargetLatestRuntimePatch for generic variants (#2219)
* Publish generic packages without targetting latest patch

* Forgot about this one

* Fix screwup
2021-03-03 09:55:00 +01:00
GitHub Action
40b2312e0e Automatic translations update 2021-03-03 02:20:10 +00:00
dependabot-preview[bot]
9fd31406e5 Bump ASF-ui from d2e1a1d to 3a4e282
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `d2e1a1d` to `3a4e282`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](d2e1a1df6c...3a4e282eb4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-03 00:30:13 +00:00
JustArchi
4d67a44d82 Follow-up on SteamTarget rewrite
That went much smoother than I expected
2021-03-02 17:10:10 +01:00
GitHub Action
fe72d361e2 Automatic translations update 2021-03-02 02:10:47 +00:00
dependabot-preview[bot]
ff3d48340f Bump MSTest.TestFramework from 2.1.2 to 2.2.1
Bumps [MSTest.TestFramework](https://github.com/microsoft/testfx) from 2.1.2 to 2.2.1.
- [Release notes](https://github.com/microsoft/testfx/releases)
- [Commits](https://github.com/microsoft/testfx/compare/v2.1.2...v2.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 01:58:25 +00:00
dependabot-preview[bot]
42f09e0d81 Bump MSTest.TestAdapter from 2.1.2 to 2.2.1
Bumps [MSTest.TestAdapter](https://github.com/microsoft/testfx) from 2.1.2 to 2.2.1.
- [Release notes](https://github.com/microsoft/testfx/releases)
- [Commits](https://github.com/microsoft/testfx/compare/v2.1.2...v2.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 00:55:05 +00:00
dependabot-preview[bot]
ea773cb4d1 Bump ASF-ui from 71aa004 to d2e1a1d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `71aa004` to `d2e1a1d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](71aa00463a...d2e1a1df6c)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-02 00:38:50 +00:00
JustArchi
137f46ec3b SteamTarget: Add back the required logic 2021-03-02 00:26:12 +01:00
JustArchi
6d853c7379 SteamTarget: Report Write() progress properly
Okay so this is a nasty one. If somebody has configured SteamTarget to notify about e.g. ASF crash, our LogManager.Flush() will NOT wait for that message to be sent before returning, as the Write() operation will return the moment it hits any async operation, at the very latest, the operation to write to a socket.

Our expectation is that we want to send that message (emptying our logging queue) before actually shutting down the process, and for that we need that Write() operation to block until the request is actually sent.

This is a quick fix for that while a pending rewrite for AsyncTaskTarget is in order - https://github.com/NLog/NLog/wiki/How-to-write-a-custom-async-target
2021-03-02 00:16:46 +01:00
JustArchi
c688942a23 Bump 2021-03-02 00:01:40 +01:00
GitHub Action
45e500069e Automatic translations update 2021-03-01 02:22:32 +00:00
dependabot-preview[bot]
f93f3f177d Bump wiki from 4cf1ba6 to b50199e
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `4cf1ba6` to `b50199e`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](4cf1ba6dd4...b50199ed92)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 01:57:05 +00:00
dependabot-preview[bot]
5120027a66 Bump ASF-ui from 122d5d0 to 71aa004
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `122d5d0` to `71aa004`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](122d5d09c0...71aa00463a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-03-01 01:41:56 +00:00
JustArchi
bb8430c056 Misc: Include OS architecture in variant 2021-03-01 00:19:26 +01:00
GitHub Action
989b2c4772 Automatic translations update 2021-02-28 02:20:56 +00:00
dependabot-preview[bot]
1f6e2e00bd Bump NLog.Web.AspNetCore from 4.10.0 to 4.11.0
Bumps [NLog.Web.AspNetCore](https://github.com/NLog/NLog.Web) from 4.10.0 to 4.11.0.
- [Release notes](https://github.com/NLog/NLog.Web/releases)
- [Changelog](https://github.com/NLog/NLog.Web/blob/master/CHANGELOG.MD)
- [Commits](https://github.com/NLog/NLog.Web/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-27 16:50:23 +00:00
JustArchi
7b2e804a62 Bump 2021-02-27 14:01:06 +01:00
Vitaliya
c34812e4bc Fix RandomNext behaviour (#2212) 2021-02-27 13:49:29 +01:00
GitHub Action
45b1454fde Automatic translations update 2021-02-27 02:17:54 +00:00
JustArchi
9d9a8af94f Delete auto-merge.yml.off 2021-02-27 02:07:43 +01:00
JustArchi
b2336504a3 Misc 2021-02-27 02:05:40 +01:00
GitHub Action
b19c9048bf Automatic translations update 2021-02-26 02:18:22 +00:00
dependabot-preview[bot]
5ba3b7d81e Bump ASF-ui from daad283 to 122d5d0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `daad283` to `122d5d0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](daad283e39...122d5d09c0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-26 01:30:59 +00:00
dependabot-preview[bot]
0e48280d29 Bump NLog from 4.7.7 to 4.7.8
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.7 to 4.7.8.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-26 00:26:33 +00:00
GitHub Action
15f784e1d5 Automatic translations update 2021-02-25 02:17:08 +00:00
dependabot-preview[bot]
b6b0bb192e Bump ASF-ui from 97e68d1 to daad283
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `97e68d1` to `daad283`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](97e68d15d2...daad283e39)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-25 01:49:21 +00:00
dependabot-preview[bot]
fc9cb55d51 Bump wiki from 0fbb433 to a462eb8
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `0fbb433` to `a462eb8`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](0fbb433617...a462eb8a70)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-25 01:33:48 +00:00
GitHub Action
2c7204c3ae Automatic translations update 2021-02-24 02:18:03 +00:00
dependabot-preview[bot]
68981e0ee9 Bump ASF-ui from 83eb492 to 97e68d1
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `83eb492` to `97e68d1`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](83eb49278e...97e68d15d2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-24 01:34:33 +00:00
dependabot-preview[bot]
b273fcd2e8 Bump Microsoft.NET.Test.Sdk from 16.8.3 to 16.9.1
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.8.3 to 16.9.1.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](https://github.com/microsoft/vstest/compare/v16.8.3...v16.9.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-23 14:19:47 +00:00
GitHub Action
19fbd1b919 Automatic translations update 2021-02-23 02:16:54 +00:00
dependabot-preview[bot]
9d7c78b609 Bump ASF-ui from 65b0c40 to 83eb492
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `65b0c40` to `83eb492`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](65b0c4074d...83eb49278e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-23 01:49:51 +00:00
dependabot-preview[bot]
8376be250c Bump wiki from 0b1fcbb to 8dfaaa7
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `0b1fcbb` to `8dfaaa7`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](0b1fcbb7e0...8dfaaa744e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-23 01:34:14 +00:00
JustArchi
bfc48425d3 CI: check-latest for node 2021-02-22 19:05:34 +01:00
JustArchi
f9775fd17b CI: Update crowdin and setup-node 2021-02-22 18:57:36 +01:00
JustArchi
16c03d85c9 CI: Use node.js 14 (LTS) 2021-02-22 18:48:21 +01:00
JustArchi
b98974a482 STD: Misc 2021-02-22 18:25:29 +01:00
JustArchi
e0062449db Bump 2021-02-22 18:18:13 +01:00
JustArchi
9b362cb08f Fix warning 2021-02-22 18:09:48 +01:00
JustArchi
e836cb66e4 STD: Make data field in response optional
Data field is not included in case of non-200 status codes.
2021-02-22 17:56:03 +01:00
JustArchi
34fbb9f86d CI: Remove travis
Travis introduced OSS credits a while ago, which artificially limit the OSS development by putting a pressure on how much time we can take for a build. While I can understand this decision, considering they're providing the service for free, there is no longer any reason for us to keep using it, due to heavy maintenance burden and pressure, something we really don't need considering other CIs (especially GitHub actions) do not have such limitations.

This is on top of other issues, which make Travis one of the most problematic CIs that I've ever tried to use.
2021-02-22 16:37:17 +01:00
JustArchi
4054e60592 CI: Use latest SDK version 2021-02-22 16:20:54 +01:00
GitHub Action
3acaa530b4 Automatic translations update 2021-02-22 02:17:30 +00:00
dependabot-preview[bot]
e7617fec5c Bump wiki from 45eb4f0 to 55e800c
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `45eb4f0` to `55e800c`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](45eb4f008f...55e800c878)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-22 02:02:58 +00:00
dependabot-preview[bot]
904fe2c53f Bump ASF-ui from 2b28a24 to 65b0c40
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `2b28a24` to `65b0c40`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](2b28a24470...65b0c4074d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-22 01:47:51 +00:00
GitHub Action
887049bf4a Automatic translations update 2021-02-21 02:17:02 +00:00
JustArchi
835611547f Mist optimization
No need to initialize assetIDs if inventory is empty. Also we know exact amount of items this way.
2021-02-20 23:49:05 +01:00
JustArchi
e87ef9498a Misc 2021-02-20 23:40:24 +01:00
JustArchi
29d1f9ff7a Misc code improvements 2021-02-20 23:38:48 +01:00
JustArchi
26cab42476 Misc
No point in refreshing all of the packages, just the packages we already know about.

In 99.9% cases it'll be exactly the same data anyway.
2021-02-20 17:29:13 +01:00
GitHub Action
6acd516a36 Automatic translations update 2021-02-20 02:14:55 +00:00
GitHub Action
302d59ecdd Automatic translations update 2021-02-19 02:15:25 +00:00
dependabot-preview[bot]
fdef8e8326 Bump ASF-ui from 6c110b8 to 2b28a24
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `6c110b8` to `2b28a24`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](6c110b8e16...2b28a24470)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-19 01:32:25 +00:00
GitHub Action
bee1731f13 Automatic translations update 2021-02-18 02:15:07 +00:00
JustArchi
7f7a0030b9 Bump 2021-02-17 09:43:33 +01:00
JustArchi
6f3a3fe06b Misc fix 2021-02-17 09:43:00 +01:00
GitHub Action
2b55393dd6 Automatic translations update 2021-02-17 02:13:09 +00:00
dependabot-preview[bot]
52f45998d0 Bump wiki from e899c68 to 21bfd17
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `e899c68` to `21bfd17`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](e899c6831e...21bfd17ed1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-17 01:34:33 +00:00
dependabot-preview[bot]
9580eb5155 Bump Swashbuckle.AspNetCore.Newtonsoft from 6.0.6 to 6.0.7
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.6 to 6.0.7.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.6...v6.0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-17 00:47:46 +00:00
dependabot-preview[bot]
16cef4ccbe Bump Swashbuckle.AspNetCore.Annotations from 6.0.6 to 6.0.7
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.6 to 6.0.7.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.6...v6.0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-17 00:00:07 +00:00
dependabot-preview[bot]
646050f8a3 Bump Swashbuckle.AspNetCore from 6.0.6 to 6.0.7
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.6 to 6.0.7.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.6...v6.0.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-16 22:59:12 +00:00
dependabot-preview[bot]
f32fb2c094 Bump Swashbuckle.AspNetCore.Annotations from 6.0.5 to 6.0.6
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.5 to 6.0.6.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.5...v6.0.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-16 21:52:47 +00:00
dependabot-preview[bot]
82310b2cbf Bump Swashbuckle.AspNetCore.Newtonsoft from 6.0.5 to 6.0.6
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.5 to 6.0.6.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.5...v6.0.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-16 21:06:02 +00:00
dependabot-preview[bot]
6b68969357 Bump Swashbuckle.AspNetCore from 6.0.5 to 6.0.6
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.5 to 6.0.6.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.5...v6.0.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-16 20:02:37 +00:00
JustArchi
c18e94714e Bump 2021-02-16 20:02:28 +01:00
Vitaliya
7289f3bae4 Add blacklisting of AppIDs for MatchActively (#2183)
* Add blacklisting of AppIDs for MatchActively

* Add serialization and modification event
2021-02-16 19:30:16 +01:00
JustArchi
61873cfd72 Avoid complete purge on each PICS restart
There is no easy way for us to retrieve access tokens again without a full relog procedure, and those are needed for refresh of packages, which should also be optional due to excessive amount of PICS restarts emitted by Steam.

At worst, we'll just have outdated data until a full relog procedure, as opposed to having no data at all until relog procedure...
2021-02-16 19:27:00 +01:00
JustArchi
9c8fe06bfe Bump 2021-02-16 19:24:21 +01:00
JustArchi
47a90042a2 Misc 2021-02-16 09:27:15 +01:00
JustArchi
e56fb73997 Misc 2021-02-16 09:27:10 +01:00
GitHub Action
9ff55b69b3 Automatic translations update 2021-02-16 02:15:39 +00:00
dependabot-preview[bot]
023b159c32 Bump ASF-ui from c01f990 to 6c110b8
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `c01f990` to `6c110b8`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](c01f9900f5...6c110b8e16)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-16 01:30:55 +00:00
dependabot-preview[bot]
42f0692d8c Bump ASF-ui from 7869ac6 to c01f990
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7869ac6` to `c01f990`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7869ac68fe...c01f9900f5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-15 01:43:49 +00:00
dependabot-preview[bot]
1c13b89e6f Bump Swashbuckle.AspNetCore.Newtonsoft from 6.0.4 to 6.0.5
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.4 to 6.0.5.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.4...v6.0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-13 18:00:17 +00:00
dependabot-preview[bot]
7c5bf81e24 Bump Swashbuckle.AspNetCore.Annotations from 6.0.4 to 6.0.5
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.4 to 6.0.5.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.4...v6.0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-13 13:39:36 +00:00
dependabot-preview[bot]
52547ee3d9 Bump Swashbuckle.AspNetCore from 6.0.4 to 6.0.5
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.4 to 6.0.5.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.4...v6.0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-13 12:40:00 +00:00
GitHub Action
74d5ddaba7 Automatic translations update 2021-02-12 02:14:50 +00:00
dependabot-preview[bot]
29c8f408b5 Bump ASF-ui from a5989bc to 7869ac6
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `a5989bc` to `7869ac6`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](a5989bcc1c...7869ac68fe)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-12 01:31:19 +00:00
GitHub Action
0697e49011 Automatic translations update 2021-02-11 02:14:30 +00:00
dependabot-preview[bot]
dff6a8aca2 Bump ASF-ui from 7040199 to a5989bc
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7040199` to `a5989bc`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7040199856...a5989bcc1c)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-11 01:31:14 +00:00
dependabot-preview[bot]
f9bd230ca2 Bump Swashbuckle.AspNetCore from 6.0.3 to 6.0.4
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.3 to 6.0.4.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.3...v6.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-11 00:04:47 +00:00
dependabot-preview[bot]
b4a0ecdcff Bump Swashbuckle.AspNetCore.Annotations from 6.0.3 to 6.0.4
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.3 to 6.0.4.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.3...v6.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-10 23:16:02 +00:00
dependabot-preview[bot]
32429ab687 Bump Swashbuckle.AspNetCore.Newtonsoft from 6.0.3 to 6.0.4
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.3 to 6.0.4.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.3...v6.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-10 22:13:03 +00:00
dependabot-preview[bot]
fd343c56d5 Bump Swashbuckle.AspNetCore.Annotations from 6.0.2 to 6.0.3
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.2...v6.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-10 16:52:11 +00:00
dependabot-preview[bot]
fe7cd72f13 Bump Swashbuckle.AspNetCore.Newtonsoft from 6.0.2 to 6.0.3
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.2...v6.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-10 16:02:19 +00:00
dependabot-preview[bot]
fcd3a469bc Bump Swashbuckle.AspNetCore from 6.0.2 to 6.0.3
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.2...v6.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-10 14:56:24 +00:00
GitHub Action
4388fb7dcf Automatic translations update 2021-02-10 02:10:53 +00:00
dependabot-preview[bot]
45b87a1272 Bump ASF-ui from 3b3eaca to 7040199
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3b3eaca` to `7040199`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3b3eaca810...7040199856)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-10 01:39:32 +00:00
JustArchi
713d725e03 Bump 2021-02-09 18:02:25 +01:00
JustArchi
be2f59ef88 Misc 2021-02-09 17:48:24 +01:00
GitHub Action
e2444d93cf Automatic translations update 2021-02-09 02:13:52 +00:00
dependabot-preview[bot]
f80cab3fc6 Bump ASF-ui from ad75c7b to 3b3eaca
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `ad75c7b` to `3b3eaca`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](ad75c7b5c2...3b3eaca810)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-09 01:32:22 +00:00
dependabot-preview[bot]
f491a6a9af Bump ASF-ui from 64a6750 to ad75c7b
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `64a6750` to `ad75c7b`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](64a67506ed...ad75c7b5c2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-08 02:18:02 +00:00
dependabot-preview[bot]
074f199ee9 Bump Swashbuckle.AspNetCore from 6.0.1 to 6.0.2
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.1...v6.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-08 02:02:11 +00:00
dependabot-preview[bot]
69b5488f54 Bump Swashbuckle.AspNetCore.Newtonsoft from 6.0.1 to 6.0.2
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.1...v6.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-08 01:14:41 +00:00
dependabot-preview[bot]
d15b911fd9 Bump Swashbuckle.AspNetCore.Annotations from 6.0.1 to 6.0.2
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.1...v6.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-08 00:12:27 +00:00
GitHub Action
5aa345df57 Automatic translations update 2021-02-07 02:14:47 +00:00
dependabot-preview[bot]
2fa0cf041b Bump Swashbuckle.AspNetCore.Newtonsoft from 5.6.3 to 6.0.1
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.3 to 6.0.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.3...v6.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-06 17:13:50 +00:00
dependabot-preview[bot]
9d15bb1355 Bump Swashbuckle.AspNetCore from 5.6.3 to 6.0.1
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.3 to 6.0.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.3...v6.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-06 16:27:09 +00:00
dependabot-preview[bot]
f23cde93e0 Bump Swashbuckle.AspNetCore.Annotations from 6.0.0 to 6.0.1
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.0.0...v6.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-06 13:28:26 +00:00
dependabot-preview[bot]
05e0885362 Bump Swashbuckle.AspNetCore.Annotations from 5.6.3 to 6.0.0
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.3 to 6.0.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.3...v6.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-06 12:20:41 +00:00
GitHub Action
b613a561f5 Automatic translations update 2021-02-06 02:13:33 +00:00
GitHub Action
3ed79cae84 Automatic translations update 2021-02-05 02:14:49 +00:00
dependabot-preview[bot]
6e4e6cebd8 Bump ASF-ui from 2ff0ff2 to 64a6750
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `2ff0ff2` to `64a6750`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](2ff0ff25b5...64a67506ed)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-05 01:31:44 +00:00
GitHub Action
2a5754305e Automatic translations update 2021-02-04 02:15:00 +00:00
dependabot-preview[bot]
65dfc08b95 Bump ASF-ui from 5b2e827 to 2ff0ff2
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `5b2e827` to `2ff0ff2`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](5b2e82771a...2ff0ff25b5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-04 01:32:08 +00:00
GitHub Action
f96e142042 Automatic translations update 2021-02-03 02:25:28 +00:00
Luckz
6c4763db47 Minor English grammar improvements (Strings.resx) (#2151)
No changes to the meaning.
2021-02-02 09:05:59 +01:00
GitHub Action
8366f6c8da Automatic translations update 2021-02-02 02:31:32 +00:00
dependabot-preview[bot]
5f21702592 Bump ASF-ui from e8e2085 to 5b2e827
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e8e2085` to `5b2e827`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e8e20859fd...5b2e82771a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-02 01:31:49 +00:00
GitHub Action
28401d668f Automatic translations update 2021-02-01 02:33:11 +00:00
dependabot-preview[bot]
e95f29b42c Bump ASF-ui from e23ac6f to e8e2085
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e23ac6f` to `e8e2085`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e23ac6f96d...e8e20859fd)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-01 01:38:41 +00:00
JustArchi
b4ebd3e0f5 Bump 2021-01-31 13:19:49 +01:00
JustArchi
4d9b214735 Misc 2021-01-31 13:19:17 +01:00
GitHub Action
2732fdfcff Automatic translations update 2021-01-31 02:31:50 +00:00
GitHub Action
de7d7f857e Automatic translations update 2021-01-30 02:29:43 +00:00
dependabot-preview[bot]
384b6ad329 Bump ASF-ui from 4bfc9ea to e23ac6f
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `4bfc9ea` to `e23ac6f`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](4bfc9eaafb...e23ac6f96d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-27 01:31:33 +00:00
JustArchi
2e0cc7ce87 Change HoursToIgnore to 1 2021-01-26 11:56:10 +01:00
JustArchi
ce4984f8dc Update issue templates 2021-01-26 09:58:10 +01:00
GitHub Action
899fb93e4b Automatic translations update 2021-01-26 02:28:48 +00:00
dependabot-preview[bot]
1d7809a93a Bump ASF-ui from 98c9140 to 4bfc9ea
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `98c9140` to `4bfc9ea`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](98c9140b0c...4bfc9eaafb)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-26 01:32:51 +00:00
dependabot-preview[bot]
3adf1db1d0 Bump ASF-ui from 13e2902 to 98c9140
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `13e2902` to `98c9140`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](13e2902e58...98c9140b0c)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-25 01:37:08 +00:00
GitHub Action
924ff86bdc Automatic translations update 2021-01-24 03:08:06 +00:00
GitHub Action
5520d75b54 Automatic translations update 2021-01-23 03:05:28 +00:00
JustArchi
05973a65c1 Bump 2021-01-22 16:00:45 +01:00
GitHub Action
58ddf450c7 Automatic translations update 2021-01-22 03:06:35 +00:00
dependabot-preview[bot]
349a1912d4 Bump ASF-ui from ee70bfa to 13e2902
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `ee70bfa` to `13e2902`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](ee70bfa817...13e2902e58)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-22 01:33:23 +00:00
GitHub Action
89939e76fa Automatic translations update 2021-01-21 03:07:20 +00:00
dependabot-preview[bot]
bd8f753ea5 Bump wiki from 4401eb5 to 93f3f70
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `4401eb5` to `93f3f70`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](4401eb5b0b...93f3f70f99)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-21 01:47:56 +00:00
dependabot-preview[bot]
c92718e73f Bump ASF-ui from 0a1d9ea to ee70bfa
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `0a1d9ea` to `ee70bfa`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](0a1d9ea72c...ee70bfa817)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-21 01:32:19 +00:00
dependabot-preview[bot]
403993e5a6 Bump NLog from 4.7.6 to 4.7.7
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.6 to 4.7.7.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-20 23:50:09 +00:00
JustArchi
f0c3b0bfa9 Update README.md 2021-01-20 21:28:38 +01:00
JustArchi
00bc2daeac Correct wiki to follow master
Impossible to change for now
2021-01-20 21:26:55 +01:00
JustArchi
01bc30e49c master -> main 2021-01-20 21:14:45 +01:00
GitHub Action
724cc8f6d4 Automatic translations update 2021-01-20 03:07:59 +00:00
dependabot-preview[bot]
e3436d6935 Bump ASF-ui from 8990971 to 0a1d9ea
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `8990971` to `0a1d9ea`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](899097182e...0a1d9ea72c)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-20 01:45:50 +00:00
dependabot-preview[bot]
641eee88e5 Bump wiki from 6983d3a to ce6bfda
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `6983d3a` to `ce6bfda`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](6983d3a6cf...ce6bfda0c1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-20 01:32:41 +00:00
JustArchi
b6a2bcd89e Misc 2021-01-19 23:21:53 +01:00
GitHub Action
fb0eb9aec4 Automatic translations update 2021-01-19 03:05:44 +00:00
dependabot-preview[bot]
0eb5a4de82 Bump wiki from 6d4459e to 8e86108
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `6d4459e` to `8e86108`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](6d4459e881...8e86108ab4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-19 01:32:04 +00:00
Sebastian Göls
b8fe02e2b6 Limit full set trades (#2133)
* Limit items to send when looting full sets

* Add test for item limit when looting full sets

* Fix small mistakes

* Change another type to byte

* And another one

* Add test to verify that the amount of appIDs does not matter in limiting the amount of items

* Add maxItems parameter to GetFullItemSets

* Test for exception with too small parameter value

* Let's get the finishing touches on that PR :'<,'>s/byte/ushort/g

* Use named const instead of hard-coded magic number

* Fix the last remaining typecast (hopefully)

* Send as many sets as possible and Add test for this and Check values of amountsToExtract as it is part of the public API

* Remove check for minimum items per set. Plugins could still use this with smaller sets on non-steam items

* Correct force of habit to match the projects code-style
2021-01-18 14:58:25 +01:00
GitHub Action
434ea8096b Automatic translations update 2021-01-18 03:03:26 +00:00
dependabot-preview[bot]
5e85ca7e5a Bump ASF-ui from 6b6f9dc to 8990971
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `6b6f9dc` to `8990971`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](6b6f9dcef7...899097182e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-18 01:38:07 +00:00
GitHub Action
cc175b9847 Automatic translations update 2021-01-17 03:04:18 +00:00
dependabot-preview[bot]
945e94dd80 Bump Markdig.Signed from 0.22.1 to 0.23.0
Bumps [Markdig.Signed](https://github.com/xoofx/markdig) from 0.22.1 to 0.23.0.
- [Release notes](https://github.com/xoofx/markdig/releases)
- [Changelog](https://github.com/xoofx/markdig/blob/master/changelog.md)
- [Commits](https://github.com/xoofx/markdig/compare/0.22.1...0.23.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-16 12:39:35 +00:00
GitHub Action
447850f2ed Automatic translations update 2021-01-16 03:03:20 +00:00
GitHub Action
c3fbd60564 Automatic translations update 2021-01-15 03:02:45 +00:00
dependabot-preview[bot]
795c3d914e Bump ASF-ui from b527871 to 6b6f9dc
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b527871` to `6b6f9dc`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b5278714b6...6b6f9dcef7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-15 01:32:39 +00:00
JustArchi
fc16e7b29a Misc 2021-01-14 20:05:43 +01:00
JustArchi
00fba90928 Misc STD enhancements in cc.sh 2021-01-14 11:03:42 +01:00
JustArchi
24d82503ff Closes #2129 2021-01-14 10:54:15 +01:00
GitHub Action
4b76d6875b Automatic translations update 2021-01-14 03:06:01 +00:00
dependabot-preview[bot]
222c26bcc5 Bump ASF-ui from 3f9913d to b527871
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3f9913d` to `b527871`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3f9913da01...b5278714b6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-14 01:34:34 +00:00
dependabot-preview[bot]
d03209c98f Bump ASF-ui from 718bc6e to 3f9913d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `718bc6e` to `3f9913d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](718bc6efcf...3f9913da01)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-13 01:47:59 +00:00
dependabot-preview[bot]
56091070e8 Bump System.Composition from 5.0.0 to 5.0.1
Bumps [System.Composition](https://github.com/dotnet/runtime) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/dotnet/runtime/releases)
- [Commits](https://github.com/dotnet/runtime/compare/v5.0.0...v5.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-13 01:32:15 +00:00
GitHub Action
323258b5cb Automatic translations update 2021-01-12 02:58:38 +00:00
dependabot-preview[bot]
2df7afded1 Bump ASF-ui from e0032a9 to 718bc6e
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e0032a9` to `718bc6e`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e0032a97a1...718bc6efcf)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-12 01:31:13 +00:00
GitHub Action
c6f5a8d252 Automatic translations update 2021-01-11 02:55:43 +00:00
dependabot-preview[bot]
a1d68d0827 Bump ASF-ui from 39743c7 to e0032a9
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `39743c7` to `e0032a9`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](39743c7455...e0032a97a1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-11 01:37:18 +00:00
JustArchi
253d8bf269 NH2 Update 2021-01-10 21:28:01 +01:00
JustArchi
8c702a4d2d Misc 2021-01-10 21:27:52 +01:00
GitHub Action
95a55e9c47 Automatic translations update 2021-01-10 02:55:34 +00:00
GitHub Action
b2988e4829 Automatic translations update 2021-01-09 02:51:31 +00:00
GitHub Action
ba870d07b9 Automatic translations update 2021-01-08 02:51:16 +00:00
dependabot-preview[bot]
9efe6ceb9a Bump wiki from 6aa24aa to eceef9c
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `6aa24aa` to `eceef9c`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](6aa24aa3a5...eceef9c295)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-08 01:50:28 +00:00
dependabot-preview[bot]
51a809d95d Bump ASF-ui from 546a0cb to 39743c7
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `546a0cb` to `39743c7`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](546a0cbf2b...39743c7455)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-08 01:34:53 +00:00
GitHub Action
ddd7a0403e Automatic translations update 2021-01-07 02:50:55 +00:00
dependabot-preview[bot]
9d619ee269 Bump ASF-ui from be5c4c3 to 546a0cb
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `be5c4c3` to `546a0cb`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](be5c4c35a6...546a0cbf2b)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-07 01:50:52 +00:00
dependabot-preview[bot]
cc1272026f Bump wiki from 0eed60b to 280330e
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `0eed60b` to `280330e`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](0eed60bd0a...280330e85e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-07 01:33:37 +00:00
JustArchi
432b18acd7 Bump 2021-01-06 22:30:48 +01:00
JustArchi
e00e615b02 Misc 2021-01-06 20:43:51 +01:00
JustArchi
3b9a63d9bf Bump 2021-01-06 18:54:41 +01:00
JustArchi
08f35dd6e3 Misc 2021-01-06 17:14:06 +01:00
GitHub Action
83dcbc48db Automatic translations update 2021-01-06 02:47:44 +00:00
dependabot-preview[bot]
b3deaaec27 Bump wiki from 3d1dd61 to b20557a
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `3d1dd61` to `b20557a`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](3d1dd61f4d...b20557aeaf)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-06 01:32:22 +00:00
JustArchi
8a9f25edcb Bump 2021-01-05 11:34:51 +01:00
GitHub Action
ff67231514 Automatic translations update 2021-01-05 02:46:49 +00:00
dependabot-preview[bot]
fc7f0571f9 Bump ASF-ui from ab7aaf0 to be5c4c3
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `ab7aaf0` to `be5c4c3`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](ab7aaf0cd3...be5c4c35a6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-05 02:00:00 +00:00
JustArchi
400b19d190 Further remove restrictions 2021-01-04 17:59:59 +01:00
JustArchi
4700ed2706 Further code cleanup 2021-01-04 17:42:31 +01:00
JustArchi
3d39583fa2 Misc 2021-01-04 15:40:35 +01:00
JustArchi
e45f06debf Misc 2021-01-04 15:32:28 +01:00
JustArchi
9eebd2e6e8 Always provide content to StreamResponse
A failed request that returned object will have empty stream at worst, but never null. That stream is required in userspace for working with.
2021-01-04 15:29:47 +01:00
JustArchi
0b74f65c3b Misc 2021-01-04 15:06:34 +01:00
GitHub Action
0c199b10f8 Automatic translations update 2021-01-04 02:46:22 +00:00
dependabot-preview[bot]
1509591a50 Bump ASF-ui from c2cea77 to ab7aaf0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `c2cea77` to `ab7aaf0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](c2cea77e0c...ab7aaf0cd3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-04 01:53:53 +00:00
dependabot-preview[bot]
55c856755a Bump wiki from 3370a17 to 27b0f64
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `3370a17` to `27b0f64`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](3370a179ee...27b0f64b96)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-04 01:38:33 +00:00
JustArchi
3756a62eac Misc 2021-01-04 00:58:52 +01:00
JustArchi
aa372d020b Misc 2021-01-04 00:56:27 +01:00
JustArchi
df527b03e0 Closes #2116 2021-01-04 00:26:05 +01:00
JustArchi
74ff715a62 Misc rework of change number delay 2021-01-04 00:15:29 +01:00
JustArchi
a9ccc27f81 Add a delay in initial resolve
This will avoid unnecessary purge in the first run and missing packages
2021-01-03 23:36:28 +01:00
JustArchi
71b023c16d Save LastChangeNumber also on normal update 2021-01-03 22:55:17 +01:00
JustArchi
45a5fec95a Happy 2021
And let's hope it'll be better than 2020
2021-01-03 22:24:22 +01:00
JustArchi
32a8f4bed4 Misc optimization
If we're starting from 0, pointless to ask plugins what they prefer.
2021-01-03 22:12:17 +01:00
JustArchi
e2c7671f00 STD: Perform Save() of GlobalCache in background
We don't need to slow down the process with I/O there, at all. ASF already handles its own database like that.
2021-01-03 22:02:24 +01:00
JustArchi
cc1eb6bee2 Start saving LastChangeNumber in GlobalDatabase
Due to the fact that we're now dependent on PICS changes ourselves, we have to start saving our own LastChangeNumber in order to avoid invalidating cache every time.
2021-01-03 21:58:41 +01:00
JustArchi
273a6b0fbe Invalidate cache upon pics changes
PICS restart indicates that we don't know what changes exactly we've missed. If package doesn't emit any change number (and it doesn't have to), we might miss the update that happened in the meantime without being aware of that happening.
2021-01-03 21:37:16 +01:00
JustArchi
c7547e3b40 Add branch to translations 2021-01-03 11:36:02 +01:00
JustArchi
71f3dd5e5c Add opencontainers labels to docker images 2021-01-02 18:33:16 +01:00
JustArchi
bf21280cf7 Add IMAGESUFFIX to dockerfiles 2021-01-02 17:03:11 +01:00
JustArchi
4ff038f62f Update README.md 2021-01-02 16:04:01 +01:00
JustArchi
d15dcb337f Update README.md 2021-01-02 16:01:43 +01:00
JustArchi
a847585450 Misc 2021-01-02 15:47:30 +01:00
JustArchi
346b7d5182 Bump 2021-01-02 15:39:59 +01:00
JustArchi
d6de2bf7b9 Fix released docker builds 2021-01-02 15:38:36 +01:00
JustArchi
fd3837beba Bump 2021-01-02 15:37:28 +01:00
JustArchi
9b31e334b2 Misc 2021-01-02 15:13:33 +01:00
JustArchi
a27b08e563 Switch to DOCKERHUB_PASSWORD for solving the upload error, and make the step optional 2021-01-02 15:03:53 +01:00
JustArchi
46891d6be2 Add checkout code action to make DH readme updates possible 2021-01-02 14:56:27 +01:00
Łukasz Domeradzki
e5efb86bd2 CI updates related to Docker containers (#2112)
* Initial commit trying to get ghcr running

* Move to v2

* Add lowercasing

* Replace docker hub worker

* Update

* Attempt to solve .net limitations

* Correct platforms

* Update docker-publish-master.yml

* Add remaining docker tags

* Add automatic DockerHub repo description update
2021-01-02 14:49:03 +01:00
JustArchi
08ff0ac7e5 Degrade Microsoft.Extensions libraries for mono support 2021-01-02 14:05:57 +01:00
GitHub Action
fef9582f52 Automatic translations update 2021-01-02 02:40:05 +00:00
JustArchi
0c727603a2 Add --no-config-watch command-line argument 2021-01-02 01:33:31 +01:00
JustArchi
454e69b144 Misc 2021-01-01 15:57:19 +01:00
GitHub Action
c4d6bb26a6 Automatic translations update 2021-01-01 02:42:48 +00:00
dependabot-preview[bot]
a054a9dbf0 Bump ASF-ui from 0ef3e52 to c2cea77
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `0ef3e52` to `c2cea77`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](0ef3e5229a...c2cea77e0c)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-01 01:46:29 +00:00
dependabot-preview[bot]
a43fd5f48d Bump wiki from 654856f to 1ecf869
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `654856f` to `1ecf869`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](654856feee...1ecf869a7d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-01 01:31:47 +00:00
JustArchi
541d5aac0d Closes #2109 2020-12-31 18:30:11 +01:00
GitHub Action
4962076089 Automatic translations update 2020-12-31 02:41:09 +00:00
dependabot-preview[bot]
c543941320 Bump ASF-ui from b893e78 to 0ef3e52
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b893e78` to `0ef3e52`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b893e78e90...0ef3e5229a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-31 01:32:21 +00:00
JustArchi
34a355f0ea Misc 2020-12-31 01:00:26 +01:00
JustArchi
eb14d75430 Add result to the logged friend invite 2020-12-31 00:59:18 +01:00
JustArchi
a81ba225c2 Merge branch 'master' of https://github.com/JustArchiNET/ArchiSteamFarm 2020-12-30 21:35:05 +01:00
JustArchi
2cddf69322 Misc 2020-12-30 21:34:56 +01:00
dependabot-preview[bot]
b361b287cd Bump NLog.Web.AspNetCore from 4.9.3 to 4.10.0
Bumps [NLog.Web.AspNetCore](https://github.com/NLog/NLog.Web) from 4.9.3 to 4.10.0.
- [Release notes](https://github.com/NLog/NLog.Web/releases)
- [Changelog](https://github.com/NLog/NLog.Web/blob/master/CHANGELOG.MD)
- [Commits](https://github.com/NLog/NLog.Web/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-30 20:33:18 +00:00
GitHub Action
d229ef90ff Automatic translations update 2020-12-30 02:38:25 +00:00
dependabot-preview[bot]
565c6300cf Bump ASF-ui from eac6b26 to b893e78
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `eac6b26` to `b893e78`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](eac6b266c2...b893e78e90)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-30 01:31:36 +00:00
GitHub Action
5f551f58dc Automatic translations update 2020-12-29 02:38:04 +00:00
dependabot-preview[bot]
b4d1925e45 Bump ASF-ui from b9bf013 to eac6b26
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b9bf013` to `eac6b26`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b9bf013235...eac6b266c2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-29 01:33:12 +00:00
GitHub Action
b0e18edc9a Automatic translations update 2020-12-28 02:37:09 +00:00
dependabot-preview[bot]
26de0e1a59 Bump ASF-ui from 959f573 to b9bf013
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `959f573` to `b9bf013`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](959f5739e0...b9bf013235)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-28 01:43:11 +00:00
GitHub Action
1ddf3c6f02 Automatic translations update 2020-12-27 02:36:05 +00:00
GitHub Action
0e4b6ab807 Automatic translations update 2020-12-26 02:34:39 +00:00
JustArchi
cb5f2a27cc Misc 2020-12-25 23:12:42 +01:00
GitHub Action
fe9b3b2bc0 Automatic translations update 2020-12-25 02:35:14 +00:00
dependabot-preview[bot]
88ac54ae1a Bump wiki from 273a6ef to a9a6fca
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `273a6ef` to `a9a6fca`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](273a6ef1e3...a9a6fca988)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-25 01:50:26 +00:00
dependabot-preview[bot]
21eee5adec Bump ASF-ui from f9f42c5 to 959f573
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `f9f42c5` to `959f573`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](f9f42c54c4...959f5739e0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-25 01:34:48 +00:00
JustArchi
ff36cd4733 Always save global database if doesn't exist
Bot database doesn't have any crucial info to save, but global database is used at least with its ASF identifier (that we don't really want to regenerate) as well as for first run detection.
2020-12-24 21:30:16 +01:00
JustArchi
32bd163416 Replace Bitcoin donate with Crypto donate 2020-12-24 21:14:48 +01:00
JustArchi
b320a3e95e Bump 2020-12-24 20:23:15 +01:00
Vitaliy
5a44403cf0 Add check for appIDs after intersection (#2099) 2020-12-24 20:20:57 +01:00
GitHub Action
affe8b26eb Automatic translations update 2020-12-24 02:38:36 +00:00
dependabot-preview[bot]
c6f5c89cb0 Bump wiki from 785aa27 to 2f8a040
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `785aa27` to `2f8a040`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](785aa275cf...2f8a0406d4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-24 01:32:26 +00:00
GitHub Action
513af9f83c Automatic translations update 2020-12-23 02:36:28 +00:00
Vitaliy
4bc2c3ecd8 Fix interface members visibility (#2094) 2020-12-22 09:49:19 +01:00
GitHub Action
12d5425453 Automatic translations update 2020-12-22 02:33:53 +00:00
dependabot-preview[bot]
e9374aaf1c Bump wiki from 2486c47 to 3ef377b
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `2486c47` to `3ef377b`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](2486c472f3...3ef377ba8c)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-22 01:32:13 +00:00
GitHub Action
6fa354c221 Automatic translations update 2020-12-21 02:29:40 +00:00
dependabot-preview[bot]
2358211b47 Bump ASF-ui from 458e9e0 to f9f42c5
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `458e9e0` to `f9f42c5`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](458e9e02d2...f9f42c54c4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-21 01:36:13 +00:00
GitHub Action
9c78a3334c Automatic translations update 2020-12-20 02:24:01 +00:00
JustArchi
0db004ae35 Misc reordering 2020-12-19 00:25:22 +01:00
JustArchi
4ebed5a046 Misc 2020-12-19 00:14:45 +01:00
JustArchi
34c5f5cf8b Closes #2012 2020-12-18 22:06:15 +01:00
Vitaliy
c5c55dc44e Add base path support for swagger (#2091) 2020-12-18 12:05:54 +01:00
dependabot-preview[bot]
aad3458ce2 Bump ASF-ui from 605d4aa to 458e9e0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `605d4aa` to `458e9e0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](605d4aac50...458e9e02d2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-18 01:33:45 +00:00
GitHub Action
be05a411cf Automatic translations update 2020-12-17 02:21:57 +00:00
dependabot-preview[bot]
302cd1dc44 Bump ASF-ui from 459682a to 605d4aa
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `459682a` to `605d4aa`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](459682ab2f...605d4aac50)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-17 01:32:38 +00:00
JustArchi
626fa7f059 Use the cancellation token logic also with sends 2020-12-16 12:47:46 +01:00
JustArchi
79a9f97157 Add two more exceptions to NLogGet
Even with cancellation token, it seems that it's not always possible to abort the connection in the clean way, pointless to throw on them since there is nothing else we can do.
2020-12-16 12:11:21 +01:00
JustArchi
c140b302eb Correct CI
I forgot this is a struct, not a class
2020-12-16 10:21:16 +01:00
JustArchi
58ae29d1eb Small fixes after #2087
- Add guard against cancellationToken being null
- Use cancellationToken for all webSocket operations
- Use no cancellation token for semaphore release
- Log TaskCanceledException on user-debugging level
2020-12-16 10:18:05 +01:00
Bartosz Chrostowski
3e2c7dcf2c Add cancellation token to web socket (#2087)
* Add cancelation token to web socket

* Add catching cancelation exception from web scoket
2020-12-16 10:03:13 +01:00
GitHub Action
610667c6e6 Automatic translations update 2020-12-16 02:21:07 +00:00
dependabot-preview[bot]
1e1924b913 Bump ASF-ui from dacb4d6 to 459682a
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `dacb4d6` to `459682a`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](dacb4d6d4d...459682ab2f)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-16 01:35:14 +00:00
JustArchi
e8898e6871 Bump 2020-12-15 20:24:27 +01:00
Vitaliy
7c4b2638d1 Add Steam Awards 2020 to blacklist (#2086) 2020-12-15 20:20:24 +01:00
GitHub Action
b60b5cfa71 Automatic translations update 2020-12-15 02:20:37 +00:00
dependabot-preview[bot]
aa1f3fbe6a Bump wiki from b382fc0 to 2abd05a
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `b382fc0` to `2abd05a`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](b382fc0c80...2abd05a2f3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-15 01:31:43 +00:00
GitHub Action
080adfa133 Automatic translations update 2020-12-12 02:17:44 +00:00
JustArchi
9d2bb9939d Misc 2020-12-11 23:00:54 +01:00
GitHub Action
fcba8adedd Automatic translations update 2020-12-11 02:18:04 +00:00
GitHub Action
edd9bb8f2a Automatic translations update 2020-12-10 02:17:31 +00:00
dependabot-preview[bot]
0d10382cef Bump ASF-ui from 0d1c70d to dacb4d6
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `0d1c70d` to `dacb4d6`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](0d1c70d75e...dacb4d6d4d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-10 01:39:37 +00:00
JustArchi
978cac9c01 Orange was a mistake 2020-12-09 12:43:09 +01:00
JustArchi
5d3f1f308c Add revolut as donation option 2020-12-09 12:41:39 +01:00
GitHub Action
192aab5371 Automatic translations update 2020-12-09 02:15:06 +00:00
dependabot-preview[bot]
1314e81937 Bump ASF-ui from 7c1b566 to 0d1c70d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7c1b566` to `0d1c70d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7c1b566bc5...0d1c70d75e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-09 01:33:23 +00:00
GitHub Action
e5cff3c496 Automatic translations update 2020-12-08 02:15:06 +00:00
dependabot-preview[bot]
98efacb4f2 Bump ASF-ui from e65e331 to 7c1b566
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e65e331` to `7c1b566`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e65e331696...7c1b566bc5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-08 01:32:52 +00:00
GitHub Action
7061f135e6 Automatic translations update 2020-12-07 02:14:01 +00:00
dependabot-preview[bot]
8fef6bfb71 Bump ASF-ui from b6e4dc8 to e65e331
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b6e4dc8` to `e65e331`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b6e4dc8cac...e65e331696)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-07 01:40:43 +00:00
dependabot-preview[bot]
9fd1d4ce7f Bump NLog from 4.7.5 to 4.7.6
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.5 to 4.7.6.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-06 19:48:41 +00:00
JustArchi
bc8ee3592d Cleanup some obsolete warnings 2020-12-05 21:53:18 +01:00
JustArchi
4e190b7dfd Misc code improvements 2020-12-05 20:30:15 +01:00
JustArchi
6265aa7271 Misc code improvements 2020-12-05 20:27:10 +01:00
JustArchi
f66d5e6116 Remove unneeded restriction 2020-12-04 20:05:45 +01:00
GitHub Action
fda7755102 Automatic translations update 2020-12-04 02:09:53 +00:00
GitHub Action
5f8482cdae Automatic translations update 2020-12-03 02:09:56 +00:00
dependabot-preview[bot]
31bc1a10b0 Bump ASF-ui from 906dfdf to b6e4dc8
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `906dfdf` to `b6e4dc8`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](906dfdf315...b6e4dc8cac)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-03 01:33:17 +00:00
dependabot-preview[bot]
a9080ba01a Bump Microsoft.NET.Test.Sdk from 16.8.0 to 16.8.3
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.8.0 to 16.8.3.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](https://github.com/microsoft/vstest/compare/v16.8.0...v16.8.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-02 23:34:29 +00:00
JustArchi
31257449ed STD: Make loading GlobalCache fully async 2020-12-03 00:10:52 +01:00
JustArchi
b712706149 Remove no-longer-needed casts after C# compiler got smarter 2020-12-02 23:50:49 +01:00
JustArchi
82ff7762f2 Convert possible substring calls to string ranges 2020-12-02 23:45:20 +01:00
dependabot-preview[bot]
6acca200c1 Bump ASF-ui from bddaee9 to 906dfdf (#2073)
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `bddaee9` to `906dfdf`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](bddaee99fc...906dfdf315)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-12-02 11:55:53 +01:00
dependabot-preview[bot]
dc1ef983c2 Bump Markdig.Signed from 0.22.0 to 0.22.1
Bumps [Markdig.Signed](https://github.com/lunet-io/markdig) from 0.22.0 to 0.22.1.
- [Release notes](https://github.com/lunet-io/markdig/releases)
- [Changelog](https://github.com/lunet-io/markdig/blob/master/changelog.md)
- [Commits](https://github.com/lunet-io/markdig/compare/0.22.0...0.22.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-02 10:53:20 +00:00
GitHub Action
9c845fb614 Automatic translations update 2020-12-02 02:09:14 +00:00
JustArchi
93582696fe Avoid attempting to save database without a FilePath 2020-12-01 23:32:00 +01:00
GitHub Action
a0dc81804e Automatic translations update 2020-12-01 02:09:52 +00:00
dependabot-preview[bot]
da129386a1 Bump ASF-ui from 4fac17a to bddaee9
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `4fac17a` to `bddaee9`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](4fac17af0e...bddaee99fc)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-01 01:35:38 +00:00
GitHub Action
3b5b20c3e4 Automatic translations update 2020-11-30 02:10:16 +00:00
dependabot-preview[bot]
9eba229c91 Bump ASF-ui from 7520acb to 4fac17a
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7520acb` to `4fac17a`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7520acbe3a...4fac17af0e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-30 01:36:52 +00:00
JustArchi
627d7ca371 Correct outdated database serialization 2020-11-29 18:33:11 +01:00
JustArchi
8ff0ea1bb5 Misc 2020-11-29 16:18:40 +01:00
JustArchi
14f58d5aec Code cleanup 2020-11-29 16:15:20 +01:00
JustArchi
e522602535 Implement OnModified event to our ConcurrentHashSet and make use of it in bot database 2020-11-29 16:03:25 +01:00
GitHub Action
698bf7b788 Automatic translations update 2020-11-29 02:09:53 +00:00
JustArchi
835d567fec Abort startup if config directory could not be found
We do not require any config files, but config directory - yes, we won't bother creating it manually as it heavily suggests user mistake, such as --path to the wrong directory.
2020-11-28 23:55:09 +01:00
JustArchi
ba702a1dae Misc 2020-11-28 23:18:23 +01:00
JustArchi
97ee4eaef2 Misc 2020-11-28 23:16:03 +01:00
JustArchi
8fb91fe58b Misc 2020-11-28 22:06:54 +01:00
dependabot-preview[bot]
be808be3db Bump JetBrains.Annotations from 2020.1.0 to 2020.3.0
Bumps JetBrains.Annotations from 2020.1.0 to 2020.3.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-28 20:10:25 +00:00
JustArchi
eebd7d6f45 Misc 2020-11-28 20:45:47 +01:00
JustArchi
2aaffaa208 Misc 2020-11-28 19:51:09 +01:00
JustArchi
bf89a162e2 Misc 2020-11-28 19:25:17 +01:00
GitHub Action
fe5d3b4626 Automatic translations update 2020-11-28 02:09:57 +00:00
GitHub Action
f3a1cfacf8 Automatic translations update 2020-11-27 02:09:43 +00:00
dependabot-preview[bot]
8f25f562e9 Bump ASF-ui from 3b62205 to 7520acb
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3b62205` to `7520acb`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3b622058ab...7520acbe3a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-27 01:29:47 +00:00
JustArchi
8bfbab57f7 Bump 2020-11-26 18:36:13 +01:00
JustArchi
e31f194938 Misc 2020-11-26 18:24:31 +01:00
JustArchi
8aeee1e238 Allow retry in mutex acquire process 2020-11-26 18:22:55 +01:00
dependabot-preview[bot]
0a25ee9197 Bump wiki from 9ccf1b4 to 2755a49
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `9ccf1b4` to `2755a49`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](9ccf1b4073...2755a49842)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-26 16:48:26 +00:00
GitHub Action
c83c86592a Automatic translations update 2020-11-26 02:09:36 +00:00
dependabot-preview[bot]
f5300ecdf1 Bump ASF-ui from 0586542 to 3b62205
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `0586542` to `3b62205`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](0586542cb0...3b622058ab)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-26 01:54:00 +00:00
JustArchi
198db60c51 Misc 2020-11-25 21:15:42 +01:00
JustArchi
bb25c94aef Bump 2020-11-25 12:33:01 +01:00
JustArchi
d1ca1e9b2c Add a pre-container assembly verification for detecting failing plugins 2020-11-25 12:26:46 +01:00
JustArchi
178509eb21 Avoid loading assemblies in IPC when no plugins are active
Apart from small optimization, this avoids the problem of starting IPC server if one of the assemblies fail to load (as ASF will abort the rest of the plugins loading routine, and therefore no plugins will be loaded at all).
2020-11-25 11:52:02 +01:00
GitHub Action
2d6e8ed673 Automatic translations update 2020-11-25 02:09:37 +00:00
dependabot-preview[bot]
95eeba8e53 Bump ASF-ui from 7acc033 to 0586542
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7acc033` to `0586542`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7acc033156...0586542cb0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-25 01:33:02 +00:00
JustArchi
f0fbf318f4 Bump 2020-11-24 17:40:34 +01:00
GitHub Action
4cb822cbf2 Automatic translations update 2020-11-24 02:09:33 +00:00
dependabot-preview[bot]
e1ad30ebe8 Bump wiki from f8ce64c to fb005a3
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `f8ce64c` to `fb005a3`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](f8ce64c006...fb005a3444)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-24 01:47:13 +00:00
dependabot-preview[bot]
63b92bd4a9 Bump ASF-ui from e5b334b to 7acc033
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e5b334b` to `7acc033`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e5b334bc74...7acc033156)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-24 01:46:46 +00:00
GitHub Action
c5de5cb1af Automatic translations update 2020-11-23 02:09:42 +00:00
dependabot-preview[bot]
71cf55be3f Bump ASF-ui from 1f52d6a to e5b334b
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `1f52d6a` to `e5b334b`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](1f52d6a635...e5b334bc74)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-23 01:37:43 +00:00
JustArchi
74a30a8215 Make GetOwnedGames display also profile-limited games 2020-11-22 18:16:32 +01:00
GitHub Action
db452a2da0 Automatic translations update 2020-11-22 02:09:24 +00:00
JustArchi
0b5d1211fa Bump 2020-11-21 19:07:08 +01:00
JustArchi
084388087e Revert "Make --ignore-unsupported-environment emit a warning instead of nothing"
This reverts commit dd1bb75b8a.
2020-11-21 18:30:49 +01:00
JustArchi
cbbd6fab2d Work around OS X limitations 2020-11-21 18:14:15 +01:00
JustArchi
d9e3496e5e Optimize csprojs and STD plugin publishing
thanks to @Vital7 for the idea
2020-11-21 18:09:05 +01:00
JustArchi
d896f16cbf Bump 2020-11-21 17:12:13 +01:00
JustArchi
10381dfdba Add extra safeguard in STD against zeros 2020-11-21 17:07:18 +01:00
JustArchi
310048acf9 Bump 2020-11-21 15:43:43 +01:00
Vitaliy
3ac04c6aaf Fix parsing tags in GetActiveTradeOffers (#2060)
* Fix parsing tags in GetActiveTradeOffers

* Accept empty values in Tag constructor

* Throw on null value in constructor

* Fix mindless copypaste
2020-11-21 15:42:19 +01:00
JustArchi
6a8a3b9c8a Travis: using you is a mistake 2020-11-21 14:39:17 +01:00
JustArchi
d892661acd Travis: OS updates 2020-11-21 14:34:35 +01:00
JustArchi
dd1bb75b8a Make --ignore-unsupported-environment emit a warning instead of nothing 2020-11-21 14:18:23 +01:00
JustArchi
2d7979e9ee STD: Save information about submitted tokens/keys
This also allows us to resubmit the same app/package/depot upon token/key change, which didn't happen previously.
2020-11-21 13:54:09 +01:00
GitHub Action
f6c1c04394 Automatic translations update 2020-11-21 02:09:09 +00:00
GitHub Action
38e1ece16f Automatic translations update 2020-11-20 02:09:16 +00:00
dependabot-preview[bot]
7513f136ba Bump ASF-ui from d066be5 to 1f52d6a
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `d066be5` to `1f52d6a`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](d066be50da...1f52d6a635)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-20 01:31:20 +00:00
JustArchi
f429a7b618 Misc CIs 2020-11-19 21:32:06 +01:00
JustArchi
1c1c9d107b Try to guess what is wrong with GitHub 2020-11-19 21:21:48 +01:00
JustArchi
f259d2a846 Misc fixes 2020-11-19 21:08:50 +01:00
JustArchi
792babb049 Misc cleanup 2020-11-19 21:04:45 +01:00
JustArchi
a34b1724b1 Misc cleanup 2020-11-19 21:03:09 +01:00
JustArchi
51ad3b0c76 Improve runtime compatibility
This commit does 3 things:
- adds safeguard against running generic-netf in unsupported environments
- adds notice about providing ASF with unknown command-line arguments
- refactors old pre+post args parsing into a single window
2020-11-19 21:01:17 +01:00
GitHub Action
fc36174953 Automatic translations update 2020-11-19 02:08:54 +00:00
dependabot-preview[bot]
7e731b9826 Bump ASF-ui from c4f2a07 to d066be5
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `c4f2a07` to `d066be5`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](c4f2a0703a...d066be50da)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-19 01:33:57 +00:00
GitHub Action
63bec34d7a Automatic translations update 2020-11-18 02:09:09 +00:00
dependabot-preview[bot]
fc97cc7d70 Bump wiki from 748e008 to f32a499
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `748e008` to `f32a499`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](748e0087ff...f32a499cf9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-18 01:48:04 +00:00
dependabot-preview[bot]
4e302d0b7a Bump ASF-ui from 021a4e0 to c4f2a07
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `021a4e0` to `c4f2a07`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](021a4e0f26...c4f2a0703a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-18 01:32:43 +00:00
JustArchi
3bdd6c76b9 Update ArchiSteamFarm.sln.DotSettings 2020-11-17 20:13:29 +01:00
JustArchi
e0e26f57aa Bump 2020-11-17 14:14:20 +01:00
JustArchi
b51e4c459c Fix ASF being unable to chmod +x things anymore 2020-11-17 14:13:36 +01:00
JustArchi
f4a4f0c19d Update Directory.Build.props 2020-11-17 11:55:11 +01:00
JustArchi
88c659ac77 Update TrimmerRoots.xml 2020-11-17 11:50:00 +01:00
GitHub Action
49841fa27e Automatic translations update 2020-11-17 02:08:37 +00:00
dependabot-preview[bot]
96ed2fa316 Bump wiki from d586a43 to 1b93223
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `d586a43` to `1b93223`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](d586a43238...1b932239e3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-17 01:32:28 +00:00
JustArchi
39c5529de0 Bump 2020-11-16 19:21:39 +01:00
GitHub Action
b3788cfcdc Automatic translations update 2020-11-16 02:09:34 +00:00
dependabot-preview[bot]
1d94d54e9d Bump wiki from a5d3d31 to bc9b2c2
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `a5d3d31` to `bc9b2c2`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](a5d3d31dfb...bc9b2c2292)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-16 01:51:13 +00:00
dependabot-preview[bot]
79a9bdbb57 Bump ASF-ui from 4d5ccb1 to 021a4e0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `4d5ccb1` to `021a4e0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](4d5ccb1dd5...021a4e0f26)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-16 01:35:53 +00:00
JustArchi
d890a6b345 Misc
No reason for ICrossProcessSemaphore to be IDisposable
2020-11-16 00:52:43 +01:00
JustArchi
a61ccc57a9 Misc 2020-11-16 00:46:08 +01:00
JustArchi
c37d935a1d Final touches 2020-11-16 00:44:37 +01:00
JustArchi
986090fb9c Implement TrimMode=link 2020-11-15 22:37:00 +01:00
GitHub Action
e6d8200f3a Automatic translations update 2020-11-15 02:08:30 +00:00
JustArchi
f2a9d10e29 Add trimming features 2020-11-15 01:02:17 +01:00
JustArchi
76818e28d7 Fix deserialization mistakes 2020-11-15 00:30:20 +01:00
JustArchi
9642b067a0 Add System.Runtime for plugins usage 2020-11-14 23:40:36 +01:00
JustArchi
a90b49ecd8 Correct tests 2020-11-14 22:41:02 +01:00
JustArchi
e82560259b Final code cleanup 2020-11-14 22:37:00 +01:00
GitHub Action
ea1429a209 Automatic translations update 2020-11-13 02:08:24 +00:00
dependabot-preview[bot]
63122bfbf8 Bump wiki from bdce848 to 1a20837
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `bdce848` to `1a20837`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](bdce848f2c...1a20837f74)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-13 01:35:17 +00:00
GitHub Action
0596c97267 Automatic translations update 2020-11-12 02:08:19 +00:00
dependabot-preview[bot]
1838710c0d Bump wiki from 338424a to 6b4c7ec
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `338424a` to `6b4c7ec`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](338424ab5e...6b4c7ecb4a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-12 01:51:54 +00:00
dependabot-preview[bot]
49de5cdc77 Bump ASF-ui from 7957840 to 4d5ccb1
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7957840` to `4d5ccb1`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7957840776...4d5ccb1dd5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-12 01:35:32 +00:00
JustArchi
f2c95bc075 Update ArchiSteamFarm.sln.DotSettings 2020-11-11 21:35:40 +01:00
JustArchi
d126824dfd Misc 2020-11-11 21:19:29 +01:00
JustArchi
cc923523be Misc 2020-11-11 21:16:51 +01:00
JustArchi
102ed7282a Closes #2048 2020-11-11 21:06:17 +01:00
JustArchi
47b42d6fc0 More code cleanups 2020-11-11 19:51:52 +01:00
JustArchi
6a811008eb More code cleanups 2020-11-11 18:02:17 +01:00
JustArchi
1ebd9888be Update ArchiSteamFarm.csproj 2020-11-11 16:52:10 +01:00
JustArchi
60ae4977da Initial code cleanup 2020-11-11 16:51:31 +01:00
JustArchi
8ae8bc649e Code style updates 2020-11-11 15:48:55 +01:00
GitHub Action
36afd25129 Automatic translations update 2020-11-11 02:07:43 +00:00
dependabot-preview[bot]
2d2bfca7af Bump ASF-ui from fd35997 to 7957840
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `fd35997` to `7957840`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](fd35997e3a...7957840776)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-11 01:46:50 +00:00
Łukasz Domeradzki
35f4651ed6 .NET 5.0 (#1999)
* Initial work

* Fix CIs

* Fix warnings

* Update .travis.yml

* Update dockerfiles

* Update libraries to .NET 5.0

* Misc

* Remove workaround for #1812

* Update cc.sh

* CI updates

* CI updates

* Update .travis.yml
2020-11-10 23:22:57 +01:00
dependabot-preview[bot]
9a248858a5 Bump System.Linq.Async from 4.1.1 to 5.0.0
Bumps [System.Linq.Async](https://github.com/dotnet/reactive) from 4.1.1 to 5.0.0.
- [Release notes](https://github.com/dotnet/reactive/releases)
- [Commits](https://github.com/dotnet/reactive/compare/ixnet-v4.1.1...ixnet-v5.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-10 16:23:56 +00:00
dependabot-preview[bot]
7df85b5fad Bump Microsoft.Extensions.Logging.Configuration from 3.1.9 to 5.0.0
Bumps [Microsoft.Extensions.Logging.Configuration](https://github.com/dotnet/runtime) from 3.1.9 to 5.0.0.
- [Release notes](https://github.com/dotnet/runtime/releases)
- [Commits](https://github.com/dotnet/runtime/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-10 09:36:23 +00:00
dependabot-preview[bot]
c45a5872c7 Bump System.Security.Cryptography.ProtectedData from 4.7.0 to 5.0.0
Bumps [System.Security.Cryptography.ProtectedData](https://github.com/dotnet/runtime) from 4.7.0 to 5.0.0.
- [Release notes](https://github.com/dotnet/runtime/releases)
- [Commits](https://github.com/dotnet/runtime/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-10 09:26:38 +00:00
dependabot-preview[bot]
4deee0d990 Bump Microsoft.Extensions.Configuration.Json from 3.1.9 to 5.0.0
Bumps [Microsoft.Extensions.Configuration.Json](https://github.com/dotnet/runtime) from 3.1.9 to 5.0.0.
- [Release notes](https://github.com/dotnet/runtime/releases)
- [Commits](https://github.com/dotnet/runtime/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-10 08:55:59 +00:00
dependabot-preview[bot]
6862af1323 Bump System.IO.FileSystem.AccessControl from 4.7.0 to 5.0.0
Bumps [System.IO.FileSystem.AccessControl](https://github.com/dotnet/runtime) from 4.7.0 to 5.0.0.
- [Release notes](https://github.com/dotnet/runtime/releases)
- [Commits](https://github.com/dotnet/runtime/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-10 08:55:44 +00:00
dependabot-preview[bot]
4cc8d37d33 Bump System.Composition from 1.4.1 to 5.0.0
Bumps [System.Composition](https://github.com/dotnet/runtime) from 1.4.1 to 5.0.0.
- [Release notes](https://github.com/dotnet/runtime/releases)
- [Commits](https://github.com/dotnet/runtime/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-10 08:55:19 +00:00
GitHub Action
289815878a Automatic translations update 2020-11-10 02:09:30 +00:00
dependabot-preview[bot]
9829d3c243 Bump Microsoft.AspNetCore.Mvc.NewtonsoftJson from 3.1.9 to 3.1.10
Bumps [Microsoft.AspNetCore.Mvc.NewtonsoftJson](https://github.com/aspnet/AspNetCore) from 3.1.9 to 3.1.10.
- [Release notes](https://github.com/aspnet/AspNetCore/releases)
- [Commits](https://github.com/aspnet/AspNetCore/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-10 00:05:53 +00:00
dependabot-preview[bot]
2be4a43425 Bump Microsoft.NET.Test.Sdk from 16.7.1 to 16.8.0
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.7.1 to 16.8.0.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](https://github.com/microsoft/vstest/compare/v16.7.1...v16.8.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-09 21:06:14 +00:00
GitHub Action
095006d12c Automatic translations update 2020-11-09 02:09:24 +00:00
dependabot-preview[bot]
52fd5d352f Bump wiki from f30a5aa to 411c274
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `f30a5aa` to `411c274`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](f30a5aa4c6...411c274bfd)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-09 01:46:34 +00:00
dependabot-preview[bot]
a9cdf2bc6f Bump ASF-ui from d34e000 to fd35997
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `d34e000` to `fd35997`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](d34e000ad5...fd35997e3a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-09 01:37:51 +00:00
JustArchi
83f8187dbd Bump 2020-11-08 15:38:59 +01:00
GitHub Action
7ed9085c31 Automatic translations update 2020-11-08 02:09:16 +00:00
GitHub Action
ff9d025b65 Automatic translations update 2020-11-07 02:08:35 +00:00
GitHub Action
99dd35250c Automatic translations update 2020-11-06 02:08:36 +00:00
dependabot-preview[bot]
69b2c875fe Bump ASF-ui from eaf71d5 to d34e000
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `eaf71d5` to `d34e000`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](eaf71d5ec0...d34e000ad5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-06 01:31:41 +00:00
dependabot-preview[bot]
bf4aeeb809 Bump wiki from e784ce7 to 7b2cc54
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `e784ce7` to `7b2cc54`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](e784ce72b9...7b2cc54d4d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-06 01:26:34 +00:00
GitHub Action
ad90f79907 Automatic translations update 2020-11-05 02:08:30 +00:00
dependabot-preview[bot]
0a935ce583 Bump ASF-ui from e02507a to eaf71d5
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e02507a` to `eaf71d5`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e02507a473...eaf71d5ec0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-05 01:32:59 +00:00
dependabot-preview[bot]
0aef2d93fc Bump wiki from e624186 to a0cada9
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `e624186` to `a0cada9`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](e624186b12...a0cada9c76)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-05 01:26:44 +00:00
JustArchi
f99d296687 Closes #2014 2020-11-04 23:39:57 +01:00
GitHub Action
12e232e240 Automatic translations update 2020-11-04 02:08:04 +00:00
dependabot-preview[bot]
1da0f01d16 Bump ASF-ui from 4688587 to e02507a
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `4688587` to `e02507a`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](46885878d2...e02507a473)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-04 01:29:13 +00:00
GitHub Action
943f538953 Automatic translations update 2020-11-03 02:08:15 +00:00
dependabot-preview[bot]
b642139679 Bump ASF-ui from 6f3c7e7 to 4688587
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `6f3c7e7` to `4688587`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](6f3c7e7e02...46885878d2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-03 01:25:35 +00:00
dependabot-preview[bot]
b0227f7e9f Bump ASF-ui from 802bd70 to 6f3c7e7
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `802bd70` to `6f3c7e7`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](802bd705ab...6f3c7e7e02)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-02 01:35:14 +00:00
JustArchi
4319175905 Improve trading locks usage 2020-10-31 19:48:47 +01:00
dependabot-preview[bot]
12c97d16b8 Bump ASF-ui from ef34421 to 802bd70
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `ef34421` to `802bd70`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](ef34421da9...802bd705ab)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-30 01:27:09 +00:00
dependabot-preview[bot]
64d8eb85c5 Bump ASF-ui from 7ecfec2 to ef34421
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7ecfec2` to `ef34421`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7ecfec2b4a...ef34421da9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-28 01:26:48 +00:00
dependabot-preview[bot]
55028b829c Bump ASF-ui from 56869af to 7ecfec2
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `56869af` to `7ecfec2`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](56869af1b6...7ecfec2b4a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-27 01:26:05 +00:00
dependabot-preview[bot]
182f6d7857 Bump ASF-ui from 3f03638 to 56869af
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3f03638` to `56869af`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3f03638a10...56869af1b6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-26 01:38:27 +00:00
GitHub Action
efc610b17d Automatic translations update 2020-10-24 02:11:56 +00:00
GitHub Action
d51f1e93c7 Automatic translations update 2020-10-23 02:12:21 +00:00
dependabot-preview[bot]
000e1607f8 Bump wiki from 80cb235 to 8ce2ab5
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `80cb235` to `8ce2ab5`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](80cb235cfc...8ce2ab5e27)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-23 01:25:49 +00:00
JustArchi
2aee05201d Bump 2020-10-22 23:04:59 +02:00
JustArchi
bad0db1775 Correct @Abrynos overlook 2020-10-22 22:48:59 +02:00
JustArchi
8835b4db7f Bump 2020-10-22 19:18:23 +02:00
Vitaliy
93cd30f820 Add itemsPerTrade argument (#2011)
* Add itemsPerTrade argument

* Validate parameter, add to Actions.SendInventory

* Add check, fix merge
2020-10-21 21:41:09 +02:00
JustArchi
4b00be7f66 Misc 2020-10-21 18:49:49 +02:00
JustArchi
25e549b7e2 Code cleanup after #2004 2020-10-21 18:48:13 +02:00
Sebastian Göls
1f8b68f5ee Implement #852 (#2004)
* Update Actions.cs, Bot.cs, and BotConfig.cs

* First round of refactoring

* Check all badge pages

* Update Bot.cs

* Make sure multiple pages of badges work with foil badges and Make item selection algorithm work with all kinds of amount values we could get from Valve

* Change order of params in Actions.SendInventory(...), Cache amount of cards for game ids, Count card elements on page when fetching card count per game, Calculate items to send for all games in parallel

* Add unit tests

* Make sure only one real app id and one asset type are present while computing cards to send and Test it

* Update ArchiWebHandler.cs

* Update Bot.cs

* Fix iteration over badge pages

* Update Bot.cs

* Make stackable item stacks smaller if possible

* Simplify code based on changing stack size of stackable items and Adapt tests

* Consider only cards of the same rarity to be of one set and Add handling of already crafted level 5 badges

* Implement feedback

* Update Bot.cs

* Update Bot.cs

* Implement feedback from review

* Adapt tests

* Improve XPath efficiency

* Check real result for additional values in unit tests

* Implement feedback

* Add additional test combining classID, type and rarity

* Make collections readonly wherever you can

* Optimize misc. code and Add SetTypesToComplete to BotConfig

* Throw exception if we have more card types than cards per set

* Remove SendSetsOnCompleted and Make CompleteTypesToSend empty per default

* Fix existing unit tests and add new ones due to new exception

* Please nitpicky Archi

* Update Bot.cs

* Change expected exception type

* Make appID constants local

* Update Bot.cs and BotConfig.cs

* Do as JetBrains Rider says

* Only fetch card count for badge if we have cards for it

* Improve naming and fix handling of URIs for foil badges

* Add Bot.LoadCardsPerSet(...), Bot.GetItemsForFullSets(...) and Trading.GetInventorySets(...) to public API

* Let AWH do its job

* Make Bot.GetPossiblyCompletedBadgeAppIDs() part of public API as well
2020-10-21 18:41:20 +02:00
dependabot-preview[bot]
4f44475629 Bump ASF-ui from 2a76d80 to 3f03638
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `2a76d80` to `3f03638`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](2a76d80638...3f03638a10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-21 01:24:57 +00:00
JustArchi
ba08fe9631 Make it EVEN better! 2020-10-21 00:32:51 +02:00
JustArchi
71174f5978 Slight change of approach 2020-10-21 00:26:43 +02:00
JustArchi
e38887c607 Improve update process by preloading assemblies 2020-10-21 00:22:03 +02:00
dependabot-preview[bot]
7aea765612 Bump ASF-ui from b1ebde6 to 2a76d80
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b1ebde6` to `2a76d80`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b1ebde6c78...2a76d80638)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-20 01:27:11 +00:00
dependabot-preview[bot]
9fbae6eb08 Bump ASF-ui from 7c973cc to b1ebde6
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7c973cc` to `b1ebde6`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7c973cced4...b1ebde6c78)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-19 11:24:05 +00:00
JustArchi
fe0df93176 Expose CanUpdate property in ASF API 2020-10-18 20:29:56 +02:00
GitHub Action
f0e6cdaecc Automatic translations update 2020-10-16 02:10:41 +00:00
dependabot-preview[bot]
a90b9883d1 Bump ASF-ui from b9efdba to 7c973cc
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b9efdba` to `7c973cc`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b9efdbac90...7c973cced4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-16 01:27:36 +00:00
dependabot-preview[bot]
a8a1c4c64e Bump ASF-ui from f525fc9 to b9efdba
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `f525fc9` to `b9efdba`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](f525fc91c1...b9efdbac90)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-15 01:25:51 +00:00
JustArchi
b4f62362a3 Bump 2020-10-14 14:26:08 +02:00
JustArchi
37ee5e2a76 Bump to 4.3.1.0 2020-10-14 14:25:43 +02:00
JustArchi
deb886066b Misc 2020-10-14 14:24:53 +02:00
JustArchi
4cd581ec04 Avoid crash on commandPrefix message + hardening 2020-10-14 12:06:42 +02:00
dependabot-preview[bot]
cbbcc3a69e Bump Microsoft.Extensions.Logging.Configuration from 3.1.8 to 3.1.9
Bumps [Microsoft.Extensions.Logging.Configuration](https://github.com/aspnet/Extensions) from 3.1.8 to 3.1.9.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-13 15:13:24 +00:00
dependabot-preview[bot]
55dd3ab113 Bump Microsoft.AspNetCore.Mvc.NewtonsoftJson from 3.1.8 to 3.1.9
Bumps [Microsoft.AspNetCore.Mvc.NewtonsoftJson](https://github.com/aspnet/AspNetCore) from 3.1.8 to 3.1.9.
- [Release notes](https://github.com/aspnet/AspNetCore/releases)
- [Commits](https://github.com/aspnet/AspNetCore/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-13 15:03:31 +00:00
dependabot-preview[bot]
9741cfc2f6 Bump Microsoft.Extensions.Configuration.Json from 3.1.8 to 3.1.9
Bumps [Microsoft.Extensions.Configuration.Json](https://github.com/aspnet/Extensions) from 3.1.8 to 3.1.9.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-13 14:49:56 +00:00
dependabot-preview[bot]
071a25267e Bump ASF-ui from 50bfb9c to f525fc9
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `50bfb9c` to `f525fc9`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](50bfb9cfbe...f525fc91c1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-12 01:27:42 +00:00
GitHub Action
376cbc3116 Automatic translations update 2020-10-11 02:10:37 +00:00
GitHub Action
ae6e840811 Automatic translations update 2020-10-10 02:11:01 +00:00
GitHub Action
62a9f6572c Automatic translations update 2020-10-09 02:10:08 +00:00
dependabot-preview[bot]
25c4d627f1 Bump ASF-ui from 3b763ba to 50bfb9c
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3b763ba` to `50bfb9c`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3b763bae7a...50bfb9cfbe)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-09 01:27:53 +00:00
GitHub Action
7d7834a545 Automatic translations update 2020-10-08 02:08:48 +00:00
dependabot-preview[bot]
4e3befec24 Bump wiki from 03ed503 to 0d87192
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `03ed503` to `0d87192`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](03ed5037eb...0d87192106)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-08 01:28:52 +00:00
JustArchi
65cbad5deb Bump 2020-10-07 23:08:03 +02:00
JustArchi
c1ba2b5338 Misc 2020-10-07 21:25:15 +02:00
Ryzhehvost
2a71e2cb0b add logging of invites (#2005)
* add logging of invites

* required changes

* revert not needed changes

* remove not needed convertation
2020-10-07 21:22:39 +02:00
JustArchi
e1e4f9a8b4 Misc kestrel improvements 2020-10-07 19:49:06 +02:00
Vitaliy
eb7889e206 Add support for custom reverse proxy endpoints (#2003)
* Add support for custom reverse proxy endpoints

* Fix missing string.Format, use KnownNetworks instead of KnownProxies

* Misc
2020-10-07 19:34:58 +02:00
dependabot-preview[bot]
8e5d921113 Bump ASF-ui from a5590b4 to 3b763ba
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `a5590b4` to `3b763ba`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](a5590b4ff1...3b763bae7a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-07 01:27:20 +00:00
dependabot-preview[bot]
340db9b939 Bump Markdig.Signed from 0.21.1 to 0.22.0
Bumps [Markdig.Signed](https://github.com/lunet-io/markdig) from 0.21.1 to 0.22.0.
- [Release notes](https://github.com/lunet-io/markdig/releases)
- [Changelog](https://github.com/lunet-io/markdig/blob/master/changelog.md)
- [Commits](https://github.com/lunet-io/markdig/compare/0.21.1...0.22.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-05 08:07:18 +00:00
dependabot-preview[bot]
3dc967003a Bump Nito.AsyncEx.Coordination from 5.0.0 to 5.1.0
Bumps [Nito.AsyncEx.Coordination](https://github.com/StephenCleary/AsyncEx) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/StephenCleary/AsyncEx/releases)
- [Commits](https://github.com/StephenCleary/AsyncEx/compare/v5.0.0...v5.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-05 02:05:27 +00:00
dependabot-preview[bot]
dcf12130f4 Bump ASF-ui from d2e39e0 to a5590b4
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `d2e39e0` to `a5590b4`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](d2e39e02ec...a5590b4ff1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-05 01:28:04 +00:00
JustArchi
eb1e2e011a Improve asf arch detection in docker build hook 2020-10-04 17:13:41 +02:00
GitHub Action
3a7af6ecc8 Automatic translations update 2020-10-04 02:10:18 +00:00
JustArchi
da2a1f811a Update ci.yml 2020-10-04 02:21:53 +02:00
GitHub Action
378232bc4d Automatic translations update 2020-10-01 02:10:00 +00:00
JustArchi
1d0447117a AppVeyor: Misc 2020-10-01 01:21:50 +02:00
GitHub Action
4223e12187 Automatic translations update 2020-09-30 02:09:49 +00:00
dependabot-preview[bot]
961e88c0bd Bump ASF-ui from ebdaeb6 to d2e39e0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `ebdaeb6` to `d2e39e0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](ebdaeb6e98...d2e39e02ec)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-30 01:38:36 +00:00
dependabot-preview[bot]
bc5ef77216 Bump wiki from 97b8b26 to 6cd354d
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `97b8b26` to `6cd354d`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](97b8b2695f...6cd354da40)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-30 01:27:50 +00:00
GitHub Action
a8c8c5050d Automatic translations update 2020-09-29 02:10:02 +00:00
JustArchi
0b16fe486a Misc 2020-09-28 21:46:17 +02:00
dependabot-preview[bot]
a3eb55c960 Bump ASF-ui from b6e2c36 to ebdaeb6
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b6e2c36` to `ebdaeb6`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b6e2c360bc...ebdaeb6e98)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-28 01:29:36 +00:00
Vitaliy
78c21c7b29 Fix wallet code redeeming (#1993)
* Fix wallet code redeeming

* Remove trailing slash
2020-09-28 00:27:27 +02:00
JustArchi
87ed2cbeff Misc 2020-09-27 15:25:03 +02:00
dependabot-preview[bot]
66f79aba05 Bump NLog from 4.7.4 to 4.7.5
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.4 to 4.7.5.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-27 12:35:34 +00:00
dependabot-preview[bot]
c11dc4b318 Bump ASF-ui from dfb979a to b6e2c36
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `dfb979a` to `b6e2c36`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](dfb979a9ee...b6e2c360bc)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-27 00:57:15 +00:00
JustArchi
8c188d1d40 Give up for now
There is no solution that works like old dependabot, great.
2020-09-27 02:52:11 +02:00
JustArchi
d63288d21b Try different auto-merge action
Previous one clearly doesn't work correctly
2020-09-27 02:35:38 +02:00
dependabot-preview[bot]
a49adf93ee Bump ASF-ui from dfb979a to b6e2c36 2020-09-27 02:27:48 +02:00
JustArchi
7b90dcf0a3 Downgrade ASF-ui for test 2020-09-27 02:26:04 +02:00
dependabot-preview[bot]
f5c6252b85 Bump ASF-ui from dfb979a to b6e2c36 2020-09-27 02:13:44 +02:00
JustArchi
8bf47fc05a Add support for auto-merge action
Upcoming replacement for lack of such feature in native dependabot, needs to be tested first
2020-09-27 02:04:25 +02:00
JustArchi
e0ba7f2a92 Fix warning 2020-09-25 13:21:36 +02:00
JustArchi
70915ecaed Convert BotName of SteamTarget to Layout 2020-09-25 13:16:53 +02:00
dependabot-preview[bot]
b986a7ebb3 Bump ASF-ui from 60b2251 to dfb979a
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `60b2251` to `dfb979a`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](60b2251d6f...dfb979a9ee)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-25 01:22:48 +00:00
GitHub Action
1ce767b503 Automatic translations update 2020-09-24 02:09:33 +00:00
dependabot-preview[bot]
4faaf88da1 Bump Swashbuckle.AspNetCore from 5.6.2 to 5.6.3
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.2 to 5.6.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.2...v5.6.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-23 13:56:39 +00:00
dependabot-preview[bot]
2cbe228c7c Bump Swashbuckle.AspNetCore.Annotations from 5.6.2 to 5.6.3
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.2 to 5.6.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.2...v5.6.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-23 13:33:23 +00:00
dependabot-preview[bot]
6186fbc671 Bump Swashbuckle.AspNetCore.Newtonsoft from 5.6.2 to 5.6.3
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.2 to 5.6.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.2...v5.6.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-23 13:04:23 +00:00
dependabot-preview[bot]
5dc7a288a4 Bump ASF-ui from 22cfa90 to 60b2251
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `22cfa90` to `60b2251`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](22cfa90a60...60b2251d6f)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-23 01:23:10 +00:00
dependabot-preview[bot]
3b550198c7 Bump Swashbuckle.AspNetCore.Newtonsoft from 5.6.1 to 5.6.2
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.1 to 5.6.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.1...v5.6.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-22 14:08:05 +00:00
dependabot-preview[bot]
c590fdc4fb Bump Swashbuckle.AspNetCore.Annotations from 5.6.1 to 5.6.2
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.1 to 5.6.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.1...v5.6.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-22 13:43:04 +00:00
dependabot-preview[bot]
a16063f030 Bump Swashbuckle.AspNetCore from 5.6.1 to 5.6.2
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.1 to 5.6.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.1...v5.6.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-22 13:15:58 +00:00
GitHub Action
b723a818cf Automatic translations update 2020-09-22 02:09:21 +00:00
dependabot-preview[bot]
caf63718e7 Bump ASF-ui from cd06c2d to 22cfa90
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `cd06c2d` to `22cfa90`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](cd06c2d5f0...22cfa90a60)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-22 01:23:11 +00:00
JustArchi
46d3360f8d Update ci.yml 2020-09-21 22:19:28 +02:00
JustArchi
0351725d80 Update ci.yml 2020-09-21 22:14:11 +02:00
JustArchi
a617ac0665 Update ci.yml 2020-09-21 22:07:31 +02:00
GitHub Action
c4453f2571 Automatic translations update 2020-09-21 02:09:42 +00:00
dependabot-preview[bot]
12e0253cfe Bump ASF-ui from 0b02c93 to cd06c2d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `0b02c93` to `cd06c2d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](0b02c93665...cd06c2d5f0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-21 01:22:56 +00:00
JustArchi
87db68baf8 Misc 2020-09-21 01:00:37 +02:00
JustArchi
6521ef0fde Misc
ToUpperInvariant() on the whole string will be faster than upping every single character (less calls for same effort), and as an extra it'll be more compatible since official 2FA returns uppercase characters, even if they're probably still converted ToUpper() on the backend.
2020-09-20 22:12:52 +02:00
GitHub Action
6d5530b64f Automatic translations update 2020-09-19 02:09:07 +00:00
JustArchi
6764313f66 Misc 2020-09-19 01:49:00 +02:00
JustArchi
0915458d34 Bump 2020-09-18 20:25:53 +02:00
dependabot-preview[bot]
62fc711cc2 Bump ASF-ui from 3608410 to 0b02c93
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3608410` to `0b02c93`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3608410c47...0b02c93665)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-18 01:24:49 +00:00
JustArchi
c2ea04c889 Correct logic on 4xx and 5xx
4xx should never be retried, 5xx should be retried if we're not returning the error.
2020-09-18 00:51:29 +02:00
JustArchi
368dd801e0 Closes #1976 2020-09-18 00:47:06 +02:00
JustArchi
9489de5d95 Update Startup.cs 2020-09-17 08:53:09 +00:00
dependabot-preview[bot]
f201955c0c Bump Swashbuckle.AspNetCore.Annotations from 5.5.1 to 5.6.1
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.5.1 to 5.6.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.5.1...v5.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 08:53:09 +00:00
dependabot-preview[bot]
a9064b2567 Bump Swashbuckle.AspNetCore from 5.6.0 to 5.6.1
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.0 to 5.6.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.0...v5.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 01:59:25 +00:00
dependabot-preview[bot]
00fa293cb9 Bump Swashbuckle.AspNetCore.Newtonsoft from 5.6.0 to 5.6.1
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.6.0 to 5.6.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.6.0...v5.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 01:29:04 +00:00
dependabot-preview[bot]
24d977d824 Bump ASF-ui from 5e55507 to 3608410
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `5e55507` to `3608410`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](5e55507bf1...3608410c47)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-17 01:23:23 +00:00
GitHub Action
423a179308 Automatic translations update 2020-09-15 02:09:18 +00:00
dependabot-preview[bot]
6388188217 Bump Swashbuckle.AspNetCore.Newtonsoft from 5.5.1 to 5.6.0
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.5.1 to 5.6.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.5.1...v5.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-14 22:58:37 +00:00
dependabot-preview[bot]
73170acfd4 Bump Swashbuckle.AspNetCore from 5.5.1 to 5.6.0
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.5.1 to 5.6.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.5.1...v5.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-14 22:38:18 +00:00
Sebastian Göls
5e8ff3cdef Fix empty string staying in dictionary (#1967)
* Fix empty string staying in dictionary

* Increase consistency and remove null-forgiving operator
2020-09-14 23:32:18 +02:00
JustArchi
20c9f599c6 Misc 2020-09-14 12:26:32 +02:00
JustArchi
7aeac45d0e Misc 2020-09-14 10:28:01 +02:00
JustArchi
dc498f8927 Update WebBrowser.cs 2020-09-14 10:15:08 +02:00
JustArchi
88dd9edde5 Misc additions to #1966 2020-09-14 10:07:29 +02:00
JustArchi
e4198d91f8 Closes #1966 2020-09-14 10:03:05 +02:00
GitHub Action
e7802ca609 Automatic translations update 2020-09-14 02:09:17 +00:00
dependabot-preview[bot]
573d91cbc7 Bump ASF-ui from 434f368 to 5e55507
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `434f368` to `5e55507`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](434f368b4b...5e55507bf1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-14 01:23:49 +00:00
JustArchi
58186b0436 Bump 2020-09-13 21:55:52 +02:00
JustArchi
d4345a1a16 Closes #1964 2020-09-13 21:43:25 +02:00
GitHub Action
e125863fd4 Automatic translations update 2020-09-13 02:09:05 +00:00
JustArchi
38b40fe93a Misc 2020-09-12 13:27:39 +02:00
JustArchi
033814198f Apply the POST -> GET logic also to 301 2020-09-12 13:26:26 +02:00
JustArchi
568f9bc2e6 Closes #1963 2020-09-12 13:17:43 +02:00
GitHub Action
a7a5401996 Automatic translations update 2020-09-11 02:09:07 +00:00
JustArchi
cb1c74bf9f Bump 2020-09-10 18:36:25 +02:00
dependabot-preview[bot]
91f466cd07 Bump ASF-ui from cce2465 to 434f368
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `cce2465` to `434f368`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](cce24657db...434f368b4b)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-10 01:23:42 +00:00
GitHub Action
aa83caa993 Automatic translations update 2020-09-09 02:09:24 +00:00
dependabot-preview[bot]
3208d2ef3d Bump Microsoft.Extensions.Logging.Configuration from 3.1.7 to 3.1.8
Bumps [Microsoft.Extensions.Logging.Configuration](https://github.com/aspnet/Extensions) from 3.1.7 to 3.1.8.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/compare/v3.1.7...v3.1.8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-09 01:23:31 +00:00
JustArchi
8ff5337ad7 Misc 2020-09-08 20:17:27 +02:00
dependabot-preview[bot]
4fccbb49c9 Bump Microsoft.Extensions.Configuration.Json from 3.1.7 to 3.1.8
Bumps [Microsoft.Extensions.Configuration.Json](https://github.com/aspnet/Extensions) from 3.1.7 to 3.1.8.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-08 15:45:23 +00:00
JustArchi
bbfcd467c9 Enable for public access default config properties 2020-09-08 17:14:17 +02:00
dependabot-preview[bot]
37870e8c39 Bump Microsoft.AspNetCore.Mvc.NewtonsoftJson from 3.1.7 to 3.1.8
Bumps [Microsoft.AspNetCore.Mvc.NewtonsoftJson](https://github.com/aspnet/AspNetCore) from 3.1.7 to 3.1.8.
- [Release notes](https://github.com/aspnet/AspNetCore/releases)
- [Commits](https://github.com/aspnet/AspNetCore/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-08 15:10:55 +00:00
JustArchi
d2f242f368 Closes #1958 2020-09-08 16:41:36 +02:00
Vitaliy
afdf9ced94 Fix permission check in !level (#1957) 2020-09-08 09:48:01 +02:00
GitHub Action
8d67658b6e Automatic translations update 2020-09-08 02:09:18 +00:00
GitHub Action
706fe4d881 Automatic translations update 2020-09-07 02:09:37 +00:00
dependabot-preview[bot]
127b8bf62c Bump wiki from 719c6f4 to 0cafc87
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `719c6f4` to `0cafc87`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](719c6f4f98...0cafc87671)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-07 01:31:23 +00:00
dependabot-preview[bot]
6b724b4fc1 Bump ASF-ui from 01f9439 to cce2465
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `01f9439` to `cce2465`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](01f9439215...cce24657db)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-07 01:28:22 +00:00
JustArchi
54945ad3d5 Bump 2020-09-06 11:25:43 +02:00
GitHub Action
f51d9c36b0 Automatic translations update 2020-09-06 02:08:53 +00:00
JustArchi
42f388e370 Closes #1950 2020-09-05 12:51:03 +02:00
GitHub Action
ff5385e0af Automatic translations update 2020-09-05 02:36:19 +00:00
GitHub Action
7c1ffe9b17 Automatic translations update 2020-09-04 02:09:04 +00:00
dependabot-preview[bot]
1f9a5cd831 Bump ASF-ui from 0fa47c7 to 01f9439
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `0fa47c7` to `01f9439`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](0fa47c70ee...01f9439215)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-04 01:22:54 +00:00
GitHub Action
6dd3e21498 Automatic translations update 2020-09-03 02:09:05 +00:00
dependabot-preview[bot]
b8e100664b Bump ASF-ui from 556411e to 0fa47c7
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `556411e` to `0fa47c7`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](556411eb0d...0fa47c70ee)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-03 01:22:23 +00:00
GitHub Action
9b6013fc45 Automatic translations update 2020-09-02 02:08:47 +00:00
dependabot-preview[bot]
fbb669046a Bump wiki from 779bed6 to bf754ba
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `779bed6` to `bf754ba`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](779bed6c42...bf754bab47)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-02 01:33:56 +00:00
dependabot-preview[bot]
487306a3a5 Bump ASF-ui from d84edf6 to 556411e
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `d84edf6` to `556411e`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](d84edf645b...556411eb0d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-02 01:23:50 +00:00
JustArchi
e3e4f57f92 Bump 2020-09-02 01:21:02 +02:00
JustArchi
1415547eb8 Correct rewrite screwup 2020-09-02 01:20:32 +02:00
GitHub Action
92d5d20595 Automatic translations update 2020-09-01 02:09:03 +00:00
GitHub Action
1a58af5f05 Automatic translations update 2020-08-31 02:08:28 +00:00
dependabot-preview[bot]
11ce757846 Bump ASF-ui from 63f0b0c to d84edf6
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `63f0b0c` to `d84edf6`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](63f0b0cfc2...d84edf645b)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-31 01:22:30 +00:00
GitHub Action
b72b02ab1e Automatic translations update 2020-08-30 02:12:30 +00:00
GitHub Action
4c3dc5a3ea Automatic translations update 2020-08-29 02:06:48 +00:00
JustArchi
675390a00d Misc
Solves a very rare case of stream error (e.g. IOException) being thrown while reading the stream.
2020-08-29 00:33:24 +02:00
dependabot-preview[bot]
616e69dd92 Bump ASF-ui from 36fb382 to 63f0b0c
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `36fb382` to `63f0b0c`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](36fb382de1...63f0b0cfc2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-27 01:33:36 +00:00
dependabot-preview[bot]
b0f306193b Bump ASF-ui from 6e7611d to 36fb382
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `6e7611d` to `36fb382`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](6e7611d2db...36fb382de1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-26 01:26:41 +00:00
JustArchi
2f8c626310 Bump 2020-08-23 21:13:44 +02:00
JustArchi
b3d476dea4 Round 2 of nullable checks 2020-08-23 20:45:24 +02:00
JustArchi
f99043db30 Closes #1832 2020-08-23 19:24:10 +02:00
JustArchi
0ddba57c0d Further improve on IProgress<T> idea
@KamushekDev with IProgress we can start reporting progress with precision to a percentage, and let the caller decide what he wants to display.
2020-08-23 13:51:21 +02:00
JustArchi
717257ec9b Misc
@KamushekDev when you subscribe to things like this, it's always worth having try finally block ensuring that you unsubscribe, even in case of unhandled exception in the middle.
2020-08-23 13:14:17 +02:00
Kamushek
a15a6e6fe7 IProgress (#1945) 2020-08-23 13:07:22 +02:00
JustArchi
02c6fa734e Bump 2020-08-23 00:03:49 +02:00
JustArchi
c81122d745 Bump to 4.3.0.0 2020-08-23 00:03:23 +02:00
Łukasz Domeradzki
9fc1ea65a5 Closes #1543 (#1944)
* Start working on nullable checks

help me

* Update GlobalConfig.cs

* Finish initial fixup round

* nullability code review
2020-08-22 21:41:01 +02:00
dependabot-preview[bot]
e5f64ec9dd Bump NLog from 4.7.3 to 4.7.4
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.3 to 4.7.4.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-22 11:04:49 +00:00
JustArchi
d7e7d85a40 Fix ASF failing on non-uppercase 2FA chars 2020-08-22 00:58:06 +02:00
GitHub Action
c7ffa5a572 Automatic translations update 2020-08-21 02:07:50 +00:00
dependabot-preview[bot]
b18d97a4ed Bump ASF-ui from 74f0562 to 6e7611d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `74f0562` to `6e7611d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](74f056221d...6e7611d2db)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-21 01:32:17 +00:00
dependabot-preview[bot]
2cc6b1af11 Bump Microsoft.NET.Test.Sdk from 16.7.0 to 16.7.1
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.7.0 to 16.7.1.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](https://github.com/microsoft/vstest/compare/v16.7.0...v16.7.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-21 01:29:28 +00:00
JustArchi
e21994d54c Remove deprecated endpoints 2020-08-20 16:11:10 +02:00
GitHub Action
55fcb5908f Automatic translations update 2020-08-20 02:07:51 +00:00
JustArchi
8c40eb69d5 Bump 2020-08-18 14:30:21 +02:00
JustArchi
28fa7ac538 Migrate lock-bot to GitHub actions 2020-08-18 11:44:36 +02:00
GitHub Action
3292816967 Automatic translations update 2020-08-18 02:08:02 +00:00
dependabot-preview[bot]
19aa60cccd Bump Markdig.Signed from 0.20.0 to 0.21.1
Bumps [Markdig.Signed](https://github.com/lunet-io/markdig) from 0.20.0 to 0.21.1.
- [Release notes](https://github.com/lunet-io/markdig/releases)
- [Changelog](https://github.com/lunet-io/markdig/blob/master/changelog.md)
- [Commits](https://github.com/lunet-io/markdig/compare/0.20.0...0.21.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-17 11:41:42 +00:00
GitHub Action
0efb3eea8e Automatic translations update 2020-08-17 02:07:58 +00:00
JustArchi
1a6e554ee9 Misc correction towards previous commit 2020-08-16 13:39:01 +02:00
JustArchi
8587667e27 Handle InvalidPassword Steam screwup
Works exactly the same as TwoFactorCodeMismatch, apparently it's too hard for Valve to tell the client "hey, our password validator module is currently down and we're unable to log you in", no, "INVALID PASSWORD" is the right answer.
2020-08-16 13:33:05 +02:00
GitHub Action
0c79b17163 Automatic translations update 2020-08-16 02:07:47 +00:00
GitHub Action
0a5ac68df4 Automatic translations update 2020-08-14 02:07:58 +00:00
GitHub Action
64eda2b44f Automatic translations update 2020-08-13 02:07:53 +00:00
dependabot-preview[bot]
3e978f44e7 Bump ASF-ui from f6e73f9 to 74f0562
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `f6e73f9` to `74f0562`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](f6e73f9c90...74f056221d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-13 01:23:11 +00:00
dependabot-preview[bot]
370ab4f5d0 Bump Microsoft.Extensions.Configuration.Json from 3.1.6 to 3.1.7
Bumps [Microsoft.Extensions.Configuration.Json](https://github.com/aspnet/Extensions) from 3.1.6 to 3.1.7.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-11 15:07:12 +00:00
dependabot-preview[bot]
8e84dd0af6 Bump Microsoft.AspNetCore.Mvc.NewtonsoftJson from 3.1.6 to 3.1.7
Bumps [Microsoft.AspNetCore.Mvc.NewtonsoftJson](https://github.com/aspnet/AspNetCore) from 3.1.6 to 3.1.7.
- [Release notes](https://github.com/aspnet/AspNetCore/releases)
- [Commits](https://github.com/aspnet/AspNetCore/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-11 14:48:39 +00:00
dependabot-preview[bot]
f2875b1b2b Bump Microsoft.Extensions.Logging.Configuration from 3.1.6 to 3.1.7
Bumps [Microsoft.Extensions.Logging.Configuration](https://github.com/aspnet/Extensions) from 3.1.6 to 3.1.7.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-11 14:40:44 +00:00
JustArchi
702a525893 Bump 2020-08-11 11:52:33 +02:00
JustArchi
c4c11cf61f Update Strings.resx 2020-08-11 11:44:32 +02:00
JustArchi
06b1b8deeb Misc trade logging enhancements 2020-08-11 11:34:32 +02:00
GitHub Action
0beb000d4b Automatic translations update 2020-08-11 02:07:38 +00:00
dependabot-preview[bot]
acc871e609 Bump ASF-ui from 6e066d0 to f6e73f9
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `6e066d0` to `f6e73f9`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](6e066d0edc...f6e73f9c90)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-11 01:28:55 +00:00
dependabot-preview[bot]
e8545176e7 Bump wiki from 424e013 to c04af74
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `424e013` to `c04af74`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](424e0133fd...c04af74ce5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-11 01:22:20 +00:00
JustArchi
532a47bda5 Update config.yml 2020-08-11 01:10:30 +02:00
JustArchi
ddc2d956ba Misc 2020-08-11 01:07:15 +02:00
JustArchi
563f57e3aa Keep readme in project's root
Even if it's not critical, it's a good practice to have a readme, not to mention that it can be used in other sources, such as docker page
2020-08-11 01:06:27 +02:00
JustArchi
0a973cefd2 Move non-critical md resources into .github directory 2020-08-11 01:05:16 +02:00
JustArchi
2563ade159 Bump 2020-08-10 15:07:37 +02:00
JustArchi
1763a109c4 Move new handle under /Confirmations root 2020-08-10 14:57:04 +02:00
JustArchi
f57b5a2166 Use unified name instead of full name
Handles Class<T> better
2020-08-10 14:42:50 +02:00
JustArchi
7210e6b86c Misc 2020-08-10 14:04:06 +02:00
JustArchi
6b241d7439 Maintain backwards compatibility 2020-08-10 14:02:28 +02:00
JustArchi
833995ca61 Fix swaggergen generation
By avoiding a possibility of multiple conflicting types having the same name.

I'm not sure why this isn't the default behaviour, seems silly to me.
2020-08-10 13:41:07 +02:00
JustArchi
40531e9554 Misc
damn sneaky boi
2020-08-10 13:25:46 +02:00
JustArchi
7a5a9c8a51 Enhance TwoFactorAuthentication/Confirmations IPC API by allowing to specify additional parameters 2020-08-10 13:24:12 +02:00
GitHub Action
daae97b3d4 Automatic translations update 2020-08-10 02:07:36 +00:00
dependabot-preview[bot]
eeeaacb4db Bump wiki from 67094f0 to 5fed7f3
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `67094f0` to `5fed7f3`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](67094f0241...5fed7f38d7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-10 01:28:34 +00:00
dependabot-preview[bot]
5324a9127d Bump ASF-ui from eae9c22 to 6e066d0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `eae9c22` to `6e066d0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](eae9c22d4d...6e066d0edc)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-10 01:23:22 +00:00
JustArchi
bbd267d4f0 Validate SteamTradeToken against length of 8 2020-08-10 00:49:19 +02:00
GitHub Action
53495e34e5 Automatic translations update 2020-08-09 02:07:29 +00:00
JustArchi
7026d8b0d5 Remove ASF-WebConfigGenerator as git submodule
We still use the project and it's not going anywhere, but it's no longer required to be linked directly in ASF core repo. Previously it was linked for translations process, but since it's standalone now, nothing in ASF core references it anymore.

We still need ASF-ui and wiki though, first one as dependency during ASF build process, and second one as we're aiding translation process for that one.
2020-08-09 02:27:42 +02:00
GitHub Action
a3b57ac50e Automatic translations update 2020-08-08 02:07:19 +00:00
GitHub Action
4910692576 Automatic translations update 2020-08-07 02:07:40 +00:00
dependabot-preview[bot]
5147835d48 Bump ASF-ui from 01e264f to eae9c22
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `01e264f` to `eae9c22`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](01e264f173...eae9c22d4d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-07 01:37:41 +00:00
dependabot-preview[bot]
3a8d79d4da Bump ASF-WebConfigGenerator from 82ebd9a to 146a4ef
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `82ebd9a` to `146a4ef`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](82ebd9af65...146a4ef861)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-07 01:28:12 +00:00
dependabot-preview[bot]
f1684c11a3 Bump wiki from 6a123c4 to dccfd6d
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `6a123c4` to `dccfd6d`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](6a123c4dda...dccfd6d509)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-07 01:22:55 +00:00
JustArchi
f38b6ef6dd Misc
No longer needed
2020-08-06 20:07:14 +02:00
Vitaliy
d895f3e4bb Fix trace log line in checking eligibility for matching (#1927) 2020-08-06 19:04:04 +02:00
Vitaliy
e8b7d7d908 Add trade hold logic to MatchActively (#1926) 2020-08-06 19:03:15 +02:00
dependabot-preview[bot]
e7195b0e68 Bump Microsoft.NET.Test.Sdk from 16.6.1 to 16.7.0
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.6.1 to 16.7.0.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](https://github.com/microsoft/vstest/compare/v16.6.1...v16.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-06 12:34:46 +00:00
JustArchi
2983ede83d Update Directory.Build.props 2020-08-06 13:05:38 +02:00
dependabot-preview[bot]
091a6eabb6 Bump ASF-ui from fa5da6d to 01e264f
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `fa5da6d` to `01e264f`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](fa5da6d5ee...01e264f173)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-06 01:34:57 +00:00
dependabot-preview[bot]
63a793c22a Bump ASF-WebConfigGenerator from e545e1d to 82ebd9a
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `e545e1d` to `82ebd9a`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](e545e1d00d...82ebd9af65)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-06 01:22:38 +00:00
JustArchi
9d91644ed7 Try to avoid hardcoding repo name 2020-08-04 00:47:26 +02:00
JustArchi
813f8972f3 Merge branch 'master' of https://github.com/JustArchiNET/ArchiSteamFarm 2020-08-03 23:46:57 +02:00
JustArchi
ea22da2c9b Finish adding cron translations
Closes #943

Good night ArchiCrowdin, you never disappointed me.
2020-08-03 23:46:35 +02:00
GitHub Action
99536142bc Automatic translations update 2020-08-03 21:41:16 +00:00
JustArchi
3a11e79748 Update translations.yml 2020-08-03 23:39:56 +02:00
JustArchi
ad1b79270f Update translations.yml 2020-08-03 23:28:23 +02:00
JustArchi
a7417f1a1f Update translations.yml 2020-08-03 23:06:18 +02:00
JustArchi
db1ba37b59 Add cron action for automatic translations pull
Testing for now, if everything works properly, I'll update the schedule
2020-08-03 22:55:08 +02:00
dependabot-preview[bot]
1f60265502 Bump ASF-ui from deffada to fa5da6d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `deffada` to `fa5da6d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](deffada7f4...fa5da6d5ee)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-03 01:31:21 +00:00
dependabot-preview[bot]
463ba3dcf9 Bump ASF-WebConfigGenerator from af2c509 to e545e1d
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `af2c509` to `e545e1d`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](af2c509732...e545e1d00d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-03 01:21:51 +00:00
dependabot-preview[bot]
948f85bcb6 Bump NLog.Web.AspNetCore from 4.9.2 to 4.9.3
Bumps [NLog.Web.AspNetCore](https://github.com/NLog/NLog.Web) from 4.9.2 to 4.9.3.
- [Release notes](https://github.com/NLog/NLog.Web/releases)
- [Changelog](https://github.com/NLog/NLog.Web/blob/master/CHANGELOG.MD)
- [Commits](https://github.com/NLog/NLog.Web/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-01 17:22:15 +00:00
dependabot-preview[bot]
dcd2bfa65b Bump NLog from 4.7.2 to 4.7.3
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.2 to 4.7.3.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/v4.7.3/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/compare/v4.7.2...v4.7.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-31 23:12:04 +00:00
JustArchi
b9ca301acc Update CODE_OF_CONDUCT.md 2020-08-01 00:55:28 +02:00
JustArchi
2f6a45d4b7 Update CODE_OF_CONDUCT.md 2020-08-01 00:52:59 +02:00
JustArchi
32d25937cb Replace ArchiCrowdin with Crowdin GitHub action 2020-07-31 22:36:36 +02:00
JustArchi
3fe9af3afa Move crowdin API key under organization 2020-07-31 21:15:48 +02:00
JustArchi
28c869f177 Move crowdin strings upload from AppVeyor to Github Actions 2020-07-31 21:02:33 +02:00
JustArchi
a003db77e4 Move github releases publishing from AppVeyor to GitHub actions 2020-07-31 20:35:28 +02:00
JustArchi
c6b80083b8 Translations update 2020-07-31 14:22:16 +02:00
dependabot-preview[bot]
f58b400364 Bump ASF-ui from 2e94662 to ce444dd
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `2e94662` to `ce444dd`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](2e946620de...ce444dd7b5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-31 01:29:10 +00:00
dependabot-preview[bot]
bcfe69981d Bump ASF-WebConfigGenerator from 49285e2 to 23d48e3
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `49285e2` to `23d48e3`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](49285e23b3...23d48e39c3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-31 01:22:50 +00:00
dependabot-preview[bot]
53b7017d12 Bump ASF-WebConfigGenerator from 2946887 to 49285e2
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `2946887` to `49285e2`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](29468872fb...49285e23b3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-30 01:36:43 +00:00
dependabot-preview[bot]
2c17c5ed78 Bump ASF-ui from 7710983 to 2e94662
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7710983` to `2e94662`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](77109836e2...2e946620de)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-30 01:23:16 +00:00
dependabot-preview[bot]
40347fa73b Bump ASF-ui from 3e8e5a4 to 7710983
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `3e8e5a4` to `7710983`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](3e8e5a4778...77109836e2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-28 01:32:27 +00:00
dependabot-preview[bot]
e01012b99e Bump ASF-ui from acfae23 to 3e8e5a4
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `acfae23` to `3e8e5a4`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](acfae23dd5...3e8e5a4778)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-27 01:29:15 +00:00
dependabot-preview[bot]
ded3ed510e Bump ASF-WebConfigGenerator from 3ff8b28 to 2946887
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `3ff8b28` to `2946887`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](3ff8b28492...29468872fb)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-27 01:23:18 +00:00
dependabot-preview[bot]
1731a7e8ba Bump ASF-ui from dc09ece to acfae23
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `dc09ece` to `acfae23`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](dc09ece217...acfae23dd5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-24 01:23:36 +00:00
JustArchi
9af75aca5d Closes #1907 2020-07-23 21:36:05 +02:00
dependabot-preview[bot]
9a54e48d75 Bump ASF-ui from 77efb37 to dc09ece
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `77efb37` to `dc09ece`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](77efb37d7a...dc09ece217)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-23 01:22:52 +00:00
JustArchi
cdfc8e7e1b Misc
Those were spotted by ArchiBot
2020-07-22 22:37:22 +02:00
dependabot-preview[bot]
0a06133d3d Bump ASF-ui from 6e1a01b to 77efb37
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `6e1a01b` to `77efb37`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](6e1a01b250...77efb37d7a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-21 01:27:08 +00:00
dependabot-preview[bot]
1f28ff2ab6 Bump wiki from a99f4b7 to 3c126f2
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `a99f4b7` to `3c126f2`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](a99f4b7ad6...3c126f2961)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-20 01:31:01 +00:00
dependabot-preview[bot]
99615a36d7 Bump ASF-ui from 4544418 to 6e1a01b
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `4544418` to `6e1a01b`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](4544418596...6e1a01b250)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-20 01:23:16 +00:00
JustArchi
59c743ca8d Use Version in ASFResponse
This is non-breaking, version is already serialized as string by default
2020-07-19 12:54:15 +02:00
JustArchi
01027e4f35 How about NOT reinventing the wheel? 2020-07-19 00:50:19 +02:00
JustArchi
4d675f579d Correct netf builds to serialize version objects as strings
.NET Core builds are already doing that by default
2020-07-19 00:38:05 +02:00
JustArchi
02ee3bce53 Closes #1900
Also make token generation slightly faster while we're at it
2020-07-18 13:53:26 +02:00
dependabot-preview[bot]
d053b07974 Bump ASF-ui from b85ecb6 to 4544418
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b85ecb6` to `4544418`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b85ecb6009...4544418596)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-17 01:30:29 +00:00
dependabot-preview[bot]
2668cc2bd0 Bump ASF-ui from fa39ffc to b85ecb6
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `fa39ffc` to `b85ecb6`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](fa39ffc8d6...b85ecb6009)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-16 01:23:05 +00:00
JustArchi
d776e483cf Misc 2020-07-15 16:43:59 +02:00
dependabot-preview[bot]
3e9672bf30 Bump ASF-WebConfigGenerator from b5ea925 to 3ff8b28
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `b5ea925` to `3ff8b28`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](b5ea925d05...3ff8b28492)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-15 01:30:02 +00:00
dependabot-preview[bot]
70ab6dafd3 Bump ASF-ui from a14d1b3 to fa39ffc
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `a14d1b3` to `fa39ffc`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](a14d1b3ecf...fa39ffc8d6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-15 01:22:16 +00:00
dependabot-preview[bot]
fb97e653cc Bump Microsoft.Extensions.Configuration.Json from 3.1.5 to 3.1.6
Bumps [Microsoft.Extensions.Configuration.Json](https://github.com/aspnet/Extensions) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-14 16:01:55 +00:00
dependabot-preview[bot]
a5f8fbdf80 Bump Microsoft.Extensions.Logging.Configuration from 3.1.5 to 3.1.6
Bumps [Microsoft.Extensions.Logging.Configuration](https://github.com/aspnet/Extensions) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-14 15:37:02 +00:00
dependabot-preview[bot]
2b1a3f6eb3 Bump Microsoft.AspNetCore.Mvc.NewtonsoftJson from 3.1.5 to 3.1.6
Bumps [Microsoft.AspNetCore.Mvc.NewtonsoftJson](https://github.com/aspnet/AspNetCore) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/aspnet/AspNetCore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/master/docs/CrossRepoBreakingChanges.md)
- [Commits](https://github.com/aspnet/AspNetCore/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-14 15:35:56 +00:00
JustArchi
5839901e57 Bump 2020-07-13 18:48:36 +02:00
JustArchi
85466d8b5a Translations update 2020-07-13 17:55:49 +02:00
JustArchi
b6446f5dd2 Translations update 2020-07-10 21:28:16 +02:00
JustArchi
978e6a3d0c Change acceptedTradeOfferIDs into acceptedCreatorIDs
This makes it possible to accept other confirmation types than trading if they follow the same logic with creator ID. If somebody wants to ensure that he's accepting only trades with given IDs, then he should combine it with acceptedType, which is already supported and expected.

This makes it possible to use ASF's HandleTwoFactorAuthenticationConfirmations() e.g. for market listings in custom plugins.

Answers the remaining part of #1891
2020-07-10 00:40:11 +02:00
JustArchi
56cc106c11 Misc 2020-07-10 00:31:27 +02:00
JustArchi
97e5969362 Closes #1891 2020-07-10 00:28:46 +02:00
dependabot-preview[bot]
0192bb5491 Bump ASF-WebConfigGenerator from f917c60 to b5ea925
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `f917c60` to `b5ea925`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](f917c604cc...b5ea925d05)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-09 01:23:37 +00:00
dependabot-preview[bot]
608f30e32f Bump ASF-ui from f6522e9 to 83231ca
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `f6522e9` to `83231ca`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](f6522e98ce...83231ca7a9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-08 01:25:12 +00:00
JustArchi
949af6b22c Candidate for the most useless code commit of 2020
OCD is killing me
2020-07-07 17:21:07 +02:00
dependabot-preview[bot]
3b6ec4bf5e Bump ASF-ui from e2bb188 to f6522e9
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e2bb188` to `f6522e9`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e2bb188c5b...f6522e98ce)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 01:25:57 +00:00
dependabot-preview[bot]
1647674da0 Bump ASF-ui from bd00b29 to e2bb188
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `bd00b29` to `e2bb188`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](bd00b29fcf...e2bb188c5b)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-06 01:22:30 +00:00
JustArchi
01aa08f0a3 Bump SK2 to 2.3.0 and handle new PICS update fields 2020-07-06 00:03:13 +02:00
JustArchi
f7647f851a Fix uptime calculation for non-utc machines 2020-07-05 14:09:24 +02:00
JustArchi
cfdec679f1 Bump 2020-07-05 12:36:42 +02:00
JustArchi
3fe8ea27ba Translations update 2020-07-05 12:32:22 +02:00
JustArchi
ddf03547a3 Fix remaining brain damage 2020-07-05 12:05:06 +02:00
Vitaliy
f0748dbf42 Fix crash caused by incorrect string formatting (#1885) 2020-07-05 12:01:07 +02:00
JustArchi
e14df4f83b Misc 2020-07-05 00:58:59 +02:00
JustArchi
4ead85965a Add another superpower: fetching 2FA deviceID automatically 2020-07-05 00:45:13 +02:00
JustArchi
0ce04415ea Rewrite HasPublicInventory() from AWH to AH
Feels good man
2020-07-04 23:43:49 +02:00
JustArchi
87fb343828 Add uptime to stats command 2020-07-04 12:13:31 +02:00
JustArchi
43a36c4f6c Print failed http status codes even when not debugging
Debugging logs every status code, I believe error status codes should be logged even when not debugging, we do not expect those to happen on usual basis, even with Steam
2020-07-03 18:54:13 +02:00
dependabot-preview[bot]
3da90114d1 Bump ASF-ui from 9797358 to 75f9e8b
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `9797358` to `75f9e8b`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](9797358ccc...75f9e8b709)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-02 01:31:17 +00:00
dependabot-preview[bot]
f74253584b Bump wiki from ce7fa84 to 42f9404
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `ce7fa84` to `42f9404`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](ce7fa848bf...42f9404f5d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-02 01:23:52 +00:00
JustArchi
6ca4372d1b Misc bulletproofing against invalid codes 2020-07-01 15:22:59 +02:00
dependabot-preview[bot]
9718160aeb Bump ASF-WebConfigGenerator from c62b75a to f917c60
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `c62b75a` to `f917c60`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](c62b75a7a8...f917c604cc)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-01 01:33:13 +00:00
dependabot-preview[bot]
283f0c53f0 Bump ASF-ui from 687532c to 9797358
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `687532c` to `9797358`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](687532c602...9797358ccc)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-01 01:28:26 +00:00
dependabot-preview[bot]
201372f9e8 Bump ASF-ui from 05699a0 to 687532c
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `05699a0` to `687532c`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](05699a07ce...687532c602)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-30 01:31:06 +00:00
dependabot-preview[bot]
e63274e6c0 Bump wiki from 6bc6f03 to ce7fa84
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `6bc6f03` to `ce7fa84`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](6bc6f038c7...ce7fa848bf)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-29 01:29:25 +00:00
dependabot-preview[bot]
7ff0579875 Bump ASF-ui from e3da5e5 to 05699a0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e3da5e5` to `05699a0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e3da5e5f7a...05699a07ce)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-29 01:24:07 +00:00
JustArchi
e0ba773e78 Make GetFirstSteamMasterID() fall back to SteamOwnerID in case no master users are specified 2020-06-27 15:27:00 +02:00
JustArchi
bdf924918e Also set initialized to false at session check
Even if refresh doesn't happen, it's still not initialized
2020-06-26 14:40:09 +02:00
JustArchi
f0401f2b47 Reset Initialized back to false on session refresh trigger
Otherwise we might get sessionID being null in a very tiny window between Steam invalidating it in our cookie container and ASF not yet having the new one
2020-06-26 14:22:58 +02:00
JustArchi
bddf099323 Misc 2020-06-26 12:14:33 +02:00
JustArchi
0580c8ae55 Bump 2020-06-26 11:23:24 +02:00
JustArchi
ac007a7d12 Translations update 2020-06-26 11:01:12 +02:00
JustArchi
d5c55407b3 Misc 2020-06-26 10:57:11 +02:00
Vitaliy
42ad54e3df Add new item types (#1871) 2020-06-26 10:52:21 +02:00
Vitaliy
d13da54dab Fix getting privacy settings (#1866)
* Fix getting privacy settings

* Cleanup

* Misc
2020-06-26 10:52:06 +02:00
dependabot-preview[bot]
21efa0371a Bump Swashbuckle.AspNetCore.Newtonsoft from 5.5.0 to 5.5.1
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.5.0 to 5.5.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.5.0...v5.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-25 22:24:55 +00:00
dependabot-preview[bot]
ebf91cf98c Bump Swashbuckle.AspNetCore.Annotations from 5.5.0 to 5.5.1
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.5.0 to 5.5.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.5.0...v5.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-25 22:01:25 +00:00
dependabot-preview[bot]
4f4cf083ad Bump Swashbuckle.AspNetCore from 5.5.0 to 5.5.1
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.5.0 to 5.5.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.5.0...v5.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-25 21:40:11 +00:00
dependabot-preview[bot]
a6a1781ab9 Bump ASF-ui from 1ea7589 to 53684df
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `1ea7589` to `53684df`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](1ea7589aef...53684df966)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-25 17:02:51 +00:00
JustArchi
3f3a00e457 Correct ASF-ui deploy type for github actions 2020-06-25 18:44:10 +02:00
JustArchi
0382663191 Misc 2020-06-25 17:53:37 +02:00
JustArchi
f838b3389b Bullet-proofing 2020-06-25 17:42:49 +02:00
JustArchi
73885f117a Simply x-definition 2020-06-25 17:36:05 +02:00
JustArchi
0bde6ed45f Implement EnumSchemaFilter for swagger 2020-06-25 17:07:58 +02:00
JustArchi
f550d65897 Append flags format to flags enum types in swagger 2020-06-25 15:40:04 +02:00
JustArchi
5246b2b82d Always serialize default values in API case, and never in save case 2020-06-25 14:05:39 +02:00
JustArchi
6e99d5beed Start using StringEnumConverter
In preparation for new ASF-ui code
2020-06-24 23:34:57 +02:00
JustArchi
69936d55b6 Add GET /Api/Plugins endpoint,
In regards to https://github.com/JustArchiNET/ASF-ui/issues/1015
2020-06-24 20:54:41 +02:00
JustArchi
d191820317 Expose STDP global config schema in swagger and tag it 2020-06-24 20:49:55 +02:00
JustArchi
c144c1761d Bump 2020-06-24 19:38:11 +02:00
JustArchi
267f7b1e53 Closes #1862 2020-06-24 19:34:39 +02:00
JustArchi
c45364ef99 +x for hooks/build 2020-06-24 18:55:42 +02:00
dependabot-preview[bot]
a2542a8c12 Bump ASF-ui from b74e430 to 1ea7589
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b74e430` to `1ea7589`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b74e43068e...1ea7589aef)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-24 01:29:00 +00:00
dependabot-preview[bot]
2e2fb1828d Bump ASF-WebConfigGenerator from 5efdaf9 to c62b75a
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `5efdaf9` to `c62b75a`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](5efdaf96ac...c62b75a7a8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-24 01:22:25 +00:00
JustArchi
f007f30c0d Bump 2020-06-23 00:09:57 +02:00
JustArchi
74881094ab Never allow clearing of OwnedPackageIDs, especially on invalid Valve callbacks 2020-06-23 00:09:27 +02:00
JustArchi
ee98282475 Bump 2020-06-22 17:28:58 +02:00
JustArchi
e49ec14c41 Translations update 2020-06-22 16:49:23 +02:00
JustArchi
56f4604819 Misc 2020-06-22 16:43:02 +02:00
JustArchi
56eb5ba8a8 Misc 2020-06-22 16:41:54 +02:00
JustArchi
8206dff4c1 Slightly improve session refresh
Previous solution of assuming that session is valid for at least N amount of seconds is pretty optimistic, too optimistic for real usage, instead, we won't assume anything like that and force every request to go through session refresh, but at the same time limit session refresh checks to just one at a time - if additional requests asked for session refresh, they'll use already-calculated value.

This way sending 100 requests at once won't always trigger 100 session refreshes but most likely around 2-3, while still allowing ASF to check session refresh with every request, if deemed necessary (due to delay between session checks
2020-06-22 16:40:49 +02:00
JustArchi
f7426a4439 Bump 2020-06-21 11:26:21 +02:00
JustArchi
c478ca691d Translations update 2020-06-21 11:25:23 +02:00
JustArchi
a3ff3cafa4 Skip 5 minutes wait if we didn't send any trade 2020-06-21 11:21:15 +02:00
JustArchi
313d353ae5 Misc edge case 2020-06-21 01:05:54 +02:00
JustArchi
dabf391576 Bump 2020-06-21 00:45:35 +02:00
JustArchi
8ad552b0da Slightly improve ASF's algorithm for picking users to match 2020-06-21 00:44:24 +02:00
JustArchi
c16c25da77 Translations update 2020-06-21 00:19:15 +02:00
JustArchi
aa1fc829b7 Misc 2020-06-21 00:15:06 +02:00
JustArchi
e5eea110f1 Skip fair bots with huge inventories when active matching 2020-06-21 00:06:17 +02:00
JustArchi
2e5828779f Update Bug_report.md 2020-06-20 17:55:40 +02:00
JustArchi
cc2e73ae5a Misc 2020-06-20 17:12:18 +02:00
dependabot-preview[bot]
b89840f103 Bump Swashbuckle.AspNetCore from 5.4.1 to 5.5.0
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.1...v5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 10:25:06 +00:00
dependabot-preview[bot]
12b32472ba Bump Swashbuckle.AspNetCore.Newtonsoft from 5.4.1 to 5.5.0
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.1...v5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 10:03:24 +00:00
dependabot-preview[bot]
86ac2ade1e Bump Swashbuckle.AspNetCore.Annotations from 5.4.1 to 5.5.0
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.1...v5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-19 09:38:34 +00:00
JustArchi
a180c46b5d Update config.yml 2020-06-19 10:12:41 +02:00
JustArchi
34555f8bb5 Bump 2020-06-18 23:42:14 +02:00
JustArchi
4db8826e4d Translations update 2020-06-18 23:40:54 +02:00
Vitaliy
69358541bf Add Summer Sale 2020 to blacklist (#1853) 2020-06-18 19:38:09 +02:00
dependabot-preview[bot]
896c92b678 Bump ASF-ui from 9f21342 to ab1d058
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `9f21342` to `ab1d058`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](9f21342fa2...ab1d0580cd)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-18 01:21:51 +00:00
JustArchi
6ef52c5184 Bump 2020-06-16 10:11:23 +02:00
JustArchi
5b098b79a5 Translations update 2020-06-16 10:09:13 +02:00
JustArchi
2cab6c82e4 Closes #1849 2020-06-16 10:04:51 +02:00
dependabot-preview[bot]
91d3012581 Bump wiki from 3e4e676 to 01c86ed
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `3e4e676` to `01c86ed`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](3e4e6768f9...01c86ed121)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-16 01:29:23 +00:00
dependabot-preview[bot]
354b60db53 Bump ASF-ui from 74be05f to 9f21342
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `74be05f` to `9f21342`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](74be05f734...9f21342fa2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-16 01:22:44 +00:00
JustArchi
fd89c42e48 Bump 2020-06-15 23:42:27 +02:00
JustArchi
79a862dd0e Translations update 2020-06-15 23:32:38 +02:00
JustArchi
54a20246db Use CrossProcessFileBasedSemaphore exclusively
Our reference implementation actually doesn't release the wait handle on process exit, which defeats the purpose. Use file-based semaphore on all OSes as it works reliably.
2020-06-15 23:28:52 +02:00
JustArchi
822bfc239f Move ToLongRunningTask into ASF core and start making use of it 2020-06-15 16:55:57 +02:00
JustArchi
f80bf929f7 Update SharedInfo.cs 2020-06-15 16:31:26 +02:00
JustArchi
e201d88e7a Modify AppInfosPerSingleRequest for STD 2020-06-15 16:25:28 +02:00
JustArchi
ce5443ca9a Closes #1848 2020-06-15 15:55:59 +02:00
JustArchi
4b570f7928 Handle token in cc.sh, misc 2020-06-15 13:45:17 +02:00
JustArchi
b5152eb852 Modify cc.sh and run.sh for plugin scenario 2020-06-15 13:21:56 +02:00
dependabot-preview[bot]
c5315be572 Bump wiki from b825f6d to bb4eadc
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `b825f6d` to `bb4eadc`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](b825f6ddbb...bb4eadc9f3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-15 01:29:11 +00:00
dependabot-preview[bot]
b4a2c76736 Bump ASF-ui from 17c5a77 to ca16eb4
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `17c5a77` to `ca16eb4`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](17c5a777b9...ca16eb4672)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-15 01:22:17 +00:00
JustArchi
53726a6a26 Bump 2020-06-14 15:25:50 +02:00
JustArchi
84ec2b7b26 Don't use a volume for plugins 2020-06-14 01:51:50 +02:00
JustArchi
336a8b5150 Update build 2020-06-14 01:42:53 +02:00
JustArchi
4a6480d223 Misc docker fixes 2020-06-14 01:36:04 +02:00
Sandro
017b26986b Fix Docker Image building with Steam Token Dumper, unify different Arches into one Dockerfile (#1845)
* Pass STEAM_TOKEN_DUMPER_TOKEN as --build-arg

* Unify different ARCHs Dockerfiles
2020-06-14 01:17:08 +02:00
JustArchi
6287bc85fe @abrynos improvements 2020-06-13 21:55:24 +02:00
JustArchi
2a54c7101f Bump 2020-06-13 21:47:19 +02:00
JustArchi
6804f5b5f7 Fix for multiple licenses for the same package 2020-06-13 21:45:37 +02:00
JustArchi
574e8739c1 Bump 2020-06-13 20:23:55 +02:00
JustArchi
89e3c9f76d Remove debugging leftover 2020-06-13 20:22:38 +02:00
JustArchi
2f45e28bae Bump 2020-06-13 19:05:54 +02:00
JustArchi
dd8a0a18c2 Translations update 2020-06-13 19:03:41 +02:00
JustArchi
a2edbe42ed Misc 2020-06-13 18:47:09 +02:00
JustArchi
b4f73263e6 Misc fix 2020-06-13 17:23:41 +02:00
JustArchi
513397ca0f Correct HasCustomPluginsLoaded check 2020-06-13 17:14:59 +02:00
JustArchi
abb702ffa3 Misc 2020-06-13 17:06:50 +02:00
JustArchi
a13569e5fb Add STEAM_TOKEN_DUMPER_TOKEN logic to docker images 2020-06-13 17:05:26 +02:00
JustArchi
84cd99468f Add compatibility with OS X 2020-06-13 16:25:13 +02:00
JustArchi
723824ee7d Set up STEAM_TOKEN_DUMPER_TOKEN 2020-06-13 16:14:37 +02:00
JustArchi
f6c1e217f0 STD: Fail on invalid tokens 2020-06-13 15:35:56 +02:00
JustArchi
4d1bca5e51 Introduce concept of official plugins 2020-06-13 15:09:12 +02:00
JustArchi
70bb1e865a Thanks .NET Framework 2020-06-13 15:06:07 +02:00
JustArchi
88b4856fe1 CIs: Start bundling the plugin with ASF 2020-06-13 14:45:41 +02:00
JustArchi
460689841a Allow update operation to handle official plugins 2020-06-13 14:44:52 +02:00
JustArchi
73014c71a1 Always schedule package for refresh on token change 2020-06-13 13:03:13 +02:00
JustArchi
0d8753f44e Fix possibility of package having no appIDs 2020-06-13 12:49:12 +02:00
JustArchi
2a43a87e08 Initial SteamTokenDumper upload 2020-06-13 12:08:21 +02:00
JustArchi
32b376d85a Open RNG for plugins 2020-06-12 13:00:32 +02:00
dependabot-preview[bot]
d40dbb2676 Bump wiki from ac4a50b to ce5a224
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `ac4a50b` to `ce5a224`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](ac4a50ba9d...ce5a2247a6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-12 01:36:15 +00:00
dependabot-preview[bot]
4cf4bae2e9 Bump ASF-ui from 198fe2f to 2a3c6a4
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `198fe2f` to `2a3c6a4`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](198fe2ff77...2a3c6a4df8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-12 01:28:13 +00:00
dependabot-preview[bot]
162ab3f693 Bump ASF-WebConfigGenerator from bb455ee to b0dee46
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `bb455ee` to `b0dee46`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](bb455ee233...b0dee46cab)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-12 01:27:43 +00:00
JustArchi
5f7978f21e Open OwnedPackageIDsReadOnly for plugin usage 2020-06-11 14:23:28 +02:00
dependabot-preview[bot]
3d95ba63e3 Bump wiki from 508359a to ac4a50b
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `508359a` to `ac4a50b`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](508359a397...ac4a50ba9d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-11 01:27:48 +00:00
dependabot-preview[bot]
55df09e04b Bump ASF-ui from 46007c0 to 198fe2f
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `46007c0` to `198fe2f`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](46007c0f12...198fe2ff77)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-11 01:22:33 +00:00
JustArchi
bdc3beb15a Do not report warning over having empty list of packagesData
It can be empty if we're not able to fetch any of given packageIDs, e.g. because of missing token.
2020-06-10 22:43:06 +02:00
dependabot-preview[bot]
fa7bb801db Bump Microsoft.Extensions.Logging.Configuration from 3.1.4 to 3.1.5
Bumps [Microsoft.Extensions.Logging.Configuration](https://github.com/aspnet/Extensions) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/compare/v3.1.4...v3.1.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-10 01:29:15 +00:00
dependabot-preview[bot]
e68d6acf94 Bump ASF-WebConfigGenerator from 024a6ef to bb455ee
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `024a6ef` to `bb455ee`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](024a6ef31b...bb455ee233)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-10 01:23:08 +00:00
JustArchi
a9c1d58ddc Misc 2020-06-09 23:09:13 +02:00
JustArchi
0fa4d5e2a6 Refactor package info and their access tokens, add ISteamPICSChanges plugin interface 2020-06-09 22:56:04 +02:00
JustArchi
3203daf787 Remove PICSSemaphore
It should be no longer needed
2020-06-09 19:45:12 +02:00
dependabot-preview[bot]
b576a97db0 Bump Microsoft.AspNetCore.Mvc.NewtonsoftJson from 3.1.4 to 3.1.5
Bumps [Microsoft.AspNetCore.Mvc.NewtonsoftJson](https://github.com/aspnet/AspNetCore) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/aspnet/AspNetCore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/master/docs/CrossRepoBreakingChanges.md)
- [Commits](https://github.com/aspnet/AspNetCore/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-09 15:18:40 +00:00
dependabot-preview[bot]
a461ad6835 Bump Microsoft.Extensions.Configuration.Json from 3.1.4 to 3.1.5
Bumps [Microsoft.Extensions.Configuration.Json](https://github.com/aspnet/Extensions) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-09 15:11:39 +00:00
dependabot-preview[bot]
33ab56dc03 Bump ASF-ui from 810095a to 46007c0
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `810095a` to `46007c0`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](810095a335...46007c0f12)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-09 01:22:16 +00:00
JustArchi
641766a828 Update config.yml 2020-06-08 18:04:31 +02:00
JustArchi
452b551e88 Create config.yml 2020-06-08 18:03:21 +02:00
JustArchi
d31fb4ff2b Bump 2020-06-08 16:11:14 +02:00
JustArchi
e325d58944 Translations update 2020-06-08 14:34:19 +02:00
JustArchi
185dde9d34 Address possible .NET Core tmp path change in #1812 2020-06-08 14:29:52 +02:00
dependabot-preview[bot]
04afb5b891 Bump MSTest.TestFramework from 2.1.1 to 2.1.2
Bumps [MSTest.TestFramework](https://github.com/microsoft/testfx) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/microsoft/testfx/releases)
- [Commits](https://github.com/microsoft/testfx/compare/v2.1.1...v2.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-08 12:16:16 +00:00
dependabot-preview[bot]
a7442e61b1 Bump MSTest.TestAdapter from 2.1.1 to 2.1.2
Bumps [MSTest.TestAdapter](https://github.com/microsoft/testfx) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/microsoft/testfx/releases)
- [Commits](https://github.com/microsoft/testfx/compare/v2.1.1...v2.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-08 11:53:38 +00:00
dependabot-preview[bot]
2a35de0afd Bump ASF-ui from 1dd2f37 to 84b84eb
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `1dd2f37` to `84b84eb`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](1dd2f3797c...84b84eb0fa)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-08 01:22:32 +00:00
JustArchi
5351e61687 Open SteamApps and SteamFriends for optional plugin usage 2020-06-07 21:07:19 +02:00
JustArchi
e83c468fba Misc 2020-06-07 21:06:41 +02:00
JustArchi
70cf69d9db Misc 2020-06-07 20:00:57 +02:00
JustArchi
a84d16a1dd Expose ASF's PackagesData for optional plugin usage 2020-06-07 20:00:06 +02:00
Vitaliy
ea3347b36d Accept HttpContent as data in WebBrowser (#1828) 2020-06-07 17:09:01 +02:00
JustArchi
2865259a6a Enable SK2 debug only with debugging config, not just debug build 2020-06-06 22:06:32 +02:00
JustArchi
cb6c5e2de2 Make it possible for WebBrowser to post custom data
While this isn't required for ASF (at least right now), it'll allow plugins to use ASF's WebBrowser for sending e.g. json to third-party endpoints.
2020-06-06 16:34:20 +02:00
JustArchi
a6a8dfb78b Bump 2020-06-06 15:06:32 +02:00
JustArchi
927f4c3a34 Translations update 2020-06-06 15:03:28 +02:00
Vitaliy
b8a6397533 Fix farming games with non-public package data (#1827)
* Use AccessTokens to retrieve package data, update SteamKit

* Force retrieving data about games with null AppIDs

* Change validation of OnlineStatus property
2020-06-06 15:00:05 +02:00
JustArchi
5afd22a507 Fix NRE with CustomGamePlayedWhileFarming 2020-06-06 11:14:05 +02:00
JustArchi
8c065bbe25 Bump 2020-06-05 17:47:53 +02:00
JustArchi
403a7d13a4 Translations update 2020-06-05 17:40:13 +02:00
JustArchi
28ebc497d8 Add awful workaround for #1812 2020-06-05 17:30:03 +02:00
dependabot-preview[bot]
a8a05fc4c0 Bump ASF-ui from c5d5dda to 2ef801e
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `c5d5dda` to `2ef801e`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](c5d5dda016...2ef801e5a0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-04 01:28:36 +00:00
dependabot-preview[bot]
f2df0d9e4a Bump wiki from fbf323f to 17d31b2
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `fbf323f` to `17d31b2`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](fbf323f2b3...17d31b209d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-04 01:22:26 +00:00
JustArchi
b47ecaa5f9 Remove unused string 2020-06-03 19:30:13 +02:00
JustArchi
a5d85a211d Add /Api/{Bots}/Input endpoint
Makes https://github.com/JustArchiNET/ASF-ui/issues/888 (and similar actions) possible
2020-06-03 19:26:59 +02:00
JustArchi
d9355ceab0 Unify NumberResponse as EResultResponse
Since it uses a number, very likely it is indeed EResult under the hood, and not just a boolean written as 0 and 1.
2020-06-03 16:52:08 +02:00
JustArchi
bc2cac5c08 Closes #1820
Those properties started being serialized the moment we opened them as part of PublicAPI, we do not intend to serialize them when sending to Steam.
2020-06-03 16:48:04 +02:00
dependabot-preview[bot]
e714778085 Bump wiki from f553b83 to fbf323f
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `f553b83` to `fbf323f`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](f553b838a9...fbf323f2b3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-03 01:28:14 +00:00
dependabot-preview[bot]
0be9bcef6b Bump ASF-ui from aec6c3b to c5d5dda
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `aec6c3b` to `c5d5dda`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](aec6c3b7b6...c5d5dda016)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-03 01:22:51 +00:00
JustArchi
2511eac165 Fix appveyor to use latest LTS node version 2020-06-02 19:20:55 +02:00
dependabot-preview[bot]
1343fbe15c Bump Humanizer from 2.8.25 to 2.8.26
Bumps [Humanizer](https://github.com/Humanizr/Humanizer) from 2.8.25 to 2.8.26.
- [Release notes](https://github.com/Humanizr/Humanizer/releases)
- [Changelog](https://github.com/Humanizr/Humanizer/blob/master/release_notes.md)
- [Commits](https://github.com/Humanizr/Humanizer/compare/v2.8.25...v2.8.26)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-02 13:46:35 +00:00
dependabot-preview[bot]
34eca6b0ea Bump Humanizer from 2.8.11 to 2.8.25
Bumps [Humanizer](https://github.com/Humanizr/Humanizer) from 2.8.11 to 2.8.25.
- [Release notes](https://github.com/Humanizr/Humanizer/releases)
- [Changelog](https://github.com/Humanizr/Humanizer/blob/master/release_notes.md)
- [Commits](https://github.com/Humanizr/Humanizer/compare/v2.8.11...v2.8.25)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-02 13:18:41 +00:00
JustArchi
1e0b874952 Use the same for multiple games 2020-06-02 13:21:02 +02:00
JustArchi
2c49920ea8 Allow CustomGamePlayedWhileFarming to make use of appID and gameName of the currently farmed title 2020-06-02 13:02:35 +02:00
JustArchi
291a214051 Update ci.yml 2020-06-01 18:21:48 +02:00
dependabot-preview[bot]
cb2225d420 Bump ASF-ui from af96b82 to aec6c3b
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `af96b82` to `aec6c3b`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](af96b829f9...aec6c3b7b6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-01 01:37:13 +00:00
dependabot-preview[bot]
66bc45f96e Bump wiki from da9e926 to f553b83
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `da9e926` to `f553b83`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](da9e92610e...f553b838a9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-01 01:27:11 +00:00
dependabot-preview[bot]
814b7324b6 Bump ASF-WebConfigGenerator from 7d5c696 to 93d6b1f
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `7d5c696` to `93d6b1f`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](7d5c69682e...93d6b1fdb1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-01 01:21:14 +00:00
dependabot-preview[bot]
69fb043e96 Bump ASF-WebConfigGenerator from 5bd96bb to 7d5c696
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `5bd96bb` to `7d5c696`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](5bd96bbd12...7d5c69682e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 01:28:10 +00:00
dependabot-preview[bot]
7a54acc8eb Bump ASF-ui from e6a42ba to af96b82
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e6a42ba` to `af96b82`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e6a42baf39...af96b829f9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-28 01:22:42 +00:00
JustArchi
2620c268b1 Bump 2020-05-27 23:30:47 +02:00
JustArchi
f255dd182d Translations update 2020-05-27 22:44:58 +02:00
JustArchi
149f2e679f Misc 2020-05-27 14:45:27 +02:00
Kamushek
800d10de96 Fixed NullPropagation (#1809)
* Fixed NullPropagation

* Changes to similar methods
2020-05-27 14:42:12 +02:00
JustArchi
90a9fbe6af Bump 2020-05-27 10:32:07 +02:00
JustArchi
e0935f1e70 Update ASF.cs 2020-05-27 10:30:47 +02:00
dependabot-preview[bot]
713cd19f47 Bump ASF-ui from e755c74 to c010ca1
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e755c74` to `c010ca1`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e755c74416...c010ca1e35)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 01:28:49 +00:00
dependabot-preview[bot]
07b3ab08b8 Bump ASF-WebConfigGenerator from 667e25f to 97c9d82
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `667e25f` to `97c9d82`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](667e25fa39...97c9d82fcb)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-27 01:22:44 +00:00
JustArchi
943788687d Bump 2020-05-26 23:54:54 +02:00
JustArchi
377ee76237 Translations update 2020-05-26 23:54:11 +02:00
JustArchi
b080adc069 Fix 2020-05-26 23:48:22 +02:00
JustArchi
52c10f2223 When declaring custom process group, use it exclusively 2020-05-26 23:32:54 +02:00
JustArchi
ac8df87e08 Add support for network groups, #1798 2020-05-26 23:24:43 +02:00
dependabot-preview[bot]
f4c288bc6e Bump ASF-ui from 7019b2d to 781a43a
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `7019b2d` to `781a43a`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](7019b2dfb3...781a43aa00)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 01:28:34 +00:00
dependabot-preview[bot]
b95c38ab38 Bump ASF-WebConfigGenerator from 296f453 to 5fdba70
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `296f453` to `5fdba70`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](296f453fd3...5fdba70b2e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-26 01:24:24 +00:00
JustArchi
bba2327aec Update ci.yml 2020-05-25 22:37:38 +02:00
JustArchi
35a5d8ca7f Bump 2020-05-24 11:14:38 +02:00
JustArchi
9eb2ab6dbb Translations update 2020-05-24 11:11:53 +02:00
Sandro
fad6e21dab Fix Docker Images (#1803) 2020-05-24 11:03:44 +02:00
JustArchi
f4c6481520 Bump 2020-05-24 00:28:57 +02:00
JustArchi
7930a652dd Correct UnixSetFileAccess to allow chmoding a directory 2020-05-24 00:17:36 +02:00
JustArchi
ee3a9cf6fd Bump 2020-05-23 20:55:09 +02:00
JustArchi
94a4211d63 Update Directory.Build.props 2020-05-23 20:13:04 +02:00
JustArchi
80daf47f60 Unify common ASF csproj properties under Directory.Build.props 2020-05-23 20:11:31 +02:00
JustArchi
8b0af8469e Remove some packages that .NET Framework no longer needs 2020-05-23 17:55:48 +02:00
JustArchi
a658bfcbde Update Startup.cs 2020-05-23 17:55:23 +02:00
JustArchi
832ceb8827 Move AccessControl under netcoreapp3.1
.NET Framework includes this natively
2020-05-23 17:45:44 +02:00
JustArchi
884283b7b1 Update README.md 2020-05-23 16:21:48 +02:00
JustArchi
dac0fee8d4 Update appveyor.yml 2020-05-23 16:06:00 +02:00
Łukasz Domeradzki
566470cf2e Update README.md 2020-05-23 16:01:47 +02:00
Łukasz Domeradzki
f76fcfbcae Update README.md 2020-05-23 16:00:57 +02:00
Łukasz Domeradzki
2b770deee8 Update README.md 2020-05-23 15:59:36 +02:00
Łukasz Domeradzki
6e8c72dc22 Add icons to readme 2020-05-23 15:58:33 +02:00
JustArchi
4cb91bd46c Update ASF.cs 2020-05-23 15:15:55 +02:00
JustArchi
437417dadd Translations update 2020-05-23 15:15:10 +02:00
JustArchi
9c20956ac5 Use MD5 hashing also for WebProxy 2020-05-22 21:47:59 +02:00
JustArchi
7c23250d83 Add ArchiSteamFarm.CustomPlugins.PeriodicGC 2020-05-22 11:48:02 +02:00
JustArchi
fe71dc8a99 Remove one finally too much 2020-05-22 10:45:48 +02:00
JustArchi
a261c555c9 Merge branch 'master' of https://github.com/JustArchiNET/ArchiSteamFarm 2020-05-22 10:35:17 +02:00
JustArchi
94637d4a91 Avoid excessive objects allocation 2020-05-22 10:35:07 +02:00
dependabot-preview[bot]
e337b3bb09 Bump wiki from 9892a76 to e95315c
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `9892a76` to `e95315c`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](9892a76ff0...e95315cb5a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-22 01:28:28 +00:00
dependabot-preview[bot]
a0eda50175 Bump ASF-ui from dc5f0b1 to d54ad09
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `dc5f0b1` to `d54ad09`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](dc5f0b139f...d54ad09dec)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-22 01:21:24 +00:00
JustArchi
d5d7a6a183 Update ArchiSteamFarm.csproj 2020-05-22 00:08:26 +02:00
JustArchi
5a2caab7fc Use MD5 for single instance path 2020-05-22 00:04:04 +02:00
JustArchi
8db90b6c2f Use hexadecimal strings for OS-wide resources
base64 slash character can cause problems with filepaths, besides, it's best to use ASCII only there due to various OS limitations
2020-05-21 23:42:32 +02:00
JustArchi
1c18fab68e Also chmod the directory for CrossProcessFileBasedSemaphore 2020-05-21 23:31:07 +02:00
JustArchi
42b59cd066 Update CrossProcessFileBasedSemaphore.cs 2020-05-21 23:09:53 +02:00
JustArchi
a47b85ff85 Allow CrossProcessFileBasedSemaphore to sleep asynchronously 2020-05-21 23:08:02 +02:00
JustArchi
0f1b3f05f9 Implement CrossProcessFileBasedSemaphore in place of CrossProcessMutexBasedSemaphore
Hopefully this one works better
2020-05-21 23:02:04 +02:00
JustArchi
01482e8dd0 Misc 2020-05-21 22:47:23 +02:00
JustArchi
771d8b3391 Do not attempt to join chat if the account is limited
It won't work anyway
2020-05-21 11:03:29 +02:00
JustArchi
9d17c5d791 Bump 2020-05-21 11:00:12 +02:00
JustArchi
0fe0e1a84d Disable cross-process semaphore on Linux for now 2020-05-21 10:51:57 +02:00
JustArchi
5d542fbf5e Merge branch 'master' of https://github.com/JustArchiNET/ArchiSteamFarm 2020-05-21 10:51:29 +02:00
dependabot-preview[bot]
72979ee309 Bump wiki from 297f6b9 to 9892a76
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `297f6b9` to `9892a76`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](297f6b9d8f...9892a76ff0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-21 01:22:09 +00:00
JustArchi
9054f03556 CI: Misc 2020-05-20 23:44:54 +02:00
JustArchi
6db61d164f Bump 2020-05-20 23:40:05 +02:00
JustArchi
9c7b9a6c7a Translations update 2020-05-20 23:36:32 +02:00
JustArchi
2b16198f22 Add LoginLimiter to cross-process semaphores 2020-05-20 23:09:27 +02:00
JustArchi
88bb631eea Update CrossProcessMutexBasedSemaphore.cs 2020-05-20 22:04:01 +02:00
JustArchi
6c22724835 Implement OS-wide, cross-process semaphores for ASF instances
Distinction is preserved on webproxy basis (even for LoginLimiter which shouldn't work like that)

Addresses crucial part of #1798
2020-05-20 22:01:29 +02:00
JustArchi
ab57163695 Update Logging.cs 2020-05-20 20:43:13 +02:00
dependabot-preview[bot]
e31b0403cd Bump ASF-ui from 4006f45 to dc5f0b1
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `4006f45` to `dc5f0b1`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](4006f452f6...dc5f0b139f)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-20 08:11:37 +00:00
dependabot-preview[bot]
2642268383 Bump ASF-WebConfigGenerator from f8508ae to 296f453
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `f8508ae` to `296f453`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](f8508ae8d7...296f453fd3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-20 07:58:02 +00:00
dependabot-preview[bot]
690dca0bd7 Bump ASF-ui from e66d641 to 4006f45
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e66d641` to `4006f45`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e66d6412e2...4006f452f6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-19 01:21:29 +00:00
dependabot-preview[bot]
28ba310b67 Bump NLog from 4.7.1 to 4.7.2
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.1 to 4.7.2.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-18 21:05:44 +00:00
JustArchi
a58b1bd4a3 Bump 2020-05-16 01:23:13 +02:00
JustArchi
9259043e6d Load NLog.config when not in AppContext.BaseDirectory instead
This is needed as custom NLog.config no longer gets loaded in single-file scenario, where NLog probes the directory of the unpacked files instead.

For non-single-publishes this doesn't change anything, as home directory is equal to base directory if not using custom path.
2020-05-16 00:54:28 +02:00
JustArchi
2d5b736e74 Bump 2020-05-15 23:26:09 +02:00
JustArchi
9fbbfe618b Translations update 2020-05-15 23:19:40 +02:00
JustArchi
3ace90432f Closes #1544 2020-05-15 17:43:09 +02:00
dependabot-preview[bot]
acd80a724d Bump NLog from 4.7.0 to 4.7.1
Bumps [NLog](https://github.com/NLog/NLog) from 4.7.0 to 4.7.1.
- [Release notes](https://github.com/NLog/NLog/releases)
- [Changelog](https://github.com/NLog/NLog/blob/v4.7.1/CHANGELOG.md)
- [Commits](https://github.com/NLog/NLog/compare/v4.7...v4.7.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-15 15:07:51 +00:00
Łukasz Domeradzki
57edf48d13 CI enhancements (#1789)
* Artifacts enhancements tests

* Update ci.yml

* More tests

* Update .travis.yml

* Update .travis.yml
2020-05-14 21:25:53 +02:00
dependabot-preview[bot]
eac5d2029f Bump ASF-WebConfigGenerator from 2e3c2e3 to 5492983
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `2e3c2e3` to `5492983`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](2e3c2e3582...5492983196)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 01:27:22 +00:00
dependabot-preview[bot]
bfc9d8f66a Bump ASF-ui from ce521ec to 44824ea
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `ce521ec` to `44824ea`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](ce521ecc5a...44824eaf3a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-14 01:23:54 +00:00
JustArchi
c01f588541 Revert "Use 2-part SDK channel for GitHub CI"
This reverts commit cda211a3d6.
2020-05-13 23:08:49 +02:00
JustArchi
cda211a3d6 Use 2-part SDK channel for GitHub CI
This should work now, I guess?
2020-05-13 23:06:30 +02:00
JustArchi
b527ee56b7 Update ci.yml 2020-05-13 23:02:12 +02:00
JustArchi
a3145251de Allow GitHub CI artifacts upload to fail
We might run into 429 rate limited when a lot of jobs are running at the same time, artifacts upload is not mandatory for verifying the build
2020-05-13 22:48:38 +02:00
dependabot-preview[bot]
5c2f0edadc Bump Microsoft.Extensions.Logging.Configuration from 3.1.3 to 3.1.4
Bumps [Microsoft.Extensions.Logging.Configuration](https://github.com/aspnet/Extensions) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-13 11:24:04 +00:00
dependabot-preview[bot]
af22b5158a Bump Microsoft.Extensions.Configuration.Json from 3.1.3 to 3.1.4
Bumps [Microsoft.Extensions.Configuration.Json](https://github.com/aspnet/Extensions) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/aspnet/Extensions/releases)
- [Commits](https://github.com/aspnet/Extensions/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-13 10:23:21 +00:00
dependabot-preview[bot]
80d4f377b0 Bump System.Collections.Immutable from 1.7.0 to 1.7.1
Bumps [System.Collections.Immutable](https://github.com/dotnet/corefx) from 1.7.0 to 1.7.1.
- [Release notes](https://github.com/dotnet/corefx/releases)
- [Commits](https://github.com/dotnet/corefx/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 17:30:15 +00:00
dependabot-preview[bot]
c611d1dee8 Bump Microsoft.AspNetCore.Mvc.NewtonsoftJson from 3.1.3 to 3.1.4
Bumps [Microsoft.AspNetCore.Mvc.NewtonsoftJson](https://github.com/aspnet/AspNetCore) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/aspnet/AspNetCore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/master/docs/CrossRepoBreakingChanges.md)
- [Commits](https://github.com/aspnet/AspNetCore/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 17:07:52 +00:00
dependabot-preview[bot]
56d430046a Bump System.Composition from 1.4.0 to 1.4.1
Bumps [System.Composition](https://github.com/dotnet/corefx) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/dotnet/corefx/releases)
- [Commits](https://github.com/dotnet/corefx/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 17:07:04 +00:00
dependabot-preview[bot]
30e9f36889 Bump ASF-ui from c6df93f to ce521ec
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `c6df93f` to `ce521ec`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](c6df93f63c...ce521ecc5a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-12 07:59:50 +00:00
dependabot-preview[bot]
11ceb1098f Bump ASF-WebConfigGenerator from b74c577 to 2e3c2e3
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `b74c577` to `2e3c2e3`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](b74c5774cd...2e3c2e3582)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-11 01:27:30 +00:00
dependabot-preview[bot]
031208f096 Bump wiki from 5c75fad to d95525c
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `5c75fad` to `d95525c`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](5c75fad9a6...d95525cd09)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-11 01:22:57 +00:00
JustArchi
ba37ab445d Correct volume entries
Docker documentation being outright wrong again
2020-05-10 19:10:06 +02:00
JustArchi
7edbe4a82f Misc 2020-05-10 18:53:10 +02:00
JustArchi
4d0bdf6789 Skip translation progress for invariant languages as well
Fixes annoying notice in docker containers
2020-05-10 18:46:55 +02:00
JustArchi
e98fe07c02 Add VOLUME directive to ASF dockerfiles 2020-05-10 18:28:17 +02:00
JustArchi
2e4142c93e Slightly optimize docker build process 2020-05-10 01:13:54 +02:00
JustArchi
38c9848509 Misc CI enhancements 2020-05-10 01:04:25 +02:00
JustArchi
8960478939 Bump 2020-05-09 20:00:34 +02:00
JustArchi
93ac4cf697 Translations update 2020-05-09 19:58:23 +02:00
dependabot-preview[bot]
adf32e287f Bump ASF-ui from 58b5602 to 8bf8b51
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `58b5602` to `8bf8b51`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](58b5602942...8bf8b51334)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-07 01:27:25 +00:00
dependabot-preview[bot]
e056dee16c Bump ASF-WebConfigGenerator from bb2e2fc to 7a9d0b0
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `bb2e2fc` to `7a9d0b0`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](bb2e2fc8fc...7a9d0b0c70)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-07 01:24:42 +00:00
JustArchi
5db6df045c When registering API key for ASF usage, signalize it in the domain name
This way user knows it's us who generated it, even though other people may access it as well
2020-05-05 20:14:08 +02:00
JustArchi
cc73707c73 Copy resources in dockerfiles 2020-05-05 00:14:36 +02:00
JustArchi
ec90bd2d32 Correct health checks 2020-05-04 16:31:05 +02:00
JustArchi
3d072cf14b Misc 2020-05-04 16:10:07 +02:00
JustArchi
3c5d40377f Add very basic healthcheck to docker containers 2020-05-04 16:02:35 +02:00
JustArchi
a4f88ca928 Misc 2020-05-04 16:00:22 +02:00
JustArchi
8e5735726b Misc 2020-05-04 15:31:35 +02:00
dependabot-preview[bot]
29c665fcf9 Bump ASF-WebConfigGenerator from d3b50f6 to bb2e2fc
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `d3b50f6` to `bb2e2fc`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](d3b50f6886...bb2e2fc8fc)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-04 08:04:01 +00:00
dependabot-preview[bot]
82e9ffe162 Bump ASF-ui from 981b788 to 58b5602
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `981b788` to `58b5602`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](981b78821d...58b5602942)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-04 01:34:15 +00:00
Łukasz Domeradzki
4b1d04733d Misc 2020-05-03 20:15:12 +02:00
dependabot-preview[bot]
574a5c65d3 Bump Humanizer from 2.8.2 to 2.8.11
Bumps [Humanizer](https://github.com/Humanizr/Humanizer) from 2.8.2 to 2.8.11.
- [Release notes](https://github.com/Humanizr/Humanizer/releases)
- [Changelog](https://github.com/Humanizr/Humanizer/blob/master/release_notes.md)
- [Commits](https://github.com/Humanizr/Humanizer/compare/v2.8.2...v2.8.11)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-02 17:04:22 +00:00
dependabot-preview[bot]
05a1490e42 Bump ASF-WebConfigGenerator from a3b76d8 to d3b50f6
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `a3b76d8` to `d3b50f6`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](a3b76d86db...d3b50f6886)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-05-01 01:22:34 +00:00
dependabot-preview[bot]
428e7b2966 Bump Swashbuckle.AspNetCore from 5.4.0 to 5.4.1
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.0 to 5.4.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.0...v5.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-30 08:06:20 +00:00
dependabot-preview[bot]
e4060ad533 Bump ASF-WebConfigGenerator from e44dc86 to a3b76d8
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `e44dc86` to `a3b76d8`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](e44dc86b7a...a3b76d86db)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-30 01:26:45 +00:00
dependabot-preview[bot]
f436e692ae Bump ASF-ui from d256ae5 to 981b788
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `d256ae5` to `981b788`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](d256ae5cbc...981b78821d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-30 01:22:22 +00:00
dependabot-preview[bot]
c9cd228850 Bump Swashbuckle.AspNetCore.Annotations from 5.4.0 to 5.4.1
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.0 to 5.4.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.0...v5.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 19:11:23 +00:00
dependabot-preview[bot]
cbe7fbbeea Bump Swashbuckle.AspNetCore.Newtonsoft from 5.4.0 to 5.4.1
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.4.0 to 5.4.1.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.4.0...v5.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 18:44:45 +00:00
dependabot-preview[bot]
bc0eae4cf2 Bump ASF-WebConfigGenerator from fdcd379 to e44dc86
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `fdcd379` to `e44dc86`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](fdcd379d93...e44dc86b7a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-29 01:22:29 +00:00
dependabot-preview[bot]
4b4f031421 Bump Swashbuckle.AspNetCore.Newtonsoft from 5.3.3 to 5.4.0
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.3 to 5.4.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.3...v5.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 14:08:56 +00:00
dependabot-preview[bot]
767423b0dc Bump Swashbuckle.AspNetCore from 5.3.3 to 5.4.0
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.3 to 5.4.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.3...v5.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 13:45:17 +00:00
dependabot-preview[bot]
d1556a68cf Bump Swashbuckle.AspNetCore.Annotations from 5.3.3 to 5.4.0
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.3 to 5.4.0.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.3...v5.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 13:21:10 +00:00
JustArchi
a19e131216 Update NH2 tools 2020-04-28 14:31:45 +02:00
dependabot-preview[bot]
d14fbd8b59 Bump wiki from a468b89 to 4b2ed41
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `a468b89` to `4b2ed41`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](a468b89742...4b2ed412eb)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-28 01:22:12 +00:00
JustArchi
6f8948010b Misc 2020-04-27 19:54:56 +02:00
dependabot-preview[bot]
e0cd052ea0 Bump ASF-ui from b7cda34 to d256ae5
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `b7cda34` to `d256ae5`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](b7cda341c3...d256ae5cbc)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-27 01:27:20 +00:00
dependabot-preview[bot]
e12b64e20f Bump ASF-WebConfigGenerator from e2fa04f to fdcd379
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `e2fa04f` to `fdcd379`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](e2fa04f17e...fdcd379d93)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-27 01:21:24 +00:00
JustArchi
05b697879d Update Bot.cs 2020-04-24 16:50:58 +02:00
dependabot-preview[bot]
b1a54fe9db Bump Microsoft.NET.Test.Sdk from 16.6.0 to 16.6.1
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.6.0 to 16.6.1.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](https://github.com/microsoft/vstest/compare/v16.6.0...v16.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-24 10:16:09 +00:00
dependabot-preview[bot]
7b654d3a2d Bump ASF-ui from 5cc46f2 to b7cda34
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `5cc46f2` to `b7cda34`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](5cc46f2446...b7cda341c3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-24 01:26:59 +00:00
dependabot-preview[bot]
614307021b Bump ASF-WebConfigGenerator from 3946297 to e2fa04f
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `3946297` to `e2fa04f`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](3946297cd5...e2fa04f17e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-24 01:23:05 +00:00
JustArchi
7d484437f9 Misc 2020-04-23 19:19:21 +02:00
JustArchi
af2c5c98ef Update ArchiSteamFarm.sln.DotSettings 2020-04-23 19:15:30 +02:00
dependabot-preview[bot]
b9aa5fbefc Bump ASF-WebConfigGenerator from f834398 to 3946297
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `f834398` to `3946297`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](f834398a2e...3946297cd5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-23 01:24:14 +00:00
JustArchi
fe986c1aee Use same switches for docker services 2020-04-22 23:08:52 +02:00
JustArchi
23442b56b7 Fix unknown switch
Official docs have lied to me once again
2020-04-22 23:05:30 +02:00
JustArchi
35d74cae1b Update cc.sh 2020-04-22 22:48:42 +02:00
JustArchi
8d862f75ee Improve dotnet publish arguments 2020-04-22 22:27:59 +02:00
dependabot-preview[bot]
292867d4d9 Bump ASF-ui from 08f2e4d to 5cc46f2
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `08f2e4d` to `5cc46f2`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](08f2e4de3d...5cc46f2446)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-22 01:22:59 +00:00
JustArchi
9ee90d3cc2 Update FUNDING.yml 2020-04-21 22:12:12 +02:00
dependabot-preview[bot]
91e398bace Bump Swashbuckle.AspNetCore.Annotations from 5.3.2 to 5.3.3
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.2 to 5.3.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.2...v5.3.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 01:38:00 +00:00
dependabot-preview[bot]
6e42d213df Bump Microsoft.NET.Test.Sdk from 16.5.0 to 16.6.0
Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 16.5.0 to 16.6.0.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Commits](https://github.com/microsoft/vstest/compare/v16.5.0...v16.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 01:22:15 +00:00
dependabot-preview[bot]
c6d6ebefe6 Bump Swashbuckle.AspNetCore.Newtonsoft from 5.3.2 to 5.3.3
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.2 to 5.3.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.2...v5.3.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 00:10:49 +00:00
dependabot-preview[bot]
c6dfa65e93 Bump Swashbuckle.AspNetCore from 5.3.2 to 5.3.3
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.2 to 5.3.3.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.2...v5.3.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 23:43:28 +00:00
dependabot-preview[bot]
789a846271 Bump NLog.Web.AspNetCore from 4.9.1 to 4.9.2
Bumps [NLog.Web.AspNetCore](https://github.com/NLog/NLog.Web) from 4.9.1 to 4.9.2.
- [Release notes](https://github.com/NLog/NLog.Web/releases)
- [Changelog](https://github.com/NLog/NLog.Web/blob/master/CHANGELOG.MD)
- [Commits](https://github.com/NLog/NLog.Web/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 11:13:00 +00:00
dependabot-preview[bot]
8bd926c05a Bump ASF-WebConfigGenerator from 8c13631 to f834398
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `8c13631` to `f834398`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](8c13631ec3...f834398a2e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 01:32:31 +00:00
dependabot-preview[bot]
7abc3b755b Bump ASF-ui from e610bfb to 08f2e4d
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `e610bfb` to `08f2e4d`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](e610bfb72e...08f2e4de3d)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 01:22:06 +00:00
Sebastian Göls
b65d8fb703 Make HasMobileAuthenticator part of API (#1743) 2020-04-19 13:17:06 +02:00
JustArchi
facbbb1a33 Bump 2020-04-18 19:36:14 +02:00
JustArchi
4ed9f5d293 Do not dispose culture sets
We actually can't know if they're used somewhere else, rely on GC in this case
2020-04-18 19:35:40 +02:00
JustArchi
ed0e4498b4 Misc 2020-04-18 19:31:13 +02:00
JustArchi
1d92dbe57f Convert error to warning 2020-04-18 19:23:07 +02:00
JustArchi
398febf8a3 Bump 2020-04-18 19:00:18 +02:00
dependabot-preview[bot]
0cb7404961 Bump Markdig.Signed from 0.18.3 to 0.20.0
Bumps [Markdig.Signed](https://github.com/lunet-io/markdig) from 0.18.3 to 0.20.0.
- [Release notes](https://github.com/lunet-io/markdig/releases)
- [Changelog](https://github.com/lunet-io/markdig/blob/master/changelog.md)
- [Commits](https://github.com/lunet-io/markdig/compare/0.18.3...0.20.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-18 16:59:13 +00:00
JustArchi
a3e8ed3df3 Update ExamplePlugin.cs 2020-04-18 18:47:49 +02:00
JustArchi
7b9bec217a Misc 2020-04-18 18:35:37 +02:00
JustArchi
83e6addd94 DON'T LOOK
I warned you.
2020-04-18 18:33:27 +02:00
JustArchi
5d4e2eaf64 Use string indices 2020-04-18 18:28:15 +02:00
JustArchi
b23f634c9b Implement IAsyncDisposable for all ASF classes that can make use of it 2020-04-18 17:52:11 +02:00
dependabot-preview[bot]
1fe3d57cc8 Bump Humanizer from 2.7.9 to 2.8.2
Bumps [Humanizer](https://github.com/Humanizr/Humanizer) from 2.7.9 to 2.8.2.
- [Release notes](https://github.com/Humanizr/Humanizer/releases)
- [Changelog](https://github.com/Humanizr/Humanizer/blob/master/release_notes.md)
- [Commits](https://github.com/Humanizr/Humanizer/compare/v2.7.9...v2.8.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-18 15:18:56 +00:00
JustArchi
cd848bf2bb Update ExamplePlugin.cs 2020-04-18 17:05:29 +02:00
JustArchi
0bbe8bf2b4 More misc improvements 2020-04-18 16:58:30 +02:00
JustArchi
4b4b323164 R# code improvements 2020-04-18 16:54:57 +02:00
JustArchi
df8044ba74 Use RollForward policy 2020-04-18 15:23:07 +02:00
JustArchi
18de88dda8 Misc 2020-04-18 15:22:59 +02:00
JustArchi
95e546ad93 Bump 2020-04-18 14:48:02 +02:00
JustArchi
5bee79f3aa Translations update 2020-04-18 14:31:39 +02:00
JustArchi
18d5893db1 Fix debugging listener 2020-04-18 14:24:56 +02:00
JustArchi
06d9014ebe Use botName identifier for new SteamClient logging context 2020-04-18 14:15:20 +02:00
JustArchi
4b7369661c Do not dispose WebBrowser.HtmlDocumentResponse
We're disposing inner document already, and this can't be disposed too early
2020-04-18 14:12:45 +02:00
JustArchi
63c8a6540e Fix some disposable patterns 2020-04-18 14:08:37 +02:00
JustArchi
b5ae8eafba Misc 2020-04-18 13:34:25 +02:00
JustArchi
70d89ad008 Update WebBrowser.cs 2020-04-18 00:35:45 +02:00
JustArchi
fab8c667d2 One more fix 2020-04-18 00:34:10 +02:00
JustArchi
85d4dcbe27 Misc AngleSharp improvements 2020-04-18 00:26:54 +02:00
JustArchi
278935661a Use all new decompression methods for HTTP requests 2020-04-17 23:44:36 +02:00
dependabot-preview[bot]
ee2c3e5255 Bump Swashbuckle.AspNetCore from 5.3.1 to 5.3.2
Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.1...v5.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 10:41:59 +00:00
dependabot-preview[bot]
ee178455a3 Bump Swashbuckle.AspNetCore.Annotations from 5.3.1 to 5.3.2
Bumps [Swashbuckle.AspNetCore.Annotations](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.1...v5.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 10:20:42 +00:00
dependabot-preview[bot]
9321f535ae Bump Swashbuckle.AspNetCore.Newtonsoft from 5.3.1 to 5.3.2
Bumps [Swashbuckle.AspNetCore.Newtonsoft](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases)
- [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v5.3.1...v5.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 09:56:08 +00:00
dependabot-preview[bot]
486f8e30ed Bump ASF-ui from 0c01122 to e610bfb
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `0c01122` to `e610bfb`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](0c01122a09...e610bfb72e)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-15 01:23:54 +00:00
JustArchi
60a36066e5 Do not start interactive console if input is redirected 2020-04-13 22:25:14 +02:00
JustArchi
9703336e81 Update ExamplePlugin.cs 2020-04-13 13:39:22 +02:00
JustArchi
4b24c0e472 Update CatAPI.cs 2020-04-13 13:31:05 +02:00
JustArchi
08680fd359 Misc 2020-04-13 13:14:52 +02:00
JustArchi
027803a146 Misc #1736 2020-04-13 13:14:45 +02:00
dependabot-preview[bot]
add79ba0b8 Bump ASF-WebConfigGenerator from 85a7da8 to c7609d2
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `85a7da8` to `c7609d2`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](85a7da814c...c7609d2dff)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-13 01:26:48 +00:00
dependabot-preview[bot]
114822d319 Bump wiki from 9722145 to cae4587
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `9722145` to `cae4587`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](9722145621...cae4587cb0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-13 01:23:07 +00:00
JustArchi
1ab1cf1d6a Automatically restart idling if it includes the appID that we've just blacklisted 2020-04-11 18:56:12 +02:00
JustArchi
876d275400 Revert "Remove denepdency on Nito.AsyncEx.Coordination"
This reverts commit e05ea63e08.
2020-04-10 21:19:39 +02:00
JustArchi
e05ea63e08 Remove denepdency on Nito.AsyncEx.Coordination
We don't really need async operations here, ReaderWriterLockSlim is enough
2020-04-10 21:18:45 +02:00
JustArchi
d57662811e Bump 2020-04-10 19:47:00 +02:00
JustArchi
ca83301ae3 Translations update 2020-04-10 19:45:21 +02:00
JustArchi
ff9a7631ee Misc 2020-04-10 19:37:16 +02:00
JustArchi
6fa197d0d1 Misc appveyor zip changes 2020-04-10 19:33:31 +02:00
dependabot-preview[bot]
331297e4f8 Bump ASF-WebConfigGenerator from d93d9a8 to d32dfcf
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `d93d9a8` to `d32dfcf`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](d93d9a8f2a...d32dfcf7b6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-10 01:22:50 +00:00
dependabot-preview[bot]
b9f25c5e92 Bump wiki from ade6af6 to 600c6bb
Bumps [wiki](https://github.com/JustArchiNET/ArchiSteamFarm.wiki) from `ade6af6` to `600c6bb`.
- [Release notes](https://github.com/JustArchiNET/ArchiSteamFarm.wiki/releases)
- [Commits](ade6af6cea...600c6bb5c3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 01:42:44 +00:00
dependabot-preview[bot]
6d597afb99 Bump JetBrains.Annotations from 2019.1.3 to 2020.1.0
Bumps JetBrains.Annotations from 2019.1.3 to 2020.1.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 01:37:22 +00:00
dependabot-preview[bot]
e876b1fb3e Bump ASF-WebConfigGenerator from 5646123 to d93d9a8
Bumps [ASF-WebConfigGenerator](https://github.com/JustArchiNET/ASF-WebConfigGenerator) from `5646123` to `d93d9a8`.
- [Release notes](https://github.com/JustArchiNET/ASF-WebConfigGenerator/releases)
- [Commits](5646123e30...d93d9a8f2a)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 01:35:50 +00:00
dependabot-preview[bot]
830aea1f4e Bump ASF-ui from fdb3c4f to c51133a
Bumps [ASF-ui](https://github.com/JustArchiNET/ASF-ui) from `fdb3c4f` to `c51133a`.
- [Release notes](https://github.com/JustArchiNET/ASF-ui/releases)
- [Commits](fdb3c4f11f...c51133aab4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 01:26:15 +00:00
JustArchi
e0209d9d75 Add linux-arm64 as GitHub workflow CI artifact 2020-04-08 19:45:03 +02:00
JustArchi
36bfbb69c6 chmod +x 2020-04-08 19:33:13 +02:00
JustArchi
289d3e90b7 Closes #1728 2020-04-08 19:32:53 +02:00
JustArchi
24678372af Bump 2020-04-08 14:43:22 +02:00
298 changed files with 30921 additions and 25857 deletions

View File

@@ -15,9 +15,6 @@ ArchiSteamFarm/logs
# Ignore standard out folders for publishing
**/out
# Ignore crowdin CLI secret (if exists)
tools/ArchiCrowdin/crowdin_identity.yml
# _ ____ _____ ____ _
# / \ / ___|| ___| | _ \ ___ ___| | _____ _ __
# / _ \ \___ \| |_ _____| | | |/ _ \ / __| |/ / _ \ '__|
@@ -30,11 +27,8 @@ tools/ArchiCrowdin/crowdin_identity.yml
**/[Bb]in/
**/[Oo]bj/
ArchiSteamFarm.CustomPlugins.ExamplePlugin
ASF-WebConfigGenerator
ArchiSteamFarm.CustomPlugins.*
ASF-ui/dist
ASF-ui/tools
tools
wiki
# _ _

View File

@@ -1,9 +1,9 @@
root = true
###############################
# Core EditorConfig Options #
###############################
root = true
[*]
charset = utf-8
indent_style = tab
@@ -11,10 +11,17 @@ insert_final_newline = true
trim_trailing_whitespace = true
###############################
# .NET Coding Conventions #
# C# Coding Conventions #
###############################
[*.cs]
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = false
csharp_indent_labels = flush_left
csharp_indent_switch_labels = true
csharp_new_line_before_catch = false
csharp_new_line_before_else = false
csharp_new_line_before_finally = false
@@ -23,57 +30,172 @@ csharp_new_line_before_members_in_object_initializers = false
csharp_new_line_before_open_brace = none
csharp_new_line_between_query_expression_clauses = false
csharp_prefer_braces = true:suggestion
csharp_prefer_braces = true:warning
csharp_prefer_simple_default_expression = true:warning
csharp_prefer_simple_using_statement = true:warning
csharp_prefer_static_local_function = true:warning
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
csharp_preferred_modifier_order = public, protected, internal, private, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, volatile, async:warning
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = false
csharp_space_after_cast = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = none
csharp_space_between_square_brackets = false
csharp_style_expression_bodied_accessors = true:suggestion
csharp_style_expression_bodied_constructors = true:suggestion
csharp_style_expression_bodied_indexers = true:suggestion
csharp_style_expression_bodied_methods = true:suggestion
csharp_style_expression_bodied_operators = true:suggestion
csharp_style_expression_bodied_properties = true:suggestion
csharp_style_conditional_delegate_call = true:warning
csharp_style_deconstructed_variable_declaration = true:warning
csharp_style_var_elsewhere = false:suggestion
csharp_style_var_for_built_in_types = false:suggestion
csharp_style_var_when_type_is_apparent = false:suggestion
csharp_style_expression_bodied_accessors = true:warning
csharp_style_expression_bodied_constructors = true:warning
csharp_style_expression_bodied_indexers = true:warning
csharp_style_expression_bodied_lambdas = true:warning
csharp_style_expression_bodied_local_functions = true:warning
csharp_style_expression_bodied_methods = true:warning
csharp_style_expression_bodied_operators = true:warning
csharp_style_expression_bodied_properties = true:warning
csharp_using_directive_placement = outside_namespace:suggestion
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning
csharp_style_inlined_variable_declaration = true:warning
csharp_style_pattern_local_over_anonymous_function = true:warning
csharp_style_pattern_matching_over_as_with_null_check = true:warning
csharp_style_pattern_matching_over_is_with_cast_check = true:warning
csharp_style_prefer_index_operator = true:warning
csharp_style_prefer_not_pattern = true:warning
csharp_style_prefer_pattern_matching = true:warning
csharp_style_prefer_range_operator = true:warning
csharp_style_prefer_switch_expression = true:warning
csharp_style_throw_expression = true:warning
csharp_style_unused_value_assignment_preference = discard_variable :warning
csharp_style_unused_value_expression_statement_preference = discard_variable:warning
csharp_style_var_elsewhere = false:warning
csharp_style_var_for_built_in_types = false:warning
csharp_style_var_when_type_is_apparent = false:warning
csharp_using_directive_placement = outside_namespace
###############################
# .NET Coding Conventions #
###############################
[*.{cs,vb}]
# PascalCase for naming everything but parameters
dotnet_naming_rule.all_members_must_be_capitalized.severity = suggestion
dotnet_naming_rule.all_members_must_be_capitalized.style = all_symbols
dotnet_naming_rule.all_members_must_be_capitalized.symbols = all_symbols
dotnet_naming_style.all_symbols.capitalization = pascal_case
dotnet_naming_symbols.all_symbols.applicable_accessibilities = *
dotnet_naming_symbols.all_symbols.applicable_kinds = class,struct,interface,enum,property,method,field,event,delegate
dotnet_analyzer_diagnostic.severity = warning
# camelCase for naming parameters
dotnet_naming_rule.parameters_must_be_camel_case.severity = suggestion
dotnet_naming_rule.parameters_must_be_camel_case.style = params
dotnet_naming_rule.parameters_must_be_camel_case.symbols = params
dotnet_naming_style.params.capitalization = camel_case
dotnet_naming_symbols.params.applicable_accessibilities = *
dotnet_naming_symbols.params.applicable_kinds = parameter
dotnet_code_quality.ca3003.excluded_symbol_names = BotController
dotnet_code_quality.ca3012.excluded_symbol_names = BotController|CommandController
dotnet_sort_system_directives_first = true:suggestion
dotnet_code_quality_unused_parameters = all:warning
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggestion
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggestion
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:suggestion
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
dotnet_style_prefer_auto_properties = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
dotnet_style_prefer_conditional_expression_over_return = false:suggestion
dotnet_style_qualification_for_event = false:suggestion
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_require_accessibility_modifiers = always:suggestion
dotnet_diagnostic.ca1028.severity = silent
dotnet_diagnostic.ca1031.severity = silent
# Rule - almost everything
dotnet_naming_rule.almost_everything_must_be_pascal_case.severity = warning
dotnet_naming_rule.almost_everything_must_be_pascal_case.style = pascal_case
dotnet_naming_rule.almost_everything_must_be_pascal_case.symbols = almost_everything
# Rule - interfaces
dotnet_naming_rule.interfaces_must_be_i_pascal_case.severity = warning
dotnet_naming_rule.interfaces_must_be_i_pascal_case.style = i_pascal_case
dotnet_naming_rule.interfaces_must_be_i_pascal_case.symbols = interfaces
# Rule - local parameters
dotnet_naming_rule.local_parameters_must_be_camel_case.severity = warning
dotnet_naming_rule.local_parameters_must_be_camel_case.style = camel_case
dotnet_naming_rule.local_parameters_must_be_camel_case.symbols = local_parameters
# Rule - type parameters
dotnet_naming_rule.type_parameters_must_be_t_pascal_case.severity = warning
dotnet_naming_rule.type_parameters_must_be_t_pascal_case.style = t_pascal_case
dotnet_naming_rule.type_parameters_must_be_t_pascal_case.symbols = type_parameters
# Style - camelCase
dotnet_naming_style.camel_case.capitalization = camel_case
# Style - IPascalCase
dotnet_naming_style.i_pascal_case.capitalization = pascal_case
dotnet_naming_style.i_pascal_case.required_prefix = I
# Style - PascalCase
dotnet_naming_style.pascal_case.capitalization = pascal_case
# Style - TPascalCase
dotnet_naming_style.t_pascal_case.capitalization = pascal_case
dotnet_naming_style.t_pascal_case.required_prefix = T
# Symbol - almost everything
dotnet_naming_symbols.almost_everything.applicable_accessibilities = *
dotnet_naming_symbols.almost_everything.applicable_kinds = namespace,class,struct,interface,enum,property,method,field,event,delegate,local_function
# Symbol - interfaces
dotnet_naming_symbols.interfaces.applicable_kinds = interface
dotnet_naming_symbols.interfaces.applicable_accessibilities = *
# Symbol - local parameters
dotnet_naming_symbols.local_parameters.applicable_accessibilities = *
dotnet_naming_symbols.local_parameters.applicable_kinds = parameter,local
# Symbol - type parameters
dotnet_naming_symbols.type_parameters.applicable_kinds = type_parameter
dotnet_naming_symbols.type_parameters.applicable_accessibilities = *
dotnet_remove_unnecessary_suppression_exclusions = none:warning
dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = true
dotnet_style_coalesce_expression = true:warning
dotnet_style_collection_initializer = true:warning
dotnet_style_explicit_tuple_names = true:warning
dotnet_style_null_propagation = true:warning
dotnet_style_object_initializer = true:warning
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:warning
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:warning
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:warning
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:warning
dotnet_style_predefined_type_for_locals_parameters_members = true:warning
dotnet_style_predefined_type_for_member_access = true:warning
dotnet_style_prefer_auto_properties = true:warning
dotnet_style_prefer_compound_assignment = true:warning
dotnet_style_prefer_conditional_expression_over_assignment = true:warning
dotnet_style_prefer_conditional_expression_over_return = true:warning
dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning
dotnet_style_prefer_inferred_tuple_names = true:warning
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning
dotnet_style_prefer_simplified_boolean_expressions = true:warning
dotnet_style_prefer_simplified_interpolation = true:warning
dotnet_style_qualification_for_event = false:warning
dotnet_style_qualification_for_field = false:warning
dotnet_style_qualification_for_method = false:warning
dotnet_style_qualification_for_property = false:warning
dotnet_style_readonly_field = true:warning
dotnet_style_require_accessibility_modifiers = always:warning

View File

@@ -2,45 +2,126 @@
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
Examples of behavior that contributes to a positive environment for our
community include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior by participants include:
Examples of unacceptable behavior include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
## Enforcement Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at ASF@JustArchi.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at ASF@JustArchi.net.
All complaints will be reviewed and investigated promptly and fairly.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -4,7 +4,7 @@ Before making an issue or pull request, you should carefully read **[ASF wiki](h
## Issues
GitHub **[issues](https://github.com/JustArchiNET/ArchiSteamFarm/issues)** page is being used for ASF "todo" list, regarding both features and bugs. It has **strict policy** that applies to everybody - GitHub is **NOT** technical support, it's a place dedicated **only** to ASF bugs and suggestions. It's **not** proper place for technical issues, general discussion or questions that are unrelated to development. In short, GitHub is for the **development** part of the ASF, and all issues should be **development-oriented**. You have **[ASF chat](https://discord.gg/hSQgt8j)** and **[Steam group](https://steamcommunity.com/groups/archiasf/discussions/1)** for general discussion, questions, technical issues and everything else that is not related to ASF development. If you decide to use GitHub issues, please make sure that you're in fact dealing with a bug, or your suggestion makes sense, preferably by asking on chat/steam group first. Invalid issues will be closed immediately and won't be answered - if you're not sure if your issue is valid, then most likely it's not, and you shouldn't post it here. Valid bugs/suggestions will be forwarded and added as GitHub issues by us, if needed.
**[GitHub issues](https://github.com/JustArchiNET/ArchiSteamFarm/issues)** page is being used for ASF "todo" list, regarding both features and bugs. It has **strict policy** that applies to everybody - GitHub issues is **NOT** technical support, it's a place dedicated **only** to ASF bugs and suggestions. It's **not** proper place for technical issues, general discussion or questions that are unrelated to development. In short, GitHub is for the **development** part of the ASF, and all issues should be **development-oriented**. You have **[GitHub discussions](https://github.com/JustArchiNET/ArchiSteamFarm/discussions/categories/support)**, **[Steam group](https://steamcommunity.com/groups/archiasf/discussions/1)** and **[Discord server](https://discord.gg/hSQgt8j)** for general discussion, questions, technical issues and everything else that is not related to ASF development. If you decide to use GitHub issues, please make sure that you're in fact dealing with a bug, or your suggestion makes sense, preferably by asking on one of our support channels first. Invalid issues will be closed immediately and won't be answered - if you're not sure if your issue is valid, then most likely it's not, and you shouldn't post it here. Valid bugs/suggestions will be forwarded and added as GitHub issues by us, if needed.
Examples of **invalid** issues:
- Asking how to install the program or use one of its functions
@@ -33,7 +33,7 @@ It would also be cool if you could reproduce your issue on latest **[pre-release
### Suggestions
While everybody is able to create suggestions how to improve ASF, GitHub issues is not the proper place to discuss if your enhancement makes sense - by posting it you already **believe** that it makes sense, and you're **ready to convince us how**. If you have some idea but you're not sure if it's possible, makes sense, or fits ASF purpose - you have **[Steam group](https://steamcommunity.com/groups/archiasf/discussions/1)** discussions where we'll be happy to discuss given enhancement in calm atmosphere, evaluating possibilities and pros/cons. This is what we suggest to do in the first place, as in GitHub issue you're switching from **having an idea** into **having a valid enhancement with general concept, given purpose and fixed details - you're ready to defend your idea and convince us how it can be useful for ASF**. This is the general reason why many issues are rejected - because you're lacking details that would prove your suggestion being worthy.
While everybody is able to create suggestions how to improve ASF, GitHub issues is not the proper place to discuss if your enhancement makes sense - by posting it you already **believe** that it makes sense, and you're **ready to convince us how**. If you have some idea but you're not sure if it's possible, makes sense, or fits ASF purpose - you have our support channels where we'll be happy to discuss given enhancement in calm atmosphere, evaluating possibilities and pros/cons. This is what we suggest to do in the first place, as in GitHub issue you're switching from **having an idea** into **having a valid enhancement with general concept, given purpose and fixed details - you're ready to defend your idea and convince us how it can be useful for ASF**. This is the general reason why many issues are rejected - because you're lacking details that would prove your suggestion being worthy.
ASF has a strict scope - idling Steam cards from Steam games + basic bots management. ASF scope is very subjective and evaluated on practical/moral basis - how much this feature fits ASF, how much actual coding effort is required to make it happen, how useful/wanted this feature is by the community and likewise. In general we don't mind further enhancements to the program, as there is always a room for improvement, but at the same time we consider ASF to be feature-complete and vast majority of things that are suggested today are simply out of the scope of ASF as a program. This is why we've rejected **[a lot](https://github.com/JustArchiNET/ArchiSteamFarm/issues?q=label%3AEnhancement+label%3A%22Not+going+to+happen%22)** of general enhancements, for various different reasons, mainly regarding the scope of the program. Some people may find it hard to understand why we're rather sceptical towards suggestions, while the answer for that isn't obvious at first.
@@ -51,9 +51,9 @@ In any case, you should be able to explain to us in the issue why you consider y
## Pull requests
Pull requests are a bit different compared to issues, as in PR you're asking us to review the code and accept it, unless **we** have a reason against it. Very often we won't have enough arguments to accept given suggestion and code something, but we also won't have enough arguments **against** given suggestion, which makes it possible for you to code it yourself, then send a PR for review, and hopefully include your feature in ASF, even if we wouldn't code it otherwise. Such issues are appropriately tagged with **[PR-ok](https://github.com/JustArchiNET/ArchiSteamFarm/issues?q=is%3Aissue+is%3Aclosed+label%3APR-ok)** so you can easily take a look at those features that we wouldn't mind, but neither code ourselves. All of that is possible thanks to the fact that when dealing with PR, **we** are in position to find reasoning against it, and not necessarily you defending your own code. This is how **[a lot](https://github.com/JustArchiNET/ArchiSteamFarm/pulls?q=is%3Apr+is%3Amerged)** of ASF features were actually made possible, but at the same time there are still **[cases](https://github.com/JustArchiNET/ArchiSteamFarm/pulls?q=is%3Apr+is%3Aclosed+label%3A%22Not+going+to+happen%22)** of PRs that we decided to reject.
Pull requests are a bit different compared to issues, as in PR you're asking us to review the code and accept it, unless **we** have a reason against it. Very often we won't have enough arguments to accept given suggestion and code something, but we also won't have enough arguments **against** given suggestion, which makes it possible for you to code it yourself, then send a PR for review, and hopefully include your feature in ASF, even if we wouldn't code it otherwise. Such issues are appropriately tagged with **[PR-ok](https://github.com/JustArchiNET/ArchiSteamFarm/issues?q=is%3Aissue+is%3Aclosed+label%3APR-ok)** so you can easily take a look at those features that we wouldn't mind, but neither code ourselves. All of that is possible thanks to the fact that when dealing with PR, **we** are in position to find reasoning against it, and not necessarily you defending your own code. This is how **[a lot](https://github.com/JustArchiNET/ArchiSteamFarm/pulls?q=is%3Apr+is%3Amerged+-label%3AAutomatic)** of ASF features were actually made possible, but at the same time there are still **[cases](https://github.com/JustArchiNET/ArchiSteamFarm/pulls?q=is%3Apr+is%3Aclosed+label%3A%22Not+going+to+happen%22)** of PRs that we decided to reject.
In general any pull request is welcome and should be accepted, unless there is a strong reason against it. A strong reason includes mainly only things we directly do not agree with, such as features that are against Steam ToS (like explained above), greatly against ASF scope (to the point it'd hurt overall maintenance), or likewise. If there is nothing severe enough to justify rejecting PR, we'll tell you how to fix it (if needed), so we can allow it in ASF. If you're improving existing code, rewriting it to be more efficient, clean, better commented - there is absolutely no reason to reject such PR, as long as it's in fact correct. If you want to add a missing feature, and you're not sure if it should be included in ASF, for example because you're not sure if it fits ASF scope - it won't hurt to ask before spending your own time, preferably in **[Steam group](https://steamcommunity.com/groups/archiasf/discussions/1)** discussions, so we can evaluate the idea and give feedback instead of accepting/rejecting the concept which is usually happening with GitHub issues - after all you want to code it yourself, so you shouldn't use GitHub issues that are being used for expecting us to add things. Still, as stated above, our entire GitHub repo is dedicated to development part of ASF, so feel free to post an issue in which you'll ask if given feature would be accepted in PR, if you prefer that way instead of using the Steam group.
In general any pull request is welcome and should be accepted, unless there is a strong reason against it. A strong reason includes mainly only things we directly do not agree with, such as features that are against Steam ToS (like explained above), greatly against ASF scope (to the point it'd hurt overall maintenance), or likewise. If there is nothing severe enough to justify rejecting PR, we'll tell you how to fix it (if needed), so we can allow it in ASF. If you're improving existing code, rewriting it to be more efficient, clean, better commented - there is absolutely no reason to reject such PR, as long as it's in fact correct. If you want to add a missing feature, and you're not sure if it should be included in ASF, for example because you're not sure if it fits ASF scope - it won't hurt to ask before spending your own time, preferably on one of our support channels, so we can evaluate the idea and give feedback instead of accepting/rejecting the concept which is usually happening with GitHub issues - after all you want to code it yourself, so you shouldn't use GitHub issues that are being used for expecting us to add things. Still, as stated above, our entire GitHub repo is dedicated to development part of ASF, so feel free to post an issue in which you'll ask if given feature would be accepted in PR, if you prefer that way instead of using the Steam group.
Every pull request is carefully examined by our continuous integration system - it won't be accepted if it doesn't compile properly or causes any test to fail. We also expect that you at least barely tested the modification you're trying to add, so we can be sure that it works. Consider the fact that you're not coding it only for yourself, but for thousands of users.
@@ -67,7 +67,7 @@ ASF is open-source project, developed mainly by **[JustArchi](https://github.com
### License
ASF is using **[Apache License 2.0](https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/LICENSE-2.0.txt)**.
ASF is using **[Apache License 2.0](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/LICENSE-2.0.txt)**.
> Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions.
@@ -79,8 +79,8 @@ For more info about the license, please check out **[license](https://github.com
Please stick with ASF code style when submitting PRs. In repo you can find several different files dedicated to making it easier for you:
- **[EditorConfig](https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/.editorconfig)** file which is supported by all major IDEs and requires no further setup. It's a good starting point, although it doesn't include all the rules that we'd like to see.
- **[VS settings](https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/CodeStyle.vssettings)** file that you can use in Visual Studio for import. This one includes far more options than EditorConfig alone, and it's a very good choice if you're using bare VS.
- **[DotSettings](https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/ArchiSteamFarm.sln.DotSettings)** file that is being used by **[ReSharper](https://www.jetbrains.com/resharper)** and **[Rider](https://www.jetbrains.com/rider)**. This one is the most complete config file that is also being loaded automatically when you're using ReSharper/Rider with our code.
- **[EditorConfig](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.editorconfig)** file which is supported by all major IDEs and requires no further setup. It's a good starting point, although it doesn't include all the rules that we'd like to see.
- **[VS settings](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/CodeStyle.vssettings)** file that you can use in Visual Studio for import. This one includes far more options than EditorConfig alone, and it's a very good choice if you're using bare VS.
- **[DotSettings](https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/ArchiSteamFarm.sln.DotSettings)** file that is being used by **[ReSharper](https://www.jetbrains.com/resharper)** and **[Rider](https://www.jetbrains.com/rider)**. This one is the most complete config file that is also being loaded automatically when you're using ReSharper/Rider with our code.
Personally we're using Visual Studio + ReSharper, so no other action is needed after opening `ArchiSteamFarm.sln` solution. If you're using VS alone, it's probably a good idea to import our code style settings, although even editor config should be enough for majority of cases. If you can save us those few extra seconds cleaning up your code after accepting it, it would be great and surely improve overall code history.

2
.github/FUNDING.yml vendored
View File

@@ -2,4 +2,4 @@
github: JustArchi
patreon: JustArchi
custom: https://www.paypal.me/JustArchi/5eur
custom: ["https://www.paypal.me/JustArchi/5eur", "https://pay.revolut.com/profile/ukaszyxm", "https://commerce.coinbase.com/checkout/0c23b844-c51b-45f4-9135-8db7c6fcf98e", "https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_"]

View File

@@ -1,7 +1,9 @@
<!--
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/.github/CONTRIBUTING.md and I believe that my issue is valid - it requires a response from ASF development team, and not ASF support.
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.github/CONTRIBUTING.md and I believe that my issue is valid - it requires a response from ASF development team, and not ASF support.
I understand that 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, then it will be closed and left unanswered.
ASF GITHUB ISSUES IS NOT A PROPER PLACE FOR ANY TECHNICAL SUPPORT RELATED TO USING THE PROGRAM.
I UNDERSTAND THAT 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, THEN IT WILL BE CLOSED AND LEFT UNANSWERED.
Feel free to remove our notice and fill the template below with your details.
-->

View File

@@ -8,9 +8,11 @@ assignees: ''
---
<!--
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/.github/CONTRIBUTING.md and I believe that my issue is valid - it requires a response from ASF development team, and not ASF support.
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.github/CONTRIBUTING.md and I believe that my issue is valid - it requires a response from ASF development team, and not ASF support.
I understand that 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, then it will be closed and left unanswered.
ASF GITHUB ISSUES IS NOT A PROPER PLACE FOR ANY TECHNICAL SUPPORT RELATED TO USING THE PROGRAM.
I UNDERSTAND THAT 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, THEN IT WILL BE CLOSED AND LEFT UNANSWERED.
Feel free to remove our notice and fill the template below with your details.
-->
@@ -40,7 +42,7 @@ Feel free to remove our notice and fill the template below with your details.
### Full log.txt recorded during reproducing the problem
```
```text
Paste here, in-between triple backtick tags
Ensure that your log is complete and was NOT recorded in Debug mode, as debug log may contain sensitive information that should not be shared publicly, as per our wiki statement. Standard ASF log does not include sensitive information.

View File

@@ -8,9 +8,11 @@ assignees: ''
---
<!--
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/.github/CONTRIBUTING.md and I believe that my issue is valid - it requires a response from ASF development team, and not ASF support.
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.github/CONTRIBUTING.md and I believe that my issue is valid - it requires a response from ASF development team, and not ASF support.
I understand that 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, then it will be closed and left unanswered.
ASF GITHUB ISSUES IS NOT A PROPER PLACE FOR ANY TECHNICAL SUPPORT RELATED TO USING THE PROGRAM.
I UNDERSTAND THAT 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, THEN IT WILL BE CLOSED AND LEFT UNANSWERED.
Feel free to remove our notice and fill the template below with your details.
-->

View File

@@ -8,9 +8,11 @@ assignees: ''
---
<!--
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchiNET/ArchiSteamFarm/blob/master/.github/CONTRIBUTING.md and I believe that my issue is valid - it requires a response from ASF development team, and not ASF support.
I fully read and understood contributing guidelines of ASF available under https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.github/CONTRIBUTING.md and I believe that my issue is valid - it requires a response from ASF development team, and not ASF support.
I understand that 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, then it will be closed and left unanswered.
ASF GITHUB ISSUES IS NOT A PROPER PLACE FOR ANY TECHNICAL SUPPORT RELATED TO USING THE PROGRAM.
I UNDERSTAND THAT 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, THEN IT WILL BE CLOSED AND LEFT UNANSWERED.
Feel free to remove our notice and fill the template below with your details.
-->

14
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
blank_issues_enabled: false
contact_links:
- name: ASF-ui issue
url: https://github.com/JustArchiNET/ASF-ui/issues/new/choose
about: Please open issue in ASF-ui repo.
- name: Localization improvement
url: https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Localization
about: Please use our crowdin platform.
- name: Support question or technical issue
url: https://github.com/JustArchiNET/ArchiSteamFarm/blob/main/.github/SUPPORT.md
about: Please review our support guidelines.
- name: Negative feedback, complaints and demands
url: https://www.youtube.com/watch?v=dQw4w9WgXcQ
about: We're taking those very seriously.

17
.github/RELEASE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,17 @@
### Notice
**Pre-releases are experimental versions that often contain unpatched bugs, work-in-progress features or rewritten implementations. If you don't consider yourself advanced user, please download **[latest stable release](https://github.com/JustArchiNET/ArchiSteamFarm/releases/latest)** instead. Pre-release versions are dedicated to users who know how to report bugs, deal with issues and give feedback - no technical support will be given. Check out ASF **[release cycle](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Release-cycle)** if you'd like to learn more.**
---
### Changelog
This is automated GitHub deployment, human-readable changelog should be available soon. In the meantime please refer to **[GitHub commits](https://github.com/JustArchiNET/ArchiSteamFarm/commits/main)**.
---
### Support
ASF is available for free, this release was made possible thanks to the people that decided to support the project. If you're grateful for what we're doing, please consider donating. Developing ASF requires massive amount of time and knowledge, especially when it comes to Steam (and its problems). Even $1 is highly appreciated and shows that you care. Thank you!
[![GitHub sponsor](https://img.shields.io/badge/GitHub-sponsor-ea4aaa.svg?logo=github-sponsors)](https://github.com/sponsors/JustArchi) [![Patreon support](https://img.shields.io/badge/Patreon-support-f96854.svg?logo=patreon)](https://www.patreon.com/JustArchi) [![Crypto donate](https://img.shields.io/badge/Crypto-donate-f7931a.svg?logo=bitcoin)](https://commerce.coinbase.com/checkout/0c23b844-c51b-45f4-9135-8db7c6fcf98e) [![PayPal.me donate](https://img.shields.io/badge/PayPal.me-donate-00457c.svg?logo=paypal)](https://www.paypal.me/JustArchi/5eur) [![PayPal donate](https://img.shields.io/badge/PayPal-donate-00457c.svg?logo=paypal)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HD2P2P3WGS5Y4) [![Revolut donate](https://img.shields.io/badge/Revolut-donate-0075eb.svg?logo=revolut)](https://pay.revolut.com/profile/ukaszyxm) [![Steam donate](https://img.shields.io/badge/Steam-donate-000000.svg?logo=steam)](https://steamcommunity.com/tradeoffer/new/?partner=46697991&token=0ix2Ruv_)

View File

7
.github/SUPPORT.md vendored Normal file
View File

@@ -0,0 +1,7 @@
# Support
Our **[wiki](https://github.com/JustArchiNET/ArchiSteamFarm/wiki)** is the official online documentation which covers at least a significant majority (if not all) of ASF subjects you could be interested in. We recommend to start with **[setting up](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Setting-up)**, **[configuration](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Configuration)** and our **[FAQ](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/FAQ)** which should help you with setting up ASF, configuring it, as well as answering the most common questions that you might have. For more advanced matters, as well as further elaboration, we have other pages available on our **[wiki](https://github.com/JustArchiNET/ArchiSteamFarm/wiki)** that you can visit.
We also have three independent support channels dedicated to our ASF users, in case you couldn't manage to solve the issue yourself. We answer all support and technical matters in our **[GitHub discussions](https://github.com/JustArchiNET/ArchiSteamFarm/discussions/categories/support)**, **[Steam group](https://steamcommunity.com/groups/archiasf/discussions/1)**, and on our **[Discord server](https://discord.gg/hSQgt8j)**. You're free to use the support channel that matches your preferences, although keep in mind that you have a higher chance solving your issue on the GitHub or Steam, where we're doing our best to answer all questions that couldn't be answered by our community itself (as opposed to Discord server where we're not active 24/7 and therefore not always able to answer).
**[GitHub issues](https://github.com/JustArchiNET/ArchiSteamFarm/issues)** page is being used solely for ASF development, especially in regards to bugs and enhancements. We have a very strict policy regarding that, as GitHub issues is **not** a general support channel, it's dedicated exclusively to ASF development and we're not answering common ASF matters there, as we have appropriate support channels (mentioned above) for that. Common matters include not only general questions or issues that are obviously related to program usage, but also users reporting "bugs" that are clearly considered intended behaviour coming for example (and mainly) from misconfiguration or lack of understanding how the program works. If you're not sure whether your matter relates to ASF development or not, especially if you're not sure if it's a bug or intended behaviour, we recommend to use a support channel instead, where we'll answer you in calm atmosphere and forward your matter to GitHub if deemed appropriate. Invalid GitHub issues will be closed immediately and won't be answered.

34
.github/dependabot.yml.off vendored Normal file
View File

@@ -0,0 +1,34 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
time: "01:00"
labels:
- "Automatic"
open-pull-requests-limit: 99
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "daily"
time: "01:15"
labels:
- "Automatic"
open-pull-requests-limit: 99
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "daily"
time: "01:30"
labels:
- "Automatic"
open-pull-requests-limit: 99
- package-ecosystem: "gitsubmodule"
directory: "/"
schedule:
interval: "daily"
time: "02:00"
labels:
- "Automatic"
open-pull-requests-limit: 99

31
.github/lock.yml vendored
View File

@@ -1,31 +0,0 @@
# Configuration for lock-threads - https://github.com/dessant/lock-threads
# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 30
# Issues and pull requests with these labels will not be locked. Set to `[]` to disable
exemptLabels: []
# Label to add before locking, such as `outdated`. Set to `false` to disable
lockLabel: false
# Comment to post before locking. Set to `false` to disable
lockComment: false
# Assign `resolved` as the reason for locking. Set to `false` to disable
setLockReason: true
# Limit to only `issues` or `pulls`
# only: issues
# Optionally, specify configuration settings just for `issues` or `pulls`
# issues:
# exemptLabels:
# - help-wanted
# lockLabel: outdated
# pulls:
# daysUntilLock: 30
# Repository to extend settings from
# _extends: repo

20
.github/renovate.json vendored Normal file
View File

@@ -0,0 +1,20 @@
{
"extends": [
"config:base",
":assignee(JustArchi)",
":automergeBranch",
":automergeDigest",
":automergeMinor",
":disableRateLimiting",
":label(Automatic)"
],
"git-submodules": {
"enabled": true
},
"packageRules": [
{
"allowedVersions": "<= 3.0",
"matchPackageNames": [ "Microsoft.Extensions.Configuration.Json", "Microsoft.Extensions.Logging.Configuration" ]
}
]
}

View File

@@ -1,20 +1,22 @@
name: ASF-CI
name: ASF-ci
on: [push, pull_request]
env:
CONFIGURATION: Release
DOTNET_CLI_TELEMETRY_OPTOUT: 1
DOTNET_SDK_VERSION: 3.1.102
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
GITHUB_JOBS: 2 # 2-core CPU, without HT: https://help.github.com/en/actions/automating-your-workflow-with-github-actions/virtual-environments-for-github-hosted-runners#supported-runners-and-hardware-resources
NET_CORE_VERSION: netcoreapp3.1
DOTNET_NOLOGO: 1
DOTNET_SDK_VERSION: 5.0.x
NET_CORE_VERSION: net5.0
NET_FRAMEWORK_VERSION: net48
NODE_JS_VERSION: 12
NODE_JS_VERSION: 14 # Periodically bumped to follow latest LTS | https://github.com/actions/setup-node/issues/26
STEAM_TOKEN_DUMPER_NAME: ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
STEAM_TOKEN_DUMPER_TOKEN: ${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
jobs:
build:
main:
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
@@ -23,12 +25,8 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Sync git submodules
run: git submodule sync --recursive
- name: Update git submodules
run: git submodule update -j ${{ env.GITHUB_JOBS }} --init --recursive
with:
submodules: recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
@@ -39,8 +37,9 @@ jobs:
run: dotnet --info
- name: Setup Node.js with npm
uses: actions/setup-node@v1
uses: actions/setup-node@v2
with:
check-latest: true
node-version: ${{ env.NODE_JS_VERSION }}
- name: Verify Node.js
@@ -53,45 +52,109 @@ jobs:
run: npm ci --no-progress --prefix ASF-ui
- name: Build ASF-ui
run: npm run-script build:ci --no-progress --prefix ASF-ui
run: npm run-script deploy --no-progress --prefix ASF-ui
- name: Build ArchiSteamFarm
run: dotnet build ArchiSteamFarm -c "${{ env.CONFIGURATION }}" -f "${{ env.NET_CORE_VERSION }}" --nologo
run: dotnet build ArchiSteamFarm -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
- name: Build ArchiSteamFarm.CustomPlugins.ExamplePlugin
run: dotnet build ArchiSteamFarm.CustomPlugins.ExamplePlugin -c "${{ env.CONFIGURATION }}" -f "${{ env.NET_CORE_VERSION }}" --nologo
run: dotnet build ArchiSteamFarm.CustomPlugins.ExamplePlugin -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
- name: Build ArchiSteamFarm.CustomPlugins.PeriodicGC
run: dotnet build ArchiSteamFarm.CustomPlugins.PeriodicGC -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
- name: Build ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
run: dotnet build "${{ env.STEAM_TOKEN_DUMPER_NAME }}" -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
- name: Run ArchiSteamFarm.Tests
run: dotnet test ArchiSteamFarm.Tests -c "${{ env.CONFIGURATION }}" -f "${{ env.NET_CORE_VERSION }}" --nologo
run: dotnet test ArchiSteamFarm.Tests -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
- name: Upload latest strings for translation on Crowdin
continue-on-error: true
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && startsWith(matrix.os, 'ubuntu-') }}
uses: crowdin/github-action@1.1.0
with:
crowdin_branch_name: main
project_id: ${{ secrets.ASF_CROWDIN_PROJECT_ID }}
token: ${{ secrets.ASF_CROWDIN_API_TOKEN }}
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Unix
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
shell: sh
run: |
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" > "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new"
mv "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"
fi
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Windows
if: startsWith(matrix.os, 'windows-')
shell: pwsh
run: |
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
if ((Test-Path env:STEAM_TOKEN_DUMPER_TOKEN) -and (Test-Path "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs" -PathType Leaf)) {
(Get-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs").Replace('STEAM_TOKEN_DUMPER_TOKEN', "$env:STEAM_TOKEN_DUMPER_TOKEN") | Set-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs"
}
- name: Publish ArchiSteamFarm.OfficialPlugins.SteamTokenDumper for .NET Core
run: dotnet publish "${{ env.STEAM_TOKEN_DUMPER_NAME }}" -c "${{ env.CONFIGURATION }}" -f "${{ env.NET_CORE_VERSION }}" -o "out/${{ env.STEAM_TOKEN_DUMPER_NAME }}/${{ env.NET_CORE_VERSION }}" -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
- name: Publish ArchiSteamFarm.OfficialPlugins.SteamTokenDumper for .NET Framework
if: startsWith(matrix.os, 'windows-')
run: dotnet publish "${{ env.STEAM_TOKEN_DUMPER_NAME }}" -c "${{ env.CONFIGURATION }}" -f "${{ env.NET_FRAMEWORK_VERSION }}" -o "out/${{ env.STEAM_TOKEN_DUMPER_NAME }}/${{ env.NET_FRAMEWORK_VERSION }}" -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
- name: Perform cleanup of ArchiSteamFarm in preparation for publishing
run: dotnet clean ArchiSteamFarm -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
- name: Restore packages in preparation for ArchiSteamFarm publishing
run: dotnet restore ArchiSteamFarm
- name: Publish ArchiSteamFarm on Unix
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
env:
VARIANTS: generic linux-arm linux-x64 osx-x64 win-x64 # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
VARIANTS: generic linux-arm linux-arm64 linux-x64 osx-x64 win-x64 # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
shell: sh
run: |
set -eu
publish() {
if [ "$1" = 'generic' ]; then
local variantArgs="/p:UseAppHost=false"
local variantArgs="-p:TargetLatestRuntimePatch=false -p:UseAppHost=false"
else
local variantArgs="-r $1 /p:PublishTrimmed=true"
local variantArgs="-p:PublishSingleFile=true -p:PublishTrimmed=true -r $1"
fi
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${1}" --no-restore --nologo "/p:ASFVariant=$1" $variantArgs
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${1}" "-p:ASFVariant=$1" --no-restore --nologo $variantArgs
# If we include any overlay for this variant, copy it to output directory
# If we're including any overlay for this variant, copy it to output directory
if [ -d "ArchiSteamFarm/overlay/${1}" ]; then
cp "ArchiSteamFarm/overlay/${1}/"* "out/${1}"
cp -pR "ArchiSteamFarm/overlay/${1}/"* "out/${1}"
fi
# If we're including SteamTokenDumper plugin for this framework, copy it to output directory
if [ -d "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" ]; then
mkdir -p "out/${1}/plugins/${STEAM_TOKEN_DUMPER_NAME}"
cp -pR "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/"* "out/${1}/plugins/${STEAM_TOKEN_DUMPER_NAME}"
fi
# Include .ico file for all platforms, since only Windows script can bundle it inside the exe
cp "resources/ASF.ico" "out/${1}/ArchiSteamFarm.ico"
}
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo
dotnet restore ArchiSteamFarm
if command -v 7z >/dev/null; then
7z a -bd -slp -tzip -mm=Deflate -mx=1 "out/ASF-${1}.zip" "${GITHUB_WORKSPACE}/out/${1}/*"
elif command -v zip >/dev/null; then
(
cd "${GITHUB_WORKSPACE}/out/${1}"
zip -1 -q -r "../ASF-${1}.zip" .
)
else
echo "ERROR: No supported zip tool!"
return 1
fi
}
jobs=""
@@ -107,7 +170,7 @@ jobs:
- name: Publish ArchiSteamFarm on Windows
if: startsWith(matrix.os, 'windows-')
env:
VARIANTS: generic generic-netf linux-arm linux-x64 osx-x64 win-x64 # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
VARIANTS: generic generic-netf linux-arm linux-arm64 linux-x64 osx-x64 win-x64 # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
shell: pwsh
run: |
Set-StrictMode -Version Latest
@@ -124,87 +187,206 @@ jobs:
Set-Location "$env:GITHUB_WORKSPACE"
if ($variant -like '*-netf') {
$compressionMethod = 'Deflate' # This depends on what ZipArchive supports on given platform
$targetFramework = $env:NET_FRAMEWORK_VERSION
} else {
$compressionMethod = 'Deflate64' # This depends on what ZipArchive supports on given platform
$targetFramework = $env:NET_CORE_VERSION
}
if ($variant -like 'generic*') {
$variantArgs = '/p:UseAppHost=false'
$variantArgs = '-p:TargetLatestRuntimePatch=false', '-p:UseAppHost=false'
} else {
$variantArgs = '-r', "$variant", '/p:PublishTrimmed=true'
$variantArgs = '-p:PublishSingleFile=true', '-p:PublishTrimmed=true', '-r', "$variant"
}
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -f "$targetFramework" -o "out\$variant" --no-restore --nologo "/p:ASFVariant=$variant" $variantArgs
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -f "$targetFramework" -o "out\$variant" "-p:ASFVariant=$variant" --no-restore --nologo $variantArgs
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
# If we include any overlay for this variant, copy it output directory
# If we're including any overlay for this variant, copy it to output directory
if (Test-Path "ArchiSteamFarm\overlay\$variant" -PathType Container) {
Copy-Item "ArchiSteamFarm\overlay\$variant\*" "out\$variant"
Copy-Item "ArchiSteamFarm\overlay\$variant\*" "out\$variant" -Recurse
}
# Include .ico file for non-Windows targets
if (!(Test-Path "out\$variant\ArchiSteamFarm.exe" -PathType Leaf)) {
# If we're including SteamTokenDumper plugin for this framework, copy it to output directory
if (Test-Path "out\$env:STEAM_TOKEN_DUMPER_NAME\$targetFramework" -PathType Container) {
if (!(Test-Path "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" -PathType Container)) {
New-Item -ItemType Directory -Path "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" > $null
}
Copy-Item "out\$env:STEAM_TOKEN_DUMPER_NAME\$targetFramework\*" "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" -Recurse
}
# Icon is available only in .NET Framework and .NET Core Windows build, we'll bundle the .ico file for other flavours
if (($targetFramework -eq "$env:NET_CORE_VERSION") -and !(Test-Path "out\$variant\ArchiSteamFarm.exe" -PathType Leaf)) {
Copy-Item 'resources\ASF.ico' "out\$variant\ArchiSteamFarm.ico"
}
}
dotnet clean ArchiSteamFarm -c "$env:CONFIGURATION" -f "$env:NET_CORE_VERSION" --nologo
# By default use fastest compression
$compressionArgs = '-mx=1'
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
# Include extra logic for builds marked for release
if ($env:GITHUB_REF -like 'refs/tags/*') {
$tag = $env:GITHUB_REF.Substring(10)
dotnet restore ArchiSteamFarm
# Tweak compression args for release publishing
$compressionArgs = '-mx=9', '-mfb=258', '-mpass=15'
if ($LastExitCode -ne 0) {
throw "Last command failed."
# Update link in Changelog.html accordingly
if (Test-Path "out\$variant\Changelog.html" -PathType Leaf) {
(Get-Content "out\$variant\Changelog.html").Replace('ArchiSteamFarm/commits/main', "ArchiSteamFarm/releases/tag/$tag") | Set-Content "out\$variant\Changelog.html"
}
}
7z a -bd -slp -tzip -mm=Deflate $compressionArgs "out\ASF-$variant.zip" "$env:GITHUB_WORKSPACE\out\$variant\*"
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
}
foreach ($variant in $env:VARIANTS.Split([char[]] $null, [System.StringSplitOptions]::RemoveEmptyEntries)) {
Start-Job -Name "$variant" $PublishBlock -ArgumentList "$variant"
}
Get-Job | Receive-Job -Wait -AutoRemoveJob
Get-Job | Receive-Job -Wait
- name: Upload ASF-generic
uses: actions/upload-artifact@v1
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.os }}_ASF-generic
path: out/generic
path: out/ASF-generic.zip
- name: Upload ASF-generic-netf
continue-on-error: true
if: startsWith(matrix.os, 'windows-')
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.os }}_ASF-generic-netf
path: out/generic-netf
path: out/ASF-generic-netf.zip
- name: Upload ASF-linux-arm
uses: actions/upload-artifact@v1
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.os }}_ASF-linux-arm
path: out/linux-arm
path: out/ASF-linux-arm.zip
- name: Upload ASF-linux-arm64
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.os }}_ASF-linux-arm64
path: out/ASF-linux-arm64.zip
- name: Upload ASF-linux-x64
uses: actions/upload-artifact@v1
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.os }}_ASF-linux-x64
path: out/linux-x64
path: out/ASF-linux-x64.zip
- name: Upload ASF-osx-x64
uses: actions/upload-artifact@v1
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.os }}_ASF-osx-x64
path: out/osx-x64
path: out/ASF-osx-x64.zip
- name: Upload ASF-win-x64
uses: actions/upload-artifact@v1
continue-on-error: true
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.os }}_ASF-win-x64
path: out/win-x64
path: out/ASF-win-x64.zip
- name: Create ArchiSteamFarm GitHub release
id: github_release
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: ArchiSteamFarm V${{ github.ref }}
body_path: .github/RELEASE_TEMPLATE.md
prerelease: true
- name: Upload ASF-generic to GitHub release
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-generic.zip
asset_name: ASF-generic.zip
asset_content_type: application/zip
- name: Upload ASF-generic-netf to GitHub release
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-generic-netf.zip
asset_name: ASF-generic-netf.zip
asset_content_type: application/zip
- name: Upload ASF-linux-arm to GitHub release
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-linux-arm.zip
asset_name: ASF-linux-arm.zip
asset_content_type: application/zip
- name: Upload ASF-linux-arm64 to GitHub release
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-linux-arm64.zip
asset_name: ASF-linux-arm64.zip
asset_content_type: application/zip
- name: Upload ASF-linux-x64 to GitHub release
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-linux-x64.zip
asset_name: ASF-linux-x64.zip
asset_content_type: application/zip
- name: Upload ASF-osx-x64 to GitHub release
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-osx-x64.zip
asset_name: ASF-osx-x64.zip
asset_content_type: application/zip
- name: Upload ASF-win-x64 to GitHub release
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.github_release.outputs.upload_url }}
asset_path: out/ASF-win-x64.zip
asset_name: ASF-win-x64.zip
asset_content_type: application/zip

View File

@@ -0,0 +1,60 @@
name: ASF-docker-publish-latest
on:
release:
types: [released]
env:
TAG: latest
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: recursive
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to ghcr.io
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PACKAGES_PAT }}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Prepare environment outputs
shell: sh
run: |
set -eu
echo "FIXED_TAG=$(echo ${{ github.ref }} | cut -d '/' -f 3)" >> "$GITHUB_ENV"
echo "DATE_ISO8601=$(date --iso-8601=seconds --utc)" >> "$GITHUB_ENV"
echo "GHCR_REPOSITORY=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
echo "DH_REPOSITORY=$(echo ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
file: Dockerfile.Service
platforms: linux/amd64,linux/arm,linux/arm64
build-args: STEAM_TOKEN_DUMPER_TOKEN=${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
labels: |
org.opencontainers.image.created=${{ env.DATE_ISO8601 }}
org.opencontainers.image.version=${{ env.FIXED_TAG }}
org.opencontainers.image.revision=${{ github.sha }}
tags: |
ghcr.io/${{ env.GHCR_REPOSITORY }}:${{ env.TAG }}
${{ env.DH_REPOSITORY }}:${{ env.TAG }}
push: true

View File

@@ -0,0 +1,67 @@
name: ASF-docker-publish-main
on:
push:
branches:
- main
env:
TAG: main
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: recursive
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to ghcr.io
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PACKAGES_PAT }}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Prepare environment outputs
shell: sh
run: |
set -eu
echo "DATE_ISO8601=$(date --iso-8601=seconds --utc)" >> "$GITHUB_ENV"
echo "GHCR_REPOSITORY=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
echo "DH_REPOSITORY=$(echo ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
platforms: linux/amd64,linux/arm,linux/arm64
build-args: STEAM_TOKEN_DUMPER_TOKEN=${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
labels: |
org.opencontainers.image.created=${{ env.DATE_ISO8601 }}
org.opencontainers.image.version=${{ github.sha }}
org.opencontainers.image.revision=${{ github.sha }}
tags: |
ghcr.io/${{ env.GHCR_REPOSITORY }}:${{ env.TAG }}
${{ env.DH_REPOSITORY }}:${{ env.TAG }}
push: true
- name: Update DockerHub repository description
continue-on-error: true
uses: peter-evans/dockerhub-description@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
repository: ${{ env.DH_REPOSITORY }}

View File

@@ -0,0 +1,62 @@
name: ASF-docker-publish-released
on:
push:
tags:
- '*'
env:
TAG: released
jobs:
main:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: recursive
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to ghcr.io
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PACKAGES_PAT }}
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Prepare environment outputs
shell: sh
run: |
set -eu
echo "FIXED_TAG=$(echo ${{ github.ref }} | cut -d '/' -f 3)" >> "$GITHUB_ENV"
echo "DATE_ISO8601=$(date --iso-8601=seconds --utc)" >> "$GITHUB_ENV"
echo "GHCR_REPOSITORY=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
echo "DH_REPOSITORY=$(echo ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }} | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
platforms: linux/amd64,linux/arm,linux/arm64
build-args: STEAM_TOKEN_DUMPER_TOKEN=${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
labels: |
org.opencontainers.image.created=${{ env.DATE_ISO8601 }}
org.opencontainers.image.version=${{ env.FIXED_TAG }}
org.opencontainers.image.revision=${{ github.sha }}
tags: |
ghcr.io/${{ env.GHCR_REPOSITORY }}:${{ env.TAG }}
ghcr.io/${{ env.GHCR_REPOSITORY }}:${{ env.FIXED_TAG }}
${{ env.DH_REPOSITORY }}:${{ env.TAG }}
${{ env.DH_REPOSITORY }}:${{ env.FIXED_TAG }}
push: true

16
.github/workflows/lock-threads.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
name: ASF-lock-threads
on:
schedule:
- cron: '0 1 * * *'
jobs:
lock:
runs-on: ubuntu-latest
steps:
- name: Lock inactive threads
uses: dessant/lock-threads@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
issue-lock-inactive-days: 30
pr-lock-inactive-days: 30

80
.github/workflows/translations.yml vendored Normal file
View File

@@ -0,0 +1,80 @@
name: ASF-translations
on:
schedule:
- cron: '5 2 * * *'
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: recursive
- name: Reset wiki to follow origin
shell: sh
run: |
set -eu
cd wiki
git fetch --depth=1 origin master
git reset --hard origin/master
- name: Download latest translations from Crowdin
uses: crowdin/github-action@1.1.0
with:
upload_sources: false
download_translations: true
skip_untranslated_strings: true
push_translations: false
crowdin_branch_name: main
project_id: ${{ secrets.ASF_CROWDIN_PROJECT_ID }}
token: ${{ secrets.ASF_CROWDIN_API_TOKEN }}
- name: Commit the changes to wiki
shell: sh
run: |
set -eu
cd wiki
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add -A "locale"
if ! git diff --cached --quiet; then
git commit -m "Automatic translations update"
fi
- name: Push changes to wiki
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: master
directory: wiki
repository: ${{ github.repository }}.wiki
- name: Commit the changes to ASF
shell: sh
run: |
set -eu
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add -A "ArchiSteamFarm/Localization" "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper/Localization" "wiki"
if ! git diff --cached --quiet; then
git commit -m "Automatic translations update"
fi
- name: Push changes to ASF
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref }}

3
.gitignore vendored
View File

@@ -15,9 +15,6 @@ ArchiSteamFarm/logs
# Ignore standard out folders for publishing
**/out
# Ignore crowdin CLI secret (if exists)
tools/ArchiCrowdin/crowdin_identity.yml
# _ _
# | | (_) _ __ _ _ __ __
# | | | || '_ \ | | | |\ \/ /

8
.gitmodules vendored
View File

@@ -1,12 +1,8 @@
[submodule "ASF-WebConfigGenerator"]
path = ASF-WebConfigGenerator
url = https://github.com/JustArchiNET/ASF-WebConfigGenerator.git
[submodule "ASF-ui"]
path = ASF-ui
url = https://github.com/JustArchiNET/ASF-ui.git
[submodule "tools/ArchiCrowdin"]
path = tools/ArchiCrowdin
url = https://github.com/JustArchiNET/ArchiCrowdin.git
branch = main
[submodule "wiki"]
path = wiki
url = https://github.com/JustArchiNET/ArchiSteamFarm.wiki.git
branch = master

View File

@@ -1,80 +0,0 @@
# ASF is a C# project with a solution file named ArchiSteamFarm.sln
language: csharp
solution: ArchiSteamFarm.sln
# We can save bandwidth by limiting git clone to only last 10 commits
git:
depth: 10
# ASF is based on .NET Core platform, we're not building with Mono
dotnet: 3.1
mono: none
env:
global:
- CONFIGURATION: Release
- DOTNET_CLI_TELEMETRY_OPTOUT: 1
- DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
- NET_CORE_VERSION: netcoreapp3.1
- VARIANTS="generic linux-arm linux-x64 osx-x64 win-x64" # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
before_script:
- |
set -eu
dotnet --info
set +u # This is needed to continue Travis build
script:
- |
set -eu
nvm install lts/*
npm ci --no-progress --prefix ASF-ui
npm run-script deploy --no-progress --prefix ASF-ui
dotnet build ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo
dotnet build ArchiSteamFarm.CustomPlugins.ExamplePlugin -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo
dotnet test ArchiSteamFarm.Tests -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo
publish() {
if [ "$1" = 'generic' ]; then
local variantArgs="/p:UseAppHost=false"
else
local variantArgs="-r $1 /p:PublishTrimmed=true"
fi
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${1}" --no-restore --nologo "/p:ASFVariant=$1" $variantArgs
# If we include any overlay for this variant, copy it to output directory
if [ -d "ArchiSteamFarm/overlay/${1}" ]; then
cp "ArchiSteamFarm/overlay/${1}/"* "out/${1}"
fi
}
dotnet clean ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" --nologo
dotnet restore ArchiSteamFarm
jobs=""
for variant in $VARIANTS; do
publish "$variant" &
jobs="$jobs $!"
done
for job in $jobs; do
wait "$job"
done
set +u # This is needed to continue Travis build
matrix:
# We can use fast finish, as we don't need to wait for allow_failures builds to mark build as success
fast_finish: true
include:
# We're building ASF with dotnet on latest versions of Linux and OS X
# Sadly, travis is still missing support for selecting latest images: https://github.com/travis-ci/travis-ci/issues/8922
- os: linux
# Ref: https://docs.travis-ci.com/user/reference/linux
dist: bionic
- os: osx
# Ref: https://docs.travis-ci.com/user/reference/osx
dotnet: 3.1.102 # For OSX, we need absolute dotnet version until https://github.com/dotnet/core-setup/issues/4187 is resolved
osx_image: xcode11.3

2
ASF-ui

Submodule ASF-ui updated: fdb3c4f11f...ca69b1c80e

View File

@@ -1,47 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Authors>JustArchi</Authors>
<Company>JustArchi</Company>
<Copyright>Copyright © ArchiSteamFarm 2015-2020</Copyright>
<DefaultItemExcludes>$(DefaultItemExcludes);debug/**;out/**</DefaultItemExcludes>
<ErrorReport>none</ErrorReport>
<LangVersion>8.0</LangVersion>
<NoWarn />
<OutputType>Library</OutputType>
<PackageIcon>../resources/ASF.ico</PackageIcon>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/JustArchiNET/ArchiSteamFarm</PackageProjectUrl>
<RepositoryType>Git</RepositoryType>
<RepositoryUrl>https://github.com/JustArchi/ArchiSteamFarm.git</RepositoryUrl>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
</PropertyGroup>
<PropertyGroup Condition="'$(OS)' == 'Windows_NT' OR '$(ASFNetFramework)' != ''">
<TargetFrameworks>netcoreapp3.1;net48</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(OS)' != 'Windows_NT' AND '$(ASFNetFramework)' == ''">
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugSymbols>false</DebugSymbols>
<DebugType>none</DebugType>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningsAsErrors />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="4.0.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="SteamKit2" Version="*" />
<PackageReference Include="System.Composition.AttributedModel" Version="*" />
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="Newtonsoft.Json" IncludeAssets="compile" />
<PackageReference Include="SteamKit2" IncludeAssets="compile" />
<PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" />
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" ExcludeAssets="all" Private="false" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,24 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
[assembly: CLSCompliant(false)]

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,44 +22,46 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using JetBrains.Annotations;
using ArchiSteamFarm.Web;
using ArchiSteamFarm.Web.Responses;
using Newtonsoft.Json;
namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin {
// This is example class that shows how you can call third-party services within your plugin
// You always wanted from your ASF to post cats, right? Now is your chance!
// P.S. The code is almost 1:1 copy from the one I use in ArchiBoT, you can thank me later
// You've always wanted from your ASF to post cats, right? Now is your chance!
// P.S. The code is almost 1:1 copy from the one I use in ArchiBot, you can thank me later
internal static class CatAPI {
private const string URL = "https://aws.random.cat";
[ItemCanBeNull]
internal static async Task<string> GetRandomCatURL([JetBrains.Annotations.NotNull] WebBrowser webBrowser) {
const string request = URL + "/meow";
internal static async Task<string?> GetRandomCatURL(WebBrowser webBrowser) {
if (webBrowser == null) {
throw new ArgumentNullException(nameof(webBrowser));
}
WebBrowser.ObjectResponse<MeowResponse> response = await webBrowser.UrlGetToJsonObject<MeowResponse>(request).ConfigureAwait(false);
Uri request = new(URL + "/meow");
if (response?.Content == null) {
ObjectResponse<MeowResponse>? response = await webBrowser.UrlGetToJsonObject<MeowResponse>(request).ConfigureAwait(false);
if (response == null) {
return null;
}
if (string.IsNullOrEmpty(response.Content.Link)) {
ASF.ArchiLogger.LogNullError(nameof(response.Content.Link));
return null;
throw new InvalidOperationException(nameof(response.Content.Link));
}
return Uri.EscapeUriString(response.Content.Link);
return Uri.EscapeUriString(response.Content!.Link!);
}
#pragma warning disable CA1812 // False positive, the class is used during json deserialization
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
private sealed class MeowResponse {
#pragma warning disable 649
[JsonProperty(PropertyName = "file", Required = Required.Always)]
internal readonly string Link;
#pragma warning restore 649
internal readonly string Link = "";
[JsonConstructor]
private MeowResponse() { }
}
#pragma warning restore CA1812 // False positive, the class is used during json deserialization
}
}

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,8 +19,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Net;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.IPC.Controllers.Api;
using ArchiSteamFarm.IPC.Responses;
using Microsoft.AspNetCore.Mvc;
@@ -38,7 +40,11 @@ namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin {
[ProducesResponseType(typeof(GenericResponse<string>), (int) HttpStatusCode.OK)]
[ProducesResponseType(typeof(GenericResponse), (int) HttpStatusCode.ServiceUnavailable)]
public async Task<ActionResult<GenericResponse>> CatGet() {
string link = await CatAPI.GetRandomCatURL(ASF.WebBrowser).ConfigureAwait(false);
if (ASF.WebBrowser == null) {
throw new InvalidOperationException(nameof(ASF.WebBrowser));
}
string? link = await CatAPI.GetRandomCatURL(ASF.WebBrowser).ConfigureAwait(false);
return !string.IsNullOrEmpty(link) ? Ok(new GenericResponse<string>(link)) : StatusCode((int) HttpStatusCode.ServiceUnavailable, new GenericResponse(false));
}

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,12 +19,20 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#if NETFRAMEWORK
using ArchiSteamFarm.Compatibility;
#endif
using System;
using System.Collections.Generic;
using System.Composition;
using System.Linq;
using System.Threading.Tasks;
using ArchiSteamFarm.Json;
using ArchiSteamFarm.Plugins;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Plugins.Interfaces;
using ArchiSteamFarm.Steam;
using ArchiSteamFarm.Steam.Data;
using ArchiSteamFarm.Steam.Storage;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SteamKit2;
@@ -35,7 +43,6 @@ namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin {
// Your plugin class should inherit the plugin interfaces it wants to handle
// If you do not want to handle a particular action (e.g. OnBotMessage that is offered in IBotMessage), it's the best idea to not inherit it at all
// This will keep your code compact, efficient and less dependent. You can always add additional interfaces when you'll need them, this example project will inherit quite a bit of them to show you potential usage
// ReSharper disable once UnusedMember.Global - this is example plugin class that isn't used in our main code
internal sealed class ExamplePlugin : IASF, IBot, IBotCommand, IBotConnection, IBotFriendRequest, IBotMessage, IBotModules, IBotTradeOffer {
// This is used for identification purposes, typically you want to use a friendly name of your plugin here, such as the name of your main class
// Please note that this property can have direct dependencies only on structures that were initialized by the constructor, as it's possible to be called before OnLoaded() takes place
@@ -43,23 +50,26 @@ namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin {
// This will be displayed to the user and written in the log file, typically you should point it to the version of your library, but alternatively you can do some more advanced logic if you'd like to
// Please note that this property can have direct dependencies only on structures that were initialized by the constructor, as it's possible to be called before OnLoaded() takes place
public Version Version => typeof(ExamplePlugin).Assembly.GetName().Version;
public Version Version => typeof(ExamplePlugin).Assembly.GetName().Version ?? throw new InvalidOperationException(nameof(Version));
// Plugins can expose custom properties for our GET /Api/Plugins API call, simply annotate them with [JsonProperty] (or keep public)
[JsonProperty]
public bool CustomIsEnabledField { get; private set; } = true;
// This method, apart from being called before any bot initialization takes place, allows you to read custom global config properties that are not recognized by ASF
// Thanks to that, you can extend default ASF config with your own stuff, then parse it here in order to customize your plugin during runtime
// Keep in mind that, as noted in the interface, additionalConfigProperties can be null if no custom, unrecognized properties are found by ASF, you should handle that case appropriately
// In addition to that, this method also guarantees that all plugins were already OnLoaded(), which allows cross-plugins-communication to be possible
public void OnASFInit(IReadOnlyDictionary<string, JToken> additionalConfigProperties = null) {
public void OnASFInit(IReadOnlyDictionary<string, JToken>? additionalConfigProperties = null) {
if (additionalConfigProperties == null) {
return;
}
// ReSharper disable once UseDeconstruction - deconstruction is not available in .NET Framework
foreach (KeyValuePair<string, JToken> configProperty in additionalConfigProperties) {
foreach ((string configProperty, JToken configValue) in additionalConfigProperties) {
// It's a good idea to prefix your custom properties with the name of your plugin, so there will be no possible conflict of ASF or other plugins using the same name, neither now or in the future
switch (configProperty.Key) {
case nameof(ExamplePlugin) + "TestProperty" when configProperty.Value.Type == JTokenType.Boolean:
bool exampleBooleanValue = configProperty.Value.Value<bool>();
switch (configProperty) {
case nameof(ExamplePlugin) + "TestProperty" when configValue.Type == JTokenType.Boolean:
bool exampleBooleanValue = configValue.Value<bool>();
ASF.ArchiLogger.LogGenericInfo(nameof(ExamplePlugin) + "TestProperty boolean property has been found with a value of: " + exampleBooleanValue);
break;
@@ -74,14 +84,14 @@ namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin {
// Since ASF already had to do initial parsing in order to determine that the command is unknown, args[] are splitted using standard ASF delimiters
// If by any chance you want to handle message in its raw format, you also have it available, although for usual ASF pattern you can most likely stick with args[] exclusively. The message has CommandPrefix already stripped for your convenience
// If you do not recognize the command, just return null/empty and allow ASF to gracefully return "unknown command" to user on usual basis
public async Task<string> OnBotCommand(Bot bot, ulong steamID, string message, string[] args) {
public async Task<string?> OnBotCommand(Bot bot, ulong steamID, string message, string[] args) {
// In comparison with OnBotMessage(), we're using asynchronous CatAPI call here, so we declare our method as async and return the message as usual
// Notice how we handle access here as well, it'll work only for FamilySharing+
switch (args[0].ToUpperInvariant()) {
case "CAT" when bot.HasPermission(steamID, BotConfig.EPermission.FamilySharing):
case "CAT" when bot.HasAccess(steamID, BotConfig.EAccess.FamilySharing):
// Notice how we can decide whether to use bot's AWH WebBrowser or ASF's one. For Steam-related requests, AWH's one should always be used, for third-party requests like those it doesn't really matter
// Still, it makes sense to pass AWH's one, so in case you get some errors or alike, you know from which bot instance they come from. It's similar to using Bot's ArchiLogger compared to ASF's one
string randomCatURL = await CatAPI.GetRandomCatURL(bot.ArchiWebHandler.WebBrowser).ConfigureAwait(false);
string? randomCatURL = await CatAPI.GetRandomCatURL(bot.ArchiWebHandler.WebBrowser).ConfigureAwait(false);
return !string.IsNullOrEmpty(randomCatURL) ? randomCatURL : "God damn it, we're out of cats, care to notify my master? Thanks!";
default:
@@ -120,7 +130,7 @@ namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin {
// Keep in mind that, as noted in the interface, additionalConfigProperties can be null if no custom, unrecognized properties are found by ASF, you should handle that case appropriately
// Also keep in mind that this function can be called multiple times, e.g. when user edits his bot configs during runtime
// Take a look at OnASFInit() for example parsing code
public async void OnBotInitModules(Bot bot, IReadOnlyDictionary<string, JToken> additionalConfigProperties = null) {
public async void OnBotInitModules(Bot bot, IReadOnlyDictionary<string, JToken>? additionalConfigProperties = null) {
// ASF marked this message as synchronous, in case we have async code to execute, we can just use async void return
// For example, we'll ensure that every bot starts paused regardless of Paused property, in order to do this, we'll just call Pause here in InitModules()
// Thanks to the fact that this method is called with each bot config reload, we'll ensure that our bot stays paused even if it'd get unpaused otherwise
@@ -137,19 +147,29 @@ namespace ArchiSteamFarm.CustomPlugins.ExamplePlugin {
// Keep in mind that there is no guarantee what is the actual access of steamID, so you should do the appropriate access checking yourself
// You can use either ASF's default functions for that, or implement your own logic as you please
// If you do not intend to return any response to user, just return null/empty and ASF will proceed with the silence as usual
public Task<string> OnBotMessage(Bot bot, ulong steamID, string message) {
// Normally ASF will expect from you async-capable responses, such as Task<string>. This allows you to make your code fully asynchronous which is a core fundament on which ASF is built upon
public Task<string?> OnBotMessage(Bot bot, ulong steamID, string message) {
// Normally ASF will expect from you async-capable responses, such as Task<string>. This allows you to make your code fully asynchronous which is a core foundation on which ASF is built upon
// Since in this method we're not doing any async stuff, instead of defining this method as async (pointless), we just need to wrap our responses in Task.FromResult<>()
if (Bot.BotsReadOnly == null) {
throw new InvalidOperationException(nameof(Bot.BotsReadOnly));
}
// As a starter, we can for example ignore messages sent from our own bots, since otherwise they can run into a possible infinite loop of answering themselves
if (Bot.BotsReadOnly.Values.Any(existingBot => existingBot.SteamID == steamID)) {
return Task.FromResult<string?>(null);
}
// If this message doesn't come from one of our bots, we can reply to the user in some pre-defined way
bot.ArchiLogger.LogGenericTrace("Hey boss, we got some unknown message here!");
return Task.FromResult("I didn't get that, did you mean to use a command?");
return Task.FromResult((string?) "I didn't get that, did you mean to use a command?");
}
// This method is called when bot receives a trade offer that ASF isn't willing to accept (ignored and rejected trades)
// It allows you not only to analyze such trades, but generate a response whether ASF should accept it (true), or proceed like usual (false)
// Thanks to that, you can implement custom rules for all trades that aren't handled by ASF, for example cross-set trading on your own custom rules
// You'd implement your own logic here, as an example we'll allow all trades to be accepted if the bot's name starts from "TrashBot"
public Task<bool> OnBotTradeOffer(Bot bot, Steam.TradeOffer tradeOffer) => Task.FromResult(bot.BotName.StartsWith("TrashBot", StringComparison.OrdinalIgnoreCase));
public Task<bool> OnBotTradeOffer(Bot bot, TradeOffer tradeOffer) => Task.FromResult(bot.BotName.StartsWith("TrashBot", StringComparison.OrdinalIgnoreCase));
// This is the earliest method that will be called, right after loading the plugin, long before any bot initialization takes place
// It's a good place to initialize all potential (non-bot-specific) structures that you will need across lifetime of your plugin, such as global timers, concurrent dictionaries and alike

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" ExcludeAssets="all" Private="false" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,24 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
[assembly: CLSCompliant(false)]

View File

@@ -0,0 +1,64 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Composition;
using System.Diagnostics.CodeAnalysis;
using System.Runtime;
using System.Threading;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Plugins.Interfaces;
namespace ArchiSteamFarm.CustomPlugins.PeriodicGC {
[Export(typeof(IPlugin))]
[SuppressMessage("ReSharper", "UnusedType.Global")]
internal sealed class PeriodicGCPlugin : IPlugin {
private const byte GCPeriod = 60; // In seconds
private static readonly object LockObject = new();
private static readonly Timer PeriodicGCTimer = new(PerformGC);
public string Name => nameof(PeriodicGCPlugin);
public Version Version => typeof(PeriodicGCPlugin).Assembly.GetName().Version ?? throw new InvalidOperationException(nameof(Version));
public void OnLoaded() {
TimeSpan timeSpan = TimeSpan.FromSeconds(GCPeriod);
ASF.ArchiLogger.LogGenericWarning("Periodic GC will occur every " + timeSpan.ToHumanReadable() + ". Please keep in mind that this plugin should be used for debugging tests only.");
lock (LockObject) {
PeriodicGCTimer.Change(timeSpan, timeSpan);
}
}
private static void PerformGC(object? state) {
ASF.ArchiLogger.LogGenericWarning("Performing GC, current memory: " + (GC.GetTotalMemory(false) / 1024) + " KB.");
lock (LockObject) {
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true, true);
}
ASF.ArchiLogger.LogGenericWarning("GC finished, current memory: " + (GC.GetTotalMemory(false) / 1024) + " KB.");
}
}
}

View File

@@ -0,0 +1,36 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="Newtonsoft.Json" IncludeAssets="compile" />
<PackageReference Include="SteamKit2" IncludeAssets="compile" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" IncludeAssets="compile" />
<PackageReference Include="System.Composition.AttributedModel" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
<PackageReference Include="System.Collections.Immutable" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" ExcludeAssets="all" Private="false" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Localization\Strings.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Compile Update="Localization\Strings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Strings.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,24 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
[assembly: CLSCompliant(false)]

View File

@@ -0,0 +1,288 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#if NETFRAMEWORK
using ArchiSteamFarm.Compatibility;
using File = System.IO.File;
using Path = System.IO.Path;
#else
using System.IO;
#endif
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.Helpers;
using ArchiSteamFarm.Localization;
using Newtonsoft.Json;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
internal sealed class GlobalCache : SerializableFile {
private static string SharedFilePath => Path.Combine(ArchiSteamFarm.SharedInfo.ConfigDirectory, nameof(SteamTokenDumper) + ".cache");
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentDictionary<uint, uint> AppChangeNumbers = new();
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentDictionary<uint, ulong> AppTokens = new();
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentDictionary<uint, string> DepotKeys = new();
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentDictionary<uint, ulong> PackageTokens = new();
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentDictionary<uint, ulong> SubmittedApps = new();
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentDictionary<uint, string> SubmittedDepots = new();
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentDictionary<uint, ulong> SubmittedPackages = new();
[JsonProperty(Required = Required.DisallowNull)]
internal uint LastChangeNumber { get; private set; }
internal GlobalCache() => FilePath = SharedFilePath;
internal ulong GetAppToken(uint appID) => AppTokens[appID];
internal Dictionary<uint, ulong> GetAppTokensForSubmission() => AppTokens.Where(appToken => (SteamTokenDumperPlugin.Config?.SecretAppIDs.Contains(appToken.Key) == false) && (appToken.Value > 0) && (!SubmittedApps.TryGetValue(appToken.Key, out ulong token) || (appToken.Value != token))).ToDictionary(appToken => appToken.Key, appToken => appToken.Value);
internal Dictionary<uint, string> GetDepotKeysForSubmission() => DepotKeys.Where(depotKey => (SteamTokenDumperPlugin.Config?.SecretDepotIDs.Contains(depotKey.Key) == false) && !string.IsNullOrEmpty(depotKey.Value) && (!SubmittedDepots.TryGetValue(depotKey.Key, out string? key) || (depotKey.Value != key))).ToDictionary(depotKey => depotKey.Key, depotKey => depotKey.Value);
internal Dictionary<uint, ulong> GetPackageTokensForSubmission() => PackageTokens.Where(packageToken => (SteamTokenDumperPlugin.Config?.SecretPackageIDs.Contains(packageToken.Key) == false) && (packageToken.Value > 0) && (!SubmittedPackages.TryGetValue(packageToken.Key, out ulong token) || (packageToken.Value != token))).ToDictionary(packageToken => packageToken.Key, packageToken => packageToken.Value);
internal static async Task<GlobalCache?> Load() {
if (!File.Exists(SharedFilePath)) {
GlobalCache result = new();
Utilities.InBackground(result.Save);
return result;
}
GlobalCache? globalCache;
try {
string json = await Compatibility.File.ReadAllTextAsync(SharedFilePath).ConfigureAwait(false);
if (string.IsNullOrEmpty(json)) {
ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(json)));
return null;
}
globalCache = JsonConvert.DeserializeObject<GlobalCache>(json);
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return null;
}
if (globalCache == null) {
ASF.ArchiLogger.LogNullError(nameof(globalCache));
return null;
}
return globalCache;
}
internal void OnPICSChanges(uint currentChangeNumber, IReadOnlyCollection<KeyValuePair<uint, SteamApps.PICSChangesCallback.PICSChangeData>> appChanges) {
if (currentChangeNumber == 0) {
throw new ArgumentOutOfRangeException(nameof(currentChangeNumber));
}
if (appChanges == null) {
throw new ArgumentNullException(nameof(appChanges));
}
if (currentChangeNumber <= LastChangeNumber) {
return;
}
LastChangeNumber = currentChangeNumber;
foreach ((uint appID, SteamApps.PICSChangesCallback.PICSChangeData appData) in appChanges) {
if (!AppChangeNumbers.TryGetValue(appID, out uint previousChangeNumber) || (appData.ChangeNumber <= previousChangeNumber)) {
continue;
}
AppChangeNumbers.TryRemove(appID, out _);
}
Utilities.InBackground(Save);
}
internal void OnPICSChangesRestart(uint currentChangeNumber) {
if (currentChangeNumber == 0) {
throw new ArgumentOutOfRangeException(nameof(currentChangeNumber));
}
if (currentChangeNumber <= LastChangeNumber) {
return;
}
LastChangeNumber = currentChangeNumber;
AppChangeNumbers.Clear();
Utilities.InBackground(Save);
}
internal bool ShouldRefreshAppInfo(uint appID) => !AppChangeNumbers.ContainsKey(appID);
internal bool ShouldRefreshDepotKey(uint depotID) => !DepotKeys.ContainsKey(depotID);
internal void UpdateAppChangeNumbers(IReadOnlyCollection<KeyValuePair<uint, uint>> appChangeNumbers) {
if (appChangeNumbers == null) {
throw new ArgumentNullException(nameof(appChangeNumbers));
}
bool save = false;
foreach ((uint appID, uint changeNumber) in appChangeNumbers) {
if (AppChangeNumbers.TryGetValue(appID, out uint previousChangeNumber) && (previousChangeNumber == changeNumber)) {
continue;
}
AppChangeNumbers[appID] = changeNumber;
save = true;
}
if (save) {
Utilities.InBackground(Save);
}
}
internal void UpdateAppTokens(IReadOnlyCollection<KeyValuePair<uint, ulong>> appTokens, IReadOnlyCollection<uint> publicAppIDs) {
if (appTokens == null) {
throw new ArgumentNullException(nameof(appTokens));
}
if (publicAppIDs == null) {
throw new ArgumentNullException(nameof(publicAppIDs));
}
bool save = false;
foreach ((uint appID, ulong appToken) in appTokens) {
if (AppTokens.TryGetValue(appID, out ulong previousAppToken) && (previousAppToken == appToken)) {
continue;
}
AppTokens[appID] = appToken;
save = true;
}
foreach (uint appID in publicAppIDs) {
if (AppTokens.TryGetValue(appID, out ulong previousAppToken) && (previousAppToken == 0)) {
continue;
}
AppTokens[appID] = 0;
save = true;
}
if (save) {
Utilities.InBackground(Save);
}
}
internal void UpdateDepotKeys(ICollection<SteamApps.DepotKeyCallback> depotKeyResults) {
if (depotKeyResults == null) {
throw new ArgumentNullException(nameof(depotKeyResults));
}
bool save = false;
foreach (SteamApps.DepotKeyCallback depotKeyResult in depotKeyResults) {
if (depotKeyResult.Result != EResult.OK) {
continue;
}
string depotKey = BitConverter.ToString(depotKeyResult.DepotKey).Replace("-", "", StringComparison.Ordinal);
if (DepotKeys.TryGetValue(depotKeyResult.DepotID, out string? previousDepotKey) && (previousDepotKey == depotKey)) {
continue;
}
DepotKeys[depotKeyResult.DepotID] = depotKey;
save = true;
}
if (save) {
Utilities.InBackground(Save);
}
}
internal void UpdatePackageTokens(IReadOnlyCollection<KeyValuePair<uint, ulong>> packageTokens) {
if (packageTokens == null) {
throw new ArgumentNullException(nameof(packageTokens));
}
bool save = false;
foreach ((uint packageID, ulong packageToken) in packageTokens) {
if (PackageTokens.TryGetValue(packageID, out ulong previousPackageToken) && (previousPackageToken == packageToken)) {
continue;
}
PackageTokens[packageID] = packageToken;
save = true;
}
if (save) {
Utilities.InBackground(Save);
}
}
internal void UpdateSubmittedData(IReadOnlyDictionary<uint, ulong> apps, IReadOnlyDictionary<uint, ulong> packages, IReadOnlyDictionary<uint, string> depots) {
if (apps == null) {
throw new ArgumentNullException(nameof(apps));
}
if (packages == null) {
throw new ArgumentNullException(nameof(packages));
}
if (depots == null) {
throw new ArgumentNullException(nameof(depots));
}
foreach ((uint appID, ulong token) in apps) {
SubmittedApps[appID] = token;
}
foreach ((uint packageID, ulong token) in packages) {
SubmittedPackages[packageID] = token;
}
foreach ((uint depotID, string key) in depots) {
SubmittedDepots[depotID] = key;
}
Utilities.InBackground(Save);
}
}
}

View File

@@ -0,0 +1,35 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using Newtonsoft.Json;
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
public sealed class GlobalConfigExtension {
[JsonProperty(Required = Required.DisallowNull)]
public SteamTokenDumperConfig? SteamTokenDumperPlugin { get; private set; }
[JsonProperty(Required = Required.DisallowNull)]
public bool SteamTokenDumperPluginEnabled { get; private set; }
[JsonConstructor]
internal GlobalConfigExtension() { }
}
}

View File

@@ -0,0 +1,3 @@
This directory contains ASF strings for display and localization purposes.
All strings used by ASF can be found in main `Strings.resx` file, and that's also the only `resx` file that should be modified - all other `resx` files are managed automatically and should not be touched. Please visit **[localization](https://github.com/JustArchiNET/ArchiSteamFarm/wiki/Localization)** section on the wiki if you want to improve translation of other files.

View File

@@ -0,0 +1,252 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper.Localization {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// 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 Strings {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Strings() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[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("ArchiSteamFarm.OfficialPlugins.SteamTokenDumper.Localization.Strings", typeof(Strings).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Finished retrieving {0} app access tokens..
/// </summary>
internal static string BotFinishedRetrievingAppAccessTokens {
get {
return ResourceManager.GetString("BotFinishedRetrievingAppAccessTokens", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Finished retrieving {0} app infos..
/// </summary>
internal static string BotFinishedRetrievingAppInfos {
get {
return ResourceManager.GetString("BotFinishedRetrievingAppInfos", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Finished retrieving {0} depot keys..
/// </summary>
internal static string BotFinishedRetrievingDepotKeys {
get {
return ResourceManager.GetString("BotFinishedRetrievingDepotKeys", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Finished retrieving a total of {0} app access tokens..
/// </summary>
internal static string BotFinishedRetrievingTotalAppAccessTokens {
get {
return ResourceManager.GetString("BotFinishedRetrievingTotalAppAccessTokens", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Finished retrieving all depot keys for a total of {0} apps..
/// </summary>
internal static string BotFinishedRetrievingTotalDepots {
get {
return ResourceManager.GetString("BotFinishedRetrievingTotalDepots", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There are no apps that require a refresh on this bot instance..
/// </summary>
internal static string BotNoAppsToRefresh {
get {
return ResourceManager.GetString("BotNoAppsToRefresh", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retrieving {0} app access tokens....
/// </summary>
internal static string BotRetrievingAppAccessTokens {
get {
return ResourceManager.GetString("BotRetrievingAppAccessTokens", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retrieving {0} app infos....
/// </summary>
internal static string BotRetrievingAppInfos {
get {
return ResourceManager.GetString("BotRetrievingAppInfos", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retrieving {0} depot keys....
/// </summary>
internal static string BotRetrievingDepotKeys {
get {
return ResourceManager.GetString("BotRetrievingDepotKeys", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retrieving a total of {0} app access tokens....
/// </summary>
internal static string BotRetrievingTotalAppAccessTokens {
get {
return ResourceManager.GetString("BotRetrievingTotalAppAccessTokens", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Retrieving all depots for a total of {0} apps....
/// </summary>
internal static string BotRetrievingTotalDepots {
get {
return ResourceManager.GetString("BotRetrievingTotalDepots", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} could not be loaded, a fresh instance will be initialized....
/// </summary>
internal static string FileCouldNotBeLoadedFreshInit {
get {
return ResourceManager.GetString("FileCouldNotBeLoadedFreshInit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} is currently disabled according to your configuration. If you&apos;d like to help SteamDB in data submission, please check out our wiki..
/// </summary>
internal static string PluginDisabledInConfig {
get {
return ResourceManager.GetString("PluginDisabledInConfig", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} has been disabled due to a missing build token.
/// </summary>
internal static string PluginDisabledMissingBuildToken {
get {
return ResourceManager.GetString("PluginDisabledMissingBuildToken", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} has been initialized successfully, thank you in advance for your help. The first submission will happen in approximately {1} from now..
/// </summary>
internal static string PluginInitializedAndEnabled {
get {
return ResourceManager.GetString("PluginInitializedAndEnabled", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} initialized, the plugin will not resolve any of those: {1}..
/// </summary>
internal static string PluginSecretListInitialized {
get {
return ResourceManager.GetString("PluginSecretListInitialized", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The submission has failed due to too many requests sent, we&apos;ll try again in approximately {0} from now..
/// </summary>
internal static string SubmissionFailedTooManyRequests {
get {
return ResourceManager.GetString("SubmissionFailedTooManyRequests", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Submitting a total of registered apps/subs/depots: {0}/{1}/{2}....
/// </summary>
internal static string SubmissionInProgress {
get {
return ResourceManager.GetString("SubmissionInProgress", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Could not submit the data because there is no valid SteamID set that we could classify as a contributor. Consider setting up {0} property..
/// </summary>
internal static string SubmissionNoContributorSet {
get {
return ResourceManager.GetString("SubmissionNoContributorSet", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There is no new data to submit, everything is up-to-date..
/// </summary>
internal static string SubmissionNoNewData {
get {
return ResourceManager.GetString("SubmissionNoNewData", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The data has been successfully submitted. The server has registered a total of new apps/subs/depots: {0}/{1}/{2}..
/// </summary>
internal static string SubmissionSuccessful {
get {
return ResourceManager.GetString("SubmissionSuccessful", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="PluginDisabledMissingBuildToken" xml:space="preserve">
<value>{0} wurde aufgrund eines zur Kompilierzeit fehlenden Schlüssels deaktiviert</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginDisabledInConfig" xml:space="preserve">
<value>{0} ist gemäß Ihrer Konfiguration derzeit deaktiviert. Wenn Sie SteamDB bei der Datenübermittlung helfen möchten, sehen Sie sich bitte unser Wiki an.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginInitializedAndEnabled" xml:space="preserve">
<value>{0} wurde erfolgreich initialisiert, wir danken Ihnen im Voraus für Ihre Hilfe. Die erste Übermittlung wird in etwa {1} ab jetzt erfolgen.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin"), {1} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="FileCouldNotBeLoadedFreshInit" xml:space="preserve">
<value>{0} konnte nicht geladen werden. Eine frische Instanz wird initialisiert werden...</value>
<comment>{0} will be replaced by the name of the file (e.g. "GlobalCache")</comment>
</data>
<data name="BotNoAppsToRefresh" xml:space="preserve">
<value>Es gibt auf dieser Bot-Instanz keine Applikationen, die einer Auffrischung bedürfen.</value>
</data>
<data name="BotRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>Rufe insgesamt {0} Applikationszugriffstoken ab...</value>
<comment>{0} will be replaced by the number (total count) of app access tokens being retrieved</comment>
</data>
<data name="BotRetrievingAppAccessTokens" xml:space="preserve">
<value>Rufe {0} Applikationszugriffstoken ab...</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppAccessTokens" xml:space="preserve">
<value>Abruf von {0} Applikationszugrifsstoken fertiggestellt.</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>Abruf von insgesamt {0} Applikationszugriffstoken fertiggestellt.</value>
<comment>{0} will be replaced by the number (total count) of app access tokens retrieved</comment>
</data>
<data name="BotRetrievingTotalDepots" xml:space="preserve">
<value>Rufe alle Depots für insgesamt {0} Applikationen ab...</value>
<comment>{0} will be replaced by the number (total count) of apps being retrieved</comment>
</data>
<data name="BotRetrievingAppInfos" xml:space="preserve">
<value>Rufe {0} Applikationsinfos ab...</value>
<comment>{0} will be replaced by the number (count this batch) of app infos being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppInfos" xml:space="preserve">
<value>Abruf von {0} Applikationsinfos fertiggestellt.</value>
<comment>{0} will be replaced by the number (count this batch) of app infos retrieved</comment>
</data>
<data name="BotRetrievingDepotKeys" xml:space="preserve">
<value>Rufe {0} Depotschlüssel ab...</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys being retrieved</comment>
</data>
<data name="BotFinishedRetrievingDepotKeys" xml:space="preserve">
<value>Abruf von {0} Depotschlüsseln fertiggestellt.</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalDepots" xml:space="preserve">
<value>Abruf aller Depotschlüssel für insgesamt {0} Applikationen fertiggestellt.</value>
<comment>{0} will be replaced by the number (total count) of apps retrieved</comment>
</data>
<data name="SubmissionNoNewData" xml:space="preserve">
<value>Es sind keine neuen Daten einzureichen. Alle Daten sind aktuell.</value>
</data>
<data name="SubmissionNoContributorSet" xml:space="preserve">
<value>Konnte keine Daten einreichen, da keine SteamID identifiziert wurde, die als Einreichender valide ist. Bitte ziehe in Betracht {0} zu konfigurieren.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SteamOwnerID") that the user is expected to set</comment>
</data>
<data name="SubmissionInProgress" xml:space="preserve">
<value>Reiche insgesamt folgende Applikationen/Subs/Depots ein: {0}/{1}/{2}...</value>
<comment>{0} will be replaced by the number of app access tokens being submitted, {1} will be replaced by the number of package access tokens being submitted, {2} will be replaced by the number of depot keys being submitted</comment>
</data>
<data name="SubmissionFailedTooManyRequests" xml:space="preserve">
<value>Das Einreichen schlug fehl, weil wir zu viele Einreichungen in zu kurzer Zeit versuchten. Wir versuchen es in ungefähr {0} wieder.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="SubmissionSuccessful" xml:space="preserve">
<value>Die Daten wurden erfolgreich übermittelt. Folgende Anzahl an Applikationen/Subs/Depots wurde vom Server als neu registriert: {0}/{1}/{2}.</value>
<comment>{0} will be replaced by the number of new app access tokens that the server has registered, {1} will be replaced by the number of new package access tokens that the server has registered, {2} will be replaced by the number of new depot keys that the server has registered</comment>
</data>
<data name="PluginSecretListInitialized" xml:space="preserve">
<value>{0} initialisiert, das Plugin wird keines davon lösen: {1}.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SecretPackageIDs"), {1} will be replaced by list of the objects (IDs, numbers), separated by a comma</comment>
</data>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="PluginDisabledMissingBuildToken" xml:space="preserve">
<value>{0} ha sido deshabilitado debido a que falta un token de compilación</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginDisabledInConfig" xml:space="preserve">
<value>{0} está deshabilitado actualmente de acuerdo a tu configuración. Si quieres ayudar a SteamDB enviando datos, por favor, revisa nuestra wiki.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginInitializedAndEnabled" xml:space="preserve">
<value>{0} ha sido iniciado con éxito, gracias de antemano por tu ayuda. El primer envío tendrá lugar en aproximadamente {1} a partir de ahora.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin"), {1} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="FileCouldNotBeLoadedFreshInit" xml:space="preserve">
<value>{0} no se pudo cargar, se iniciará una nueva instancia...</value>
<comment>{0} will be replaced by the name of the file (e.g. "GlobalCache")</comment>
</data>
<data name="BotNoAppsToRefresh" xml:space="preserve">
<value>No hay aplicaciones que requieran actualizarse en esta instancia de bot.</value>
</data>
<data name="BotRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>Recuperando un total de {0} tokens de acceso de aplicación...</value>
<comment>{0} will be replaced by the number (total count) of app access tokens being retrieved</comment>
</data>
<data name="BotRetrievingAppAccessTokens" xml:space="preserve">
<value>Recuperando {0} tokens de acceso de aplicación...</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppAccessTokens" xml:space="preserve">
<value>Se han terminado de recuperar {0} tokens de acceso de aplicación.</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>Se ha terminado de recuperar un total de {0} tokens de acceso de aplicación.</value>
<comment>{0} will be replaced by the number (total count) of app access tokens retrieved</comment>
</data>
<data name="BotRetrievingTotalDepots" xml:space="preserve">
<value>Recuperando todos los depots para un total de {0} aplicaciones...</value>
<comment>{0} will be replaced by the number (total count) of apps being retrieved</comment>
</data>
<data name="BotRetrievingAppInfos" xml:space="preserve">
<value>Recuperando {0} datos de aplicación...</value>
<comment>{0} will be replaced by the number (count this batch) of app infos being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppInfos" xml:space="preserve">
<value>Se han terminado de recuperar {0} datos de aplicación.</value>
<comment>{0} will be replaced by the number (count this batch) of app infos retrieved</comment>
</data>
<data name="BotRetrievingDepotKeys" xml:space="preserve">
<value>Recuperando {0} depot keys...</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys being retrieved</comment>
</data>
<data name="BotFinishedRetrievingDepotKeys" xml:space="preserve">
<value>Se han terminado de recuperar {0} depot keys.</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalDepots" xml:space="preserve">
<value>Se han terminado de recuperar todos los depot keys para un total de {0} aplicaciones.</value>
<comment>{0} will be replaced by the number (total count) of apps retrieved</comment>
</data>
<data name="SubmissionNoNewData" xml:space="preserve">
<value>No hay nuevos datos para enviar, todo está actualizado.</value>
</data>
<data name="SubmissionNoContributorSet" xml:space="preserve">
<value>No se pudieron enviar los datos debido a que no hay un SteamID válido establecido que podamos clasificar como colaborador. Considera configurar la propiedad {0}.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SteamOwnerID") that the user is expected to set</comment>
</data>
<data name="SubmissionInProgress" xml:space="preserve">
<value>Enviando un total de apps/subs/depots registrados: {0}/{1}/{2}...</value>
<comment>{0} will be replaced by the number of app access tokens being submitted, {1} will be replaced by the number of package access tokens being submitted, {2} will be replaced by the number of depot keys being submitted</comment>
</data>
<data name="SubmissionFailedTooManyRequests" xml:space="preserve">
<value>El envío ha fallado debido a demasiadas solicitudes enviadas, lo intentaremos de nuevo en aproximadamente {0} a partir de ahora.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="SubmissionSuccessful" xml:space="preserve">
<value>Los datos se han enviado con éxito. El servidor ha registrado un total de nuevos apps/subs/depots: {0}/{1}/{2}.</value>
<comment>{0} will be replaced by the number of new app access tokens that the server has registered, {1} will be replaced by the number of new package access tokens that the server has registered, {2} will be replaced by the number of new depot keys that the server has registered</comment>
</data>
<data name="PluginSecretListInitialized" xml:space="preserve">
<value>{0} iniciado, el plugin no resolverá ninguno de estos: {1}.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SecretPackageIDs"), {1} will be replaced by list of the objects (IDs, numbers), separated by a comma</comment>
</data>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="PluginDisabledMissingBuildToken" xml:space="preserve">
<value>{0} został wyłączony z powodu brakującego tokena kompilacji</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginDisabledInConfig" xml:space="preserve">
<value>{0} jest obecnie wyłączony zgodnie z Twoją konfiguracją. Jeśli chciałbyś pomóc SteamDB w gromadzeniu danych, sprawdź naszą wiki.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginInitializedAndEnabled" xml:space="preserve">
<value>{0} został pomyślnie zainicjowany, dziękujemy z góry za pomoc. Pierwsze zgłoszenie nastąpi za około {1} od teraz.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin"), {1} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="FileCouldNotBeLoadedFreshInit" xml:space="preserve">
<value>{0} nie może zostać załadowany, nowa instancja zostanie zainicjowana...</value>
<comment>{0} will be replaced by the name of the file (e.g. "GlobalCache")</comment>
</data>
<data name="BotNoAppsToRefresh" xml:space="preserve">
<value>Brak aplikacji, które wymagają odświeżenia instancji tego bota.</value>
</data>
<data name="BotRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>Pobieranie łącznie {0} tokenów dostępu aplikacji...</value>
<comment>{0} will be replaced by the number (total count) of app access tokens being retrieved</comment>
</data>
<data name="BotRetrievingAppAccessTokens" xml:space="preserve">
<value>Pobieranie {0} tokenów dostępu aplikacji...</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppAccessTokens" xml:space="preserve">
<value>Zakończono pobieranie {0} tokenów dostępu aplikacji.</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>Zakończono pobieranie łącznie {0} tokenów dostępu aplikacji.</value>
<comment>{0} will be replaced by the number (total count) of app access tokens retrieved</comment>
</data>
<data name="BotRetrievingTotalDepots" xml:space="preserve">
<value>Pobieranie wszystkich magazynów dla łącznie {0} aplikacji...</value>
<comment>{0} will be replaced by the number (total count) of apps being retrieved</comment>
</data>
<data name="BotRetrievingAppInfos" xml:space="preserve">
<value>Pobieranie {0} informacji o aplikacji...</value>
<comment>{0} will be replaced by the number (count this batch) of app infos being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppInfos" xml:space="preserve">
<value>Zakończono pobieranie {0} informacji o aplikacji.</value>
<comment>{0} will be replaced by the number (count this batch) of app infos retrieved</comment>
</data>
<data name="BotRetrievingDepotKeys" xml:space="preserve">
<value>Pobieranie {0} kluczy magazynu...</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys being retrieved</comment>
</data>
<data name="BotFinishedRetrievingDepotKeys" xml:space="preserve">
<value>Zakończono pobieranie {0} kluczy magazynu.</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalDepots" xml:space="preserve">
<value>Zakończono pobieranie wszystkich kluczy magazynu dla {0} aplikacji.</value>
<comment>{0} will be replaced by the number (total count) of apps retrieved</comment>
</data>
<data name="SubmissionNoNewData" xml:space="preserve">
<value>Nie ma nowych danych do przesłania, wszystko jest aktualne.</value>
</data>
<data name="SubmissionNoContributorSet" xml:space="preserve">
<value>Nie można przesłać danych, ponieważ nie ma poprawnego zestawu SteamID, który moglibyśmy sklasyfikować jako współtwórca. Rozważ ustawienie właściwości {0}.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SteamOwnerID") that the user is expected to set</comment>
</data>
<data name="SubmissionInProgress" xml:space="preserve">
<value>Przesyłanie łącznej liczby zarejestrowanych aplikacji/subskrypcji/magazynów: {0}/{1}/{2}...</value>
<comment>{0} will be replaced by the number of app access tokens being submitted, {1} will be replaced by the number of package access tokens being submitted, {2} will be replaced by the number of depot keys being submitted</comment>
</data>
<data name="SubmissionFailedTooManyRequests" xml:space="preserve">
<value>Przesyłanie nie powiodło się z powodu zbyt wielu wysłanych żądań, spróbujemy ponownie za około {0} od teraz.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="SubmissionSuccessful" xml:space="preserve">
<value>Dane zostały pomyślnie przesłane. Serwer zarejestrował łączną liczbę nowych aplikacji/subskrypcji/magazynów: {0}/{1}/{2}.</value>
<comment>{0} will be replaced by the number of new app access tokens that the server has registered, {1} will be replaced by the number of new package access tokens that the server has registered, {2} will be replaced by the number of new depot keys that the server has registered</comment>
</data>
<data name="PluginSecretListInitialized" xml:space="preserve">
<value>{0} zainicjowano, wtyczka nie rozwiąże żadnego z tych: {1}.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SecretPackageIDs"), {1} will be replaced by list of the objects (IDs, numbers), separated by a comma</comment>
</data>
</root>

View File

@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="PluginDisabledMissingBuildToken" xml:space="preserve">
<value>{0} foi desativado devido à falta de um token de compilação</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="PluginDisabledMissingBuildToken" xml:space="preserve">
<value>{0} HAZ BEEN DISABLD DUE 2 MISIN BUILD TOKEN</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginDisabledInConfig" xml:space="preserve">
<value>{0} IZ CURRENTLY DISABLD ACCORDIN 2 UR CONFIGURASHUN. IF UD LIEK 2 HALP STEAMDB IN DATA SUBMISHUN, PLZ CHECK OUT R WIKI.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginInitializedAndEnabled" xml:space="preserve">
<value>{0} HAS BEEN INITIALIZD SUCCESFULLY, THANK U IN ADVANCE 4 UR HALP. TEH FURST SUBMISHUN WILL HAPPEN IN APPROXIMATELY {1} FRUM NAO.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin"), {1} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="FileCouldNotBeLoadedFreshInit" xml:space="preserve">
<value>{0} CUD NOT BE LOADD, FRESH INSTANCE WILL BE INITIALIZD...</value>
<comment>{0} will be replaced by the name of the file (e.g. "GlobalCache")</comment>
</data>
<data name="BotNoAppsToRefresh" xml:space="preserve">
<value>THAR R NO APPS DAT REQUIRE REFRESH ON DIS BOT INSTANCE.</value>
</data>
<data name="BotRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>RETRIEVIN TOTAL OV {0} APP ACCES TOKENS...</value>
<comment>{0} will be replaced by the number (total count) of app access tokens being retrieved</comment>
</data>
<data name="BotRetrievingAppAccessTokens" xml:space="preserve">
<value>RETRIEVIN {0} APP ACCES TOKENS...</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppAccessTokens" xml:space="preserve">
<value>FINISHD RETRIEVIN {0} APP ACCES TOKENS.</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>FINISHD RETRIEVIN TOTAL OV {0} APP ACCES TOKENS.</value>
<comment>{0} will be replaced by the number (total count) of app access tokens retrieved</comment>
</data>
<data name="BotRetrievingTotalDepots" xml:space="preserve">
<value>RETRIEVIN ALL DEPOTS 4 TOTAL OV {0} APPS...</value>
<comment>{0} will be replaced by the number (total count) of apps being retrieved</comment>
</data>
<data name="BotRetrievingAppInfos" xml:space="preserve">
<value>RETRIEVIN {0} APP INFOS...</value>
<comment>{0} will be replaced by the number (count this batch) of app infos being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppInfos" xml:space="preserve">
<value>FINISHD RETRIEVIN {0} APP INFOS.</value>
<comment>{0} will be replaced by the number (count this batch) of app infos retrieved</comment>
</data>
<data name="BotRetrievingDepotKeys" xml:space="preserve">
<value>RETRIEVIN {0} DEPOT KEYS...</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys being retrieved</comment>
</data>
<data name="BotFinishedRetrievingDepotKeys" xml:space="preserve">
<value>FINISHD RETRIEVIN {0} DEPOT KEYS.</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalDepots" xml:space="preserve">
<value>FINISHD RETRIEVIN ALL DEPOT KEYS 4 TOTAL OV {0} APPS.</value>
<comment>{0} will be replaced by the number (total count) of apps retrieved</comment>
</data>
<data name="SubmissionNoNewData" xml:space="preserve">
<value>THAR IZ NO NEW DATA 2 SUBMIT, EVRYTHIN IZ UP-2-DATE.</value>
</data>
<data name="SubmissionNoContributorSet" xml:space="preserve">
<value>CUD NOT SUBMIT TEH DATA CUZ THAR IZ NO VALID STEAMID SET DAT WE CUD CLASIFY AS CONTRIBUTOR. CONSIDR SETTIN UP {0} PROPERTY.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SteamOwnerID") that the user is expected to set</comment>
</data>
<data name="SubmissionInProgress" xml:space="preserve">
<value>SUBMITTIN TOTAL OV REGISTERD APPS/SUBS/DEPOTS: {0}/{1}/{2}...</value>
<comment>{0} will be replaced by the number of app access tokens being submitted, {1} will be replaced by the number of package access tokens being submitted, {2} will be replaced by the number of depot keys being submitted</comment>
</data>
<data name="SubmissionFailedTooManyRequests" xml:space="preserve">
<value>TEH SUBMISHUN HAS FAILD DUE 2 2 LOTZ DA REQUESTS SENT, WELL TRY AGAIN IN APPROXIMATELY {0} FRUM NAO.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="SubmissionSuccessful" xml:space="preserve">
<value>TEH DATA HAS BEEN SUCCESFULLY SUBMITTD. TEH SERVR HAS REGISTERD TOTAL OV NEW APPS/SUBS/DEPOTS: {0}/{1}/{2}.</value>
<comment>{0} will be replaced by the number of new app access tokens that the server has registered, {1} will be replaced by the number of new package access tokens that the server has registered, {2} will be replaced by the number of new depot keys that the server has registered</comment>
</data>
<data name="PluginSecretListInitialized" xml:space="preserve">
<value>{0} INITIALIZD, TEH PLUGIN WILL NOT RESOLVE ANY OV DOSE: {1}.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SecretPackageIDs"), {1} will be replaced by list of the objects (IDs, numbers), separated by a comma</comment>
</data>
</root>

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="PluginDisabledMissingBuildToken" xml:space="preserve">
<value>{0} has been disabled due to a missing build token</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginDisabledInConfig" xml:space="preserve">
<value>{0} is currently disabled according to your configuration. If you'd like to help SteamDB in data submission, please check out our wiki.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginInitializedAndEnabled" xml:space="preserve">
<value>{0} has been initialized successfully, thank you in advance for your help. The first submission will happen in approximately {1} from now.</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin"), {1} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="FileCouldNotBeLoadedFreshInit" xml:space="preserve">
<value>{0} could not be loaded, a fresh instance will be initialized...</value>
<comment>{0} will be replaced by the name of the file (e.g. "GlobalCache")</comment>
</data>
<data name="BotNoAppsToRefresh" xml:space="preserve">
<value>There are no apps that require a refresh on this bot instance.</value>
</data>
<data name="BotRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>Retrieving a total of {0} app access tokens...</value>
<comment>{0} will be replaced by the number (total count) of app access tokens being retrieved</comment>
</data>
<data name="BotRetrievingAppAccessTokens" xml:space="preserve">
<value>Retrieving {0} app access tokens...</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppAccessTokens" xml:space="preserve">
<value>Finished retrieving {0} app access tokens.</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>Finished retrieving a total of {0} app access tokens.</value>
<comment>{0} will be replaced by the number (total count) of app access tokens retrieved</comment>
</data>
<data name="BotRetrievingTotalDepots" xml:space="preserve">
<value>Retrieving all depots for a total of {0} apps...</value>
<comment>{0} will be replaced by the number (total count) of apps being retrieved</comment>
</data>
<data name="BotRetrievingAppInfos" xml:space="preserve">
<value>Retrieving {0} app infos...</value>
<comment>{0} will be replaced by the number (count this batch) of app infos being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppInfos" xml:space="preserve">
<value>Finished retrieving {0} app infos.</value>
<comment>{0} will be replaced by the number (count this batch) of app infos retrieved</comment>
</data>
<data name="BotRetrievingDepotKeys" xml:space="preserve">
<value>Retrieving {0} depot keys...</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys being retrieved</comment>
</data>
<data name="BotFinishedRetrievingDepotKeys" xml:space="preserve">
<value>Finished retrieving {0} depot keys.</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalDepots" xml:space="preserve">
<value>Finished retrieving all depot keys for a total of {0} apps.</value>
<comment>{0} will be replaced by the number (total count) of apps retrieved</comment>
</data>
<data name="SubmissionNoNewData" xml:space="preserve">
<value>There is no new data to submit, everything is up-to-date.</value>
</data>
<data name="SubmissionNoContributorSet" xml:space="preserve">
<value>Could not submit the data because there is no valid SteamID set that we could classify as a contributor. Consider setting up {0} property.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SteamOwnerID") that the user is expected to set</comment>
</data>
<data name="SubmissionInProgress" xml:space="preserve">
<value>Submitting a total of registered apps/subs/depots: {0}/{1}/{2}...</value>
<comment>{0} will be replaced by the number of app access tokens being submitted, {1} will be replaced by the number of package access tokens being submitted, {2} will be replaced by the number of depot keys being submitted</comment>
</data>
<data name="SubmissionFailedTooManyRequests" xml:space="preserve">
<value>The submission has failed due to too many requests sent, we'll try again in approximately {0} from now.</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="SubmissionSuccessful" xml:space="preserve">
<value>The data has been successfully submitted. The server has registered a total of new apps/subs/depots: {0}/{1}/{2}.</value>
<comment>{0} will be replaced by the number of new app access tokens that the server has registered, {1} will be replaced by the number of new package access tokens that the server has registered, {2} will be replaced by the number of new depot keys that the server has registered</comment>
</data>
<data name="PluginSecretListInitialized" xml:space="preserve">
<value>{0} initialized, the plugin will not resolve any of those: {1}.</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SecretPackageIDs"), {1} will be replaced by list of the objects (IDs, numbers), separated by a comma</comment>
</data>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="PluginDisabledMissingBuildToken" xml:space="preserve">
<value>因为缺少构建令牌,{0} 已被禁用。</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginDisabledInConfig" xml:space="preserve">
<value>按照您的配置,{0} 当前被禁用。如果您愿意帮助 SteamDB 提交数据,请查看我们的 Wiki。</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin")</comment>
</data>
<data name="PluginInitializedAndEnabled" xml:space="preserve">
<value>{0} 加载成功,感谢您的帮助。首次提交将会在大约 {1}后开始。</value>
<comment>{0} will be replaced by the name of the plugin (e.g. "SteamTokenDumperPlugin"), {1} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="FileCouldNotBeLoadedFreshInit" xml:space="preserve">
<value>{0} 无法加载,将初始化新实例……</value>
<comment>{0} will be replaced by the name of the file (e.g. "GlobalCache")</comment>
</data>
<data name="BotNoAppsToRefresh" xml:space="preserve">
<value>此机器人实例没有需要刷新的 App。</value>
</data>
<data name="BotRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>正在获取共计 {0} 个 App Token……</value>
<comment>{0} will be replaced by the number (total count) of app access tokens being retrieved</comment>
</data>
<data name="BotRetrievingAppAccessTokens" xml:space="preserve">
<value>正在获取 {0} 个 App Token……</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppAccessTokens" xml:space="preserve">
<value>已完成获取 {0} 个 App Token。</value>
<comment>{0} will be replaced by the number (count this batch) of app access tokens retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalAppAccessTokens" xml:space="preserve">
<value>已完成获取共计 {0} 个 App Token。</value>
<comment>{0} will be replaced by the number (total count) of app access tokens retrieved</comment>
</data>
<data name="BotRetrievingTotalDepots" xml:space="preserve">
<value>正在获取共计 {0} 个 App 的所有 Depot……</value>
<comment>{0} will be replaced by the number (total count) of apps being retrieved</comment>
</data>
<data name="BotRetrievingAppInfos" xml:space="preserve">
<value>正在获取 {0} 个 App 的信息……</value>
<comment>{0} will be replaced by the number (count this batch) of app infos being retrieved</comment>
</data>
<data name="BotFinishedRetrievingAppInfos" xml:space="preserve">
<value>已完成获取 {0} 个 App 的信息。</value>
<comment>{0} will be replaced by the number (count this batch) of app infos retrieved</comment>
</data>
<data name="BotRetrievingDepotKeys" xml:space="preserve">
<value>正在获取 {0} 个 Depot Key……</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys being retrieved</comment>
</data>
<data name="BotFinishedRetrievingDepotKeys" xml:space="preserve">
<value>已完成获取 {0} 个 Depot key。</value>
<comment>{0} will be replaced by the number (count this batch) of depot keys retrieved</comment>
</data>
<data name="BotFinishedRetrievingTotalDepots" xml:space="preserve">
<value>已完成获取共计 {0} 个 App 的所有 Depot Key。</value>
<comment>{0} will be replaced by the number (total count) of apps retrieved</comment>
</data>
<data name="SubmissionNoNewData" xml:space="preserve">
<value>没有可提交的新数据,所有数据都已更新。</value>
</data>
<data name="SubmissionNoContributorSet" xml:space="preserve">
<value>无法提交数据,因为尚未设置有效的 Steam ID 供我们识别贡献者。请考虑设置 {0} 属性。</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SteamOwnerID") that the user is expected to set</comment>
</data>
<data name="SubmissionInProgress" xml:space="preserve">
<value>正在提交已注册的 App/Sub/Depot共计 {0}/{1}/{2} 个……</value>
<comment>{0} will be replaced by the number of app access tokens being submitted, {1} will be replaced by the number of package access tokens being submitted, {2} will be replaced by the number of depot keys being submitted</comment>
</data>
<data name="SubmissionFailedTooManyRequests" xml:space="preserve">
<value>由于发送请求过多,提交失败,我们将会在大约 {0}后重试。</value>
<comment>{0} will be replaced by translated TimeSpan string (such as "53 minutes")</comment>
</data>
<data name="SubmissionSuccessful" xml:space="preserve">
<value>数据已成功提交。服务器已注册新 App/Sub/Depot共计 {0}/{1}/{2} 个。</value>
<comment>{0} will be replaced by the number of new app access tokens that the server has registered, {1} will be replaced by the number of new package access tokens that the server has registered, {2} will be replaced by the number of new depot keys that the server has registered</comment>
</data>
<data name="PluginSecretListInitialized" xml:space="preserve">
<value>{0} 已初始化,插件无法解析以下任何内容:{1}。</value>
<comment>{0} will be replaced by the name of the config property (e.g. "SecretPackageIDs"), {1} will be replaced by list of the objects (IDs, numbers), separated by a comma</comment>
</data>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="mimetype" type="xsd:string"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
<xsd:attribute ref="xml:space"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,79 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Globalization;
using ArchiSteamFarm.Core;
using Newtonsoft.Json;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
internal sealed class RequestData {
[JsonProperty(PropertyName = "guid", Required = Required.Always)]
private static string Guid => ASF.GlobalDatabase?.Identifier.ToString("N") ?? throw new InvalidOperationException(nameof(ASF.GlobalDatabase.Identifier));
[JsonProperty(PropertyName = "token", Required = Required.Always)]
private static string Token => SharedInfo.Token;
[JsonProperty(PropertyName = "v", Required = Required.Always)]
private static byte Version => SharedInfo.ApiVersion;
[JsonProperty(PropertyName = "apps", Required = Required.Always)]
private readonly ImmutableDictionary<string, string> Apps;
[JsonProperty(PropertyName = "depots", Required = Required.Always)]
private readonly ImmutableDictionary<string, string> Depots;
private readonly ulong SteamID;
[JsonProperty(PropertyName = "subs", Required = Required.Always)]
private readonly ImmutableDictionary<string, string> Subs;
[JsonProperty(PropertyName = "steamid", Required = Required.Always)]
private string SteamIDText => new SteamID(SteamID).Render();
internal RequestData(ulong steamID, IReadOnlyCollection<KeyValuePair<uint, ulong>> apps, IReadOnlyCollection<KeyValuePair<uint, ulong>> accessTokens, IReadOnlyCollection<KeyValuePair<uint, string>> depots) {
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
throw new ArgumentOutOfRangeException(nameof(steamID));
}
if (apps == null) {
throw new ArgumentNullException(nameof(apps));
}
if (accessTokens == null) {
throw new ArgumentNullException(nameof(accessTokens));
}
if (depots == null) {
throw new ArgumentNullException(nameof(depots));
}
SteamID = steamID;
Apps = apps.ToImmutableDictionary(app => app.Key.ToString(CultureInfo.InvariantCulture), app => app.Value.ToString(CultureInfo.InvariantCulture));
Subs = accessTokens.ToImmutableDictionary(package => package.Key.ToString(CultureInfo.InvariantCulture), package => package.Value.ToString(CultureInfo.InvariantCulture));
Depots = depots.ToImmutableDictionary(depot => depot.Key.ToString(CultureInfo.InvariantCulture), depot => depot.Value);
}
}
}

View File

@@ -0,0 +1,63 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.Diagnostics.CodeAnalysis;
using Newtonsoft.Json;
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
#pragma warning disable CA1812 // False positive, the class is used during json deserialization
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
internal sealed class ResponseData {
#pragma warning disable CS0649 // False positive, the field is used during json deserialization
[JsonProperty(PropertyName = "data", Required = Required.DisallowNull)]
internal readonly InternalData? Data;
#pragma warning restore CS0649 // False positive, the field is used during json deserialization
#pragma warning disable CS0649 // False positive, the field is used during json deserialization
[JsonProperty(PropertyName = "success", Required = Required.Always)]
internal readonly bool Success;
#pragma warning restore CS0649 // False positive, the field is used during json deserialization
[JsonConstructor]
private ResponseData() { }
internal sealed class InternalData {
#pragma warning disable CS0649 // False positive, the field is used during json deserialization
[JsonProperty(PropertyName = "new_apps", Required = Required.Always)]
internal readonly uint NewAppsCount;
#pragma warning restore CS0649 // False positive, the field is used during json deserialization
#pragma warning disable CS0649 // False positive, the field is used during json deserialization
[JsonProperty(PropertyName = "new_depots", Required = Required.Always)]
internal readonly uint NewDepotsCount;
#pragma warning restore CS0649 // False positive, the field is used during json deserialization
#pragma warning disable CS0649 // False positive, the field is used during json deserialization
[JsonProperty(PropertyName = "new_subs", Required = Required.Always)]
internal readonly uint NewSubsCount;
#pragma warning restore CS0649 // False positive, the field is used during json deserialization
[JsonConstructor]
private InternalData() { }
}
}
#pragma warning restore CA1812 // False positive, the class is used during json deserialization
}

View File

@@ -0,0 +1,35 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
internal static class SharedInfo {
internal const byte ApiVersion = 1;
internal const byte AppInfosPerSingleRequest = byte.MaxValue;
internal const byte MaximumHoursBetweenRefresh = 8; // Per single bot account, makes sense to be 2 or 3 times less than MinimumHoursBetweenUploads
internal const byte MaximumMinutesBeforeFirstUpload = 60; // Must be greater or equal to MinimumMinutesBeforeFirstUpload
internal const byte MinimumHoursBetweenUploads = 24;
internal const byte MinimumMinutesBeforeFirstUpload = 10; // Must be less or equal to MaximumMinutesBeforeFirstUpload
internal const string ServerURL = "https://asf-token-dumper.xpaw.me";
internal const string Token = "STEAM_TOKEN_DUMPER_TOKEN";
internal static bool HasValidToken => Token.Length == 128;
}
}

View File

@@ -0,0 +1,47 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using Newtonsoft.Json;
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
public sealed class SteamTokenDumperConfig {
[JsonProperty(Required = Required.DisallowNull)]
public bool Enabled { get; internal set; }
[JsonProperty(Required = Required.DisallowNull)]
public ImmutableHashSet<uint> SecretAppIDs { get; private set; } = ImmutableHashSet<uint>.Empty;
[JsonProperty(Required = Required.DisallowNull)]
public ImmutableHashSet<uint> SecretDepotIDs { get; private set; } = ImmutableHashSet<uint>.Empty;
[JsonProperty(Required = Required.DisallowNull)]
public ImmutableHashSet<uint> SecretPackageIDs { get; private set; } = ImmutableHashSet<uint>.Empty;
[JsonProperty(Required = Required.DisallowNull)]
public bool SkipAutoGrantPackages { get; private set; }
[JsonConstructor]
internal SteamTokenDumperConfig() { }
}
}

View File

@@ -0,0 +1,35 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.Net;
using ArchiSteamFarm.IPC.Controllers.Api;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
[Route("Api/SteamTokenDumperPlugin")]
public sealed class SteamTokenDumperController : ArchiController {
[HttpGet(nameof(GlobalConfigExtension))]
[ProducesResponseType(typeof(GlobalConfigExtension), (int) HttpStatusCode.OK)]
[SwaggerOperation(Tags = new[] { nameof(GlobalConfigExtension) })]
public ActionResult<GlobalConfigExtension> Get() => Ok(new GlobalConfigExtension());
}
}

View File

@@ -0,0 +1,570 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#if NETFRAMEWORK
using ArchiSteamFarm.Compatibility;
#endif
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Composition;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Core;
using ArchiSteamFarm.OfficialPlugins.SteamTokenDumper.Localization;
using ArchiSteamFarm.Plugins;
using ArchiSteamFarm.Plugins.Interfaces;
using ArchiSteamFarm.Steam;
using ArchiSteamFarm.Web;
using ArchiSteamFarm.Web.Responses;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SteamKit2;
namespace ArchiSteamFarm.OfficialPlugins.SteamTokenDumper {
[Export(typeof(IPlugin))]
internal sealed class SteamTokenDumperPlugin : OfficialPlugin, IASF, IBot, IBotSteamClient, ISteamPICSChanges {
[JsonProperty]
internal static SteamTokenDumperConfig? Config { get; private set; }
private static readonly ConcurrentDictionary<Bot, IDisposable> BotSubscriptions = new();
private static readonly ConcurrentDictionary<Bot, (SemaphoreSlim RefreshSemaphore, Timer RefreshTimer)> BotSynchronizations = new();
private static readonly SemaphoreSlim SubmissionSemaphore = new(1, 1);
private static readonly Timer SubmissionTimer = new(SubmitData);
private static GlobalCache? GlobalCache;
[JsonProperty]
public override string Name => nameof(SteamTokenDumperPlugin);
[JsonProperty]
public override Version Version => typeof(SteamTokenDumperPlugin).Assembly.GetName().Version ?? throw new InvalidOperationException(nameof(Version));
public Task<uint> GetPreferredChangeNumberToStartFrom() => Task.FromResult(Config?.Enabled == true ? GlobalCache?.LastChangeNumber ?? 0 : 0);
public async void OnASFInit(IReadOnlyDictionary<string, JToken>? additionalConfigProperties = null) {
if (!SharedInfo.HasValidToken) {
ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.PluginDisabledMissingBuildToken, nameof(SteamTokenDumperPlugin)));
return;
}
bool isEnabled = false;
SteamTokenDumperConfig? config = null;
if (additionalConfigProperties != null) {
foreach ((string configProperty, JToken configValue) in additionalConfigProperties) {
try {
switch (configProperty) {
case nameof(GlobalConfigExtension.SteamTokenDumperPlugin):
config = configValue.Value<SteamTokenDumperConfig>();
break;
case nameof(GlobalConfigExtension.SteamTokenDumperPluginEnabled):
isEnabled = configValue.Value<bool>();
break;
}
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
}
}
}
config ??= new SteamTokenDumperConfig();
if (isEnabled) {
config.Enabled = true;
}
Config = config;
if (!config.Enabled) {
ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.PluginDisabledInConfig, nameof(SteamTokenDumperPlugin)));
return;
}
if (!config.SecretAppIDs.IsEmpty) {
ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.PluginSecretListInitialized, nameof(config.SecretAppIDs), string.Join(", ", config.SecretAppIDs)));
}
if (!config.SecretPackageIDs.IsEmpty) {
ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.PluginSecretListInitialized, nameof(config.SecretPackageIDs), string.Join(", ", config.SecretPackageIDs)));
}
if (!config.SecretDepotIDs.IsEmpty) {
ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.PluginSecretListInitialized, nameof(config.SecretDepotIDs), string.Join(", ", config.SecretDepotIDs)));
}
if (GlobalCache == null) {
GlobalCache? globalCache = await GlobalCache.Load().ConfigureAwait(false);
if (globalCache == null) {
ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.FileCouldNotBeLoadedFreshInit, nameof(GlobalCache)));
GlobalCache = new GlobalCache();
} else {
GlobalCache = globalCache;
}
}
TimeSpan startIn = TimeSpan.FromMinutes(Utilities.RandomNext(SharedInfo.MinimumMinutesBeforeFirstUpload, SharedInfo.MaximumMinutesBeforeFirstUpload));
lock (SubmissionSemaphore) {
SubmissionTimer.Change(startIn, TimeSpan.FromHours(SharedInfo.MinimumHoursBetweenUploads));
}
ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.PluginInitializedAndEnabled, nameof(SteamTokenDumperPlugin), startIn.ToHumanReadable()));
}
public async void OnBotDestroy(Bot bot) {
if (bot == null) {
throw new ArgumentNullException(nameof(bot));
}
if (BotSubscriptions.TryRemove(bot, out IDisposable? subscription)) {
subscription.Dispose();
}
if (BotSynchronizations.TryRemove(bot, out (SemaphoreSlim RefreshSemaphore, Timer RefreshTimer) synchronization)) {
synchronization.RefreshSemaphore.Dispose();
await synchronization.RefreshTimer.DisposeAsync().ConfigureAwait(false);
}
}
public async void OnBotInit(Bot bot) {
if (bot == null) {
throw new ArgumentNullException(nameof(bot));
}
if (Config == null) {
throw new InvalidOperationException(nameof(Config));
}
if (!Config.Enabled) {
return;
}
SemaphoreSlim refreshSemaphore = new(1, 1);
Timer refreshTimer = new(async _ => await Refresh(bot).ConfigureAwait(false));
if (!BotSynchronizations.TryAdd(bot, (refreshSemaphore, refreshTimer))) {
refreshSemaphore.Dispose();
await refreshTimer.DisposeAsync().ConfigureAwait(false);
}
}
public void OnBotSteamCallbacksInit(Bot bot, CallbackManager callbackManager) {
if (bot == null) {
throw new ArgumentNullException(nameof(bot));
}
if (callbackManager == null) {
throw new ArgumentNullException(nameof(callbackManager));
}
if (BotSubscriptions.TryRemove(bot, out IDisposable? subscription)) {
subscription.Dispose();
}
if (Config == null) {
throw new InvalidOperationException(nameof(Config));
}
if (!Config.Enabled) {
return;
}
subscription = callbackManager.Subscribe<SteamApps.LicenseListCallback>(callback => OnLicenseList(bot, callback));
if (!BotSubscriptions.TryAdd(bot, subscription)) {
subscription.Dispose();
}
}
public IReadOnlyCollection<ClientMsgHandler>? OnBotSteamHandlersInit(Bot bot) => null;
public override void OnLoaded() { }
public void OnPICSChanges(uint currentChangeNumber, IReadOnlyDictionary<uint, SteamApps.PICSChangesCallback.PICSChangeData> appChanges, IReadOnlyDictionary<uint, SteamApps.PICSChangesCallback.PICSChangeData> packageChanges) {
if (currentChangeNumber == 0) {
throw new ArgumentOutOfRangeException(nameof(currentChangeNumber));
}
if (appChanges == null) {
throw new ArgumentNullException(nameof(appChanges));
}
if (packageChanges == null) {
throw new ArgumentNullException(nameof(packageChanges));
}
if (Config == null) {
throw new InvalidOperationException(nameof(Config));
}
if (!Config.Enabled) {
return;
}
if (GlobalCache == null) {
throw new InvalidOperationException(nameof(GlobalCache));
}
GlobalCache.OnPICSChanges(currentChangeNumber, appChanges);
}
public void OnPICSChangesRestart(uint currentChangeNumber) {
if (currentChangeNumber == 0) {
throw new ArgumentOutOfRangeException(nameof(currentChangeNumber));
}
if (Config == null) {
throw new InvalidOperationException(nameof(Config));
}
if (!Config.Enabled) {
return;
}
if (GlobalCache == null) {
throw new InvalidOperationException(nameof(GlobalCache));
}
GlobalCache.OnPICSChangesRestart(currentChangeNumber);
}
private static async void OnLicenseList(Bot bot, SteamApps.LicenseListCallback callback) {
if (bot == null) {
throw new ArgumentNullException(nameof(bot));
}
if (callback == null) {
throw new ArgumentNullException(nameof(callback));
}
if (Config == null) {
throw new InvalidOperationException(nameof(Config));
}
if (!Config.Enabled) {
return;
}
if (GlobalCache == null) {
throw new InvalidOperationException(nameof(GlobalCache));
}
Dictionary<uint, ulong> packageTokens = callback.LicenseList.Where(license => !Config.SecretPackageIDs.Contains(license.PackageID) && ((license.PaymentMethod != EPaymentMethod.AutoGrant) || !Config.SkipAutoGrantPackages)).GroupBy(license => license.PackageID).ToDictionary(group => group.Key, group => group.OrderByDescending(license => license.TimeCreated).First().AccessToken);
GlobalCache.UpdatePackageTokens(packageTokens);
await Refresh(bot, packageTokens.Keys).ConfigureAwait(false);
}
private static async Task Refresh(Bot bot, IReadOnlyCollection<uint>? packageIDs = null) {
if (bot == null) {
throw new ArgumentNullException(nameof(bot));
}
if (Config == null) {
throw new InvalidOperationException(nameof(Config));
}
if (!Config.Enabled) {
return;
}
if (GlobalCache == null) {
throw new InvalidOperationException(nameof(GlobalCache));
}
if (ASF.GlobalDatabase == null) {
throw new InvalidOperationException(nameof(GlobalCache));
}
if (!BotSynchronizations.TryGetValue(bot, out (SemaphoreSlim RefreshSemaphore, Timer RefreshTimer) synchronization)) {
throw new InvalidOperationException(nameof(synchronization));
}
if (!await synchronization.RefreshSemaphore.WaitAsync(0).ConfigureAwait(false)) {
return;
}
try {
if (!bot.IsConnectedAndLoggedOn) {
return;
}
packageIDs ??= bot.OwnedPackageIDs.Where(package => !Config.SecretPackageIDs.Contains(package.Key) && ((package.Value.PaymentMethod != EPaymentMethod.AutoGrant) || !Config.SkipAutoGrantPackages)).Select(package => package.Key).ToHashSet();
HashSet<uint> appIDsToRefresh = new();
foreach (uint packageID in packageIDs.Where(packageID => !Config.SecretPackageIDs.Contains(packageID))) {
if (!ASF.GlobalDatabase.PackagesDataReadOnly.TryGetValue(packageID, out (uint ChangeNumber, ImmutableHashSet<uint>? AppIDs) packageData) || (packageData.AppIDs == null)) {
// ASF might not have the package info for us at the moment, we'll retry later
continue;
}
appIDsToRefresh.UnionWith(packageData.AppIDs.Where(appID => !Config.SecretAppIDs.Contains(appID) && GlobalCache.ShouldRefreshAppInfo(appID)));
}
if (appIDsToRefresh.Count == 0) {
bot.ArchiLogger.LogGenericDebug(Strings.BotNoAppsToRefresh);
return;
}
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotRetrievingTotalAppAccessTokens, appIDsToRefresh.Count));
HashSet<uint> appIDsThisRound = new(Math.Min(appIDsToRefresh.Count, SharedInfo.AppInfosPerSingleRequest));
using (HashSet<uint>.Enumerator enumerator = appIDsToRefresh.GetEnumerator()) {
while (true) {
while ((appIDsThisRound.Count < SharedInfo.AppInfosPerSingleRequest) && enumerator.MoveNext()) {
appIDsThisRound.Add(enumerator.Current);
}
if (appIDsThisRound.Count == 0) {
break;
}
if (!bot.IsConnectedAndLoggedOn) {
return;
}
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotRetrievingAppAccessTokens, appIDsThisRound.Count));
SteamApps.PICSTokensCallback response;
try {
response = await bot.SteamApps.PICSGetAccessTokens(appIDsThisRound, Enumerable.Empty<uint>()).ToLongRunningTask().ConfigureAwait(false);
} catch (Exception e) {
bot.ArchiLogger.LogGenericWarningException(e);
return;
}
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotFinishedRetrievingAppAccessTokens, appIDsThisRound.Count));
appIDsThisRound.Clear();
GlobalCache.UpdateAppTokens(response.AppTokens, response.AppTokensDenied);
}
}
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotFinishedRetrievingTotalAppAccessTokens, appIDsToRefresh.Count));
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotRetrievingTotalDepots, appIDsToRefresh.Count));
using (HashSet<uint>.Enumerator enumerator = appIDsToRefresh.GetEnumerator()) {
while (true) {
while ((appIDsThisRound.Count < SharedInfo.AppInfosPerSingleRequest) && enumerator.MoveNext()) {
appIDsThisRound.Add(enumerator.Current);
}
if (appIDsThisRound.Count == 0) {
break;
}
if (!bot.IsConnectedAndLoggedOn) {
return;
}
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotRetrievingAppInfos, appIDsThisRound.Count));
AsyncJobMultiple<SteamApps.PICSProductInfoCallback>.ResultSet response;
try {
response = await bot.SteamApps.PICSGetProductInfo(appIDsThisRound.Select(appID => new SteamApps.PICSRequest { ID = appID, AccessToken = GlobalCache.GetAppToken(appID), Public = false }), Enumerable.Empty<SteamApps.PICSRequest>()).ToLongRunningTask().ConfigureAwait(false);
} catch (Exception e) {
bot.ArchiLogger.LogGenericWarningException(e);
return;
}
if (response.Results == null) {
bot.ArchiLogger.LogGenericWarning(string.Format(CultureInfo.CurrentCulture, ArchiSteamFarm.Localization.Strings.WarningFailedWithError, nameof(response.Results)));
return;
}
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotFinishedRetrievingAppInfos, appIDsThisRound.Count));
appIDsThisRound.Clear();
Dictionary<uint, uint> appChangeNumbers = new();
HashSet<Task<SteamApps.DepotKeyCallback>> depotTasks = new();
foreach (SteamApps.PICSProductInfoCallback.PICSProductInfo app in response.Results.SelectMany(result => result.Apps.Values)) {
appChangeNumbers[app.ID] = app.ChangeNumber;
if (GlobalCache.ShouldRefreshDepotKey(app.ID)) {
depotTasks.Add(bot.SteamApps.GetDepotDecryptionKey(app.ID, app.ID).ToLongRunningTask());
}
foreach (KeyValue depot in app.KeyValues["depots"].Children) {
if (uint.TryParse(depot.Name, out uint depotID) && !Config.SecretDepotIDs.Contains(depotID) && GlobalCache.ShouldRefreshDepotKey(depotID)) {
depotTasks.Add(bot.SteamApps.GetDepotDecryptionKey(depotID, app.ID).ToLongRunningTask());
}
}
}
GlobalCache.UpdateAppChangeNumbers(appChangeNumbers);
if (depotTasks.Count > 0) {
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotRetrievingDepotKeys, depotTasks.Count));
IList<SteamApps.DepotKeyCallback> results;
try {
results = await Utilities.InParallel(depotTasks).ConfigureAwait(false);
} catch (Exception e) {
bot.ArchiLogger.LogGenericWarningException(e);
return;
}
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotFinishedRetrievingDepotKeys, depotTasks.Count));
GlobalCache.UpdateDepotKeys(results);
}
}
}
bot.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.BotFinishedRetrievingTotalDepots, appIDsToRefresh.Count));
} finally {
TimeSpan timeSpan = TimeSpan.FromHours(SharedInfo.MaximumHoursBetweenRefresh);
synchronization.RefreshTimer.Change(timeSpan, timeSpan);
synchronization.RefreshSemaphore.Release();
}
}
private static async void SubmitData(object? state) {
if (Bot.Bots == null) {
throw new InvalidOperationException(nameof(Bot.Bots));
}
if (Config == null) {
throw new InvalidOperationException(nameof(Config));
}
if (!Config.Enabled) {
return;
}
if (GlobalCache == null) {
throw new InvalidOperationException(nameof(GlobalCache));
}
if (ASF.GlobalConfig == null) {
throw new InvalidOperationException(nameof(ASF.GlobalConfig));
}
if (ASF.WebBrowser == null) {
throw new InvalidOperationException(nameof(ASF.WebBrowser));
}
if (!await SubmissionSemaphore.WaitAsync(0).ConfigureAwait(false)) {
return;
}
try {
Dictionary<uint, ulong> appTokens = GlobalCache.GetAppTokensForSubmission();
Dictionary<uint, ulong> packageTokens = GlobalCache.GetPackageTokensForSubmission();
Dictionary<uint, string> depotKeys = GlobalCache.GetDepotKeysForSubmission();
if ((appTokens.Count == 0) && (packageTokens.Count == 0) && (depotKeys.Count == 0)) {
ASF.ArchiLogger.LogGenericInfo(Strings.SubmissionNoNewData);
return;
}
ulong contributorSteamID = (ASF.GlobalConfig.SteamOwnerID > 0) && new SteamID(ASF.GlobalConfig.SteamOwnerID).IsIndividualAccount ? ASF.GlobalConfig.SteamOwnerID : Bot.Bots.Values.Where(bot => bot.SteamID > 0).OrderByDescending(bot => bot.OwnedPackageIDs.Count).FirstOrDefault()?.SteamID ?? 0;
if (contributorSteamID == 0) {
ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.SubmissionNoContributorSet, nameof(ASF.GlobalConfig.SteamOwnerID)));
return;
}
Uri request = new(SharedInfo.ServerURL + "/submit");
RequestData requestData = new(contributorSteamID, appTokens, packageTokens, depotKeys);
ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.SubmissionInProgress, appTokens.Count, packageTokens.Count, depotKeys.Count));
ObjectResponse<ResponseData>? response = await ASF.WebBrowser.UrlPostToJsonObject<ResponseData, RequestData>(request, data: requestData, requestOptions: WebBrowser.ERequestOptions.ReturnClientErrors).ConfigureAwait(false);
if (response == null) {
ASF.ArchiLogger.LogGenericWarning(ArchiSteamFarm.Localization.Strings.WarningFailed);
return;
}
if (response.StatusCode.IsClientErrorCode()) {
ASF.ArchiLogger.LogGenericWarning(string.Format(CultureInfo.CurrentCulture, ArchiSteamFarm.Localization.Strings.WarningFailedWithError, response.StatusCode));
#if NETFRAMEWORK
if (response.StatusCode == (HttpStatusCode) 429) {
#else
if (response.StatusCode == HttpStatusCode.TooManyRequests) {
#endif
TimeSpan startIn = TimeSpan.FromMinutes(Utilities.RandomNext(SharedInfo.MinimumMinutesBeforeFirstUpload, SharedInfo.MaximumMinutesBeforeFirstUpload));
lock (SubmissionSemaphore) {
SubmissionTimer.Change(startIn, TimeSpan.FromHours(SharedInfo.MinimumHoursBetweenUploads));
}
ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.SubmissionFailedTooManyRequests, startIn.ToHumanReadable()));
}
return;
}
if (!response.Content.Success) {
ASF.ArchiLogger.LogGenericError(ArchiSteamFarm.Localization.Strings.WarningFailed);
return;
}
if (response.Content.Data == null) {
ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, ArchiSteamFarm.Localization.Strings.ErrorIsInvalid), nameof(response.Content.Data));
return;
}
ASF.ArchiLogger.LogGenericInfo(string.Format(CultureInfo.CurrentCulture, Strings.SubmissionSuccessful, response.Content.Data.NewAppsCount, response.Content.Data.NewSubsCount, response.Content.Data.NewDepotsCount));
GlobalCache.UpdateSubmittedData(appTokens, packageTokens, depotKeys);
} finally {
SubmissionSemaphore.Release();
}
}
}
}

View File

@@ -1,49 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Authors>JustArchi</Authors>
<Company>JustArchi</Company>
<Copyright>Copyright © ArchiSteamFarm 2015-2020</Copyright>
<DefaultItemExcludes>$(DefaultItemExcludes);debug/**;out/**</DefaultItemExcludes>
<Description>ASF is an application that allows you to farm steam cards using multiple steam accounts simultaneously.</Description>
<ErrorReport>none</ErrorReport>
<LangVersion>8.0</LangVersion>
<NoWarn />
<OutputType>Library</OutputType>
<PackageIcon>../resources/ASF.ico</PackageIcon>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/JustArchiNET/ArchiSteamFarm</PackageProjectUrl>
<RepositoryType>Git</RepositoryType>
<RepositoryUrl>https://github.com/JustArchiNET/ArchiSteamFarm.git</RepositoryUrl>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
</PropertyGroup>
<PropertyGroup Condition="'$(OS)' == 'Windows_NT' OR '$(ASFNetFramework)' != ''">
<TargetFrameworks>netcoreapp3.1;net48</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(OS)' != 'Windows_NT' AND '$(ASFNetFramework)' == ''">
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugSymbols>false</DebugSymbols>
<DebugType>none</DebugType>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningsAsErrors />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="4.0.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.1" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.1" />
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="MSTest.TestAdapter" />
<PackageReference Include="MSTest.TestFramework" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ArchiSteamFarm\ArchiSteamFarm.csproj" />
</ItemGroup>
</Project>

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,6 +19,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[assembly: CLSCompliant(false)]
[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)]

514
ArchiSteamFarm.Tests/Bot.cs Normal file
View File

@@ -0,0 +1,514 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#if NETFRAMEWORK
using ArchiSteamFarm.Compatibility;
#endif
using System;
using System.Collections.Generic;
using System.Linq;
using ArchiSteamFarm.Steam.Data;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace ArchiSteamFarm.Tests {
[TestClass]
public sealed class Bot {
[TestMethod]
public void MaxItemsBarelyEnoughForOneSet() {
const uint relevantAppID = 42;
Dictionary<uint, byte> itemsPerSet = new() {
{ relevantAppID, Steam.Bot.MinCardsPerBadge },
{ 43, Steam.Bot.MinCardsPerBadge + 1 }
};
HashSet<Asset> items = new();
foreach ((uint appID, byte cards) in itemsPerSet) {
for (byte i = 1; i <= cards; i++) {
items.Add(CreateCard(i, appID));
}
}
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, itemsPerSet, Steam.Bot.MinCardsPerBadge);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = items.Where(item => item.RealAppID == relevantAppID)
.GroupBy(item => (item.RealAppID, item.ContextID, item.ClassID))
.ToDictionary(grouping => grouping.Key, grouping => (uint) grouping.Sum(item => item.Amount));
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public void MaxItemsTooSmall() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID),
CreateCard(2, appID)
};
GetItemsForFullBadge(items, 2, appID, Steam.Bot.MinCardsPerBadge - 1);
Assert.Fail();
}
[TestMethod]
public void MoreCardsThanNeeded() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID),
CreateCard(1, appID),
CreateCard(2, appID),
CreateCard(3, appID)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 3, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 1 },
{ (appID, Asset.SteamCommunityContextID, 2), 1 },
{ (appID, Asset.SteamCommunityContextID, 3), 1 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void MultipleSets() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID),
CreateCard(1, appID),
CreateCard(2, appID),
CreateCard(2, appID)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 2, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 2 },
{ (appID, Asset.SteamCommunityContextID, 2), 2 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void MultipleSetsDifferentAmount() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID, 2),
CreateCard(2, appID),
CreateCard(2, appID)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 2, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 2 },
{ (appID, Asset.SteamCommunityContextID, 2), 2 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void MutliRarityAndType() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID, type: Asset.EType.TradingCard, rarity: Asset.ERarity.Common),
CreateCard(2, appID, type: Asset.EType.TradingCard, rarity: Asset.ERarity.Common),
CreateCard(1, appID, type: Asset.EType.FoilTradingCard, rarity: Asset.ERarity.Uncommon),
CreateCard(2, appID, type: Asset.EType.FoilTradingCard, rarity: Asset.ERarity.Uncommon),
CreateCard(1, appID, type: Asset.EType.FoilTradingCard, rarity: Asset.ERarity.Rare),
CreateCard(2, appID, type: Asset.EType.FoilTradingCard, rarity: Asset.ERarity.Rare),
// for better readability and easier verification when thinking about this test the items that shall be selected for sending are the ones below this comment
CreateCard(1, appID, type: Asset.EType.TradingCard, rarity: Asset.ERarity.Uncommon),
CreateCard(2, appID, type: Asset.EType.TradingCard, rarity: Asset.ERarity.Uncommon),
CreateCard(3, appID, type: Asset.EType.TradingCard, rarity: Asset.ERarity.Uncommon),
CreateCard(1, appID, type: Asset.EType.FoilTradingCard, rarity: Asset.ERarity.Common),
CreateCard(3, appID, type: Asset.EType.FoilTradingCard, rarity: Asset.ERarity.Common),
CreateCard(7, appID, type: Asset.EType.FoilTradingCard, rarity: Asset.ERarity.Common),
CreateCard(2, appID, type: Asset.EType.Unknown, rarity: Asset.ERarity.Rare),
CreateCard(3, appID, type: Asset.EType.Unknown, rarity: Asset.ERarity.Rare),
CreateCard(4, appID, type: Asset.EType.Unknown, rarity: Asset.ERarity.Rare)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 3, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 2 },
{ (appID, Asset.SteamCommunityContextID, 2), 2 },
{ (appID, Asset.SteamCommunityContextID, 3), 3 },
{ (appID, Asset.SteamCommunityContextID, 4), 1 },
{ (appID, Asset.SteamCommunityContextID, 7), 1 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void NotAllCardsPresent() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID),
CreateCard(2, appID)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 3, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new(0);
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OneSet() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID),
CreateCard(2, appID)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 2, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 1 },
{ (appID, Asset.SteamCommunityContextID, 2), 1 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherAppIDFullSets() {
const uint appID0 = 42;
const uint appID1 = 43;
HashSet<Asset> items = new() {
CreateCard(1, appID0),
CreateCard(1, appID1)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(
items, new Dictionary<uint, byte> {
{ appID0, 1 },
{ appID1, 1 }
}
);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID0, Asset.SteamCommunityContextID, 1), 1 },
{ (appID1, Asset.SteamCommunityContextID, 1), 1 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherAppIDNoSets() {
const uint appID0 = 42;
const uint appID1 = 43;
HashSet<Asset> items = new() {
CreateCard(1, appID0),
CreateCard(1, appID1)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(
items, new Dictionary<uint, byte> {
{ appID0, 2 },
{ appID1, 2 }
}
);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new(0);
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherAppIDOneSet() {
const uint appID0 = 42;
const uint appID1 = 43;
const uint appID2 = 44;
HashSet<Asset> items = new() {
CreateCard(1, appID0),
CreateCard(2, appID0),
CreateCard(1, appID1),
CreateCard(2, appID1),
CreateCard(3, appID1)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(
items, new Dictionary<uint, byte> {
{ appID0, 3 },
{ appID1, 3 },
{ appID2, 3 }
}
);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID1, Asset.SteamCommunityContextID, 1), 1 },
{ (appID1, Asset.SteamCommunityContextID, 2), 1 },
{ (appID1, Asset.SteamCommunityContextID, 3), 1 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherRarityFullSets() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID, rarity: Asset.ERarity.Common),
CreateCard(1, appID, rarity: Asset.ERarity.Rare)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 1, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 2 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherRarityNoSets() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID, rarity: Asset.ERarity.Common),
CreateCard(1, appID, rarity: Asset.ERarity.Rare)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 2, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new(0);
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherRarityOneSet() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID, rarity: Asset.ERarity.Common),
CreateCard(2, appID, rarity: Asset.ERarity.Common),
CreateCard(1, appID, rarity: Asset.ERarity.Uncommon),
CreateCard(2, appID, rarity: Asset.ERarity.Uncommon),
CreateCard(3, appID, rarity: Asset.ERarity.Uncommon)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 3, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 1 },
{ (appID, Asset.SteamCommunityContextID, 2), 1 },
{ (appID, Asset.SteamCommunityContextID, 3), 1 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherTypeFullSets() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID, type: Asset.EType.TradingCard),
CreateCard(1, appID, type: Asset.EType.FoilTradingCard)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 1, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 2 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherTypeNoSets() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID, type: Asset.EType.TradingCard),
CreateCard(1, appID, type: Asset.EType.FoilTradingCard)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 2, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new(0);
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void OtherTypeOneSet() {
const uint appID = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID, type: Asset.EType.TradingCard),
CreateCard(2, appID, type: Asset.EType.TradingCard),
CreateCard(1, appID, type: Asset.EType.FoilTradingCard),
CreateCard(2, appID, type: Asset.EType.FoilTradingCard),
CreateCard(3, appID, type: Asset.EType.FoilTradingCard)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 3, appID);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID, Asset.SteamCommunityContextID, 1), 1 },
{ (appID, Asset.SteamCommunityContextID, 2), 1 },
{ (appID, Asset.SteamCommunityContextID, 3), 1 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void TooHighAmount() {
const uint appID0 = 42;
HashSet<Asset> items = new() {
CreateCard(1, appID0, 2),
CreateCard(2, appID0)
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 2, appID0);
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult = new() {
{ (appID0, Asset.SteamCommunityContextID, 1), 1 },
{ (appID0, Asset.SteamCommunityContextID, 2), 1 }
};
AssertResultMatchesExpectation(expectedResult, itemsToSend);
}
[TestMethod]
public void TooManyCardsForSingleTrade() {
const uint appID = 42;
HashSet<Asset> items = new();
for (byte i = 0; i < Steam.Exchange.Trading.MaxItemsPerTrade; i++) {
items.Add(CreateCard(1, appID));
items.Add(CreateCard(2, appID));
}
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, 2, appID);
Assert.IsTrue(itemsToSend.Count <= Steam.Exchange.Trading.MaxItemsPerTrade);
}
[TestMethod]
public void TooManyCardsForSingleTradeMultipleAppIDs() {
const uint appID0 = 42;
const uint appID1 = 43;
HashSet<Asset> items = new();
for (byte i = 0; i < 100; i++) {
items.Add(CreateCard(1, appID0));
items.Add(CreateCard(2, appID0));
items.Add(CreateCard(1, appID1));
items.Add(CreateCard(2, appID1));
}
Dictionary<uint, byte> itemsPerSet = new() {
{ appID0, 2 },
{ appID1, 2 }
};
HashSet<Asset> itemsToSend = GetItemsForFullBadge(items, itemsPerSet);
Assert.IsTrue(itemsToSend.Count <= Steam.Exchange.Trading.MaxItemsPerTrade);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public void TooManyCardsPerSet() {
const uint appID0 = 42;
const uint appID1 = 43;
const uint appID2 = 44;
HashSet<Asset> items = new() {
CreateCard(1, appID0),
CreateCard(2, appID0),
CreateCard(3, appID0),
CreateCard(4, appID0)
};
GetItemsForFullBadge(
items, new Dictionary<uint, byte> {
{ appID0, 3 },
{ appID1, 3 },
{ appID2, 3 }
}
);
Assert.Fail();
}
private static void AssertResultMatchesExpectation(IReadOnlyDictionary<(uint RealAppID, ulong ContextID, ulong ClassID), uint> expectedResult, IReadOnlyCollection<Asset> itemsToSend) {
if (expectedResult == null) {
throw new ArgumentNullException(nameof(expectedResult));
}
if (itemsToSend == null) {
throw new ArgumentNullException(nameof(itemsToSend));
}
Dictionary<(uint RealAppID, ulong ContextID, ulong ClassID), long> realResult = itemsToSend.GroupBy(asset => (asset.RealAppID, asset.ContextID, asset.ClassID)).ToDictionary(group => group.Key, group => group.Sum(asset => asset.Amount));
Assert.AreEqual(expectedResult.Count, realResult.Count);
Assert.IsTrue(expectedResult.All(expectation => realResult.TryGetValue(expectation.Key, out long reality) && (expectation.Value == reality)));
}
private static Asset CreateCard(ulong classID, uint realAppID, uint amount = 1, Asset.EType type = Asset.EType.TradingCard, Asset.ERarity rarity = Asset.ERarity.Common) => new(Asset.SteamAppID, Asset.SteamCommunityContextID, classID, amount, realAppID: realAppID, type: type, rarity: rarity);
private static HashSet<Asset> GetItemsForFullBadge(IReadOnlyCollection<Asset> inventory, byte cardsPerSet, uint appID, ushort maxItems = Steam.Exchange.Trading.MaxItemsPerTrade) => GetItemsForFullBadge(inventory, new Dictionary<uint, byte> { { appID, cardsPerSet } }, maxItems);
private static HashSet<Asset> GetItemsForFullBadge(IReadOnlyCollection<Asset> inventory, IDictionary<uint, byte> cardsPerSet, ushort maxItems = Steam.Exchange.Trading.MaxItemsPerTrade) {
Dictionary<(uint RealAppID, Asset.EType Type, Asset.ERarity Rarity), List<uint>> inventorySets = Steam.Exchange.Trading.GetInventorySets(inventory);
return Steam.Bot.GetItemsForFullSets(inventory, inventorySets.ToDictionary(kv => kv.Key, kv => (SetsToExtract: inventorySets[kv.Key][0], cardsPerSet[kv.Key.RealAppID])), maxItems).ToHashSet();
}
}
}

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,54 +20,53 @@
// limitations under the License.
using System.Collections.Generic;
using ArchiSteamFarm.Json;
using JetBrains.Annotations;
using ArchiSteamFarm.Steam.Data;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using static ArchiSteamFarm.Trading;
using static ArchiSteamFarm.Steam.Exchange.Trading;
namespace ArchiSteamFarm.Tests {
[TestClass]
public sealed class Trading {
[TestMethod]
public void MismatchRarityIsNotFair() {
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(1, rarity: Steam.Asset.ERarity.Rare) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Asset> itemsToGive = new() { CreateItem(1, rarity: Asset.ERarity.Rare) };
HashSet<Asset> itemsToReceive = new() { CreateItem(2) };
Assert.IsFalse(IsFairExchange(itemsToGive, itemsToReceive));
}
[TestMethod]
public void MismatchRealAppIDsIsNotFair() {
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(1, realAppID: 570) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Asset> itemsToGive = new() { CreateItem(1, realAppID: 570) };
HashSet<Asset> itemsToReceive = new() { CreateItem(2) };
Assert.IsFalse(IsFairExchange(itemsToGive, itemsToReceive));
}
[TestMethod]
public void MismatchTypesIsNotFair() {
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(1, type: Steam.Asset.EType.Emoticon) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Asset> itemsToGive = new() { CreateItem(1, type: Asset.EType.Emoticon) };
HashSet<Asset> itemsToReceive = new() { CreateItem(2) };
Assert.IsFalse(IsFairExchange(itemsToGive, itemsToReceive));
}
[TestMethod]
public void MultiGameMultiTypeBadReject() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 9),
CreateItem(3, 9, 730, Steam.Asset.EType.Emoticon),
CreateItem(4, realAppID: 730, type: Steam.Asset.EType.Emoticon)
CreateItem(3, 9, 730, Asset.EType.Emoticon),
CreateItem(4, realAppID: 730, type: Asset.EType.Emoticon)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(4, realAppID: 730, type: Steam.Asset.EType.Emoticon)
CreateItem(4, realAppID: 730, type: Asset.EType.Emoticon)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(2),
CreateItem(3, realAppID: 730, type: Steam.Asset.EType.Emoticon)
CreateItem(3, realAppID: 730, type: Asset.EType.Emoticon)
};
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
@@ -76,19 +75,19 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void MultiGameMultiTypeNeutralAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 9),
CreateItem(3, realAppID: 730, type: Steam.Asset.EType.Emoticon)
CreateItem(3, realAppID: 730, type: Asset.EType.Emoticon)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(3, realAppID: 730, type: Steam.Asset.EType.Emoticon)
CreateItem(3, realAppID: 730, type: Asset.EType.Emoticon)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(2),
CreateItem(4, realAppID: 730, type: Steam.Asset.EType.Emoticon)
CreateItem(4, realAppID: 730, type: Asset.EType.Emoticon)
};
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
@@ -97,18 +96,18 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void MultiGameSingleTypeBadReject() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 9),
CreateItem(3, realAppID: 730),
CreateItem(4, realAppID: 730)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(3, realAppID: 730)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(2),
CreateItem(4, realAppID: 730)
};
@@ -119,17 +118,17 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void MultiGameSingleTypeNeutralAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 2),
CreateItem(3, realAppID: 730)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(3, realAppID: 730)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(2),
CreateItem(4, realAppID: 730)
};
@@ -138,19 +137,41 @@ namespace ArchiSteamFarm.Tests {
Assert.IsTrue(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
}
[TestMethod]
public void SingleGameAbrynosWasWrongNeutralAccept() {
HashSet<Asset> inventory = new() {
CreateItem(1),
CreateItem(2, 2),
CreateItem(3),
CreateItem(4),
CreateItem(5)
};
HashSet<Asset> itemsToGive = new() {
CreateItem(2)
};
HashSet<Asset> itemsToReceive = new() {
CreateItem(3)
};
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
Assert.IsTrue(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
}
[TestMethod]
public void SingleGameDonationAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(2),
CreateItem(3, type: Steam.Asset.EType.SteamGems)
CreateItem(3, type: Asset.EType.SteamGems)
};
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
@@ -159,20 +180,20 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameMultiTypeBadReject() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 9),
CreateItem(3, 9, type: Steam.Asset.EType.Emoticon),
CreateItem(4, type: Steam.Asset.EType.Emoticon)
CreateItem(3, 9, type: Asset.EType.Emoticon),
CreateItem(4, type: Asset.EType.Emoticon)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(4, type: Steam.Asset.EType.Emoticon)
CreateItem(4, type: Asset.EType.Emoticon)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(2),
CreateItem(3, type: Steam.Asset.EType.Emoticon)
CreateItem(3, type: Asset.EType.Emoticon)
};
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
@@ -181,19 +202,19 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameMultiTypeNeutralAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 9),
CreateItem(3, type: Steam.Asset.EType.Emoticon)
CreateItem(3, type: Asset.EType.Emoticon)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(3, type: Steam.Asset.EType.Emoticon)
CreateItem(3, type: Asset.EType.Emoticon)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(2),
CreateItem(4, type: Steam.Asset.EType.Emoticon)
CreateItem(4, type: Asset.EType.Emoticon)
};
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
@@ -202,19 +223,19 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameQuantityBadReject() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1),
CreateItem(2),
CreateItem(3)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(2),
CreateItem(3)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(4, 3) };
HashSet<Asset> itemsToReceive = new() { CreateItem(4, 3) };
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
Assert.IsFalse(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
@@ -222,17 +243,17 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameQuantityBadReject2() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1),
CreateItem(2, 2)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(2, 2)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(3, 3) };
HashSet<Asset> itemsToReceive = new() { CreateItem(3, 3) };
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
Assert.IsFalse(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
@@ -240,17 +261,17 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameQuantityNeutralAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 2),
CreateItem(2)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(1),
CreateItem(2)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(3, 2) };
HashSet<Asset> itemsToReceive = new() { CreateItem(3, 2) };
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
Assert.IsTrue(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
@@ -258,13 +279,13 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameSingleTypeBadReject() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1),
CreateItem(2)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(1) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Asset> itemsToGive = new() { CreateItem(1) };
HashSet<Asset> itemsToReceive = new() { CreateItem(2) };
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
Assert.IsFalse(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
@@ -272,15 +293,15 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameSingleTypeBadWithOverpayingReject() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 2),
CreateItem(2, 2),
CreateItem(3, 2)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Asset> itemsToGive = new() { CreateItem(2) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(1),
CreateItem(3)
};
@@ -291,14 +312,14 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameSingleTypeBigDifferenceAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1),
CreateItem(2, 5),
CreateItem(3)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(3) };
HashSet<Asset> itemsToGive = new() { CreateItem(2) };
HashSet<Asset> itemsToReceive = new() { CreateItem(3) };
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
Assert.IsTrue(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
@@ -306,7 +327,7 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameSingleTypeBigDifferenceReject() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1),
CreateItem(2, 2),
CreateItem(3, 2),
@@ -314,12 +335,12 @@ namespace ArchiSteamFarm.Tests {
CreateItem(5, 10)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToGive = new() {
CreateItem(2),
CreateItem(5)
};
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(3),
CreateItem(4)
};
@@ -330,9 +351,9 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameSingleTypeGoodAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> { CreateItem(1, 2) };
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(1) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Asset> inventory = new() { CreateItem(1, 2) };
HashSet<Asset> itemsToGive = new() { CreateItem(1) };
HashSet<Asset> itemsToReceive = new() { CreateItem(2) };
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
Assert.IsTrue(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
@@ -340,9 +361,9 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameSingleTypeNeutralAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> { CreateItem(1) };
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(1) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Asset> inventory = new() { CreateItem(1) };
HashSet<Asset> itemsToGive = new() { CreateItem(1) };
HashSet<Asset> itemsToReceive = new() { CreateItem(2) };
Assert.IsTrue(IsFairExchange(itemsToGive, itemsToReceive));
Assert.IsTrue(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
@@ -350,14 +371,14 @@ namespace ArchiSteamFarm.Tests {
[TestMethod]
public void SingleGameSingleTypeNeutralWithOverpayingAccept() {
HashSet<Steam.Asset> inventory = new HashSet<Steam.Asset> {
HashSet<Asset> inventory = new() {
CreateItem(1, 2),
CreateItem(2, 2)
};
HashSet<Steam.Asset> itemsToGive = new HashSet<Steam.Asset> { CreateItem(2) };
HashSet<Asset> itemsToGive = new() { CreateItem(2) };
HashSet<Steam.Asset> itemsToReceive = new HashSet<Steam.Asset> {
HashSet<Asset> itemsToReceive = new() {
CreateItem(1),
CreateItem(3)
};
@@ -366,7 +387,6 @@ namespace ArchiSteamFarm.Tests {
Assert.IsTrue(IsTradeNeutralOrBetter(inventory, itemsToGive, itemsToReceive));
}
[NotNull]
private static Steam.Asset CreateItem(ulong classID, uint amount = 1, uint realAppID = Steam.Asset.SteamAppID, Steam.Asset.EType type = Steam.Asset.EType.TradingCard, Steam.Asset.ERarity rarity = Steam.Asset.ERarity.Common) => new Steam.Asset(Steam.Asset.SteamAppID, Steam.Asset.SteamCommunityContextID, classID, amount, realAppID: realAppID, type: type, rarity: rarity);
private static Asset CreateItem(ulong classID, uint amount = 1, uint realAppID = Asset.SteamAppID, Asset.EType type = Asset.EType.TradingCard, Asset.ERarity rarity = Asset.ERarity.Common) => new(Asset.SteamAppID, Asset.SteamCommunityContextID, classID, amount, realAppID: realAppID, type: type, rarity: rarity);
}
}

View File

@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26621.2
# Visual Studio Version 16
VisualStudioVersion = 16.0.30114.105
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArchiSteamFarm", "ArchiSteamFarm\ArchiSteamFarm.csproj", "{CF84911C-2C4C-4195-8AF3-ABBB6D3DE9AA}"
EndProject
@@ -9,6 +9,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArchiSteamFarm.Tests", "Arc
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArchiSteamFarm.CustomPlugins.ExamplePlugin", "ArchiSteamFarm.CustomPlugins.ExamplePlugin\ArchiSteamFarm.CustomPlugins.ExamplePlugin.csproj", "{2E2C26B6-7C1D-4BAF-BCF9-79286DA08F82}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ArchiSteamFarm.CustomPlugins.PeriodicGC", "ArchiSteamFarm.CustomPlugins.PeriodicGC\ArchiSteamFarm.CustomPlugins.PeriodicGC.csproj", "{2C935C25-1B03-4C55-81C9-DF1D472D72F4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper", "ArchiSteamFarm.OfficialPlugins.SteamTokenDumper\ArchiSteamFarm.OfficialPlugins.SteamTokenDumper.csproj", "{A9299EE5-AF67-4FCB-8D03-263B41819504}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -27,6 +31,14 @@ Global
{2E2C26B6-7C1D-4BAF-BCF9-79286DA08F82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E2C26B6-7C1D-4BAF-BCF9-79286DA08F82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E2C26B6-7C1D-4BAF-BCF9-79286DA08F82}.Release|Any CPU.Build.0 = Release|Any CPU
{2C935C25-1B03-4C55-81C9-DF1D472D72F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2C935C25-1B03-4C55-81C9-DF1D472D72F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2C935C25-1B03-4C55-81C9-DF1D472D72F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2C935C25-1B03-4C55-81C9-DF1D472D72F4}.Release|Any CPU.Build.0 = Release|Any CPU
{A9299EE5-AF67-4FCB-8D03-263B41819504}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A9299EE5-AF67-4FCB-8D03-263B41819504}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A9299EE5-AF67-4FCB-8D03-263B41819504}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A9299EE5-AF67-4FCB-8D03-263B41819504}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

View File

@@ -1,455 +0,0 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Collections;
using ArchiSteamFarm.Helpers;
using ArchiSteamFarm.Json;
using ArchiSteamFarm.Localization;
using JetBrains.Annotations;
using SteamKit2;
namespace ArchiSteamFarm {
public sealed class Actions : IDisposable {
private static readonly SemaphoreSlim GiftCardsSemaphore = new SemaphoreSlim(1, 1);
private static readonly SemaphoreSlim GiftsSemaphore = new SemaphoreSlim(1, 1);
private readonly Bot Bot;
private readonly ConcurrentHashSet<ulong> HandledGifts = new ConcurrentHashSet<ulong>();
private readonly SemaphoreSlim TradingSemaphore = new SemaphoreSlim(1, 1);
private Timer CardsFarmerResumeTimer;
private bool ProcessingGiftsScheduled;
private bool TradingScheduled;
internal Actions([JetBrains.Annotations.NotNull] Bot bot) => Bot = bot ?? throw new ArgumentNullException(nameof(bot));
public void Dispose() {
// Those are objects that are always being created if constructor doesn't throw exception
TradingSemaphore.Dispose();
// Those are objects that might be null and the check should be in-place
CardsFarmerResumeTimer?.Dispose();
}
[PublicAPI]
public static (bool Success, string Message) Exit() {
// Schedule the task after some time so user can receive response
Utilities.InBackground(
async () => {
await Task.Delay(1000).ConfigureAwait(false);
await Program.Exit().ConfigureAwait(false);
}
);
return (true, Strings.Done);
}
[PublicAPI]
public async Task<(bool Success, string Token, string Message)> GenerateTwoFactorAuthenticationToken() {
if (!Bot.HasMobileAuthenticator) {
return (false, null, Strings.BotNoASFAuthenticator);
}
string token = await Bot.BotDatabase.MobileAuthenticator.GenerateToken().ConfigureAwait(false);
return (true, token, Strings.Success);
}
[ItemNotNull]
[PublicAPI]
public async Task<IDisposable> GetTradingLock() {
await TradingSemaphore.WaitAsync().ConfigureAwait(false);
return new SemaphoreLock(TradingSemaphore);
}
[PublicAPI]
public async Task<(bool Success, string Message)> HandleTwoFactorAuthenticationConfirmations(bool accept, Steam.ConfirmationDetails.EType? acceptedType = null, IReadOnlyCollection<ulong> acceptedTradeOfferIDs = null, bool waitIfNeeded = false) {
if (!Bot.HasMobileAuthenticator) {
return (false, Strings.BotNoASFAuthenticator);
}
if (!Bot.IsConnectedAndLoggedOn) {
return (false, Strings.BotNotConnected);
}
HashSet<ulong> handledTradeOfferIDs = null;
for (byte i = 0; (i == 0) || ((i < WebBrowser.MaxTries) && waitIfNeeded); i++) {
if (i > 0) {
await Task.Delay(1000).ConfigureAwait(false);
}
HashSet<MobileAuthenticator.Confirmation> confirmations = await Bot.BotDatabase.MobileAuthenticator.GetConfirmations(acceptedType).ConfigureAwait(false);
if ((confirmations == null) || (confirmations.Count == 0)) {
continue;
}
// If we can skip asking for details, we can handle confirmations right away
if ((acceptedTradeOfferIDs == null) || (acceptedTradeOfferIDs.Count == 0)) {
bool result = await Bot.BotDatabase.MobileAuthenticator.HandleConfirmations(confirmations, accept).ConfigureAwait(false);
return (result, result ? string.Format(Strings.BotHandledConfirmations, confirmations.Count) : Strings.WarningFailed);
}
IList<Steam.ConfirmationDetails> results = await Utilities.InParallel(confirmations.Select(Bot.BotDatabase.MobileAuthenticator.GetConfirmationDetails)).ConfigureAwait(false);
foreach (MobileAuthenticator.Confirmation confirmation in results.Where(details => (details != null) && ((acceptedType.HasValue && (acceptedType.Value != details.Type)) || ((details.TradeOfferID != 0) && !acceptedTradeOfferIDs.Contains(details.TradeOfferID)))).Select(details => details.Confirmation)) {
confirmations.Remove(confirmation);
}
if (confirmations.Count == 0) {
continue;
}
if (!await Bot.BotDatabase.MobileAuthenticator.HandleConfirmations(confirmations, accept).ConfigureAwait(false)) {
return (false, Strings.WarningFailed);
}
IEnumerable<ulong> handledTradeOfferIDsThisRound = results.Where(details => (details != null) && (details.TradeOfferID != 0)).Select(result => result.TradeOfferID);
if (handledTradeOfferIDs != null) {
handledTradeOfferIDs.UnionWith(handledTradeOfferIDsThisRound);
} else {
handledTradeOfferIDs = handledTradeOfferIDsThisRound.ToHashSet();
}
// Check if those are all that we were expected to confirm
if (acceptedTradeOfferIDs.All(handledTradeOfferIDs.Contains)) {
return (true, string.Format(Strings.BotHandledConfirmations, acceptedTradeOfferIDs.Count));
}
}
return (!waitIfNeeded, !waitIfNeeded ? Strings.Success : string.Format(Strings.ErrorRequestFailedTooManyTimes, WebBrowser.MaxTries));
}
[PublicAPI]
public async Task<(bool Success, string Message)> Pause(bool permanent, ushort resumeInSeconds = 0) {
if (Bot.CardsFarmer.Paused) {
return (false, Strings.BotAutomaticIdlingPausedAlready);
}
await Bot.CardsFarmer.Pause(permanent).ConfigureAwait(false);
if (!permanent && (Bot.BotConfig.GamesPlayedWhileIdle.Count > 0)) {
// We want to let family sharing users access our library, and in this case we must also stop GamesPlayedWhileIdle
// We add extra delay because OnFarmingStopped() also executes PlayGames()
// Despite of proper order on our end, Steam network might not respect it
await Task.Delay(Bot.CallbackSleep).ConfigureAwait(false);
await Bot.ArchiHandler.PlayGames(Enumerable.Empty<uint>(), Bot.BotConfig.CustomGamePlayedWhileIdle).ConfigureAwait(false);
}
if (resumeInSeconds > 0) {
if (CardsFarmerResumeTimer == null) {
CardsFarmerResumeTimer = new Timer(
e => Resume(),
null,
TimeSpan.FromSeconds(resumeInSeconds), // Delay
Timeout.InfiniteTimeSpan // Period
);
} else {
CardsFarmerResumeTimer.Change(TimeSpan.FromSeconds(resumeInSeconds), Timeout.InfiniteTimeSpan);
}
}
return (true, Strings.BotAutomaticIdlingNowPaused);
}
[PublicAPI]
public async Task<(bool Success, string Message)> Play(IEnumerable<uint> gameIDs, string gameName = null) {
if (gameIDs == null) {
Bot.ArchiLogger.LogNullError(nameof(gameIDs));
return (false, string.Format(Strings.ErrorObjectIsNull, nameof(gameIDs)));
}
if (!Bot.IsConnectedAndLoggedOn) {
return (false, Strings.BotNotConnected);
}
if (!Bot.CardsFarmer.Paused) {
await Bot.CardsFarmer.Pause(true).ConfigureAwait(false);
}
await Bot.ArchiHandler.PlayGames(gameIDs, gameName).ConfigureAwait(false);
return (true, Strings.Done);
}
[PublicAPI]
public async Task<ArchiHandler.PurchaseResponseCallback> RedeemKey(string key) {
await LimitGiftsRequestsAsync().ConfigureAwait(false);
return await Bot.ArchiHandler.RedeemKey(key).ConfigureAwait(false);
}
[PublicAPI]
public static (bool Success, string Message) Restart() {
// Schedule the task after some time so user can receive response
Utilities.InBackground(
async () => {
await Task.Delay(1000).ConfigureAwait(false);
await Program.Restart().ConfigureAwait(false);
}
);
return (true, Strings.Done);
}
[PublicAPI]
public (bool Success, string Message) Resume() {
if (!Bot.CardsFarmer.Paused) {
return (false, Strings.BotAutomaticIdlingResumedAlready);
}
Utilities.InBackground(() => Bot.CardsFarmer.Resume(true));
return (true, Strings.BotAutomaticIdlingNowResumed);
}
[PublicAPI]
[SuppressMessage("ReSharper", "FunctionComplexityOverflow")]
public async Task<(bool Success, string Message)> SendInventory(uint appID = Steam.Asset.SteamAppID, ulong contextID = Steam.Asset.SteamCommunityContextID, ulong targetSteamID = 0, string tradeToken = null, Func<Steam.Asset, bool> filterFunction = null) {
if ((appID == 0) || (contextID == 0)) {
Bot.ArchiLogger.LogNullError(nameof(appID) + " || " + nameof(contextID));
return (false, string.Format(Strings.ErrorObjectIsNull, nameof(appID) + " || " + nameof(contextID)));
}
if (!Bot.IsConnectedAndLoggedOn) {
return (false, Strings.BotNotConnected);
}
if (targetSteamID == 0) {
targetSteamID = GetFirstSteamMasterID();
if (targetSteamID == 0) {
return (false, Strings.BotLootingMasterNotDefined);
}
if (string.IsNullOrEmpty(tradeToken) && !string.IsNullOrEmpty(Bot.BotConfig.SteamTradeToken)) {
tradeToken = Bot.BotConfig.SteamTradeToken;
}
}
if (targetSteamID == Bot.SteamID) {
return (false, Strings.BotSendingTradeToYourself);
}
lock (TradingSemaphore) {
if (TradingScheduled) {
return (false, Strings.ErrorAborted);
}
TradingScheduled = true;
}
filterFunction ??= item => true;
await TradingSemaphore.WaitAsync().ConfigureAwait(false);
try {
lock (TradingSemaphore) {
TradingScheduled = false;
}
HashSet<Steam.Asset> inventory;
try {
inventory = await Bot.ArchiWebHandler.GetInventoryAsync(Bot.SteamID, appID, contextID).Where(item => item.Tradable && filterFunction(item)).ToHashSetAsync().ConfigureAwait(false);
} catch (HttpRequestException e) {
return (false, string.Format(Strings.WarningFailedWithError, e.Message));
} catch (Exception e) {
Bot.ArchiLogger.LogGenericException(e);
return (false, string.Format(Strings.WarningFailedWithError, e.Message));
}
if (inventory.Count == 0) {
return (false, string.Format(Strings.ErrorIsEmpty, nameof(inventory)));
}
if (!await Bot.ArchiWebHandler.MarkSentTrades().ConfigureAwait(false)) {
return (false, Strings.BotLootingFailed);
}
if (string.IsNullOrEmpty(tradeToken) && (Bot.SteamFriends.GetFriendRelationship(targetSteamID) != EFriendRelationship.Friend)) {
Bot targetBot = Bot.Bots.Values.FirstOrDefault(bot => bot.SteamID == targetSteamID);
if (targetBot?.IsConnectedAndLoggedOn == true) {
tradeToken = await targetBot.ArchiHandler.GetTradeToken().ConfigureAwait(false);
}
}
(bool success, HashSet<ulong> mobileTradeOfferIDs) = await Bot.ArchiWebHandler.SendTradeOffer(targetSteamID, inventory, token: tradeToken).ConfigureAwait(false);
if ((mobileTradeOfferIDs != null) && (mobileTradeOfferIDs.Count > 0) && Bot.HasMobileAuthenticator) {
(bool twoFactorSuccess, _) = await HandleTwoFactorAuthenticationConfirmations(true, Steam.ConfirmationDetails.EType.Trade, mobileTradeOfferIDs, true).ConfigureAwait(false);
if (!twoFactorSuccess) {
return (false, Strings.BotLootingFailed);
}
}
if (!success) {
return (false, Strings.BotLootingFailed);
}
} finally {
TradingSemaphore.Release();
}
return (true, Strings.BotLootingSuccess);
}
[PublicAPI]
public (bool Success, string Message) Start() {
if (Bot.KeepRunning) {
return (false, Strings.BotAlreadyRunning);
}
Utilities.InBackground(Bot.Start);
return (true, Strings.Done);
}
[PublicAPI]
public (bool Success, string Message) Stop() {
if (!Bot.KeepRunning) {
return (false, Strings.BotAlreadyStopped);
}
Bot.Stop();
return (true, Strings.Done);
}
[PublicAPI]
public static async Task<(bool Success, string Message, Version Version)> Update() {
Version version = await ASF.Update(true).ConfigureAwait(false);
if (version == null) {
return (false, null, null);
}
if (SharedInfo.Version >= version) {
return (false, "V" + SharedInfo.Version + " ≥ V" + version, version);
}
Utilities.InBackground(ASF.RestartOrExit);
return (true, null, version);
}
internal async Task AcceptDigitalGiftCards() {
lock (GiftCardsSemaphore) {
if (ProcessingGiftsScheduled) {
return;
}
ProcessingGiftsScheduled = true;
}
await GiftCardsSemaphore.WaitAsync().ConfigureAwait(false);
try {
lock (GiftCardsSemaphore) {
ProcessingGiftsScheduled = false;
}
HashSet<ulong> giftCardIDs = await Bot.ArchiWebHandler.GetDigitalGiftCards().ConfigureAwait(false);
if ((giftCardIDs == null) || (giftCardIDs.Count == 0)) {
return;
}
foreach (ulong giftCardID in giftCardIDs.Where(gid => !HandledGifts.Contains(gid))) {
HandledGifts.Add(giftCardID);
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.BotAcceptingGift, giftCardID));
await LimitGiftsRequestsAsync().ConfigureAwait(false);
bool result = await Bot.ArchiWebHandler.AcceptDigitalGiftCard(giftCardID).ConfigureAwait(false);
if (result) {
Bot.ArchiLogger.LogGenericInfo(Strings.Success);
} else {
Bot.ArchiLogger.LogGenericWarning(Strings.WarningFailed);
}
}
} finally {
GiftCardsSemaphore.Release();
}
}
internal async Task AcceptGuestPasses(IReadOnlyCollection<ulong> guestPassIDs) {
if ((guestPassIDs == null) || (guestPassIDs.Count == 0)) {
Bot.ArchiLogger.LogNullError(nameof(guestPassIDs));
return;
}
foreach (ulong guestPassID in guestPassIDs.Where(guestPassID => !HandledGifts.Contains(guestPassID))) {
HandledGifts.Add(guestPassID);
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.BotAcceptingGift, guestPassID));
await LimitGiftsRequestsAsync().ConfigureAwait(false);
ArchiHandler.RedeemGuestPassResponseCallback response = await Bot.ArchiHandler.RedeemGuestPass(guestPassID).ConfigureAwait(false);
if (response != null) {
if (response.Result == EResult.OK) {
Bot.ArchiLogger.LogGenericInfo(Strings.Success);
} else {
Bot.ArchiLogger.LogGenericWarning(string.Format(Strings.WarningFailedWithError, response.Result));
}
} else {
Bot.ArchiLogger.LogGenericWarning(Strings.WarningFailed);
}
}
}
internal void OnDisconnected() => HandledGifts.Clear();
private ulong GetFirstSteamMasterID() => Bot.BotConfig.SteamUserPermissions.Where(kv => (kv.Key != 0) && (kv.Value == BotConfig.EPermission.Master)).Select(kv => kv.Key).OrderByDescending(steamID => steamID != Bot.SteamID).ThenBy(steamID => steamID).FirstOrDefault();
private static async Task LimitGiftsRequestsAsync() {
if (ASF.GlobalConfig.GiftsLimiterDelay == 0) {
return;
}
await GiftsSemaphore.WaitAsync().ConfigureAwait(false);
Utilities.InBackground(
async () => {
await Task.Delay(ASF.GlobalConfig.GiftsLimiterDelay * 1000).ConfigureAwait(false);
GiftsSemaphore.Release();
}
);
}
}
}

View File

@@ -1,250 +0,0 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using ArchiSteamFarm.Localization;
using CryptSharp.Utility;
using JetBrains.Annotations;
using SteamKit2;
namespace ArchiSteamFarm {
public static class ArchiCryptoHelper {
private const ushort SteamParentalPbkdf2Iterations = 10000;
private const byte SteamParentalSCryptBlocksCount = 8;
private const ushort SteamParentalSCryptIterations = 8192;
[NotNull]
private static IEnumerable<byte> SteamParentalCharacters => Enumerable.Range('0', 10).Select(character => (byte) character);
[NotNull]
private static IEnumerable<byte[]> SteamParentalCodes {
get {
HashSet<byte> steamParentalCharacters = SteamParentalCharacters.ToHashSet();
return from a in steamParentalCharacters from b in steamParentalCharacters from c in steamParentalCharacters from d in steamParentalCharacters select new[] { a, b, c, d };
}
}
private static byte[] EncryptionKey = Encoding.UTF8.GetBytes(nameof(ArchiSteamFarm));
internal static string Decrypt(ECryptoMethod cryptoMethod, string encrypted) {
if (!Enum.IsDefined(typeof(ECryptoMethod), cryptoMethod) || string.IsNullOrEmpty(encrypted)) {
ASF.ArchiLogger.LogNullError(nameof(cryptoMethod) + " || " + nameof(encrypted));
return null;
}
switch (cryptoMethod) {
case ECryptoMethod.PlainText:
return encrypted;
case ECryptoMethod.AES:
return DecryptAES(encrypted);
case ECryptoMethod.ProtectedDataForCurrentUser:
return DecryptProtectedDataForCurrentUser(encrypted);
default:
ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(cryptoMethod), cryptoMethod));
return null;
}
}
internal static string Encrypt(ECryptoMethod cryptoMethod, string decrypted) {
if (!Enum.IsDefined(typeof(ECryptoMethod), cryptoMethod) || string.IsNullOrEmpty(decrypted)) {
ASF.ArchiLogger.LogNullError(nameof(cryptoMethod) + " || " + nameof(decrypted));
return null;
}
switch (cryptoMethod) {
case ECryptoMethod.PlainText:
return decrypted;
case ECryptoMethod.AES:
return EncryptAES(decrypted);
case ECryptoMethod.ProtectedDataForCurrentUser:
return EncryptProtectedDataForCurrentUser(decrypted);
default:
ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(cryptoMethod), cryptoMethod));
return null;
}
}
internal static IEnumerable<byte> GenerateSteamParentalHash(byte[] password, byte[] salt, byte hashLength, ESteamParentalAlgorithm steamParentalAlgorithm) {
if ((password == null) || (salt == null) || (hashLength == 0) || !Enum.IsDefined(typeof(ESteamParentalAlgorithm), steamParentalAlgorithm)) {
ASF.ArchiLogger.LogNullError(nameof(password) + " || " + nameof(salt) + " || " + nameof(hashLength) + " || " + nameof(steamParentalAlgorithm));
return null;
}
switch (steamParentalAlgorithm) {
case ESteamParentalAlgorithm.Pbkdf2:
using (HMACSHA256 hmacAlgorithm = new HMACSHA256(password)) {
return Pbkdf2.ComputeDerivedKey(hmacAlgorithm, salt, SteamParentalPbkdf2Iterations, hashLength);
}
case ESteamParentalAlgorithm.SCrypt:
return SCrypt.ComputeDerivedKey(password, salt, SteamParentalSCryptIterations, SteamParentalSCryptBlocksCount, 1, null, hashLength);
default:
ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(steamParentalAlgorithm), steamParentalAlgorithm));
return null;
}
}
internal static string RecoverSteamParentalCode(byte[] passwordHash, byte[] salt, ESteamParentalAlgorithm steamParentalAlgorithm) {
if ((passwordHash == null) || (salt == null) || !Enum.IsDefined(typeof(ESteamParentalAlgorithm), steamParentalAlgorithm)) {
ASF.ArchiLogger.LogNullError(nameof(passwordHash) + " || " + nameof(salt) + " || " + nameof(steamParentalAlgorithm));
return null;
}
byte[] password = SteamParentalCodes.AsParallel().FirstOrDefault(passwordToTry => GenerateSteamParentalHash(passwordToTry, salt, (byte) passwordHash.Length, steamParentalAlgorithm)?.SequenceEqual(passwordHash) == true);
return password != null ? Encoding.UTF8.GetString(password) : null;
}
internal static void SetEncryptionKey(string key) {
if (string.IsNullOrEmpty(key)) {
ASF.ArchiLogger.LogNullError(nameof(key));
return;
}
EncryptionKey = Encoding.UTF8.GetBytes(key);
}
private static string DecryptAES(string encrypted) {
if (string.IsNullOrEmpty(encrypted)) {
ASF.ArchiLogger.LogNullError(nameof(encrypted));
return null;
}
try {
byte[] key;
using (SHA256 sha256 = SHA256.Create()) {
key = sha256.ComputeHash(EncryptionKey);
}
byte[] decryptedData = Convert.FromBase64String(encrypted);
decryptedData = CryptoHelper.SymmetricDecrypt(decryptedData, key);
return Encoding.UTF8.GetString(decryptedData);
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return null;
}
}
private static string DecryptProtectedDataForCurrentUser(string encrypted) {
if (string.IsNullOrEmpty(encrypted)) {
ASF.ArchiLogger.LogNullError(nameof(encrypted));
return null;
}
try {
byte[] decryptedData = ProtectedData.Unprotect(
Convert.FromBase64String(encrypted),
EncryptionKey, // This is used as salt only and it's fine that it's known
DataProtectionScope.CurrentUser
);
return Encoding.UTF8.GetString(decryptedData);
} catch (PlatformNotSupportedException e) {
ASF.ArchiLogger.LogGenericWarningException(e);
return null;
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return null;
}
}
private static string EncryptAES(string decrypted) {
if (string.IsNullOrEmpty(decrypted)) {
ASF.ArchiLogger.LogNullError(nameof(decrypted));
return null;
}
try {
byte[] key;
using (SHA256 sha256 = SHA256.Create()) {
key = sha256.ComputeHash(EncryptionKey);
}
byte[] encryptedData = Encoding.UTF8.GetBytes(decrypted);
encryptedData = CryptoHelper.SymmetricEncrypt(encryptedData, key);
return Convert.ToBase64String(encryptedData);
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return null;
}
}
private static string EncryptProtectedDataForCurrentUser(string decrypted) {
if (string.IsNullOrEmpty(decrypted)) {
ASF.ArchiLogger.LogNullError(nameof(decrypted));
return null;
}
try {
byte[] encryptedData = ProtectedData.Protect(
Encoding.UTF8.GetBytes(decrypted),
EncryptionKey, // This is used as salt only and it's fine that it's known
DataProtectionScope.CurrentUser
);
return Convert.ToBase64String(encryptedData);
} catch (PlatformNotSupportedException e) {
ASF.ArchiLogger.LogGenericWarningException(e);
return null;
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return null;
}
}
public enum ECryptoMethod : byte {
PlainText,
AES,
ProtectedDataForCurrentUser
}
internal enum ESteamParentalAlgorithm : byte {
SCrypt,
Pbkdf2
}
}
}

View File

@@ -1,98 +1,62 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ApplicationIcon>ASF.ico</ApplicationIcon>
<AssemblyVersion>4.2.0.2</AssemblyVersion>
<Authors>JustArchi</Authors>
<Company>JustArchi</Company>
<Copyright>Copyright © ArchiSteamFarm 2015-2020</Copyright>
<DefaultItemExcludes>$(DefaultItemExcludes);config/**;debug/**;out/**;overlay/**</DefaultItemExcludes>
<Description>ASF is a C# application with primary purpose of idling Steam cards from multiple accounts simultaneously.</Description>
<ErrorReport>none</ErrorReport>
<FileVersion>4.2.0.2</FileVersion>
<DefaultItemExcludes>$(DefaultItemExcludes);config/**;debug/**;logs/**;overlay/**</DefaultItemExcludes>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<LangVersion>8.0</LangVersion>
<NoWarn>1591</NoWarn>
<OpenApiGenerateDocuments>false</OpenApiGenerateDocuments>
<OutputType>Exe</OutputType>
<PackageIcon>../resources/ASF.ico</PackageIcon>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/JustArchiNET/ArchiSteamFarm</PackageProjectUrl>
<RepositoryType>Git</RepositoryType>
<RepositoryUrl>https://github.com/JustArchiNET/ArchiSteamFarm.git</RepositoryUrl>
<RuntimeIdentifiers>linux-arm;linux-x64;osx-x64;win-x64</RuntimeIdentifiers>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
</PropertyGroup>
<PropertyGroup Condition="'$(OS)' == 'Windows_NT' OR '$(ASFNetFramework)' != ''">
<TargetFrameworks>netcoreapp3.1;net48</TargetFrameworks>
</PropertyGroup>
<PropertyGroup Condition="'$(OS)' != 'Windows_NT' AND '$(ASFNetFramework)' == ''">
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugSymbols>false</DebugSymbols>
<DebugType>none</DebugType>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningsAsErrors />
</PropertyGroup>
<PropertyGroup Condition="'$(ASFVariant)' != ''">
<DefineConstants>$(DefineConstants);ASF_VARIANT_$(ASFVariant.Replace('-', '_').ToUpperInvariant())</DefineConstants>
<PropertyGroup Condition="'$(TargetFramework)' == 'net48'">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<!-- Configuration needed for PublishTrimmed=true to work with custom plugins -->
<!-- TODO: https://github.com/mono/linker/issues/652 -->
<TrimmerRootAssembly Include="System.Threading.Tasks" />
<TrimmerRootAssembly Include="System.Threading.Timer" />
<PackageReference Include="AngleSharp.XPath" />
<PackageReference Include="ConfigureAwaitChecker.Analyzer" PrivateAssets="all" />
<PackageReference Include="CryptSharpStandard" />
<PackageReference Include="Humanizer" />
<PackageReference Include="JetBrains.Annotations" />
<PackageReference Include="Markdig.Signed" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="Nito.AsyncEx.Coordination" />
<PackageReference Include="NLog" />
<PackageReference Include="NLog.Web.AspNetCore" />
<PackageReference Include="SteamKit2" />
<PackageReference Include="Swashbuckle.AspNetCore" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" />
<PackageReference Include="System.Composition" />
<PackageReference Include="System.Linq.Async" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AngleSharp.XPath" Version="1.1.7" />
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="4.0.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="CryptSharpStandard" Version="1.0.0" />
<PackageReference Include="Humanizer" Version="2.7.9" />
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3" />
<PackageReference Include="Markdig.Signed" Version="0.18.3" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="Nito.AsyncEx.Coordination" Version="5.0.0" />
<PackageReference Include="NLog" Version="4.7.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.9.1" />
<PackageReference Include="SteamKit2" Version="2.3.0-Beta.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.3.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="5.3.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="5.3.1" />
<PackageReference Include="System.Composition" Version="1.4.0" />
<PackageReference Include="System.Linq.Async" Version="4.1.1" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.3" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.7.0" />
<ItemGroup Condition="'$(TargetFramework)' != 'net48'">
<PackageReference Include="System.IO.FileSystem.AccessControl" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
<PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.HttpOverrides" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="2.2.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="3.1.3" />
<PackageReference Include="System.Collections.Immutable" Version="1.7.0" />
<Reference Include="System.Net.Http">
<HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Net.Http.dll</HintPath>
</Reference>
<Reference Include="System.Security">
<HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Security.dll</HintPath>
</Reference>
<PackageReference Include="IndexRange" />
<PackageReference Include="Microsoft.AspNetCore.Cors" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" />
<PackageReference Include="Microsoft.AspNetCore.HttpOverrides" />
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" />
<PackageReference Include="Microsoft.AspNetCore.WebSockets" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" />
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" />
<Reference Include="System.Net.Http" HintPath="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Net.Http.dll" />
<Reference Include="System.Security" HintPath="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Security.dll" />
</ItemGroup>
<ItemGroup>
<TrimmerRootDescriptor Include="TrimmerRoots.xml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Localization\Strings.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
@@ -103,23 +67,15 @@
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Localization\Strings.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Content Include="overlay\all\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
</Content>
<Content Include="..\ASF-ui\dist\**\*.*" Exclude="**\README.md">
<Content Include="..\ASF-ui\dist\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>www\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Content>
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,6 +19,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Runtime.CompilerServices;
[assembly: CLSCompliant(false)]
[assembly: InternalsVisibleTo("ArchiSteamFarm.Tests")]
[assembly: InternalsVisibleTo("ArchiSteamFarm.OfficialPlugins.SteamTokenDumper")]

View File

@@ -1,478 +0,0 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Json;
using ArchiSteamFarm.Localization;
using JetBrains.Annotations;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SteamKit2;
namespace ArchiSteamFarm {
[SuppressMessage("ReSharper", "ClassCannotBeInstantiated")]
public sealed class BotConfig {
internal const byte SteamParentalCodeLength = 4;
private const bool DefaultAcceptGifts = false;
private const bool DefaultAutoSteamSaleEvent = false;
private const EBotBehaviour DefaultBotBehaviour = EBotBehaviour.None;
private const string DefaultCustomGamePlayedWhileFarming = null;
private const string DefaultCustomGamePlayedWhileIdle = null;
private const bool DefaultEnabled = false;
private const byte DefaultHoursUntilCardDrops = 3;
private const bool DefaultIdlePriorityQueueOnly = false;
private const bool DefaultIdleRefundableGames = true;
private const EPersonaState DefaultOnlineStatus = EPersonaState.Online;
private const ArchiCryptoHelper.ECryptoMethod DefaultPasswordFormat = ArchiCryptoHelper.ECryptoMethod.PlainText;
private const bool DefaultPaused = false;
private const ERedeemingPreferences DefaultRedeemingPreferences = ERedeemingPreferences.None;
private const bool DefaultSendOnFarmingFinished = false;
private const byte DefaultSendTradePeriod = 0;
private const bool DefaultShutdownOnFarmingFinished = false;
private const string DefaultSteamLogin = null;
private const ulong DefaultSteamMasterClanID = 0;
private const string DefaultSteamParentalCode = null;
private const string DefaultSteamPassword = null;
private const string DefaultSteamTradeToken = null;
private const ETradingPreferences DefaultTradingPreferences = ETradingPreferences.None;
private const bool DefaultUseLoginKeys = true;
private static readonly ImmutableList<EFarmingOrder> DefaultFarmingOrders = ImmutableList<EFarmingOrder>.Empty;
private static readonly ImmutableHashSet<uint> DefaultGamesPlayedWhileIdle = ImmutableHashSet<uint>.Empty;
private static readonly ImmutableHashSet<Steam.Asset.EType> DefaultLootableTypes = ImmutableHashSet.Create(Steam.Asset.EType.BoosterPack, Steam.Asset.EType.FoilTradingCard, Steam.Asset.EType.TradingCard);
private static readonly ImmutableHashSet<Steam.Asset.EType> DefaultMatchableTypes = ImmutableHashSet.Create(Steam.Asset.EType.TradingCard);
private static readonly ImmutableDictionary<ulong, EPermission> DefaultSteamUserPermissions = ImmutableDictionary<ulong, EPermission>.Empty;
private static readonly ImmutableHashSet<Steam.Asset.EType> DefaultTransferableTypes = ImmutableHashSet.Create(Steam.Asset.EType.BoosterPack, Steam.Asset.EType.FoilTradingCard, Steam.Asset.EType.TradingCard);
private static readonly SemaphoreSlim WriteSemaphore = new SemaphoreSlim(1, 1);
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool AcceptGifts = DefaultAcceptGifts;
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool AutoSteamSaleEvent = DefaultAutoSteamSaleEvent;
[JsonProperty(Required = Required.DisallowNull)]
public readonly EBotBehaviour BotBehaviour = DefaultBotBehaviour;
[JsonProperty]
public readonly string CustomGamePlayedWhileFarming = DefaultCustomGamePlayedWhileFarming;
[JsonProperty]
public readonly string CustomGamePlayedWhileIdle = DefaultCustomGamePlayedWhileIdle;
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool Enabled = DefaultEnabled;
[JsonProperty(ObjectCreationHandling = ObjectCreationHandling.Replace, Required = Required.DisallowNull)]
public readonly ImmutableList<EFarmingOrder> FarmingOrders = DefaultFarmingOrders;
[JsonProperty(ObjectCreationHandling = ObjectCreationHandling.Replace, Required = Required.DisallowNull)]
public readonly ImmutableHashSet<uint> GamesPlayedWhileIdle = DefaultGamesPlayedWhileIdle;
[JsonProperty(Required = Required.DisallowNull)]
public readonly byte HoursUntilCardDrops = DefaultHoursUntilCardDrops;
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool IdlePriorityQueueOnly = DefaultIdlePriorityQueueOnly;
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool IdleRefundableGames = DefaultIdleRefundableGames;
[JsonProperty(ObjectCreationHandling = ObjectCreationHandling.Replace, Required = Required.DisallowNull)]
public readonly ImmutableHashSet<Steam.Asset.EType> LootableTypes = DefaultLootableTypes;
[JsonProperty(ObjectCreationHandling = ObjectCreationHandling.Replace, Required = Required.DisallowNull)]
public readonly ImmutableHashSet<Steam.Asset.EType> MatchableTypes = DefaultMatchableTypes;
[JsonProperty(Required = Required.DisallowNull)]
public readonly EPersonaState OnlineStatus = DefaultOnlineStatus;
[JsonProperty(Required = Required.DisallowNull)]
public readonly ArchiCryptoHelper.ECryptoMethod PasswordFormat = DefaultPasswordFormat;
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool Paused = DefaultPaused;
[JsonProperty(Required = Required.DisallowNull)]
public readonly ERedeemingPreferences RedeemingPreferences = DefaultRedeemingPreferences;
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool SendOnFarmingFinished = DefaultSendOnFarmingFinished;
[JsonProperty(Required = Required.DisallowNull)]
public readonly byte SendTradePeriod = DefaultSendTradePeriod;
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool ShutdownOnFarmingFinished = DefaultShutdownOnFarmingFinished;
[JsonProperty]
public readonly string SteamTradeToken = DefaultSteamTradeToken;
[JsonProperty(ObjectCreationHandling = ObjectCreationHandling.Replace, Required = Required.DisallowNull)]
public readonly ImmutableDictionary<ulong, EPermission> SteamUserPermissions = DefaultSteamUserPermissions;
[JsonProperty(Required = Required.DisallowNull)]
public readonly ETradingPreferences TradingPreferences = DefaultTradingPreferences;
[JsonProperty(ObjectCreationHandling = ObjectCreationHandling.Replace, Required = Required.DisallowNull)]
public readonly ImmutableHashSet<Steam.Asset.EType> TransferableTypes = DefaultTransferableTypes;
[JsonProperty(Required = Required.DisallowNull)]
public readonly bool UseLoginKeys = DefaultUseLoginKeys;
[JsonProperty(Required = Required.DisallowNull)]
public ulong SteamMasterClanID { get; private set; } = DefaultSteamMasterClanID;
[JsonExtensionData]
internal Dictionary<string, JToken> AdditionalProperties {
get;
[UsedImplicitly]
set;
}
internal string DecryptedSteamPassword {
get {
if (string.IsNullOrEmpty(SteamPassword)) {
return null;
}
if (PasswordFormat == ArchiCryptoHelper.ECryptoMethod.PlainText) {
return SteamPassword;
}
string result = ArchiCryptoHelper.Decrypt(PasswordFormat, SteamPassword);
if (string.IsNullOrEmpty(result)) {
ASF.ArchiLogger.LogGenericError(string.Format(Strings.ErrorIsInvalid, nameof(SteamPassword)));
return null;
}
return result;
}
set {
if (!string.IsNullOrEmpty(value) && (PasswordFormat != ArchiCryptoHelper.ECryptoMethod.PlainText)) {
value = ArchiCryptoHelper.Encrypt(PasswordFormat, value);
}
SteamPassword = value;
}
}
internal bool IsSteamLoginSet { get; private set; }
internal bool IsSteamParentalCodeSet { get; private set; }
internal bool IsSteamPasswordSet { get; private set; }
internal bool ShouldSerializeEverything { private get; set; } = true;
internal bool ShouldSerializeHelperProperties { private get; set; } = true;
[JsonProperty]
internal string SteamLogin {
get => BackingSteamLogin;
set {
IsSteamLoginSet = true;
BackingSteamLogin = value;
}
}
[JsonProperty]
internal string SteamParentalCode {
get => BackingSteamParentalCode;
set {
IsSteamParentalCodeSet = true;
BackingSteamParentalCode = value;
}
}
[JsonProperty]
internal string SteamPassword {
get => BackingSteamPassword;
set {
IsSteamPasswordSet = true;
BackingSteamPassword = value;
}
}
private string BackingSteamLogin = DefaultSteamLogin;
private string BackingSteamParentalCode = DefaultSteamParentalCode;
private string BackingSteamPassword = DefaultSteamPassword;
private bool ShouldSerializeSensitiveDetails = true;
[JsonProperty(PropertyName = SharedInfo.UlongCompatibilityStringPrefix + nameof(SteamMasterClanID), Required = Required.DisallowNull)]
[JetBrains.Annotations.NotNull]
private string SSteamMasterClanID {
get => SteamMasterClanID.ToString();
set {
if (string.IsNullOrEmpty(value) || !ulong.TryParse(value, out ulong result)) {
ASF.ArchiLogger.LogGenericError(string.Format(Strings.ErrorIsInvalid, nameof(SSteamMasterClanID)));
return;
}
SteamMasterClanID = result;
}
}
[JsonConstructor]
private BotConfig() { }
internal (bool Valid, string ErrorMessage) CheckValidation() {
if (BotBehaviour > EBotBehaviour.All) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(BotBehaviour), BotBehaviour));
}
foreach (EFarmingOrder farmingOrder in FarmingOrders.Where(farmingOrder => !Enum.IsDefined(typeof(EFarmingOrder), farmingOrder))) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(FarmingOrders), farmingOrder));
}
if (GamesPlayedWhileIdle.Count > ArchiHandler.MaxGamesPlayedConcurrently) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(GamesPlayedWhileIdle), GamesPlayedWhileIdle.Count + " > " + ArchiHandler.MaxGamesPlayedConcurrently));
}
foreach (Steam.Asset.EType lootableType in LootableTypes.Where(lootableType => !Enum.IsDefined(typeof(Steam.Asset.EType), lootableType))) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(LootableTypes), lootableType));
}
foreach (Steam.Asset.EType matchableType in MatchableTypes.Where(matchableType => !Enum.IsDefined(typeof(Steam.Asset.EType), matchableType))) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(MatchableTypes), matchableType));
}
if ((OnlineStatus < EPersonaState.Offline) || (OnlineStatus >= EPersonaState.Max)) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(OnlineStatus), OnlineStatus));
}
if (!Enum.IsDefined(typeof(ArchiCryptoHelper.ECryptoMethod), PasswordFormat)) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(PasswordFormat), PasswordFormat));
}
if (RedeemingPreferences > ERedeemingPreferences.All) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(RedeemingPreferences), RedeemingPreferences));
}
if ((SteamMasterClanID != 0) && !new SteamID(SteamMasterClanID).IsClanAccount) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(SteamMasterClanID), SteamMasterClanID));
}
if (!string.IsNullOrEmpty(SteamParentalCode) && (SteamParentalCode != "0") && (SteamParentalCode.Length != SteamParentalCodeLength)) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(SteamParentalCode), SteamParentalCode));
}
foreach ((ulong steamID, EPermission permission) in SteamUserPermissions) {
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(SteamUserPermissions), steamID));
}
if (!Enum.IsDefined(typeof(EPermission), permission)) {
return (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(SteamUserPermissions), permission));
}
}
return TradingPreferences <= ETradingPreferences.All ? (true, null) : (false, string.Format(Strings.ErrorConfigPropertyInvalid, nameof(TradingPreferences), TradingPreferences));
}
[ItemCanBeNull]
internal static async Task<BotConfig> Load(string filePath) {
if (string.IsNullOrEmpty(filePath)) {
ASF.ArchiLogger.LogNullError(nameof(filePath));
return null;
}
if (!File.Exists(filePath)) {
return null;
}
BotConfig botConfig;
try {
string json = await RuntimeCompatibility.File.ReadAllTextAsync(filePath).ConfigureAwait(false);
if (string.IsNullOrEmpty(json)) {
ASF.ArchiLogger.LogGenericError(string.Format(Strings.ErrorIsEmpty, nameof(json)));
return null;
}
botConfig = JsonConvert.DeserializeObject<BotConfig>(json);
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return null;
}
if (botConfig == null) {
ASF.ArchiLogger.LogNullError(nameof(botConfig));
return null;
}
(bool valid, string errorMessage) = botConfig.CheckValidation();
if (!valid) {
ASF.ArchiLogger.LogGenericError(errorMessage);
return null;
}
botConfig.ShouldSerializeEverything = false;
botConfig.ShouldSerializeSensitiveDetails = false;
return botConfig;
}
internal static async Task<bool> Write(string filePath, BotConfig botConfig) {
if (string.IsNullOrEmpty(filePath) || (botConfig == null)) {
ASF.ArchiLogger.LogNullError(nameof(filePath) + " || " + nameof(botConfig));
return false;
}
string json = JsonConvert.SerializeObject(botConfig, Formatting.Indented);
string newFilePath = filePath + ".new";
await WriteSemaphore.WaitAsync().ConfigureAwait(false);
try {
await RuntimeCompatibility.File.WriteAllTextAsync(newFilePath, json).ConfigureAwait(false);
if (File.Exists(filePath)) {
File.Replace(newFilePath, filePath, null);
} else {
File.Move(newFilePath, filePath);
}
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return false;
} finally {
WriteSemaphore.Release();
}
return true;
}
[Flags]
public enum EBotBehaviour : byte {
None = 0,
RejectInvalidFriendInvites = 1,
RejectInvalidTrades = 2,
RejectInvalidGroupInvites = 4,
DismissInventoryNotifications = 8,
MarkReceivedMessagesAsRead = 16,
MarkBotMessagesAsRead = 32,
All = RejectInvalidFriendInvites | RejectInvalidTrades | RejectInvalidGroupInvites | DismissInventoryNotifications | MarkReceivedMessagesAsRead | MarkBotMessagesAsRead
}
public enum EFarmingOrder : byte {
Unordered,
AppIDsAscending,
AppIDsDescending,
CardDropsAscending,
CardDropsDescending,
HoursAscending,
HoursDescending,
NamesAscending,
NamesDescending,
Random,
BadgeLevelsAscending,
BadgeLevelsDescending,
RedeemDateTimesAscending,
RedeemDateTimesDescending,
MarketableAscending,
MarketableDescending
}
public enum EPermission : byte {
None,
FamilySharing,
Operator,
Master
}
[Flags]
public enum ERedeemingPreferences : byte {
None = 0,
Forwarding = 1,
Distributing = 2,
KeepMissingGames = 4,
AssumeWalletKeyOnBadActivationCode = 8,
All = Forwarding | Distributing | KeepMissingGames | AssumeWalletKeyOnBadActivationCode
}
[Flags]
public enum ETradingPreferences : byte {
None = 0,
AcceptDonations = 1,
SteamTradeMatcher = 2,
MatchEverything = 4,
DontAcceptBotTrades = 8,
MatchActively = 16,
All = AcceptDonations | SteamTradeMatcher | MatchEverything | DontAcceptBotTrades | MatchActively
}
// ReSharper disable UnusedMember.Global
public bool ShouldSerializeAcceptGifts() => ShouldSerializeEverything || (AcceptGifts != DefaultAcceptGifts);
public bool ShouldSerializeAutoSteamSaleEvent() => ShouldSerializeEverything || (AutoSteamSaleEvent != DefaultAutoSteamSaleEvent);
public bool ShouldSerializeBotBehaviour() => ShouldSerializeEverything || (BotBehaviour != DefaultBotBehaviour);
public bool ShouldSerializeCustomGamePlayedWhileFarming() => ShouldSerializeEverything || (CustomGamePlayedWhileFarming != DefaultCustomGamePlayedWhileFarming);
public bool ShouldSerializeCustomGamePlayedWhileIdle() => ShouldSerializeEverything || (CustomGamePlayedWhileIdle != DefaultCustomGamePlayedWhileIdle);
public bool ShouldSerializeEnabled() => ShouldSerializeEverything || (Enabled != DefaultEnabled);
public bool ShouldSerializeFarmingOrders() => ShouldSerializeEverything || ((FarmingOrders != DefaultFarmingOrders) && !FarmingOrders.SequenceEqual(DefaultFarmingOrders));
public bool ShouldSerializeGamesPlayedWhileIdle() => ShouldSerializeEverything || ((GamesPlayedWhileIdle != DefaultGamesPlayedWhileIdle) && !GamesPlayedWhileIdle.SetEquals(DefaultGamesPlayedWhileIdle));
public bool ShouldSerializeHoursUntilCardDrops() => ShouldSerializeEverything || (HoursUntilCardDrops != DefaultHoursUntilCardDrops);
public bool ShouldSerializeIdlePriorityQueueOnly() => ShouldSerializeEverything || (IdlePriorityQueueOnly != DefaultIdlePriorityQueueOnly);
public bool ShouldSerializeIdleRefundableGames() => ShouldSerializeEverything || (IdleRefundableGames != DefaultIdleRefundableGames);
public bool ShouldSerializeLootableTypes() => ShouldSerializeEverything || ((LootableTypes != DefaultLootableTypes) && !LootableTypes.SetEquals(DefaultLootableTypes));
public bool ShouldSerializeMatchableTypes() => ShouldSerializeEverything || ((MatchableTypes != DefaultMatchableTypes) && !MatchableTypes.SetEquals(DefaultMatchableTypes));
public bool ShouldSerializeOnlineStatus() => ShouldSerializeEverything || (OnlineStatus != DefaultOnlineStatus);
public bool ShouldSerializePasswordFormat() => ShouldSerializeEverything || (PasswordFormat != DefaultPasswordFormat);
public bool ShouldSerializePaused() => ShouldSerializeEverything || (Paused != DefaultPaused);
public bool ShouldSerializeRedeemingPreferences() => ShouldSerializeEverything || (RedeemingPreferences != DefaultRedeemingPreferences);
public bool ShouldSerializeSendOnFarmingFinished() => ShouldSerializeEverything || (SendOnFarmingFinished != DefaultSendOnFarmingFinished);
public bool ShouldSerializeSendTradePeriod() => ShouldSerializeEverything || (SendTradePeriod != DefaultSendTradePeriod);
public bool ShouldSerializeShutdownOnFarmingFinished() => ShouldSerializeEverything || (ShutdownOnFarmingFinished != DefaultShutdownOnFarmingFinished);
public bool ShouldSerializeSSteamMasterClanID() => ShouldSerializeEverything || (ShouldSerializeHelperProperties && (SteamMasterClanID != DefaultSteamMasterClanID));
public bool ShouldSerializeSteamLogin() => ShouldSerializeSensitiveDetails && (ShouldSerializeEverything || (SteamLogin != DefaultSteamLogin));
public bool ShouldSerializeSteamMasterClanID() => ShouldSerializeEverything || (SteamMasterClanID != DefaultSteamMasterClanID);
public bool ShouldSerializeSteamParentalCode() => ShouldSerializeSensitiveDetails && (ShouldSerializeEverything || (SteamParentalCode != DefaultSteamParentalCode));
public bool ShouldSerializeSteamPassword() => ShouldSerializeSensitiveDetails && (ShouldSerializeEverything || (SteamPassword != DefaultSteamPassword));
public bool ShouldSerializeSteamTradeToken() => ShouldSerializeEverything || (SteamTradeToken != DefaultSteamTradeToken);
public bool ShouldSerializeSteamUserPermissions() => ShouldSerializeEverything || ((SteamUserPermissions != DefaultSteamUserPermissions) && ((SteamUserPermissions.Count != DefaultSteamUserPermissions.Count) || SteamUserPermissions.Except(DefaultSteamUserPermissions).Any()));
public bool ShouldSerializeTradingPreferences() => ShouldSerializeEverything || (TradingPreferences != DefaultTradingPreferences);
public bool ShouldSerializeTransferableTypes() => ShouldSerializeEverything || ((TransferableTypes != DefaultTransferableTypes) && !TransferableTypes.SetEquals(DefaultTransferableTypes));
public bool ShouldSerializeUseLoginKeys() => ShouldSerializeEverything || (UseLoginKeys != DefaultUseLoginKeys);
// ReSharper restore UnusedMember.Global
}
}

View File

@@ -1,311 +0,0 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ArchiSteamFarm.Collections;
using ArchiSteamFarm.Helpers;
using ArchiSteamFarm.Localization;
using JetBrains.Annotations;
using Newtonsoft.Json;
using SteamKit2;
namespace ArchiSteamFarm {
internal sealed class BotDatabase : SerializableFile {
internal uint GamesToRedeemInBackgroundCount {
get {
lock (GamesToRedeemInBackground) {
return (uint) GamesToRedeemInBackground.Count;
}
}
}
internal bool HasGamesToRedeemInBackground => GamesToRedeemInBackgroundCount > 0;
internal bool HasIdlingPriorityAppIDs => IdlingPriorityAppIDs.Count > 0;
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentHashSet<ulong> BlacklistedFromTradesSteamIDs = new ConcurrentHashSet<ulong>();
[JsonProperty(Required = Required.DisallowNull)]
private readonly OrderedDictionary GamesToRedeemInBackground = new OrderedDictionary();
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentHashSet<uint> IdlingBlacklistedAppIDs = new ConcurrentHashSet<uint>();
[JsonProperty(Required = Required.DisallowNull)]
private readonly ConcurrentHashSet<uint> IdlingPriorityAppIDs = new ConcurrentHashSet<uint>();
internal string LoginKey {
get => BackingLoginKey;
set {
if (BackingLoginKey == value) {
return;
}
BackingLoginKey = value;
Utilities.InBackground(Save);
}
}
internal MobileAuthenticator MobileAuthenticator {
get => BackingMobileAuthenticator;
set {
if (BackingMobileAuthenticator == value) {
return;
}
BackingMobileAuthenticator = value;
Utilities.InBackground(Save);
}
}
[JsonProperty(PropertyName = "_LoginKey")]
private string BackingLoginKey;
[JsonProperty(PropertyName = "_MobileAuthenticator")]
private MobileAuthenticator BackingMobileAuthenticator;
private BotDatabase([NotNull] string filePath) {
if (string.IsNullOrEmpty(filePath)) {
throw new ArgumentNullException(nameof(filePath));
}
FilePath = filePath;
}
[JsonConstructor]
private BotDatabase() { }
internal void AddBlacklistedFromTradesSteamIDs(IReadOnlyCollection<ulong> steamIDs) {
if ((steamIDs == null) || (steamIDs.Count == 0)) {
ASF.ArchiLogger.LogNullError(nameof(steamIDs));
return;
}
if (BlacklistedFromTradesSteamIDs.AddRange(steamIDs)) {
Utilities.InBackground(Save);
}
}
internal void AddGamesToRedeemInBackground(IOrderedDictionary games) {
if ((games == null) || (games.Count == 0)) {
ASF.ArchiLogger.LogNullError(nameof(games));
return;
}
bool save = false;
lock (GamesToRedeemInBackground) {
foreach (DictionaryEntry game in games.Cast<DictionaryEntry>().Where(game => !GamesToRedeemInBackground.Contains(game.Key))) {
GamesToRedeemInBackground.Add(game.Key, game.Value);
save = true;
}
}
if (save) {
Utilities.InBackground(Save);
}
}
internal void AddIdlingBlacklistedAppIDs(IReadOnlyCollection<uint> appIDs) {
if ((appIDs == null) || (appIDs.Count == 0)) {
ASF.ArchiLogger.LogNullError(nameof(appIDs));
return;
}
if (IdlingBlacklistedAppIDs.AddRange(appIDs)) {
Utilities.InBackground(Save);
}
}
internal void AddIdlingPriorityAppIDs(IReadOnlyCollection<uint> appIDs) {
if ((appIDs == null) || (appIDs.Count == 0)) {
ASF.ArchiLogger.LogNullError(nameof(appIDs));
return;
}
if (IdlingPriorityAppIDs.AddRange(appIDs)) {
Utilities.InBackground(Save);
}
}
[ItemCanBeNull]
internal static async Task<BotDatabase> CreateOrLoad(string filePath) {
if (string.IsNullOrEmpty(filePath)) {
ASF.ArchiLogger.LogNullError(nameof(filePath));
return null;
}
if (!File.Exists(filePath)) {
return new BotDatabase(filePath);
}
BotDatabase botDatabase;
try {
string json = await RuntimeCompatibility.File.ReadAllTextAsync(filePath).ConfigureAwait(false);
if (string.IsNullOrEmpty(json)) {
ASF.ArchiLogger.LogGenericError(string.Format(Strings.ErrorIsEmpty, nameof(json)));
return null;
}
botDatabase = JsonConvert.DeserializeObject<BotDatabase>(json);
} catch (Exception e) {
ASF.ArchiLogger.LogGenericException(e);
return null;
}
if (botDatabase == null) {
ASF.ArchiLogger.LogNullError(nameof(botDatabase));
return null;
}
botDatabase.FilePath = filePath;
return botDatabase;
}
internal IReadOnlyCollection<ulong> GetBlacklistedFromTradesSteamIDs() => BlacklistedFromTradesSteamIDs;
internal (string Key, string Name) GetGameToRedeemInBackground() {
lock (GamesToRedeemInBackground) {
foreach (DictionaryEntry game in GamesToRedeemInBackground) {
return (game.Key as string, game.Value as string);
}
}
return (null, null);
}
internal IReadOnlyCollection<uint> GetIdlingBlacklistedAppIDs() => IdlingBlacklistedAppIDs;
internal IReadOnlyCollection<uint> GetIdlingPriorityAppIDs() => IdlingPriorityAppIDs;
internal bool IsBlacklistedFromIdling(uint appID) {
if (appID == 0) {
ASF.ArchiLogger.LogNullError(nameof(appID));
return false;
}
return IdlingBlacklistedAppIDs.Contains(appID);
}
internal bool IsBlacklistedFromTrades(ulong steamID) {
if ((steamID == 0) || !new SteamID(steamID).IsIndividualAccount) {
ASF.ArchiLogger.LogNullError(nameof(steamID));
return false;
}
return BlacklistedFromTradesSteamIDs.Contains(steamID);
}
internal bool IsPriorityIdling(uint appID) {
if (appID == 0) {
ASF.ArchiLogger.LogNullError(nameof(appID));
return false;
}
return IdlingPriorityAppIDs.Contains(appID);
}
internal void RemoveBlacklistedFromTradesSteamIDs(IReadOnlyCollection<ulong> steamIDs) {
if ((steamIDs == null) || (steamIDs.Count == 0)) {
ASF.ArchiLogger.LogNullError(nameof(steamIDs));
return;
}
if (BlacklistedFromTradesSteamIDs.RemoveRange(steamIDs)) {
Utilities.InBackground(Save);
}
}
internal void RemoveGameToRedeemInBackground(string key) {
if (string.IsNullOrEmpty(key)) {
ASF.ArchiLogger.LogNullError(nameof(key));
return;
}
lock (GamesToRedeemInBackground) {
if (!GamesToRedeemInBackground.Contains(key)) {
return;
}
GamesToRedeemInBackground.Remove(key);
}
Utilities.InBackground(Save);
}
internal void RemoveIdlingBlacklistedAppIDs(IReadOnlyCollection<uint> appIDs) {
if ((appIDs == null) || (appIDs.Count == 0)) {
ASF.ArchiLogger.LogNullError(nameof(appIDs));
return;
}
if (IdlingBlacklistedAppIDs.RemoveRange(appIDs)) {
Utilities.InBackground(Save);
}
}
internal void RemoveIdlingPriorityAppIDs(IReadOnlyCollection<uint> appIDs) {
if ((appIDs == null) || (appIDs.Count == 0)) {
ASF.ArchiLogger.LogNullError(nameof(appIDs));
return;
}
if (IdlingPriorityAppIDs.RemoveRange(appIDs)) {
Utilities.InBackground(Save);
}
}
// ReSharper disable UnusedMember.Global
public bool ShouldSerializeBlacklistedFromTradesSteamIDs() => BlacklistedFromTradesSteamIDs.Count > 0;
public bool ShouldSerializeGamesToRedeemInBackground() => HasGamesToRedeemInBackground;
public bool ShouldSerializeIdlingBlacklistedAppIDs() => IdlingBlacklistedAppIDs.Count > 0;
public bool ShouldSerializeIdlingPriorityAppIDs() => IdlingPriorityAppIDs.Count > 0;
public bool ShouldSerializeLoginKey() => !string.IsNullOrEmpty(LoginKey);
public bool ShouldSerializeMobileAuthenticator() => MobileAuthenticator != null;
// ReSharper restore UnusedMember.Global
}
}

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -22,29 +22,28 @@
using System;
using System.Collections;
using System.Collections.Generic;
using JetBrains.Annotations;
namespace ArchiSteamFarm.Collections {
internal sealed class ConcurrentEnumerator<T> : IEnumerator<T> {
public T Current => Enumerator.Current;
private readonly IEnumerator<T> Enumerator;
private readonly IDisposable Lock;
private readonly IDisposable LockObject;
object IEnumerator.Current => Current;
object? IEnumerator.Current => Current;
internal ConcurrentEnumerator([NotNull] IReadOnlyCollection<T> collection, [NotNull] IDisposable @lock) {
if ((collection == null) || (@lock == null)) {
throw new ArgumentNullException(nameof(collection) + " || " + nameof(@lock));
internal ConcurrentEnumerator(IReadOnlyCollection<T> collection, IDisposable lockObject) {
if (collection == null) {
throw new ArgumentNullException(nameof(collection));
}
Lock = @lock;
LockObject = lockObject ?? throw new ArgumentNullException(nameof(lockObject));
Enumerator = collection.GetEnumerator();
}
public void Dispose() {
Enumerator.Dispose();
Lock.Dispose();
LockObject.Dispose();
}
public bool MoveNext() => Enumerator.MoveNext();

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,12 +23,13 @@ using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using JetBrains.Annotations;
namespace ArchiSteamFarm.Collections {
public sealed class ConcurrentHashSet<T> : IReadOnlyCollection<T>, ISet<T> {
public sealed class ConcurrentHashSet<T> : IReadOnlyCollection<T>, ISet<T> where T : notnull {
public event EventHandler? OnModified;
public int Count => BackingCollection.Count;
public bool IsReadOnly => false;
@@ -36,7 +37,7 @@ namespace ArchiSteamFarm.Collections {
public ConcurrentHashSet() => BackingCollection = new ConcurrentDictionary<T, bool>();
public ConcurrentHashSet([JetBrains.Annotations.NotNull] IEqualityComparer<T> comparer) {
public ConcurrentHashSet(IEqualityComparer<T> comparer) {
if (comparer == null) {
throw new ArgumentNullException(nameof(comparer));
}
@@ -44,15 +45,35 @@ namespace ArchiSteamFarm.Collections {
BackingCollection = new ConcurrentDictionary<T, bool>(comparer);
}
public bool Add(T item) => BackingCollection.TryAdd(item, true);
public void Clear() => BackingCollection.Clear();
public bool Add(T item) {
if (!BackingCollection.TryAdd(item, true)) {
return false;
}
OnModified?.Invoke(this, EventArgs.Empty);
return true;
}
public void Clear() {
if (BackingCollection.IsEmpty) {
return;
}
BackingCollection.Clear();
OnModified?.Invoke(this, EventArgs.Empty);
}
[SuppressMessage("ReSharper", "AssignNullToNotNullAttribute")]
public bool Contains(T item) => BackingCollection.ContainsKey(item);
public void CopyTo(T[] array, int arrayIndex) => BackingCollection.Keys.CopyTo(array, arrayIndex);
public void ExceptWith(IEnumerable<T> other) {
if (other == null) {
throw new ArgumentNullException(nameof(other));
}
foreach (T item in other) {
Remove(item);
}
@@ -98,8 +119,15 @@ namespace ArchiSteamFarm.Collections {
return otherSet.Any(Contains);
}
[SuppressMessage("ReSharper", "AssignNullToNotNullAttribute")]
public bool Remove(T item) => BackingCollection.TryRemove(item, out _);
public bool Remove(T item) {
if (!BackingCollection.TryRemove(item, out _)) {
return false;
}
OnModified?.Invoke(this, EventArgs.Empty);
return true;
}
public bool SetEquals(IEnumerable<T> other) {
ISet<T> otherSet = other as ISet<T> ?? other.ToHashSet();
@@ -109,7 +137,7 @@ namespace ArchiSteamFarm.Collections {
public void SymmetricExceptWith(IEnumerable<T> other) {
ISet<T> otherSet = other as ISet<T> ?? other.ToHashSet();
HashSet<T> removed = new HashSet<T>();
HashSet<T> removed = new();
foreach (T item in otherSet.Where(Contains)) {
removed.Add(item);
@@ -122,27 +150,43 @@ namespace ArchiSteamFarm.Collections {
}
public void UnionWith(IEnumerable<T> other) {
if (other == null) {
throw new ArgumentNullException(nameof(other));
}
foreach (T otherElement in other) {
Add(otherElement);
}
}
[SuppressMessage("ReSharper", "AnnotationConflictInHierarchy")]
[SuppressMessage("ReSharper", "AssignNullToNotNullAttribute")]
void ICollection<T>.Add([JetBrains.Annotations.NotNull] T item) => Add(item);
void ICollection<T>.Add(T item) => Add(item);
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
// We use Count() and not Any() because we must ensure full loop pass
[PublicAPI]
public bool AddRange([JetBrains.Annotations.NotNull] IEnumerable<T> items) => items.Count(Add) > 0;
public bool AddRange(IEnumerable<T> items) {
bool result = false;
// We use Count() and not Any() because we must ensure full loop pass
[PublicAPI]
public bool RemoveRange([JetBrains.Annotations.NotNull] IEnumerable<T> items) => items.Count(Remove) > 0;
foreach (T _ in items.Where(Add)) {
result = true;
}
return result;
}
[PublicAPI]
public bool ReplaceIfNeededWith([JetBrains.Annotations.NotNull] IReadOnlyCollection<T> other) {
public bool RemoveRange(IEnumerable<T> items) {
bool result = false;
foreach (T _ in items.Where(Remove)) {
result = true;
}
return result;
}
[PublicAPI]
public bool ReplaceIfNeededWith(IReadOnlyCollection<T> other) {
if (SetEquals(other)) {
return false;
}
@@ -153,12 +197,9 @@ namespace ArchiSteamFarm.Collections {
}
[PublicAPI]
public void ReplaceWith([JetBrains.Annotations.NotNull] IEnumerable<T> other) {
BackingCollection.Clear();
foreach (T item in other) {
BackingCollection[item] = true;
}
public void ReplaceWith(IEnumerable<T> other) {
Clear();
UnionWith(other);
}
}
}

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,7 +21,6 @@
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Nito.AsyncEx;
namespace ArchiSteamFarm.Collections {
@@ -36,8 +35,8 @@ namespace ArchiSteamFarm.Collections {
}
}
private readonly List<T> BackingCollection = new List<T>();
private readonly AsyncReaderWriterLock Lock = new AsyncReaderWriterLock();
private readonly List<T> BackingCollection = new();
private readonly AsyncReaderWriterLock Lock = new();
int ICollection<T>.Count => Count;
int IReadOnlyCollection<T>.Count => Count;
@@ -80,8 +79,6 @@ namespace ArchiSteamFarm.Collections {
}
}
[JetBrains.Annotations.NotNull]
[SuppressMessage("ReSharper", "AnnotationRedundancyInHierarchy")]
public IEnumerator<T> GetEnumerator() => new ConcurrentEnumerator<T>(BackingCollection, Lock.ReaderLock());
public int IndexOf(T item) {
@@ -108,11 +105,9 @@ namespace ArchiSteamFarm.Collections {
}
}
[JetBrains.Annotations.NotNull]
[SuppressMessage("ReSharper", "AnnotationRedundancyInHierarchy")]
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
internal void ReplaceWith([JetBrains.Annotations.NotNull] IEnumerable<T> collection) {
internal void ReplaceWith(IEnumerable<T> collection) {
using (Lock.WriterLock()) {
BackingCollection.Clear();
BackingCollection.AddRange(collection);

View File

@@ -4,7 +4,7 @@
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2020 Łukasz "JustArchi" Domeradzki
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,10 +23,11 @@ using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using ArchiSteamFarm.Core;
namespace ArchiSteamFarm.Collections {
internal sealed class FixedSizeConcurrentQueue<T> : IEnumerable<T> {
private readonly ConcurrentQueue<T> BackingQueue = new ConcurrentQueue<T>();
private readonly ConcurrentQueue<T> BackingQueue = new();
internal byte MaxCount {
get => BackingMaxCount;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,74 @@
// _ _ _ ____ _ _____
// / \ _ __ ___ | |__ (_)/ ___| | |_ ___ __ _ _ __ ___ | ___|__ _ _ __ _ __ ___
// / _ \ | '__|/ __|| '_ \ | |\___ \ | __|/ _ \ / _` || '_ ` _ \ | |_ / _` || '__|| '_ ` _ \
// / ___ \ | | | (__ | | | || | ___) || |_| __/| (_| || | | | | || _|| (_| || | | | | | | |
// /_/ \_\|_| \___||_| |_||_||____/ \__|\___| \__,_||_| |_| |_||_| \__,_||_| |_| |_| |_|
// |
// Copyright 2015-2021 Łukasz "JustArchi" Domeradzki
// Contact: JustArchi@JustArchi.net
// |
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// |
// http://www.apache.org/licenses/LICENSE-2.0
// |
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System.Threading.Tasks;
using JetBrains.Annotations;
namespace ArchiSteamFarm.Compatibility {
[PublicAPI]
public static class File {
public static Task AppendAllTextAsync(string path, string contents) {
#if NETFRAMEWORK
System.IO.File.AppendAllText(path, contents);
return Task.CompletedTask;
#else
return System.IO.File.AppendAllTextAsync(path, contents);
#endif
}
public static void Move(string sourceFileName, string destFileName, bool overwrite) {
#if NETFRAMEWORK
if (overwrite && System.IO.File.Exists(destFileName)) {
System.IO.File.Delete(destFileName);
}
System.IO.File.Move(sourceFileName, destFileName);
#else
System.IO.File.Move(sourceFileName, destFileName, overwrite);
#endif
}
public static Task<byte[]> ReadAllBytesAsync(string path) =>
#if NETFRAMEWORK
Task.FromResult(System.IO.File.ReadAllBytes(path));
#else
System.IO.File.ReadAllBytesAsync(path);
#endif
public static Task<string> ReadAllTextAsync(string path) =>
#if NETFRAMEWORK
Task.FromResult(System.IO.File.ReadAllText(path));
#else
System.IO.File.ReadAllTextAsync(path);
#endif
public static Task WriteAllTextAsync(string path, string contents) {
#if NETFRAMEWORK
System.IO.File.WriteAllText(path, contents);
return Task.CompletedTask;
#else
return System.IO.File.WriteAllTextAsync(path, contents);
#endif
}
}
}

Some files were not shown because too many files have changed in this diff Show More