From 3c5f23bd32e0f9d1351275b97c618c7325835a76 Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <win10@list.ru>
Date: Thu, 19 Mar 2020 12:10:13 +0400
Subject: [PATCH] Fixed repo structure. Removed GTK. Description: - All helpers
 moved into lib crate. - All CLI logic moved in bin. - Removed GTK dependency.
 - Screen resolution now resolving with X11-API.

Signed-off-by: Pavel Kirilin <win10@list.ru>
---
 Cargo.lock                                  | 1308 +++++++++++--------
 Cargo.toml                                  |   81 +-
 PKGBUILD                                    |    3 +-
 {src => bin}/cli.rs                         |   10 -
 bin/cli_modes.rs                            |   42 +
 {src => bin}/logging.rs                     |    2 +-
 bin/main.rs                                 |   27 +
 {src => lib}/background.rs                  |   15 +-
 {src => lib}/config/image_processors.rs     |    0
 {src => lib}/config/logger.rs               |    0
 {src => lib}/config/mod.rs                  |    0
 {src => lib}/dbus_interface/main_dbus.rs    |    1 +
 {src => lib}/dbus_interface/media_player.rs |    1 +
 {src => lib}/dbus_interface/mod.rs          |    1 +
 {src => lib/dbus_interface}/player_dbus.rs  |   21 +-
 {src => lib}/dbus_interface/statuses.rs     |    0
 lib/display.rs                              |   26 +
 {src => lib}/img_processors/blur.rs         |    0
 {src => lib}/img_processors/border.rs       |    0
 {src => lib}/img_processors/crop.rs         |    0
 {src => lib}/img_processors/mod.rs          |    0
 {src => lib}/img_processors/none.rs         |    0
 {src => lib}/img_processors/scale.rs        |    0
 lib/lib.rs                                  |   16 +
 {src => lib}/result.rs                      |   19 +-
 src/display.rs                              |   54 -
 src/main.rs                                 |   43 -
 systemd/music_bg.service                    |    2 +-
 28 files changed, 893 insertions(+), 779 deletions(-)
 rename {src => bin}/cli.rs (87%)
 create mode 100644 bin/cli_modes.rs
 rename {src => bin}/logging.rs (96%)
 create mode 100644 bin/main.rs
 rename {src => lib}/background.rs (74%)
 rename {src => lib}/config/image_processors.rs (100%)
 rename {src => lib}/config/logger.rs (100%)
 rename {src => lib}/config/mod.rs (100%)
 rename {src => lib}/dbus_interface/main_dbus.rs (99%)
 rename {src => lib}/dbus_interface/media_player.rs (99%)
 rename {src => lib}/dbus_interface/mod.rs (74%)
 rename {src => lib/dbus_interface}/player_dbus.rs (85%)
 rename {src => lib}/dbus_interface/statuses.rs (100%)
 create mode 100644 lib/display.rs
 rename {src => lib}/img_processors/blur.rs (100%)
 rename {src => lib}/img_processors/border.rs (100%)
 rename {src => lib}/img_processors/crop.rs (100%)
 rename {src => lib}/img_processors/mod.rs (100%)
 rename {src => lib}/img_processors/none.rs (100%)
 rename {src => lib}/img_processors/scale.rs (100%)
 create mode 100644 lib/lib.rs
 rename {src => lib}/result.rs (81%)
 delete mode 100644 src/display.rs
 delete mode 100644 src/main.rs

diff --git a/Cargo.lock b/Cargo.lock
index e8c82f9..c711a27 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -36,32 +36,6 @@ version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
 
-[[package]]
-name = "atk"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "444daefa55f229af145ea58d77efd23725024ee1f6f3102743709aa6b18c663e"
-dependencies = [
- "atk-sys",
- "bitflags",
- "glib",
- "glib-sys",
- "gobject-sys",
- "libc",
-]
-
-[[package]]
-name = "atk-sys"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e552c1776737a4c80110d06b36d099f47c727335f9aaa5d942a72b6863a8ec6f"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "pkg-config",
-]
-
 [[package]]
 name = "atty"
 version = "0.2.14"
@@ -73,6 +47,12 @@ dependencies = [
  "winapi 0.3.8",
 ]
 
+[[package]]
+name = "autocfg"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
+
 [[package]]
 name = "autocfg"
 version = "1.0.0"
