Merge branch '10-new-config-structure' into 'master'
Resolve "new config structure" Closes #10 See merge request !6
This commit is contained in:
commit
8f576a65f4
@ -1,3 +1,6 @@
|
||||
## 0.3.0 (2017-05-04)
|
||||
- move hashes and content info into seperate files as to not clutter up the main config file.
|
||||
|
||||
## 0.2.4 (2017-03-23)
|
||||
- fix a bug in serial key parsing
|
||||
|
||||
|
122
Cargo.lock
generated
122
Cargo.lock
generated
@ -1,15 +1,15 @@
|
||||
[root]
|
||||
name = "gog-sync"
|
||||
version = "0.2.3"
|
||||
version = "0.2.4"
|
||||
dependencies = [
|
||||
"chrono 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"clap 2.22.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"chrono 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"clap 2.23.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"curl 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 0.9.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
@ -33,34 +33,34 @@ version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "0.8.0"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "chrono"
|
||||
version = "0.3.0"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"num 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "2.22.0"
|
||||
version = "2.23.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bitflags 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bitflags 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"term_size 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-segmentation 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vec_map 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -71,22 +71,22 @@ name = "curl"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"curl-sys 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-probe 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-sys 0.9.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"curl-sys 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-probe 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-sys 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "curl-sys"
|
||||
version = "0.3.10"
|
||||
version = "0.3.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libz-sys 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-sys 0.9.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-sys 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
@ -121,7 +121,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -145,7 +145,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.21"
|
||||
version = "0.2.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
@ -154,7 +154,7 @@ version = "1.0.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -173,7 +173,7 @@ name = "memchr"
|
||||
version = "0.1.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -181,14 +181,14 @@ name = "num"
|
||||
version = "0.1.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"num-integer 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.33"
|
||||
version = "0.1.34"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -199,7 +199,7 @@ name = "num-iter"
|
||||
version = "0.1.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"num-integer 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -210,17 +210,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "openssl-probe"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.9"
|
||||
version = "0.9.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
@ -259,36 +259,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "0.9.11"
|
||||
version = "0.9.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "serde_codegen_internals"
|
||||
version = "0.14.1"
|
||||
version = "0.14.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"syn 0.11.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "0.9.11"
|
||||
version = "0.9.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_codegen_internals 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.11.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_codegen_internals 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "0.9.9"
|
||||
version = "0.9.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"dtoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -298,7 +298,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "0.11.9"
|
||||
version = "0.11.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -316,11 +316,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "term_size"
|
||||
version = "0.2.3"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -330,7 +330,7 @@ version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -343,11 +343,11 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.1.36"
|
||||
version = "0.1.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"redox_syscall 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
@ -385,7 +385,7 @@ name = "url"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"idna 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -427,45 +427,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
|
||||
"checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6"
|
||||
"checksum atty 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d912da0db7fa85514874458ca3651fe2cddace8d0b0505571dbdcd41ab490159"
|
||||
"checksum bitflags 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e1ab483fc81a8143faa7203c4a3c02888ebd1a782e37e41fa34753ba9a162"
|
||||
"checksum chrono 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "158b0bd7d75cbb6bf9c25967a48a2e9f77da95876b858eadfabaa99cd069de6e"
|
||||
"checksum clap 2.22.0 (registry+https://github.com/rust-lang/crates.io-index)" = "875f4f161166a71c4b7bf2c05f46d26c30d8b9052c16a6bdd3171ddf03848cbe"
|
||||
"checksum bitflags 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1370e9fc2a6ae53aea8b7a5110edbd08836ed87c88736dfabccade1c2b44bff4"
|
||||
"checksum chrono 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d9123be86fd2a8f627836c235ecdf331fdd067ecf7ac05aa1a68fbcf2429f056"
|
||||
"checksum clap 2.23.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f57e9b63057a545ad2ecd773ea61e49422ed1b1d63d74d5da5ecaee55b3396cd"
|
||||
"checksum curl 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c90e1240ef340dd4027ade439e5c7c2064dd9dc652682117bd50d1486a3add7b"
|
||||
"checksum curl-sys 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d909dc402ae80b6f7b0118c039203436061b9d9a3ca5d2c2546d93e0a61aaa"
|
||||
"checksum curl-sys 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "23e7e544dc5e1ba42c4a4a678bd47985e84b9c3f4d3404c29700622a029db9c3"
|
||||
"checksum dtoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "80c8b71fd71146990a9742fc06dcbbde19161a267e0ad4e572c35162f4578c90"
|
||||
"checksum env_logger 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "15abd780e45b3ea4f76b4e9a26ff4843258dd8a3eed2775a0e7368c2e7936c2f"
|
||||
"checksum gcc 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)" = "40899336fb50db0c78710f53e87afc54d8c7266fb76262fecc78ca1a7f09deae"
|
||||
"checksum gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518"
|
||||
"checksum idna 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1053236e00ce4f668aeca4a769a09b3bf5a682d802abd6f3cb39374f6b162c11"
|
||||
"checksum idna 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6ac85ec3f80c8e4e99d9325521337e14ec7555c458a14e377d189659a427f375"
|
||||
"checksum itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "eb2f404fbc66fd9aac13e998248505e7ecb2ad8e44ab6388684c5fb11c6c251c"
|
||||
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
|
||||
"checksum libc 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "88ee81885f9f04bff991e306fea7c1c60a5f0f9e409e99f6b40e3311a3363135"
|
||||
"checksum libc 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)" = "babb8281da88cba992fa1f4ddec7d63ed96280a1a53ec9b919fd37b53d71e502"
|
||||
"checksum libz-sys 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e5ee912a45d686d393d5ac87fac15ba0ba18daae14e8e7543c63ebf7fb7e970c"
|
||||
"checksum log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "5141eca02775a762cc6cd564d8d2c50f67c0ea3a372cbf1c51592b3e029e10ad"
|
||||
"checksum matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "efd7622e3022e1a6eaa602c4cea8912254e5582c9c692e9167714182244801b1"
|
||||
"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
|
||||
"checksum num 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "98b15ba84e910ea7a1973bccd3df7b31ae282bf9d8bd2897779950c9b8303d40"
|
||||
"checksum num-integer 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "21e4df1098d1d797d27ef0c69c178c3fab64941559b290fcae198e0825c9c8b5"
|
||||
"checksum num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "ef1a4bf6f9174aa5783a9b4cc892cacd11aebad6c69ad027a0b65c6ca5f8aa37"
|
||||
"checksum num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d1891bd7b936f12349b7d1403761c8a0b85a18b148e9da4429d5d102c1a41e"
|
||||
"checksum num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "e1cbfa3781f3fe73dc05321bed52a06d2d491eaa764c52335cf4399f046ece99"
|
||||
"checksum openssl-probe 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "756d49c8424483a3df3b5d735112b4da22109ced9a8294f1f5cdf80fb3810919"
|
||||
"checksum openssl-sys 0.9.9 (registry+https://github.com/rust-lang/crates.io-index)" = "376c5c6084e5ea95eea9c3280801e46d0dcf51251d4f01b747e044fb64d1fb31"
|
||||
"checksum openssl-probe 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d98df0270d404ccd3c050a41d579c52d1db15375168bb3471e04ec0f5f378daf"
|
||||
"checksum openssl-sys 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e5e0fd64cb2fa018ed2e7b2c8d9649114fe5da957c9a67432957f01e5dcc82e9"
|
||||
"checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903"
|
||||
"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
|
||||
"checksum redox_syscall 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "29dbdfd4b9df8ab31dec47c6087b7b13cbf4a776f335e4de8efba8288dda075b"
|
||||
"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
|
||||
"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
|
||||
"checksum serde 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)" = "a702319c807c016e51f672e5c77d6f0b46afddd744b5e437d6b8436b888b458f"
|
||||
"checksum serde_codegen_internals 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4d52006899f910528a10631e5b727973fe668f3228109d1707ccf5bad5490b6e"
|
||||
"checksum serde_derive 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f15ea24bd037b2d64646b4d934fa99c649be66e3f7b29fb595a5543b212b1452"
|
||||
"checksum serde_json 0.9.9 (registry+https://github.com/rust-lang/crates.io-index)" = "dbc45439552eb8fb86907a2c41c1fd0ef97458efb87ff7f878db466eb581824e"
|
||||
"checksum serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)" = "34b623917345a631dc9608d5194cc206b3fe6c3554cd1c75b937e55e285254af"
|
||||
"checksum serde_codegen_internals 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bc888bd283bd2420b16ad0d860e35ad8acb21941180a83a189bb2046f9d00400"
|
||||
"checksum serde_derive 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)" = "978fd866f4d4872084a81ccc35e275158351d3b9fe620074e7d7504b816b74ba"
|
||||
"checksum serde_json 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ad8bcf487be7d2e15d3d543f04312de991d631cfe1b43ea0ade69e6a8a5b16a1"
|
||||
"checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
|
||||
"checksum syn 0.11.9 (registry+https://github.com/rust-lang/crates.io-index)" = "480c834701caba3548aa991e54677281be3a5414a9d09ddbdf4ed74a569a9d19"
|
||||
"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
|
||||
"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
|
||||
"checksum term_size 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "07b6c1ac5b3fffd75073276bca1ceed01f67a28537097a2a9539e116e50fb21a"
|
||||
"checksum term_size 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2b6b55df3198cc93372e85dd2ed817f0e38ce8cc0f22eb32391bfad9c4bf209"
|
||||
"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
|
||||
"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
|
||||
"checksum time 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "211b63c112206356ef1ff9b19355f43740fc3f85960c598a93d3a3d3ba7beade"
|
||||
"checksum time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "ffd7ccbf969a892bf83f1e441126968a07a3941c24ff522a26af9f9f4585d1a3"
|
||||
"checksum unicode-bidi 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d3a078ebdd62c0e71a709c3d53d2af693fe09fe93fbff8344aebe289b78f9032"
|
||||
"checksum unicode-normalization 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e28fa37426fceeb5cf8f41ee273faa7c82c47dc8fba5853402841e665fcd86ff"
|
||||
"checksum unicode-segmentation 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18127285758f0e2c6cf325bb3f3d138a12fee27de4f23e146cd6a179f26c2cf3"
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "gog-sync"
|
||||
version = "0.2.4"
|
||||
version = "0.3.0"
|
||||
authors = ["Sebastian Hugentobler <sebastian@vanwa.ch>"]
|
||||
description = "Synchronizes a GOG library with a local folder."
|
||||
documentation = "https://docs.rs/crate/gog-sync"
|
||||
|
@ -31,9 +31,6 @@ A bare configuration with default values before first use:
|
||||
{
|
||||
"gameStorage": ".",
|
||||
"movieStorage": ".",
|
||||
"content": {},
|
||||
"data": {},
|
||||
"extras": {},
|
||||
"osFilters": [],
|
||||
"languageFilters": [],
|
||||
"skipMovies": false,
|
||||
@ -43,9 +40,6 @@ A bare configuration with default values before first use:
|
||||
|
||||
- *gameStorage*: Where to save games
|
||||
- *movieStorage*: Where to save movies
|
||||
- *content*: A map, content id => hash
|
||||
- *data*: A map, data url => hash
|
||||
- *extras*: A map, extra url => hash
|
||||
- *osFilters*: An array of operating systems. If it is not empty, game data is limited to the ones in the list.
|
||||
- *languageFilters*: An array of languages. If it is not empty, game data is limited to the ones in the list.
|
||||
- *resolutionFilters*: An array of resolutions. If it is not empty, movie data is limited to the ones in the list.
|
||||
@ -66,9 +60,6 @@ An incomplete list of resolutions on gog:
|
||||
- `1080p`
|
||||
- `4k`
|
||||
|
||||
You should have no need of changing `content`, `data` or `extras`, as these are
|
||||
used to determine whether specific content is up to date.
|
||||
|
||||
# Usage
|
||||
|
||||
If you want to see the information log while running set `RUST_LOG=info`.
|
||||
|
@ -13,6 +13,7 @@ use std;
|
||||
use std::io::{Read, Write};
|
||||
use xdg;
|
||||
use xdg::BaseDirectories;
|
||||
use std::path::Path;
|
||||
|
||||
/// Wraps `std::io::Error` and `serde_json::Error`.
|
||||
#[derive(Debug)]
|
||||
@ -116,4 +117,30 @@ impl ConfigFiles {
|
||||
Err(error) => Err(ConfigError::IOError(error)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn save_to_path<T>(path: &Path, content: &T) -> Result<(), ConfigError>
|
||||
where T: Serialize
|
||||
{
|
||||
let content_toml = serde_json::to_string_pretty(content)?;
|
||||
|
||||
let mut config_file = File::create(path)?;
|
||||
match config_file.write_all(content_toml.as_bytes()) {
|
||||
Ok(_) => Ok(()),
|
||||
Err(error) => Err(ConfigError::IOError(error)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn load_from_path<T>(path: &Path) -> Result<T, ConfigError>
|
||||
where T: Deserialize
|
||||
{
|
||||
let mut file = File::open(path)?;
|
||||
|
||||
let mut contents = String::new();
|
||||
file.read_to_string(&mut contents)?;
|
||||
|
||||
match serde_json::from_str(contents.as_str()) {
|
||||
Ok(value) => Ok(value),
|
||||
Err(error) => Err(ConfigError::SerdeJsonError(error)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
97
src/gog.rs
97
src/gog.rs
@ -13,7 +13,7 @@
|
||||
use configfiles::{ConfigFiles, ConfigError};
|
||||
use http::{Http, HttpError};
|
||||
use models;
|
||||
use models::{Token, Content, Data, Config};
|
||||
use models::{Token, Content, ContentInfo, DataInfo, ExtraInfo, Data};
|
||||
use serde_json;
|
||||
use serde_json::Value;
|
||||
use std::collections::HashMap;
|
||||
@ -130,35 +130,9 @@ impl<'a> Gog<'a> {
|
||||
skip_movies: bool,
|
||||
skip_games: bool)
|
||||
-> Result<(), GogError> {
|
||||
let configfiles = ConfigFiles::new();
|
||||
let mut config: Config = match configfiles.load("config.json") {
|
||||
Ok(value) => value,
|
||||
Err(_) => {
|
||||
error!("Configuration error, generating new one");
|
||||
|
||||
Config {
|
||||
game_storage: String::from(storage_path),
|
||||
movie_storage: String::from(storage_path_movies),
|
||||
content: HashMap::new(),
|
||||
data: HashMap::new(),
|
||||
extras: HashMap::new(),
|
||||
os_filters: os_filters.clone(),
|
||||
language_filters: language_filters.clone(),
|
||||
resolution_filters: resolution_filters.clone(),
|
||||
skip_movies: skip_movies,
|
||||
skip_games: skip_games,
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let content_ids = self.get_content_ids()?;
|
||||
|
||||
for content_id in content_ids {
|
||||
let content_hash_saved = match config.content.get(&content_id.to_string()) {
|
||||
Some(value) => value.clone(),
|
||||
None => u64::min_value(),
|
||||
};
|
||||
|
||||
let content = match self.get_content(content_id,
|
||||
&os_filters,
|
||||
&language_filters,
|
||||
@ -170,6 +144,20 @@ impl<'a> Gog<'a> {
|
||||
}
|
||||
};
|
||||
|
||||
let content_root = if content.is_movie {
|
||||
Path::new(storage_path_movies).join(&content.title)
|
||||
} else {
|
||||
Path::new(storage_path).join(&content.title)
|
||||
};
|
||||
|
||||
let content_info_path = Path::new(&content_root).join("info.json");
|
||||
|
||||
let content_info_saved =
|
||||
match ConfigFiles::load_from_path::<ContentInfo>(&content_info_path) {
|
||||
Ok(value) => value,
|
||||
Err(_) => ContentInfo::new(),
|
||||
};
|
||||
|
||||
if (content.is_movie && skip_movies) || (!content.is_movie && skip_games) {
|
||||
info!("filtering {}", content.title);
|
||||
continue;
|
||||
@ -177,18 +165,23 @@ impl<'a> Gog<'a> {
|
||||
|
||||
let content_hash = models::get_hash(&content);
|
||||
|
||||
if content_hash_saved == content_hash {
|
||||
if content_info_saved.hash == content_hash {
|
||||
info!("{} already up to date.", &content.title);
|
||||
continue;
|
||||
}
|
||||
|
||||
let content_root = if content.is_movie {
|
||||
Path::new(storage_path_movies).join(&content.title)
|
||||
} else {
|
||||
Path::new(storage_path).join(&content.title)
|
||||
fs::create_dir_all(&content_root)?;
|
||||
|
||||
let mut content_info = ContentInfo {
|
||||
hash: content_hash,
|
||||
id: content_id,
|
||||
title: content.title.clone(),
|
||||
cd_keys: content.cd_keys.clone(),
|
||||
data: HashMap::new(),
|
||||
extras: HashMap::new(),
|
||||
};
|
||||
|
||||
fs::create_dir_all(&content_root)?;
|
||||
ConfigFiles::save_to_path(&content_info_path, &content_info)?;
|
||||
|
||||
let key_root = content_root.join("keys");
|
||||
|
||||
@ -203,10 +196,11 @@ impl<'a> Gog<'a> {
|
||||
}
|
||||
|
||||
for data in content.data {
|
||||
let data_hash_saved = match config.data.get(&data.manual_url) {
|
||||
Some(value) => value.clone(),
|
||||
let data_hash_saved = match content_info_saved.data.get(&content_id.to_string()) {
|
||||
Some(value) => value.hash,
|
||||
None => u64::min_value(),
|
||||
};
|
||||
|
||||
let data_hash = models::get_hash(&data);
|
||||
|
||||
if data_hash_saved == data_hash {
|
||||
@ -220,15 +214,22 @@ impl<'a> Gog<'a> {
|
||||
let data_uri = format!("https://embed.gog.com{}", data.manual_url);
|
||||
|
||||
info!("downloading {} for {}...", &data.manual_url, &content.title);
|
||||
self.http_client.download(data_uri.as_str(), &data_root)?;
|
||||
let filename = self.http_client.download(data_uri.as_str(), &data_root)?;
|
||||
|
||||
config.data.insert(data.manual_url, data_hash);
|
||||
configfiles.save("config.json", &config)?;
|
||||
let data_info = DataInfo {
|
||||
hash: data_hash,
|
||||
filename: filename,
|
||||
language: data.language,
|
||||
};
|
||||
|
||||
content_info.data.insert(data.manual_url.clone(), data_info);
|
||||
ConfigFiles::save_to_path(&content_info_path, &content_info)?;
|
||||
}
|
||||
|
||||
for extra in content.extras {
|
||||
let extra_hash_saved = match config.extras.get(&extra.manual_url) {
|
||||
Some(value) => value.clone(),
|
||||
let extra_hash_saved = match content_info_saved.extras
|
||||
.get(&content_id.to_string()) {
|
||||
Some(value) => value.hash,
|
||||
None => u64::min_value(),
|
||||
};
|
||||
|
||||
@ -242,14 +243,17 @@ impl<'a> Gog<'a> {
|
||||
let extra_uri = format!("https://embed.gog.com{}", extra.manual_url);
|
||||
|
||||
info!("downloading {} for {}...", &extra.name, &content.title);
|
||||
self.http_client.download(extra_uri.as_str(), &content_root)?;
|
||||
let filename = self.http_client.download(extra_uri.as_str(), &content_root)?;
|
||||
|
||||
config.extras.insert(extra.manual_url, extra_hash);
|
||||
configfiles.save("config.json", &config)?;
|
||||
let extra_info = ExtraInfo {
|
||||
hash: extra_hash,
|
||||
filename: filename,
|
||||
name: extra.name,
|
||||
};
|
||||
|
||||
content_info.extras.insert(extra.manual_url.clone(), extra_info);
|
||||
ConfigFiles::save_to_path(&content_info_path, &content_info)?;
|
||||
}
|
||||
|
||||
config.content.insert(content_id.to_string(), content_hash);
|
||||
configfiles.save("config.json", &config)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
@ -390,6 +394,7 @@ impl<'a> Gog<'a> {
|
||||
debug!("found {:?}", &content_raw);
|
||||
|
||||
let mut content: Content = serde_json::from_str(&response)?;
|
||||
content.id = content_id;
|
||||
|
||||
let downloads = &content_raw["downloads"];
|
||||
|
||||
|
@ -131,7 +131,7 @@ impl Http {
|
||||
|
||||
/// Download a file to the specified folder without creating the folder.
|
||||
///
|
||||
/// The filename is taken from the last URI segment.
|
||||
/// The filename is taken from the last URI segment and returned in the result.
|
||||
/// # Example
|
||||
/// ```
|
||||
/// use http::Http;
|
||||
@ -145,7 +145,7 @@ impl Http {
|
||||
pub fn download(&mut self,
|
||||
download_uri: &str,
|
||||
download_dir: &PathBuf)
|
||||
-> Result<(), HttpError> {
|
||||
-> Result<String, HttpError> {
|
||||
let download_path_tmp = Path::new(download_dir.as_os_str()).join(".progress");
|
||||
let mut file_download = File::create(&download_path_tmp)?;
|
||||
|
||||
@ -185,6 +185,6 @@ impl Http {
|
||||
Err(error) => Err(HttpError::IOError(error)),
|
||||
}?;
|
||||
|
||||
Ok(())
|
||||
Ok(file_name.to_owned())
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ fn main() {
|
||||
env_logger::init().unwrap();
|
||||
|
||||
let matches = App::new("Gog Synchronizer")
|
||||
.version("0.2.4")
|
||||
.version("0.3.0")
|
||||
.author("Sebastian Hugentobler <sebastian@vanwa.ch>")
|
||||
.about("Synchronizes your gog library to a local folder.")
|
||||
.arg(Arg::with_name("game-storage")
|
||||
|
@ -30,6 +30,10 @@ fn timestamp() -> i64 {
|
||||
UTC::now().timestamp()
|
||||
}
|
||||
|
||||
fn default_list() -> Vec<String> {
|
||||
Vec::new()
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct Config {
|
||||
@ -37,12 +41,6 @@ pub struct Config {
|
||||
pub game_storage: String,
|
||||
#[serde(default)]
|
||||
pub movie_storage: String,
|
||||
#[serde(default = "default_map")]
|
||||
pub content: HashMap<String, u64>,
|
||||
#[serde(default = "default_map")]
|
||||
pub data: HashMap<String, u64>,
|
||||
#[serde(default = "default_map")]
|
||||
pub extras: HashMap<String, u64>,
|
||||
#[serde(default = "default_list")]
|
||||
pub os_filters: Vec<String>,
|
||||
#[serde(default = "default_list")]
|
||||
@ -55,22 +53,11 @@ pub struct Config {
|
||||
pub skip_games: bool,
|
||||
}
|
||||
|
||||
fn default_map() -> HashMap<String, u64> {
|
||||
HashMap::new()
|
||||
}
|
||||
|
||||
fn default_list() -> Vec<String> {
|
||||
Vec::new()
|
||||
}
|
||||
|
||||
impl Config {
|
||||
pub fn new() -> Config {
|
||||
Config {
|
||||
game_storage: String::from("."),
|
||||
movie_storage: String::from("."),
|
||||
content: HashMap::new(),
|
||||
data: HashMap::new(),
|
||||
extras: HashMap::new(),
|
||||
os_filters: Vec::new(),
|
||||
language_filters: Vec::new(),
|
||||
resolution_filters: Vec::new(),
|
||||
@ -84,6 +71,8 @@ impl Config {
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct Content {
|
||||
#[serde(skip_deserializing)]
|
||||
pub id: u64,
|
||||
pub title: String,
|
||||
#[serde(skip_deserializing)]
|
||||
#[serde(rename(deserialize = "cdKey"))]
|
||||
@ -101,6 +90,47 @@ impl fmt::Display for Content {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct ContentInfo {
|
||||
#[serde(skip_deserializing)]
|
||||
pub id: u64,
|
||||
pub hash: u64,
|
||||
pub title: String,
|
||||
pub cd_keys: BTreeMap<String, String>,
|
||||
pub data: HashMap<String, DataInfo>,
|
||||
pub extras: HashMap<String, ExtraInfo>,
|
||||
}
|
||||
|
||||
impl ContentInfo {
|
||||
pub fn new() -> ContentInfo {
|
||||
ContentInfo {
|
||||
id: 0,
|
||||
hash: 0,
|
||||
title: String::new(),
|
||||
cd_keys: BTreeMap::new(),
|
||||
data: HashMap::new(),
|
||||
extras: HashMap::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct DataInfo {
|
||||
pub hash: u64,
|
||||
pub filename: String,
|
||||
pub language: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct ExtraInfo {
|
||||
pub hash: u64,
|
||||
pub filename: String,
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
#[derive(Hash)]
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
Loading…
Reference in New Issue
Block a user