# GOG-SYNC
## **Please note that this is alpha software, you should not trust it.**

A small tool to synchronize the stuff in a [GOG](https://www.gog.com/) library
with a local folder.

It builds on the work of the [unofficial GOG API Documentation](https://gogapidocs.readthedocs.io/en/latest/).

This is the first time I am building something with rust, so beware :)

# Installation
Install from [crates.io](https://crates.io).

```
cargo install gog-sync
```

# Configuration
The configuration file is in the config folder as described by the xdg specification
with a prefix of `gog-sync`.

For example on macOS or Linux

```
~/.config/gog-sync/config.json
```

A bare configuration with default values before first use:

```
{
  "gameStorage": ".",
  "movieStorage": ".",
  "content": {},
  "data": {},
  "extras": {},
  "osFilters": [],
  "languageFilters": [],
  "skipMovies": false,
  "skipGames": false
}
```

- *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.
- *skipMovies*: Whether to skip movie content
- *skipGames*: Whether to skip game content

Valid values for *osFilter*:
- `linux`
- `mac`
- `windows`

Check on [gog.com](https://www.gog.com/) which languages are available.

An incomplete list of resolutions on gog:
- `DVD`
- `576p`
- `720p`
- `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`.

```
USAGE:
    gog-sync [FLAGS] [OPTIONS]

FLAGS:
    -h, --help           Prints help information
    -g, --skip-games     Skip game content.
    -f, --skip-movies    Skip movie content.
    -V, --version        Prints version information

OPTIONS:
    -s, --game-storage <FOLDER>     Sets the download folder (defaults to the working directory).
    -l, --language <FILTER>         Only sync files for this comma seperated list of languages.
    -m, --movie-storage <FOLDER>    Sets the download folder for movies (defaults to the working directory).
    -o, --os <FILTER>               Only sync files for this comma seperated list of operating systems.
                                    Valid values are 'linux', 'mac'  and 'windows'.
    -r, --resolution <FILTER>       Only sync movies for this comma seperated list of resolutions.
```

---

```
gog-sync
```

Normal invocation, uses the current working directory as storage if not configured
otherwise.

---

```
gog-sync -s ~/Downloads/games
```

Overwrite the default or configured storage path.

---

```
gog-sync -l english -o linux,windows
```

Only sync english installers and only for linux and windows systems.