@@ -93,14 +73,23 @@ dependencies = [
 
 [[package]]
 name = "backtrace-sys"
-version = "0.1.33"
+version = "0.1.34"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e17b52e737c40a7d75abca20b29a19a0eb7ba9fc72c5a72dd282a0a3c2c0dc35"
+checksum = "ca797db0057bae1a7aa2eef3283a874695455cecf08a43bfb8507ee0ebc1ed69"
 dependencies = [
  "cc",
  "libc",
 ]
 
+[[package]]
+name = "base64"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+dependencies = [
+ "byteorder",
+]
+
 [[package]]
 name = "base64"
 version = "0.11.0"
@@ -144,43 +133,20 @@ checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
 
 [[package]]
 name = "bytes"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
-
-[[package]]
-name = "c2-chacha"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb"
-dependencies = [
- "ppv-lite86",
-]
-
-[[package]]
-name = "cairo-rs"
-version = "0.8.1"
+version = "0.4.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "157049ba9618aa3a61c39d5d785102c04d3b1f40632a706c621a9aedc21e6084"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
 dependencies = [
- "bitflags",
- "cairo-sys-rs",
- "glib",
- "glib-sys",
- "gobject-sys",
- "libc",
+ "byteorder",
+ "either",
+ "iovec",
 ]
 
 [[package]]
-name = "cairo-sys-rs"
-version = "0.9.2"
+name = "bytes"
+version = "0.5.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff65ba02cac715be836f63429ab00a767d48336efc5497c5637afb53b4f14d63"
-dependencies = [
- "glib-sys",
- "libc",
- "pkg-config",
-]
+checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
 
 [[package]]
 name = "cc"
@@ -202,6 +168,7 @@ checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
 dependencies = [
  "num-integer",
  "num-traits",
+ "serde",
  "time",
 ]
 
@@ -220,6 +187,15 @@ dependencies = [
  "vec_map",
 ]
 
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
 [[package]]
 name = "color_quant"
 version = "1.0.1"
@@ -252,6 +228,34 @@ dependencies = [
  "custom_derive",
 ]
 
+[[package]]
+name = "cookie"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
+dependencies = [
+ "time",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "cookie_store"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c"
+dependencies = [
+ "cookie",
+ "failure",
+ "idna 0.1.5",
+ "log",
+ "publicsuffix",
+ "serde",
+ "serde_json",
+ "time",
+ "try_from",
+ "url 1.7.2",
+]
+
 [[package]]
 name = "core-foundation"
 version = "0.7.0"
@@ -294,7 +298,7 @@ version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
  "cfg-if",
  "crossbeam-utils",
  "lazy_static",
@@ -319,7 +323,7 @@ version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
  "cfg-if",
  "lazy_static",
 ]
@@ -330,44 +334,11 @@ version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9"
 
-[[package]]
-name = "darling"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ebfa6e6eb98ba452aaea6415e529e4890ab09a36aaf03c71146acf9f0eab89f6"
-dependencies = [
- "darling_core",
- "darling_macro",
-]
-
-[[package]]
-name = "darling_core"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8af196b04f843cd6f1d979c2b3697de0d33050892662efba69112ee7b1fc968"
-dependencies = [
- "ident_case",
- "proc-macro2 0.3.8",
- "quote 0.5.2",
- "syn 0.13.11",
-]
-
-[[package]]
-name = "darling_macro"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0619148430511a3ecf5e52752a9c948879207ab3096276a5a9ecf8b1e7fbe010"
-dependencies = [
- "darling_core",
- "quote 0.5.2",
- "syn 0.13.11",
-]
-
 [[package]]
 name = "dbus"
-version = "0.8.1"
+version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fd043051adb767dd40f869e6034c8ea4d3a0a719e78d4058f705a8038649059"
+checksum = "38f8875bb7afbc20dec12db09e18af3dcbd672b08592d2932950326a6437c616"
 dependencies = [
  "libc",
  "libdbus-sys",
@@ -383,17 +354,6 @@ dependencies = [
  "byteorder",
 ]
 
-[[package]]
-name = "derive_is_enum_variant"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0ac8859845146979953797f03cc5b282fb4396891807cdb3d04929a88418197"
-dependencies = [
- "heck",
- "quote 0.3.15",
- "syn 0.11.11",
-]
-
 [[package]]
 name = "dirs"
 version = "2.0.2"
@@ -438,21 +398,14 @@ dependencies = [
 ]
 
 [[package]]
-name = "enum-kinds"
-version = "0.4.1"
+name = "error-chain"
+version = "0.12.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0f21c374dea848c19071b1504ca5ad03c9ad0d03d2e509e68f6623b8fcac4b5"
+checksum = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd"
 dependencies = [
- "quote 0.4.2",
- "syn 0.12.15",
+ "version_check",
 ]
 
-[[package]]
-name = "error-chain"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3"
-
 [[package]]
 name = "failure"
 version = "0.1.7"
@@ -469,9 +422,9 @@ version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
+ "proc-macro2",
+ "quote",
+ "syn",
  "synstructure",
 ]
 
@@ -486,6 +439,18 @@ dependencies = [
  "log",
 ]
 
+[[package]]
+name = "flate2"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42"
+dependencies = [
+ "cfg-if",
+ "crc32fast",
+ "libc",
+ "miniz_oxide",
+]
+
 [[package]]
 name = "fnv"
 version = "1.0.6"
@@ -508,25 +473,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
 
 [[package]]
-name = "from_variants"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b7b3795d7bd0d40e33224cbb46adb76a88b72c52143e7bcaad33bd8b6e89e32"
-dependencies = [
- "from_variants_impl",
-]
-
-[[package]]
-name = "from_variants_impl"
-version = "0.4.0"
+name = "fuchsia-cprng"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54d084040e9757536fee724381a270bc650a9ca05dcf63a0ad3aaecb1e5b9c0"
-dependencies = [
- "darling",
- "error-chain",
- "quote 0.5.2",
- "syn 0.13.11",
-]
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
 
 [[package]]
 name = "fuchsia-zircon"
@@ -544,6 +494,12 @@ version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
 
+[[package]]
+name = "futures"
+version = "0.1.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"
+
 [[package]]
 name = "futures-channel"
 version = "0.3.4"
@@ -560,14 +516,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a"
 
 [[package]]
-name = "futures-executor"
-version = "0.3.4"
+name = "futures-cpupool"
+version = "0.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba"
+checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
 dependencies = [
- "futures-core",
- "futures-task",
- "futures-util",
+ "futures",
+ "num_cpus",
 ]
 
 [[package]]
@@ -576,18 +531,6 @@ version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6"
 
-[[package]]
-name = "futures-macro"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7"
-dependencies = [
- "proc-macro-hack",
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
-]
-
 [[package]]
 name = "futures-sink"
 version = "0.3.4"
@@ -608,77 +551,20 @@ checksum = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5"
 dependencies = [
  "futures-core",
  "futures-io",
- "futures-macro",
  "futures-task",
  "memchr",
  "pin-utils",
- "proc-macro-hack",
- "proc-macro-nested",
  "slab",
 ]
 
 [[package]]
-name = "gdk"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fbe5e8772fc0865c52460cdd7a59d7d47700f44d9809d1dd00eecceb769a7589"
-dependencies = [
- "bitflags",
- "cairo-rs",
- "cairo-sys-rs",
- "gdk-pixbuf",
- "gdk-sys",
- "gio",
- "gio-sys",
- "glib",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pango",
-]
-
-[[package]]
-name = "gdk-pixbuf"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e248220c46b329b097d4b158d2717f8c688f16dd76d0399ace82b3e98062bdd7"
-dependencies = [
- "gdk-pixbuf-sys",
- "gio",
- "gio-sys",
- "glib",
- "glib-sys",
- "gobject-sys",
- "libc",
-]
-
-[[package]]
-name = "gdk-pixbuf-sys"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0"
-dependencies = [
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pkg-config",
-]
-
-[[package]]
-name = "gdk-sys"
-version = "0.9.1"
+name = "gethostname"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6adf679e91d1bff0c06860287f80403e7db54c2d2424dce0a470023b56c88fbb"
+checksum = "e692e296bfac1d2533ef168d0b60ff5897b8b70a4009276834014dd8924cc028"
 dependencies = [
- "cairo-sys-rs",
- "gdk-pixbuf-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
  "libc",
- "pango-sys",
- "pkg-config",
+ "winapi 0.3.8",
 ]
 
 [[package]]
@@ -703,118 +589,21 @@ dependencies = [
 ]
 
 [[package]]
-name = "gio"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0cd10f9415cce39b53f8024bf39a21f84f8157afa52da53837b102e585a296a5"
-dependencies = [
- "bitflags",
- "futures-channel",
- "futures-core",
- "futures-io",
- "futures-util",
- "gio-sys",
- "glib",
- "glib-sys",
- "gobject-sys",
- "lazy_static",
- "libc",
-]
-
-[[package]]
-name = "gio-sys"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911"
-dependencies = [
- "glib-sys",
- "gobject-sys",
- "libc",
- "pkg-config",
-]
-
-[[package]]
-name = "glib"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40fb573a09841b6386ddf15fd4bc6655b4f5b106ca962f57ecaecde32a0061c0"
-dependencies = [
- "bitflags",
- "futures-channel",
- "futures-core",
- "futures-executor",
- "futures-task",
- "futures-util",
- "glib-sys",
- "gobject-sys",
- "lazy_static",
- "libc",
-]
-
-[[package]]
-name = "glib-sys"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95856f3802f446c05feffa5e24859fe6a183a7cb849c8449afc35c86b1e316e2"
-dependencies = [
- "libc",
- "pkg-config",
-]
-
-[[package]]
-name = "gobject-sys"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31d1a804f62034eccf370006ccaef3708a71c31d561fee88564abe71177553d9"
-dependencies = [
- "glib-sys",
- "libc",
- "pkg-config",
-]
-
-[[package]]
-name = "gtk"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87e1e8d70290239c668594002d1b174fcc7d7ef5d26670ee141490ede8facf8f"
-dependencies = [
- "atk",
- "bitflags",
- "cairo-rs",
- "cairo-sys-rs",
- "cc",
- "gdk",
- "gdk-pixbuf",
- "gdk-pixbuf-sys",
- "gdk-sys",
- "gio",
- "gio-sys",
- "glib",
- "glib-sys",
- "gobject-sys",
- "gtk-sys",
- "lazy_static",
- "libc",
- "pango",
- "pango-sys",
-]
-
-[[package]]
-name = "gtk-sys"
-version = "0.9.2"
+name = "h2"
+version = "0.1.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53def660c7b48b00b510c81ef2d2fbd3c570f1527081d8d7947f471513e1a4c1"
+checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"
 dependencies = [
- "atk-sys",
- "cairo-sys-rs",
- "gdk-pixbuf-sys",
- "gdk-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "libc",
- "pango-sys",
- "pkg-config",
+ "byteorder",
+ "bytes 0.4.12",
+ "fnv",
+ "futures",
+ "http 0.1.21",
+ "indexmap",
+ "log",
+ "slab",
+ "string",
+ "tokio-io",
 ]
 
 [[package]]
@@ -823,16 +612,16 @@ version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9d5c295d1c0c68e4e42003d75f908f5e16a1edd1cbe0b0d02e4dc2006a384f47"
 dependencies = [
- "bytes",
+ "bytes 0.5.4",
  "fnv",
  "futures-core",
  "futures-sink",
  "futures-util",
- "http",
+ "http 0.2.0",
  "indexmap",
  "log",
  "slab",
- "tokio",
+ "tokio 0.2.13",
  "tokio-util",
 ]
 
@@ -854,25 +643,48 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "http"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0"
+dependencies = [
+ "bytes 0.4.12",
+ "fnv",
+ "itoa",
+]
+
 [[package]]
 name = "http"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b708cc7f06493459026f53b9a61a7a121a5d1ec6238dee58ea4941132b30156b"
 dependencies = [
- "bytes",
+ "bytes 0.5.4",
  "fnv",
  "itoa",
 ]
 
+[[package]]
+name = "http-body"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"
+dependencies = [
+ "bytes 0.4.12",
+ "futures",
+ "http 0.1.21",
+ "tokio-buf",
+]
+
 [[package]]
 name = "http-body"
 version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
 dependencies = [
- "bytes",
- "http",
+ "bytes 0.5.4",
+ "http 0.2.0",
 ]
 
 [[package]]
@@ -881,28 +693,71 @@ version = "1.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9"
 
+[[package]]
+name = "hyper"
+version = "0.12.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6"
+dependencies = [
+ "bytes 0.4.12",
+ "futures",
+ "futures-cpupool",
+ "h2 0.1.26",
+ "http 0.1.21",
+ "http-body 0.1.0",
+ "httparse",
+ "iovec",
+ "itoa",
+ "log",
+ "net2",
+ "rustc_version",
+ "time",
+ "tokio 0.1.22",
+ "tokio-buf",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer",
+ "want 0.2.0",
+]
+
 [[package]]
 name = "hyper"
 version = "0.13.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e7b15203263d1faa615f9337d79c1d37959439dc46c2b4faab33286fadc2a1c5"
 dependencies = [
- "bytes",
+ "bytes 0.5.4",
  "futures-channel",
  "futures-core",
  "futures-util",
- "h2",
- "http",
- "http-body",
+ "h2 0.2.2",
+ "http 0.2.0",
+ "http-body 0.3.1",
  "httparse",
  "itoa",
  "log",
  "net2",
  "pin-project",
  "time",
- "tokio",
+ "tokio 0.2.13",
  "tower-service",
- "want",
+ "want 0.3.0",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f"
+dependencies = [
+ "bytes 0.4.12",
+ "futures",
+ "hyper 0.12.35",
+ "native-tls",
+ "tokio-io",
 ]
 
 [[package]]
@@ -911,18 +766,23 @@ version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3adcd308402b9553630734e9c36b77a7e48b3821251ca2493e8cd596763aafaa"
 dependencies = [
- "bytes",
- "hyper",
+ "bytes 0.5.4",
+ "hyper 0.13.3",
  "native-tls",
- "tokio",
+ "tokio 0.2.13",
  "tokio-tls",
 ]
 
 [[package]]
-name = "ident_case"
-version = "1.0.1"
+name = "idna"
+version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
 
 [[package]]
 name = "idna"
@@ -937,9 +797,9 @@ dependencies = [
 
 [[package]]
 name = "image"
-version = "0.23.1"
+version = "0.23.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "403f0c29211dc50a78eb53eeeae87945d44cb63071881834212f36677fccb2b4"
+checksum = "9062b90712d25bc6bb165d110aa59c6b47c849246e341e7b86a98daff9d49f60"
 dependencies = [
  "bytemuck",
  "byteorder",
@@ -963,7 +823,7 @@ dependencies = [
  "image",
  "itertools",
  "num 0.2.1",
- "rand",
+ "rand 0.7.3",
  "rand_distr",
  "rayon",
  "rulinalg",
@@ -976,7 +836,7 @@ version = "1.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
 ]
 
 [[package]]
@@ -1049,9 +909,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libc"
-version = "0.2.67"
+version = "0.2.68"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018"
+checksum = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0"
 
 [[package]]
 name = "libdbus-sys"
@@ -1062,6 +922,15 @@ dependencies = [
  "pkg-config",
 ]
 
+[[package]]
+name = "lock_api"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b"
+dependencies = [
+ "scopeguard",
+]
+
 [[package]]
 name = "log"
 version = "0.4.8"
@@ -1106,11 +975,11 @@ checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
 
 [[package]]
 name = "memoffset"
-version = "0.5.3"
+version = "0.5.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9"
+checksum = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8"
 dependencies = [
- "rustc_version",
+ "autocfg 1.0.0",
 ]
 
 [[package]]
@@ -1169,20 +1038,6 @@ dependencies = [
  "ws2_32-sys",
 ]
 
-[[package]]
-name = "mpris"
-version = "2.0.0-rc2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "195e67e2b467af5146f517b0d988b5894e425a77c52a9bb5a065513ef3c2e711"
-dependencies = [
- "dbus",
- "derive_is_enum_variant",
- "enum-kinds",
- "failure",
- "failure_derive",
- "from_variants",
-]
-
 [[package]]
 name = "music_bg"
 version = "0.1.0"
@@ -1193,20 +1048,31 @@ dependencies = [
  "failure",
  "failure_derive",
  "fern",
- "gdk",
- "gio",
- "glib",
- "gtk",
  "image",
  "imageproc",
  "log",
- "mpris",
+ "musicbrainz_rs",
  "read_color",
- "reqwest",
+ "reqwest 0.10.4",
  "serde",
  "serde_derive",
  "structopt",
  "toml",
+ "x11rb",
+]
+
+[[package]]
+name = "musicbrainz_rs"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15b931ae3b4545e7061fed9d7dcfb545bfffcbb23b7e1adca745ffbd2f0d917d"
+dependencies = [
+ "chrono",
+ "lazy_static",
+ "reqwest 0.9.24",
+ "serde",
+ "serde_derive",
+ "serde_json",
 ]
 
 [[package]]
@@ -1269,7 +1135,7 @@ version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
  "num-integer",
  "num-traits",
 ]
@@ -1280,7 +1146,7 @@ version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
  "num-traits",
 ]
 
@@ -1290,7 +1156,7 @@ version = "0.1.42"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
  "num-traits",
 ]
 
@@ -1300,18 +1166,18 @@ version = "0.1.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
  "num-integer",
  "num-traits",
 ]
 
 [[package]]
 name = "num-rational"
-version = "0.2.3"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3"
+checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
  "num-bigint",
  "num-integer",
  "num-traits",
@@ -1323,7 +1189,7 @@ version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
 ]
 
 [[package]]
@@ -1362,7 +1228,7 @@ version = "0.9.54"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1024c0a59774200a555087a6da3f253a9095a5f344e353b212ac4c8b8e450986"
 dependencies = [
- "autocfg",
+ "autocfg 1.0.0",
  "cc",
  "libc",
  "pkg-config",
@@ -1379,32 +1245,37 @@ dependencies = [
 ]
 
 [[package]]
-name = "pango"
-version = "0.8.0"
+name = "parking_lot"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e9c6b728f1be8edb5f9f981420b651d5ea30bdb9de89f1f1262d0084a020577"
+checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
 dependencies = [
- "bitflags",
- "glib",
- "glib-sys",
- "gobject-sys",
- "lazy_static",
- "libc",
- "pango-sys",
+ "lock_api",
+ "parking_lot_core",
+ "rustc_version",
 ]
 
 [[package]]
-name = "pango-sys"
-version = "0.9.1"
+name = "parking_lot_core"
+version = "0.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d"
+checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
 dependencies = [
- "glib-sys",
- "gobject-sys",
+ "cfg-if",
+ "cloudabi",
  "libc",
- "pkg-config",
+ "redox_syscall",
+ "rustc_version",
+ "smallvec 0.6.13",
+ "winapi 0.3.8",
 ]
 
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
 [[package]]
 name = "percent-encoding"
 version = "2.1.0"
@@ -1426,9 +1297,9 @@ version = "0.4.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1474,9 +1345,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e7959c6467d962050d639361f7703b2051c43036d03493c36f01d440fdd3138a"
 dependencies = [
  "proc-macro-error-attr",
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
+ "proc-macro2",
+ "quote",
+ "syn",
  "version_check",
 ]
 
@@ -1486,138 +1357,198 @@ version = "0.4.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e4002d9f55991d5e019fb940a90e1a95eb80c24e77cb2462dd4dc869604d543a"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
+ "proc-macro2",
+ "quote",
+ "syn",
  "syn-mid",
  "version_check",
 ]
 
 [[package]]
-name = "proc-macro-hack"
-version = "0.5.11"
+name = "proc-macro2"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5"
+checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
+ "unicode-xid",
 ]
 
 [[package]]
-name = "proc-macro-nested"
-version = "0.1.3"
+name = "publicsuffix"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b"
+dependencies = [
+ "error-chain",
+ "idna 0.2.0",
+ "lazy_static",
+ "regex",
+ "url 2.1.1",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e"
+checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
+dependencies = [
+ "proc-macro2",
+]
 
 [[package]]
-name = "proc-macro2"
-version = "0.2.3"
+name = "rand"
+version = "0.6.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd07deb3c6d1d9ff827999c7f9b04cdfd66b1b17ae508e14fe47b620f2282ae0"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
 dependencies = [
- "unicode-xid 0.1.0",
+ "autocfg 0.1.7",
+ "libc",
+ "rand_chacha 0.1.1",
+ "rand_core 0.4.2",
+ "rand_hc 0.1.0",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi 0.3.8",
 ]
 
 [[package]]
-name = "proc-macro2"
-version = "0.3.8"
+name = "rand"
+version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
 dependencies = [
- "unicode-xid 0.1.0",
+ "getrandom",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc 0.2.0",
 ]
 
 [[package]]
-name = "proc-macro2"
-version = "1.0.9"
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.7",
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435"
-dependencies = [
- "unicode-xid 0.2.0",
-]
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
 
 [[package]]
-name = "quote"
-version = "0.3.15"
+name = "rand_core"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
 
 [[package]]
-name = "quote"
-version = "0.4.2"
+name = "rand_distr"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1eca14c727ad12702eb4b6bfb5a232287dcf8385cb8ca83a3eeaf6519c44c408"
+checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2"
 dependencies = [
- "proc-macro2 0.2.3",
+ "rand 0.7.3",
 ]
 
 [[package]]
-name = "quote"
-version = "0.5.2"
+name = "rand_hc"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
 dependencies = [
- "proc-macro2 0.3.8",
+ "rand_core 0.3.1",
 ]
 
 [[package]]
-name = "quote"
-version = "1.0.3"
+name = "rand_hc"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
 dependencies = [
- "proc-macro2 1.0.9",
+ "rand_core 0.5.1",
 ]
 
 [[package]]
-name = "rand"
-version = "0.7.3"
+name = "rand_isaac"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
 dependencies = [
- "getrandom",
- "libc",
- "rand_chacha",
- "rand_core",
- "rand_hc",
+ "rand_core 0.3.1",
 ]
 
 [[package]]
-name = "rand_chacha"
-version = "0.2.1"
+name = "rand_jitter"
+version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
 dependencies = [
- "c2-chacha",
- "rand_core",
+ "libc",
+ "rand_core 0.4.2",
+ "winapi 0.3.8",
 ]
 
 [[package]]
-name = "rand_core"
-version = "0.5.1"
+name = "rand_os"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
 dependencies = [
- "getrandom",
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi 0.3.8",
 ]
 
 [[package]]
-name = "rand_distr"
-version = "0.2.2"
+name = "rand_pcg"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
 dependencies = [
- "rand",
+ "autocfg 0.1.7",
+ "rand_core 0.4.2",
 ]
 
 [[package]]
-name = "rand_hc"
-version = "0.2.0"
+name = "rand_xorshift"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
 dependencies = [
- "rand_core",
+ "rand_core 0.3.1",
 ]
 
 [[package]]
@@ -1650,6 +1581,15 @@ dependencies = [
  "num_cpus",
 ]
 
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
 [[package]]
 name = "read_color"
 version = "1.0.0"
@@ -1673,6 +1613,21 @@ dependencies = [
  "rust-argon2",
 ]
 
+[[package]]
+name = "regex"
+version = "1.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8900ebc1363efa7ea1c399ccc32daed870b4002651e0bed86e72d501ebbe0048"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
+
 [[package]]
 name = "remove_dir_all"
 version = "0.5.2"
@@ -1682,35 +1637,69 @@ dependencies = [
  "winapi 0.3.8",
 ]
 
+[[package]]
+name = "reqwest"
+version = "0.9.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab"
+dependencies = [
+ "base64 0.10.1",
+ "bytes 0.4.12",
+ "cookie",
+ "cookie_store",
+ "encoding_rs",
+ "flate2",
+ "futures",
+ "http 0.1.21",
+ "hyper 0.12.35",
+ "hyper-tls 0.3.2",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded 0.5.5",
+ "time",
+ "tokio 0.1.22",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-threadpool",
+ "tokio-timer",
+ "url 1.7.2",
+ "uuid",
+ "winreg",
+]
+
 [[package]]
 name = "reqwest"
 version = "0.10.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2"
 dependencies = [
- "base64",
- "bytes",
+ "base64 0.11.0",
+ "bytes 0.5.4",
  "encoding_rs",
  "futures-core",
  "futures-util",
- "http",
- "http-body",
- "hyper",
- "hyper-tls",
+ "http 0.2.0",
+ "http-body 0.3.1",
+ "hyper 0.13.3",
+ "hyper-tls 0.4.1",
  "js-sys",
  "lazy_static",
  "log",
  "mime",
  "mime_guess",
  "native-tls",
- "percent-encoding",
+ "percent-encoding 2.1.0",
  "pin-project-lite",
  "serde",
- "serde_urlencoded",
+ "serde_urlencoded 0.6.1",
  "time",
- "tokio",
+ "tokio 0.2.13",
  "tokio-tls",
- "url",
+ "url 2.1.1",
  "wasm-bindgen",
  "wasm-bindgen-futures",
  "web-sys",
@@ -1733,7 +1722,7 @@ version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
 dependencies = [
- "base64",
+ "base64 0.11.0",
  "blake2b_simd",
  "constant_time_eq",
  "crossbeam-utils",
@@ -1768,9 +1757,9 @@ dependencies = [
 
 [[package]]
 name = "ryu"
-version = "1.0.2"
+version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
+checksum = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
 
 [[package]]
 name = "schannel"
@@ -1833,19 +1822,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 
 [[package]]
 name = "serde"
-version = "1.0.104"
+version = "1.0.105"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449"
+checksum = "e707fbbf255b8fc8c3b99abb91e7257a622caeb20a9818cbadbeeede4e0932ff"
+dependencies = [
+ "serde_derive",
+]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.104"
+version = "1.0.105"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64"
+checksum = "ac5d00fc561ba2724df6758a17de23df5914f20e41cb00f94d5b7ae42fffaff8"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1859,6 +1851,18 @@ dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "serde_urlencoded"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a"
+dependencies = [
+ "dtoa",
+ "itoa",
+ "serde",
+ "url 1.7.2",
+]
+
 [[package]]
 name = "serde_urlencoded"
 version = "0.6.1"
@@ -1868,7 +1872,7 @@ dependencies = [
  "dtoa",
  "itoa",
  "serde",
- "url",
+ "url 2.1.1",
 ]
 
 [[package]]
@@ -1877,6 +1881,15 @@ version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
 
+[[package]]
+name = "smallvec"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"
+dependencies = [
+ "maybe-uninit",
+]
+
 [[package]]
 name = "smallvec"
 version = "1.2.0"
@@ -1892,6 +1905,15 @@ dependencies = [
  "byteorder",
 ]
 
+[[package]]
+name = "string"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d"
+dependencies = [
+ "bytes 0.4.12",
+]
+
 [[package]]
 name = "strsim"
 version = "0.8.0"
@@ -1900,9 +1922,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
 
 [[package]]
 name = "structopt"
-version = "0.3.11"
+version = "0.3.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fe43617218c0805c6eb37160119dc3c548110a67786da7218d1c6555212f073"
+checksum = "c8faa2719539bbe9d77869bfb15d4ee769f99525e707931452c97b693b3f159d"
 dependencies = [
  "clap",
  "lazy_static",
@@ -1911,48 +1933,15 @@ dependencies = [
 
 [[package]]
 name = "structopt-derive"
-version = "0.4.4"
+version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6e79c80e0f4efd86ca960218d4e056249be189ff1c42824dcd9a7f51a56f0bd"
+checksum = "3f88b8e18c69496aad6f9ddf4630dd7d585bcaf765786cb415b9aec2fe5a0430"
 dependencies = [
  "heck",
  "proc-macro-error",
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
-]
-
-[[package]]
-name = "syn"
-version = "0.11.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
-dependencies = [
- "quote 0.3.15",
- "synom",
- "unicode-xid 0.0.4",
-]
-
-[[package]]
-name = "syn"
-version = "0.12.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c97c05b8ebc34ddd6b967994d5c6e9852fa92f8b82b3858c39451f97346dcce5"
-dependencies = [
- "proc-macro2 0.2.3",
- "quote 0.4.2",
- "unicode-xid 0.1.0",
-]
-
-[[package]]
-name = "syn"
-version = "0.13.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b"
-dependencies = [
- "proc-macro2 0.3.8",
- "quote 0.5.2",
- "unicode-xid 0.1.0",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1961,9 +1950,9 @@ version = "1.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "unicode-xid 0.2.0",
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
 ]
 
 [[package]]
@@ -1972,18 +1961,9 @@ version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
-]
-
-[[package]]
-name = "synom"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
-dependencies = [
- "unicode-xid 0.0.4",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1992,10 +1972,10 @@ version = "0.12.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
- "unicode-xid 0.2.0",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
 ]
 
 [[package]]
@@ -2006,7 +1986,7 @@ checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
 dependencies = [
  "cfg-if",
  "libc",
- "rand",
+ "rand 0.7.3",
  "redox_syscall",
  "remove_dir_all",
  "winapi 0.3.8",
@@ -2043,13 +2023,32 @@ dependencies = [
  "winapi 0.3.8",
 ]
 
+[[package]]
+name = "tokio"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
+dependencies = [
+ "bytes 0.4.12",
+ "futures",
+ "mio",
+ "num_cpus",
+ "tokio-current-thread",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer",
+]
+
 [[package]]
 name = "tokio"
 version = "0.2.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0fa5e81d6bc4e67fe889d5783bd2a128ab2e0cfa487e0be16b6a8d177b101616"
 dependencies = [
- "bytes",
+ "bytes 0.5.4",
  "fnv",
  "iovec",
  "lazy_static",
@@ -2060,6 +2059,120 @@ dependencies = [
  "slab",
 ]
 
+[[package]]
+name = "tokio-buf"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46"
+dependencies = [
+ "bytes 0.4.12",
+ "either",
+ "futures",
+]
+
+[[package]]
+name = "tokio-current-thread"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
+dependencies = [
+ "futures",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-executor"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+dependencies = [
+ "bytes 0.4.12",
+ "futures",
+ "log",
+]
+
+[[package]]
+name = "tokio-reactor"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+ "lazy_static",
+ "log",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "slab",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-sync",
+]
+
+[[package]]
+name = "tokio-sync"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
+dependencies = [
+ "fnv",
+ "futures",
+]
+
+[[package]]
+name = "tokio-tcp"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
+dependencies = [
+ "bytes 0.4.12",
+ "futures",
+ "iovec",
+ "mio",
+ "tokio-io",
+ "tokio-reactor",
+]
+
+[[package]]
+name = "tokio-threadpool"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-queue",
+ "crossbeam-utils",
+ "futures",
+ "lazy_static",
+ "log",
+ "num_cpus",
+ "slab",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-timer"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
+dependencies = [
+ "crossbeam-utils",
+ "futures",
+ "slab",
+ "tokio-executor",
+]
+
 [[package]]
 name = "tokio-tls"
 version = "0.3.0"
@@ -2067,7 +2180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7bde02a3a5291395f59b06ec6945a3077602fac2b07eeeaf0dee2122f3619828"
 dependencies = [
  "native-tls",
- "tokio",
+ "tokio 0.2.13",
 ]
 
 [[package]]
@@ -2076,12 +2189,12 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930"
 dependencies = [
- "bytes",
+ "bytes 0.5.4",
  "futures-core",
  "futures-sink",
  "log",
  "pin-project-lite",
- "tokio",
+ "tokio 0.2.13",
 ]
 
 [[package]]
@@ -2105,6 +2218,15 @@ version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382"
 
+[[package]]
+name = "try_from"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b"
+dependencies = [
+ "cfg-if",
+]
+
 [[package]]
 name = "unicase"
 version = "2.6.0"
@@ -2129,7 +2251,7 @@ version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
 dependencies = [
- "smallvec",
+ "smallvec 1.2.0",
 ]
 
 [[package]]
@@ -2146,21 +2268,20 @@ checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
 
 [[package]]
 name = "unicode-xid"
-version = "0.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
-
-[[package]]
-name = "unicode-xid"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
 
 [[package]]
-name = "unicode-xid"
-version = "0.2.0"
+name = "url"
+version = "1.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna 0.1.5",
+ "matches",
+ "percent-encoding 1.0.1",
+]
 
 [[package]]
 name = "url"
@@ -2168,9 +2289,18 @@ version = "2.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
 dependencies = [
- "idna",
+ "idna 0.2.0",
  "matches",
- "percent-encoding",
+ "percent-encoding 2.1.0",
+]
+
+[[package]]
+name = "uuid"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a"
+dependencies = [
+ "rand 0.6.5",
 ]
 
 [[package]]
@@ -2191,6 +2321,17 @@ version = "0.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
 
+[[package]]
+name = "want"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"
+dependencies = [
+ "futures",
+ "log",
+ "try-lock",
+]
+
 [[package]]
 name = "want"
 version = "0.3.0"
@@ -2228,9 +2369,9 @@ dependencies = [
  "bumpalo",
  "lazy_static",
  "log",
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
+ "proc-macro2",
+ "quote",
+ "syn",
  "wasm-bindgen-shared",
 ]
 
@@ -2252,7 +2393,7 @@ version = "0.2.59"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0f6fde1d36e75a714b5fe0cffbb78978f222ea6baebb726af13c78869fdb4205"
 dependencies = [
- "quote 1.0.3",
+ "quote",
  "wasm-bindgen-macro-support",
 ]
 
@@ -2262,9 +2403,9 @@ version = "0.2.59"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "25bda4168030a6412ea8a047e27238cadf56f0e53516e1e83fec0a8b7c786f6d"
 dependencies = [
- "proc-macro2 1.0.9",
- "quote 1.0.3",
- "syn 1.0.16",
+ "proc-macro2",
+ "quote",
+ "syn",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -2337,3 +2478,14 @@ dependencies = [
  "winapi 0.2.8",
  "winapi-build",
 ]
+
+[[package]]
+name = "x11rb"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6dd4c5e6edd84edeaddb13be025c1992870220e892424b845121ff40b8d553"
+dependencies = [
+ "gethostname",
+ "libc",
+ "pkg-config",
+]
diff --git a/Cargo.toml b/Cargo.toml
index 846f25c..54598f5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,32 +4,31 @@ version = "0.1.0"
 authors = ["s3rius <win10@list.ru>"]
 edition = "2018"
 
-[dependencies.failure]  # Experimental error handling abstraction.
-version = "0.1.7"
+[[bin]]
+name = "msuic_bg"
+path = "bin/main.rs"
+
+[lib]
+name = "music_bg_lib"
+path = "lib/lib.rs"
+crate-type = ["lib"]
+
+[dependencies]
+failure = "0.1.7"           # Experimental error handling abstraction.
+log = "0.4"                 # A lightweight logging facade for Rust.
+serde = "1.0"               # A generic serialization/deserialization framework.
+serde_derive = "1.0.105"    # Used to configure toml config stucture.
+toml = "0.5.6"              # Crate for parsing bin config file.
+failure_derive = "0.1.7"    # Used to create new error type.
+chrono = "0.4.11"           # Used to format time in logs.
+dirs  = "2.0.2"             # Used to locate home dir.
+dbus = "0.8.2"              # Used to listen to D-bus daemon.
+structopt = "0.3"           # Used to build CLI.
+image = "0.23.2"            # Creating parsing and manipulating images.
+imageproc = "0.20.0"        # Bunch of of filters and algos to process images.
+read_color = "1.0.0"        # What's that? Idunno.
+musicbrainz_rs = "0.2.0"
 
-[dependencies.log]              # A lightweight logging facade for Rust.
- version = "0.4"
-
-[dependencies.mpris]            # Idiomatic MPRIS D-Bus interface library.
-version = "2.0.0-rc2"
-
-[dependencies.serde]            # A generic serialization/deserialization framework.
-version = "1.0"
-
-[dependencies.toml]             # Crate for parsing music_bg config file.
-version = "0.5.6"
-
-[dependencies.failure_derive]   # Used to create new error type.
-version = "0.1.7"
-
-[dependencies.chrono]           # Used to format time in logs.
-version = "0.4.11"
-
-[dependencies.serde_derive]     # Used to parse toml.
-version= "1.0.104"
-
-[dependencies.dirs]             # Used to locate home dir.
-version = "2.0.2"
 
 [dependencies.fern]             # Simple, efficient logging.
 version = "0.5"
@@ -37,38 +36,14 @@ features = [
     "colored"
 ]
 
-[dependencies.dbus]             # Used to listen to D-bus daemon.
-version = "0.8.1"
-
 [dependencies.reqwest]
 version = "0.10.4"
 features = [
     "blocking"
 ]
 
-[dependencies.gtk]
-version = "0.8.1"
-
-[dependencies.gdk]
-version = "0.12.1"
+[dependencies.x11rb]            # Used to interact with X11.
+version = "0.4.1"
 features = [
-    "v3_22"
-]
-
-[dependencies.glib]
-version = "0.9.3"
-
-[dependencies.gio]
-version = "0.8.1"
-
-[dependencies.structopt]
-version = "0.3"
-
-[dependencies.image]
-version = "0.23.1"
-
-[dependencies.imageproc]
-version = "0.20.0"
-
-[dependencies.read_color]
-version = "1.0.0"
\ No newline at end of file
+    "all-extensions"
+]
\ No newline at end of file
diff --git a/PKGBUILD b/PKGBUILD
index 7e57c06..466f3a5 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -8,11 +8,10 @@ url="https://gitlab.le-memese.com/s3rius/music_bg"
 license=('GPL')
 options=(!emptydirs)
 depends=(
+  'xorg-server'
   'rust'
   'systemd'
-  'git'
   'feh'
-  'gtk3'
 )
 makedepends=(
   'rust'
diff --git a/src/cli.rs b/bin/cli.rs
similarity index 87%
rename from src/cli.rs
rename to bin/cli.rs
index 13933cf..4e8454c 100644
--- a/src/cli.rs
+++ b/bin/cli.rs
@@ -96,14 +96,4 @@ pub fn generate_completions(shell: ShellType) -> MBGResult<()> {
     Opt::clap().gen_completions(env!("CARGO_PKG_NAME"), shell.into(), ".");
     info!("Generated completion file in _music_bg");
     Ok(())
-}
-
-pub fn run(opts: Opt) -> MBGResult<()> {
-    let mode = opts.cmd.unwrap_or_else(|| RunMode::Run);
-    match mode {
-        RunMode::Run => start_listen(),
-        RunMode::GenConf => Config::generate_config(),
-        RunMode::TestPic(data) => test_processors(data),
-        RunMode::GenComp(shell) => generate_completions(shell)
-    }
 }
\ No newline at end of file
diff --git a/bin/cli_modes.rs b/bin/cli_modes.rs
new file mode 100644
index 0000000..9769f03
--- /dev/null
+++ b/bin/cli_modes.rs
@@ -0,0 +1,42 @@
+use crate::{RunMode, Opt, TestingPic, generate_completions};
+use music_bg_lib::result::MBGResult;
+use music_bg_lib::dbus_interface::player_dbus::setup_connection;
+use music_bg_lib::config::Config;
+use std::io::Read;
+use music_bg_lib::img_processors::process_image;
+use music_bg_lib::background::set_wallpaper;
+use std::time::Duration;
+
+
+pub fn start_listen() -> MBGResult<()> {
+    let config = Config::get_props();
+    debug!("Found config: \n{:#?}", config);
+    let mut connection = setup_connection()?;
+
+    loop {
+        connection.process(Duration::from_millis(500)).unwrap();
+    }
+}
+
+pub fn test_processors(test_data: TestingPic) -> MBGResult<()> {
+    let mut img_file = std::fs::File::open(test_data.input.as_str())?;
+    let mut image_bytes = Vec::new();
+    img_file.read_to_end(&mut image_bytes)?;
+    let res = process_image(image_bytes)?;
+    res.save(test_data.output.as_str())?;
+    if test_data.wallpaper {
+        set_wallpaper(test_data.output.as_str());
+    }
+    Ok(())
+}
+
+
+pub fn run(opts: Opt) -> MBGResult<()> {
+    let mode = opts.cmd.unwrap_or_else(|| RunMode::Run);
+    match mode {
+        RunMode::Run => start_listen(),
+        RunMode::GenConf => Config::generate_config(),
+        RunMode::TestPic(data) => test_processors(data),
+        RunMode::GenComp(shell) => generate_completions(shell)
+    }
+}
\ No newline at end of file
diff --git a/src/logging.rs b/bin/logging.rs
similarity index 96%
rename from src/logging.rs
rename to bin/logging.rs
index fe3c08f..7ffc978 100644
--- a/src/logging.rs
+++ b/bin/logging.rs
@@ -3,7 +3,7 @@ use std::str::FromStr;
 use fern::colors::{Color, ColoredLevelConfig};
 use log::LevelFilter;
 
-use crate::config::Config;
+use music_bg_lib::config::Config;
 
 pub fn setup_logger() -> Result<(), fern::InitError> {
     let config = Config::get_props().logger;
diff --git a/bin/main.rs b/bin/main.rs
new file mode 100644
index 0000000..3f4887c
--- /dev/null
+++ b/bin/main.rs
@@ -0,0 +1,27 @@
+#[macro_use]
+extern crate log;
+
+use structopt::StructOpt;
+
+use crate::logging::setup_logger;
+use structopt::clap::Shell;
+
+use music_bg_lib::result::MBGResult;
+
+use crate::cli_modes::run;
+
+pub mod logging;
+pub mod cli_modes;
+
+include!("cli.rs");
+
+fn main() -> MBGResult<()> {
+    let opt: Opt = Opt::from_args();
+    let logger = setup_logger();
+    if let Err(error) = logger {
+        error!("Failed to create pretty logger");
+        error!("{}", error.to_string());
+        error!("Using default logging");
+    }
+    run(opt)
+}
diff --git a/src/background.rs b/lib/background.rs
similarity index 74%
rename from src/background.rs
rename to lib/background.rs
index 7306157..3318ca6 100644
--- a/src/background.rs
+++ b/lib/background.rs
@@ -1,4 +1,3 @@
-use std::io::Read;
 use std::process::Command;
 
 use dbus::blocking::Connection;
@@ -6,7 +5,7 @@ use dbus::Message;
 
 use crate::img_processors::process_image;
 use crate::result::MBGResult;
-use crate::TestingPic;
+
 
 pub fn reset_background_handler(_: (), _: &Connection, message: &Message) -> bool {
     let member_name = message.read1::<String>();
@@ -36,18 +35,6 @@ pub fn process_image_url(image_url: String) -> MBGResult<()> {
     Ok(())
 }
 
-pub fn test_processors(test_data: TestingPic) -> MBGResult<()> {
-    let mut img_file = std::fs::File::open(test_data.input.as_str())?;
-    let mut image_bytes = Vec::new();
-    img_file.read_to_end(&mut image_bytes)?;
-    let res = process_image(image_bytes)?;
-    res.save(test_data.output.as_str())?;
-    if test_data.wallpaper {
-        set_wallpaper(test_data.output.as_str());
-    }
-    Ok(())
-}
-
 pub fn set_wallpaper(path: &str) {
     debug!("Setting background");
     let out = Command::new("feh").arg("--bg-fill").arg(path).output();
diff --git a/src/config/image_processors.rs b/lib/config/image_processors.rs
similarity index 100%
rename from src/config/image_processors.rs
rename to lib/config/image_processors.rs
diff --git a/src/config/logger.rs b/lib/config/logger.rs
similarity index 100%
rename from src/config/logger.rs
rename to lib/config/logger.rs
diff --git a/src/config/mod.rs b/lib/config/mod.rs
similarity index 100%
rename from src/config/mod.rs
rename to lib/config/mod.rs
diff --git a/src/dbus_interface/main_dbus.rs b/lib/dbus_interface/main_dbus.rs
similarity index 99%
rename from src/dbus_interface/main_dbus.rs
rename to lib/dbus_interface/main_dbus.rs
index 0e64b13..119ee72 100644
--- a/src/dbus_interface/main_dbus.rs
+++ b/lib/dbus_interface/main_dbus.rs
@@ -1,6 +1,7 @@
 // This code was autogenerated with `dbus-codegen-rust -s -d org.freedesktop.DBus -m None`, see https://github.com/diwic/dbus-rs
 use dbus::arg;
 
+
 #[derive(Debug)]
 pub struct DBusNameOwnerChanged {
     pub arg0: String,
diff --git a/src/dbus_interface/media_player.rs b/lib/dbus_interface/media_player.rs
similarity index 99%
rename from src/dbus_interface/media_player.rs
rename to lib/dbus_interface/media_player.rs
index 1a1a9a2..25debf5 100644
--- a/src/dbus_interface/media_player.rs
+++ b/lib/dbus_interface/media_player.rs
@@ -2,6 +2,7 @@
 use dbus::arg;
 use dbus::blocking;
 
+
 pub trait OrgMprisMediaPlayer2Player {
     fn playback_status(&self) -> Result<String, dbus::Error>;
     fn metadata(
diff --git a/src/dbus_interface/mod.rs b/lib/dbus_interface/mod.rs
similarity index 74%
rename from src/dbus_interface/mod.rs
rename to lib/dbus_interface/mod.rs
index 07454dc..546792b 100644
--- a/src/dbus_interface/mod.rs
+++ b/lib/dbus_interface/mod.rs
@@ -1,3 +1,4 @@
 pub mod main_dbus;
 pub mod media_player;
 pub mod statuses;
+pub mod player_dbus;
\ No newline at end of file
diff --git a/src/player_dbus.rs b/lib/dbus_interface/player_dbus.rs
similarity index 85%
rename from src/player_dbus.rs
rename to lib/dbus_interface/player_dbus.rs
index 5ece33b..1c4ef8f 100644
--- a/src/player_dbus.rs
+++ b/lib/dbus_interface/player_dbus.rs
@@ -6,12 +6,12 @@ use dbus::blocking::Connection;
 use dbus::message::{MatchRule, SignalArgs};
 use dbus::{arg, Message};
 
-use crate::background::{nitrogen_restore, process_image_url, reset_background_handler};
-use crate::config::Config;
+
 use crate::dbus_interface::main_dbus::DBusNameOwnerChanged;
 use crate::dbus_interface::media_player::OrgMprisMediaPlayer2Player;
 use crate::dbus_interface::statuses::PlayerStatus;
 use crate::result::{MBGError, MBGResult};
+use crate::background::{reset_background_handler, process_image_url, nitrogen_restore};
 
 pub fn player_exit_handler(connection: &Connection) -> MBGResult<()> {
     connection.add_match(
@@ -89,19 +89,4 @@ pub fn setup_connection() -> MBGResult<Connection> {
     player_exit_handler(&conn)?;
     player_state_watcher(&conn)?;
     Ok(conn)
-}
-
-pub fn start_listen() -> MBGResult<()> {
-    let config = Config::get_props();
-    debug!("Found config: \n{:#?}", config);
-    let mut connection = setup_connection()?;
-    if gtk::init().is_err() {
-        return Err(MBGError::X11Error(String::from(
-            "Failed to initialize GTK.",
-        )));
-    }
-
-    loop {
-        connection.process(Duration::from_millis(500)).unwrap();
-    }
-}
+}
\ No newline at end of file
diff --git a/src/dbus_interface/statuses.rs b/lib/dbus_interface/statuses.rs
similarity index 100%
rename from src/dbus_interface/statuses.rs
rename to lib/dbus_interface/statuses.rs
diff --git a/lib/display.rs b/lib/display.rs
new file mode 100644
index 0000000..c7303e4
--- /dev/null
+++ b/lib/display.rs
@@ -0,0 +1,26 @@
+use crate::result::MBGResult;
+use x11rb::generated::xinerama;
+
+pub fn get_max_resolution() -> MBGResult<(i32, i32)> {
+    let (conn, _) = x11rb::connect(None).unwrap();
+    let screens_info = xinerama::query_screens(&conn)?.reply()?.screen_info;
+    let mut max_height = 0;
+    let mut max_width = 0;
+    for screen in screens_info.into_iter() {
+        if screen.width >= max_width && screen.height >= max_height {
+            max_height = screen.height;
+            max_width = screen.width;
+        }
+    }
+    Ok((max_height as i32, max_width as i32))
+}
+
+pub fn update_bg(_img_bytes: Vec<u8>) -> MBGResult<()> {
+    debug!("TODO: Change background.");
+    let (conn, _display_num) = x11rb::connect(None).unwrap();
+    let screens_info = xinerama::query_screens(&conn)?.reply()?.screen_info;
+    for screen in screens_info.into_iter() {
+        info!("{:#?}", screen);
+    }
+    Ok(())
+}
diff --git a/src/img_processors/blur.rs b/lib/img_processors/blur.rs
similarity index 100%
rename from src/img_processors/blur.rs
rename to lib/img_processors/blur.rs
diff --git a/src/img_processors/border.rs b/lib/img_processors/border.rs
similarity index 100%
rename from src/img_processors/border.rs
rename to lib/img_processors/border.rs
diff --git a/src/img_processors/crop.rs b/lib/img_processors/crop.rs
similarity index 100%
rename from src/img_processors/crop.rs
rename to lib/img_processors/crop.rs
diff --git a/src/img_processors/mod.rs b/lib/img_processors/mod.rs
similarity index 100%
rename from src/img_processors/mod.rs
rename to lib/img_processors/mod.rs
diff --git a/src/img_processors/none.rs b/lib/img_processors/none.rs
similarity index 100%
rename from src/img_processors/none.rs
rename to lib/img_processors/none.rs
diff --git a/src/img_processors/scale.rs b/lib/img_processors/scale.rs
similarity index 100%
rename from src/img_processors/scale.rs
rename to lib/img_processors/scale.rs
diff --git a/lib/lib.rs b/lib/lib.rs
new file mode 100644
index 0000000..fe6f470
--- /dev/null
+++ b/lib/lib.rs
@@ -0,0 +1,16 @@
+#[macro_use]
+extern crate log;
+#[macro_use]
+extern crate serde_derive;
+#[macro_use]
+extern crate failure;
+#[macro_use]
+extern crate failure_derive;
+
+
+pub mod img_processors;
+pub mod dbus_interface;
+pub mod background;
+pub mod display;
+pub mod config;
+pub mod result;
diff --git a/src/result.rs b/lib/result.rs
similarity index 81%
rename from src/result.rs
rename to lib/result.rs
index be9d7f8..32159ba 100644
--- a/src/result.rs
+++ b/lib/result.rs
@@ -58,8 +58,17 @@ impl From<image::error::ImageError> for MBGError {
     }
 }
 
-// impl From<xcb::base::ConnError> for MBGError {
-//     fn from(err: xcb::base::ConnError) -> Self {
-//         MBGError::X11Error(err.to_string())
-//     }
-// }
+impl From<x11rb::errors::ConnectionError> for MBGError {
+    fn from(error: x11rb::errors::ConnectionError) -> Self {
+        Self::X11Error(error.to_string())
+    }
+}
+
+impl<D> From<x11rb::errors::ReplyError<D>> for MBGError
+where
+    D: AsRef<[u8]>,
+{
+    fn from(error: x11rb::errors::ReplyError<D>) -> Self {
+        MBGError::X11Error(error.to_string())
+    }
+}
diff --git a/src/display.rs b/src/display.rs
deleted file mode 100644
index e3c9f3e..0000000
--- a/src/display.rs
+++ /dev/null
@@ -1,54 +0,0 @@
-use gdk::DisplayManager;
-
-use crate::result::{MBGError, MBGResult};
-
-pub fn get_max_resolution() -> MBGResult<(i32, i32)> {
-    let manager = DisplayManager::get();
-    let display = manager.get_default_display();
-    if display.is_none() {
-        return Err(MBGError::X11Error(String::from(
-            "Default display not found.",
-        )));
-    }
-    let display = display.unwrap();
-    let n = display.get_n_monitors();
-    debug!("Connected monitors: {}", n);
-    let mut height = 0;
-    let mut width = 0;
-    for i in 0..n {
-        let monitor = display.get_monitor(i);
-        if let Some(monitor) = monitor {
-            let work_area = monitor.get_workarea();
-            if work_area.width >= width && work_area.height >= height {
-                height = work_area.height;
-                width = work_area.width;
-            }
-        }
-    }
-    debug!("Maximum found resolution is {}x{}", width, height);
-    Ok((height, width))
-}
-
-// pub fn update_bg(img_bytes: Vec<u8>) -> MBGResult<()> {
-//     debug!("TODO: Change background.");
-//     file.write_all(img_bytes.as_slice())?;
-//
-//     // if let Err(setting_error) = out {
-//     //     error!("Can't set background: {}", setting_error.to_string());
-//     // }
-//
-//
-//     // let screen = display.get_default_screen();
-//     // let wins = screen.get_toplevel_windows();
-//     // for win in wins.into_iter() {
-//     //     let win_type = win.get_window_type();
-//     //     debug!("{:?}", win_type);
-//     // }
-//     // let (conn, screen_num) = xcb::Connection::connect(None).unwrap();
-//     // let setup = conn.get_setup();
-//     // let screen = setup.roots().nth(screen_num as usize).unwrap();
-//     // let count = setup.roots().count();
-//     // debug!("{}", count);
-//     // debug!("{}x{}", screen.width_in_pixels(), screen.height_in_pixels());
-//     Ok(())
-// }
diff --git a/src/main.rs b/src/main.rs
deleted file mode 100644
index cbabcac..0000000
--- a/src/main.rs
+++ /dev/null
@@ -1,43 +0,0 @@
-#[macro_use]
-extern crate failure;
-#[macro_use]
-extern crate failure_derive;
-#[macro_use]
-extern crate log;
-#[macro_use]
-extern crate serde_derive;
-
-use structopt::StructOpt;
-
-use crate::background::test_processors;
-use crate::config::Config;
-use crate::logging::setup_logger;
-use crate::player_dbus::start_listen;
-use crate::result::{MBGError, MBGResult};
-use structopt::clap::Shell;
-
-pub mod background;
-pub mod config;
-pub mod dbus_interface;
-pub mod display;
-pub mod img_processors;
-pub mod logging;
-pub mod player_dbus;
-pub mod result;
-
-include!("cli.rs");
-
-fn main() -> MBGResult<()> {
-    let opt: Opt = Opt::from_args();
-    let logger = setup_logger();
-    if let Err(error) = logger {
-        error!("Failed to create pretty logger");
-        error!("{}", error.to_string());
-        error!("Using default logging");
-    }
-    let res = gtk::init();
-    if res.is_err() {
-        return Err(MBGError::X11Error(String::from("Could not connect to GTK")));
-    }
-    run(opt)
-}
diff --git a/systemd/music_bg.service b/systemd/music_bg.service
index c21e9b7..e99a903 100644
--- a/systemd/music_bg.service
+++ b/systemd/music_bg.service
@@ -7,7 +7,7 @@ Type=simple
 ExecStart=/usr/bin/music_bg
 Environment=DISPLAY=:0
 ExecStop=/usr/bin/kill -15 $MAINPID
-Restart=on-abort
+Restart=always
 
 [Install]
 WantedBy=graphical-session.target
-- 
GitLab