diff --git a/Cargo.lock b/Cargo.lock index 900c1e8..77c05f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -51,7 +51,7 @@ dependencies = [ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -60,23 +60,21 @@ name = "atty" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-demangle 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -85,7 +83,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -145,7 +143,7 @@ dependencies = [ "cairo-sys-rs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -154,7 +152,7 @@ name = "cairo-sys-rs" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (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)", ] @@ -175,7 +173,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -193,7 +191,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -201,12 +199,12 @@ name = "core-foundation-sys" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "crc" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "build_const 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -221,15 +219,6 @@ dependencies = [ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "dbghelp-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "debug_unreachable" version = "0.1.1" @@ -268,17 +257,17 @@ dependencies = [ [[package]] name = "diesel" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel_derives 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel_derives 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "libsqlite3-sys 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "diesel_derives" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -287,11 +276,11 @@ dependencies = [ [[package]] name = "diesel_migrations" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "migrations_internals 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", - "migrations_macros 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "migrations_internals 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "migrations_macros 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -310,7 +299,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "derive-error-chain 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -336,7 +325,7 @@ name = "error-chain" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -344,7 +333,7 @@ name = "error-chain" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -406,7 +395,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "futures-cpupool" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -427,7 +416,7 @@ dependencies = [ "glib 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pango 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -440,7 +429,7 @@ dependencies = [ "glib 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -452,7 +441,7 @@ dependencies = [ "gio-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -467,7 +456,7 @@ dependencies = [ "gio-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pango-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -482,7 +471,7 @@ dependencies = [ "glib 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -493,7 +482,7 @@ dependencies = [ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -506,7 +495,7 @@ dependencies = [ "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -515,7 +504,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -531,7 +520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -553,7 +542,7 @@ dependencies = [ "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gtk-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pango 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -570,7 +559,7 @@ dependencies = [ "gio-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pango-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -582,15 +571,15 @@ dependencies = [ "ammonia 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel_migrations 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel_migrations 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "dotenv 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", - "r2d2-diesel 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "r2d2-diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -605,7 +594,7 @@ dependencies = [ name = "hammond-downloader" version = "0.1.0" dependencies = [ - "diesel 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "hammond-data 0.1.0", @@ -622,7 +611,7 @@ name = "hammond-gtk" version = "0.1.0" dependencies = [ "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "diesel 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "dissolve 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "gdk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "gdk-pixbuf 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -637,7 +626,7 @@ dependencies = [ "loggerv 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "open 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "send-cell 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -683,14 +672,14 @@ dependencies = [ "base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-cpupool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "relay 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -709,7 +698,7 @@ dependencies = [ "tokio-core 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -727,7 +716,7 @@ name = "iovec" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -775,17 +764,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libflate" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "adler32 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crc 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -802,12 +791,12 @@ name = "log" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "log 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "log" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -853,9 +842,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "tendril 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -871,23 +860,23 @@ name = "memchr" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "migrations_internals" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "diesel 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "migrations_macros" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "migrations_internals 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "migrations_internals 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -940,7 +929,7 @@ dependencies = [ "iovec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazycell 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)", @@ -978,7 +967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1020,7 +1009,7 @@ name = "num_cpus" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1036,7 +1025,7 @@ dependencies = [ "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-sys 0.9.23 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1046,7 +1035,7 @@ version = "0.9.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1060,7 +1049,7 @@ dependencies = [ "glib 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pango-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1072,7 +1061,7 @@ dependencies = [ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "glib-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "gobject-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1147,16 +1136,16 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "r2d2-diesel" -version = "0.99.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "diesel 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)", + "diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1166,7 +1155,7 @@ version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1175,7 +1164,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1194,14 +1183,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "redox_syscall" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1209,24 +1198,24 @@ name = "redox_termios" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "redox_syscall 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "regex-syntax" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1246,16 +1235,16 @@ dependencies = [ "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.11.10 (registry+https://github.com/rust-lang/crates.io-index)", "hyper-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libflate 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", + "libflate 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 2.0.0-alpha.3 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-core 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "uuid 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1267,7 +1256,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1342,7 +1331,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", "security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1352,7 +1341,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1362,22 +1351,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" -version = "1.0.26" +version = "1.0.27" 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_derive_internals 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive_internals 0.19.0 (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_internals" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1386,13 +1375,13 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1402,7 +1391,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1435,7 +1424,7 @@ dependencies = [ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1449,7 +1438,7 @@ dependencies = [ "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)", "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1516,8 +1505,8 @@ name = "termion" version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1532,13 +1521,12 @@ dependencies = [ [[package]] name = "time" -version = "0.1.38" +version = "0.1.39" 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.34 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1593,7 +1581,7 @@ dependencies = [ [[package]] name = "tokio-tls" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1705,7 +1693,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1750,7 +1738,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" "checksum atk-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "33a67fd81e1922dddc335887516f2f5254534e89c9d39fa89bca5d79bd150d34" "checksum atty 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8352656fd42c30a0c3c89d26dea01e3b77c0ab2af18230835c15e2e13cd51859" -"checksum backtrace 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8709cc7ec06f6f0ae6c2c7e12f6ed41540781f72b488d83734978295ceae182e" +"checksum backtrace 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbbf59b1c43eefa8c3ede390fcc36820b4999f7914104015be25025e0d62af2" "checksum backtrace-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "44585761d6161b0f57afc49482ab6bd067e4edef48c12a152c237eb0203f7661" "checksum base64 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "229d032f1a99302697f10b27167ae6d03d49d032e6a8e2550e8d3fc13356d2b4" "checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" @@ -1768,16 +1756,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c06169f5beb7e31c7c67ebf5540b8b472d23e3eade3b2ec7d1f5b504a85f91bd" "checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" -"checksum crc 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "64d4a687c40efbc7d376958117b34d5f1cece11709110a742405bf58e7a34f00" +"checksum crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd5d02c0aac6bd68393ed69e00bbc2457f3e89075c6349db7189618dc4ddc1d7" "checksum crypt32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e34988f7e069e0b2f3bfc064295161e489b2d4e04a2e4248fb94360cdf00b4ec" -"checksum dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" "checksum debug_unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9a032eac705ca39214d169f83e3d3da290af06d8d1d344d1baad2fd002dca4b3" "checksum derive-error-chain 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c9ca9ade651388daad7c993f005d0d20c4f6fe78c1cdc93e95f161c6f5ede4a" "checksum derive_builder 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c998e6ab02a828dd9735c18f154e14100e674ed08cb4e1938f0e4177543f439" "checksum derive_builder_core 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "735e24ee9e5fa8e16b86da5007856e97d592e11867e45d76e0c0d0a164a0b757" -"checksum diesel 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b97bd43f72d4819fac99f24d0030184c64c5ebdee96f94c7a7d4215c50506a7" -"checksum diesel_derives 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ad228b6fd05c86050b95f56e497a8135073ffce28602e2200e63a21047eb474d" -"checksum diesel_migrations 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)" = "745dcfe39e3043c267e46dbe4f2ebbc9917039bdf4d81b108950be61244dfc89" +"checksum diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "de51f2e2321a7db9bdfd7e3457c6ce11dce5009cad7ff9ac25a04879239e5fe6" +"checksum diesel_derives 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "274aeed033dcd9e40f472cd282a3692512fef153283ec4c745873517d0e67f3f" +"checksum diesel_migrations 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "45efc922686673614d4aee6ddd47ebef2d5c789a0a0b34e0df5efaaedac51d09" "checksum dissolve 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "898542be4716d992082c8e4fc331b792d626cfa71cb2b4790f828b9a8f921a90" "checksum dotenv 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d6f0e2bb24d163428d8031d3ebd2d2bd903ad933205a97d0f18c7c1aade380f3" "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" @@ -1793,7 +1780,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum fuchsia-zircon-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "08b3a6f13ad6b96572b53ce7af74543132f1a7055ccceb6d073dd36c54481859" "checksum futf 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "51f93f3de6ba1794dcd5810b3546d004600a59a98266487c8407bc4b24e398f3" "checksum futures 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "118b49cac82e04121117cbd3121ede3147e885627d82c4546b87c702debb90c1" -"checksum futures-cpupool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e86f49cc0d92fe1b97a5980ec32d56208272cbb00f15044ea9e2799dde766fdf" +"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" "checksum gdk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e51db95be6565011bcd5cd99f9b17fdd585001057a999b21e09f1e8c28deb9" "checksum gdk-pixbuf 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "16160d212ae91abe9f3324c3fb233929ba322dde63585d15cda3336f8c529ed1" "checksum gdk-pixbuf-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "798f97101eea8180da363d0e80e07ec7ec6d1809306601c0100c1de5bc8b4f52" @@ -1821,11 +1808,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d" "checksum lazycell 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3b585b7a6811fb03aa10e74b278a0f00f8dd9b45dc681f148bb29fa5cb61859b" -"checksum libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)" = "36fbc8a8929c632868295d0178dd8f63fc423fd7537ad0738372bd010b3ac9b0" -"checksum libflate 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6e0ae8f2ea4a426e1af2c2c1ba5696bd597368afe5068f9485fc960973fe6dfb" +"checksum libc 0.2.35 (registry+https://github.com/rust-lang/crates.io-index)" = "96264e9b293e95d25bfcbbf8a88ffd1aedc85b754eba8b7d78012f638ba220eb" +"checksum libflate 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "1a429b86418868c7ea91ee50e9170683f47fd9d94f5375438ec86ec3adb74e8e" "checksum libsqlite3-sys 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "370090ad578ba845a3ad4f383ceb3deba7abd51ab1915ad1f2c982cc6035e31c" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -"checksum log 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a89a0c46ba789b8a247d4c567aed4d7c68e624672d238b45cc3ec20dc9f940" +"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" "checksum loggerv 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b178879253fab6ddb4ea931e1e6f514d45ce6a53f7fe618a0a8751f43e42e4f1" "checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" "checksum maplit 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ed95049d40b8a1a7691adbabca028ad481f7e6a2921ce4846e1ee168b4e4ca5" @@ -1833,8 +1820,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum markup5ever 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7bccd18e4fab95f4410dc4d714163c2e88dd80e39a2a013998e345f337a569ab" "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" "checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d" -"checksum migrations_internals 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ac1d17f6f161f4d91cb7e5a72cce5b24a60b80f96580a8ac94351c56b8606a" -"checksum migrations_macros 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc767420eac6b718cd593aaa09c06a31d4ed228291c8538b274737e28a29939b" +"checksum migrations_internals 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dd5248cbbe4f45d5b4e6cf13a9f37aa587d31c41d2d8b80a0bf0aaf2e30c862d" +"checksum migrations_macros 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "06b25945741aeb3a00bb37eb142d03480e96230fff5569327ab4ac2082449df2" "checksum mime 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" "checksum mime 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e2e00e17be181010a91dbfefb01660b17311059dc8c7f48b9017677721e732bd" "checksum mime_guess 1.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "dc7e82a15629bb4ecd9e72365bf33d1382be91e030f820edb8e2a21c02430da8" @@ -1863,15 +1850,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum quick-xml 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "19602854dba17f93b3011fe272af6db3133d5b495279f504bf9104dc97879717" "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" "checksum r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f9078ca6a8a5568ed142083bb2f7dc9295b69d16f867ddcc9849e51b17d8db46" -"checksum r2d2-diesel 0.99.0 (registry+https://github.com/rust-lang/crates.io-index)" = "77aaed149a82720f4b664427f359e1b2a34d8787c1bc3fb1d167b104a1ddd866" +"checksum r2d2-diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9c29bad92da76d02bc2c020452ebc3a3fe6fa74cfab91e711c43116e4fb1a3" "checksum rand 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)" = "9e7944d95d25ace8f377da3ac7068ce517e4c646754c43a1b1849177bbf72e59" "checksum rand 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9d5f78082e6a6d042862611e9640cf20776185fee506cf6cf67e93c6225cee31" "checksum rayon 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ed02d09394c94ffbdfdc755ad62a132e94c3224a8354e78a1200ced34df12edf" "checksum rayon-core 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e64b609139d83da75902f88fd6c01820046840a18471e4dfcd5ac7c0f46bea53" -"checksum redox_syscall 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "07b8f011e3254d5a9b318fde596d409a0001c9ae4c6e7907520c2eaa4d988c99" +"checksum redox_syscall 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "df1a5c588807af3b0cbbfa2f1358f2d5ec6ad546858c1ccd30dfbb127021706b" "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" -"checksum regex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ac6ab4e9218ade5b423358bbd2567d1617418403c7a512603630181813316322" -"checksum regex-syntax 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db" +"checksum regex 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "744554e01ccbd98fff8c457c3b092cd67af62a555a43bfe97ae8a0451f7799fa" +"checksum regex-syntax 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8e931c58b93d86f080c734bfd2bce7dd0079ae2331235818133c8be7f422e20e" "checksum relay 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f301bafeb60867c85170031bdb2fcf24c8041f33aee09e7b116a58d4e9f781c5" "checksum reqwest 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3161ca63fd11ce36c7718af239e6492a25a3dbfcec54240f959b9d816cf42413" "checksum rfc822_sanitizer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "680e8305c1e0cdf836dc4bec5424e045f278c975a3cac36d1ca01c4695f9d815" @@ -1887,10 +1874,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum security-framework 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "dfa44ee9c54ce5eecc9de7d5acbad112ee58755239381f687e564004ba4a2332" "checksum security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" "checksum send-cell 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1c620dd7e056b468b9d374a9f51cfa6bb4bf17a8ca4ee62e5efa0d99aaff2c41" -"checksum serde 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "d1d6af49db29f2f2678e442f4eb82e7d78f59dbbd3e373ccffc17fe70c1b94f8" -"checksum serde_derive 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "95b4ea937d8dff4c94d1a6fdd710eade6aedaa17c4049da29bb97a4f8a4f4bc1" -"checksum serde_derive_internals 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)" = "730fe9f29fe8db69a601837f416e46cba07792031ed6b27557a43e49d62d89ae" -"checksum serde_json 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7cf5b0b5b4bd22eeecb7e01ac2e1225c7ef5e4272b79ee28a8392a8c8489c839" +"checksum serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "db99f3919e20faa51bb2996057f5031d8685019b5a06139b1ce761da671b8526" +"checksum serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "f4ba7591cfe93755e89eeecdbcc668885624829b020050e6aec99c2a03bd3fd0" +"checksum serde_derive_internals 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6e03f1c9530c3fb0a0a5c9b826bdd9246a5921ae995d75f512ac917fc4dd55b5" +"checksum serde_json 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c9db7266c7d63a4c4b7fe8719656ccdd51acf1bed6124b174f933b009fb10bcb" "checksum serde_urlencoded 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce0fd303af908732989354c6f02e05e2e6d597152870f2c6990efb0577137480" "checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537" "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23" @@ -1907,12 +1894,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum tendril 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9de21546595a0873061940d994bbbc5c35f024ae4fd61ec5c5b159115684f508" "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" "checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963" -"checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520" +"checksum time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "a15375f1df02096fb3317256ce2cee6a1f42fc84ea5ad5fc8c421cfe40c73098" "checksum tokio-core 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c87c27560184212c9dc45cd8f38623f37918248aad5b58fb65303b5d07a98c6e" "checksum tokio-io 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "514aae203178929dbf03318ad7c683126672d4d96eccb77b29603d33c9e25743" "checksum tokio-proto 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fbb47ae81353c63c487030659494b295f6cb6576242f907f203473b191b0389" "checksum tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" -"checksum tokio-tls 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d88e411cac1c87e405e4090be004493c5d8072a370661033b1a64ea205ec2e13" +"checksum tokio-tls 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772f4b04e560117fe3b0a53e490c16ddc8ba6ec437015d91fa385564996ed913" "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" @@ -1928,7 +1915,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "890b38836c01d72fdb636d15c9cfc52ec7fd783b330abc93cd1686f4308dfccc" +"checksum winapi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b09fb3b6f248ea4cd42c9a65113a847d612e17505d6ebd1f7357ad68a8bf8693" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum winapi-i686-pc-windows-gnu 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ec6667f60c23eca65c561e63a13d81b44234c2e38a6b6c959025ee907ec614cc" "checksum winapi-x86_64-pc-windows-gnu 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98f12c52b2630cd05d2c3ffd8e008f7f48252c042b4871c72aed9dc733b96668" diff --git a/hammond-data/Cargo.toml b/hammond-data/Cargo.toml index 750c072..458572f 100644 --- a/hammond-data/Cargo.toml +++ b/hammond-data/Cargo.toml @@ -14,7 +14,7 @@ itertools = "0.7.4" lazy_static = "1.0.0" log = "0.3.8" r2d2 = "0.8.2" -r2d2-diesel = "0.99.0" +r2d2-diesel = "1.0.0" rayon = "0.9.0" reqwest = "0.8.2" rfc822_sanitizer = "0.3.3" @@ -24,11 +24,11 @@ xdg = "2.1.0" [dependencies.diesel] features = ["sqlite"] -version = "0.99.0" +version = "1.0.0" [dependencies.diesel_migrations] features = ["sqlite"] -version = "0.99.0" +version = "1.0.0" [dev-dependencies] rand = "0.4.1" diff --git a/hammond-data/src/utils.rs b/hammond-data/src/utils.rs index d6c7cfd..fd0224b 100644 --- a/hammond-data/src/utils.rs +++ b/hammond-data/src/utils.rs @@ -84,8 +84,10 @@ pub fn delete_local_content(ep: &mut EpisodeCleanerQuery) -> Result<()> { /// Runs a cleaner for played Episode's that are pass the lifetime limit and /// scheduled for removal. pub fn checkup() -> Result<()> { + info!("Running database checks."); download_checker()?; played_cleaner()?; + info!("Checks completed."); Ok(()) } diff --git a/hammond-downloader/Cargo.toml b/hammond-downloader/Cargo.toml index cb7d6f5..9646d26 100644 --- a/hammond-downloader/Cargo.toml +++ b/hammond-downloader/Cargo.toml @@ -16,7 +16,7 @@ lazy_static = "1.0.0" [dependencies.diesel] features = ["sqlite"] -version = "0.99.0" +version = "1.0.0" [dependencies.hammond-data] path = "../hammond-data" diff --git a/hammond-gtk/Cargo.toml b/hammond-gtk/Cargo.toml index b2265bf..db947d5 100644 --- a/hammond-gtk/Cargo.toml +++ b/hammond-gtk/Cargo.toml @@ -23,7 +23,7 @@ send-cell = "0.1.2" [dependencies.diesel] features = ["sqlite"] -version = "0.99.0" +version = "1.0.0" [dependencies.gtk] features = ["v3_22"] diff --git a/hammond-gtk/resources/gtk/episode_widget.ui b/hammond-gtk/resources/gtk/episode_widget.ui index 66fc8f6..7d06799 100644 --- a/hammond-gtk/resources/gtk/episode_widget.ui +++ b/hammond-gtk/resources/gtk/episode_widget.ui @@ -15,22 +15,22 @@ True False - center + start vertical 6 True False + start True False - start Episode Title end True - 60 + 64 False 1 @@ -51,12 +51,13 @@ True False + start 6 True False - 1970/01/01 + 3 Jan True False diff --git a/hammond-gtk/resources/gtk/shows_view.ui b/hammond-gtk/resources/gtk/shows_view.ui index 5050ca0..4fa9396 100644 --- a/hammond-gtk/resources/gtk/shows_view.ui +++ b/hammond-gtk/resources/gtk/shows_view.ui @@ -3,16 +3,18 @@ + fb_parent True False vertical - + + scrolled_window True True in - + True False diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs index 35fe044..ada0284 100644 --- a/hammond-gtk/src/app.rs +++ b/hammond-gtk/src/app.rs @@ -6,24 +6,37 @@ use gio::{ActionMapExt, ApplicationExt, ApplicationExtManual, SimpleActionExt}; use hammond_data::utils::checkup; use hammond_downloader::manager::Manager; +use hammond_data::Source; use headerbar::Header; use content::Content; use utils; -use std::rc::Rc; use std::sync::{Arc, Mutex}; +use std::sync::mpsc::{channel, Receiver, Sender}; lazy_static! { pub static ref DOWNLOADS_MANAGER: Arc> = Arc::new(Mutex::new(Manager::new())); } -#[derive(Debug, Clone)] +#[derive(Clone, Debug)] +pub enum Action { + UpdateSources(Option), + RefreshViews, + RefreshEpisodesViewBGR, + HeaderBarShowTile(String), + HeaderBarNormal, + HeaderBarHideUpdateIndicator, +} + +#[derive(Debug)] pub struct App { app_instance: gtk::Application, window: gtk::Window, - header: Rc
, - content: Rc, + header: Arc
, + content: Arc, + receiver: Receiver, + sender: Sender, } impl App { @@ -40,21 +53,19 @@ impl App { let window = gtk::Window::new(gtk::WindowType::Toplevel); window.set_default_size(860, 640); window.set_title("Hammond"); - window.connect_delete_event(|w, _| { - w.destroy(); + let app_clone = application.clone(); + window.connect_delete_event(move |_, _| { + app_clone.quit(); Inhibit(false) }); - // TODO: Refactor the initialization order. - - // Create the headerbar - let header = Rc::new(Header::default()); + let (sender, receiver) = channel(); // Create a content instance - let content = Content::new(header.clone()); + let content = Content::new(sender.clone()); - // Initialize the headerbar - header.init(content.clone()); + // Create the headerbar + let header = Header::new(content.clone(), sender.clone()); // Add the Headerbar to the window. window.set_titlebar(&header.container); @@ -66,79 +77,49 @@ impl App { window, header, content, + receiver, + sender, } } pub fn setup_actions(&self) { // Updates the database and refreshes every view. let update = gio::SimpleAction::new("update", None); - let content = self.content.clone(); let header = self.header.clone(); + let sender = self.sender.clone(); update.connect_activate(move |_, _| { - utils::refresh_feed(content.clone(), header.clone(), None); + utils::refresh_feed(header.clone(), None, sender.clone()); }); self.app_instance.add_action(&update); - - // Refreshes the `Content` - let refresh = gio::SimpleAction::new("refresh", None); - let content = self.content.clone(); - refresh.connect_activate(move |_, _| { - content.update(); - }); - self.app_instance.add_action(&refresh); - - // Refreshes the `EpisodesStack` - let refresh_episodes = gio::SimpleAction::new("refresh_episodes", None); - let content = self.content.clone(); - refresh_episodes.connect_activate(move |_, _| { - if content.get_stack().get_visible_child_name() != Some(String::from("episodes")) { - content.update_episode_view(); - } - }); - self.app_instance.add_action(&refresh_episodes); - - // Refreshes the `ShowStack` - let refresh_shows = gio::SimpleAction::new("refresh_shows", None); - let content = self.content.clone(); - refresh_shows.connect_activate(move |_, _| { - content.update_shows_view(); - }); - self.app_instance.add_action(&refresh_shows); } pub fn setup_timed_callbacks(&self) { - let content = self.content.clone(); let header = self.header.clone(); - // Update 30 seconds after the Application is initialized. - gtk::timeout_add_seconds( - 30, - clone!(content => move || { - utils::refresh_feed(content.clone(), header.clone(), None); + let sender = self.sender.clone(); + // Update the feeds right after the Application is initialized. + gtk::timeout_add_seconds(2, move || { + utils::refresh_feed(header.clone(), None, sender.clone()); glib::Continue(false) - }), - ); + }); - let content = self.content.clone(); let header = self.header.clone(); + let sender = self.sender.clone(); // Auto-updater, runs every hour. // TODO: expose the interval in which it run to a user setting. // TODO: show notifications. - gtk::timeout_add_seconds( - 3600, - clone!(content => move || { - utils::refresh_feed(content.clone(), header.clone(), None); + gtk::timeout_add_seconds(3600, move || { + utils::refresh_feed(header.clone(), None, sender.clone()); glib::Continue(true) - }), - ); + }); // Run a database checkup once the application is initialized. - gtk::idle_add(move || { + gtk::timeout_add(300, || { let _ = checkup(); glib::Continue(false) }); } - pub fn run(&self) { + pub fn run(self) { let window = self.window.clone(); let app = self.app_instance.clone(); self.app_instance.connect_startup(move |_| { @@ -147,6 +128,28 @@ impl App { self.setup_timed_callbacks(); self.setup_actions(); + let content = self.content.clone(); + let headerbar = self.header.clone(); + let sender = self.sender.clone(); + let receiver = self.receiver; + gtk::timeout_add(250, move || { + match receiver.try_recv() { + Ok(Action::UpdateSources(source)) => { + if let Some(s) = source { + utils::refresh_feed(headerbar.clone(), Some(vec![s]), sender.clone()) + } + } + Ok(Action::RefreshViews) => content.update(), + Ok(Action::RefreshEpisodesViewBGR) => content.update_episode_view_if_baground(), + Ok(Action::HeaderBarShowTile(title)) => headerbar.switch_to_back(&title), + Ok(Action::HeaderBarNormal) => headerbar.switch_to_normal(), + Ok(Action::HeaderBarHideUpdateIndicator) => headerbar.hide_update_notification(), + _ => (), + } + + Continue(true) + }); + ApplicationExtManual::run(&self.app_instance, &[]); } } diff --git a/hammond-gtk/src/content.rs b/hammond-gtk/src/content.rs index 6293d59..0480512 100644 --- a/hammond-gtk/src/content.rs +++ b/hammond-gtk/src/content.rs @@ -1,4 +1,5 @@ use gtk; +use gtk::Cast; use gtk::prelude::*; use hammond_data::Podcast; @@ -9,30 +10,33 @@ use views::empty::EmptyView; use views::episodes::EpisodesView; use widgets::show::ShowWidget; -use headerbar::Header; +use app::Action; -use std::rc::Rc; +use std::sync::Arc; +use std::sync::mpsc::Sender; #[derive(Debug, Clone)] pub struct Content { stack: gtk::Stack, - shows: Rc, - episodes: Rc, + shows: Arc, + episodes: Arc, + sender: Sender, } impl Content { - pub fn new(header: Rc
) -> Rc { + pub fn new(sender: Sender) -> Arc { let stack = gtk::Stack::new(); - let episodes = EpisodeStack::new(); - let shows = ShowStack::new(header, episodes.clone()); + let episodes = EpisodeStack::new(sender.clone()); + let shows = ShowStack::new(sender.clone()); stack.add_titled(&episodes.stack, "episodes", "Episodes"); stack.add_titled(&shows.stack, "shows", "Shows"); - Rc::new(Content { + Arc::new(Content { stack, shows, episodes, + sender, }) } @@ -45,6 +49,12 @@ impl Content { self.episodes.update(); } + pub fn update_episode_view_if_baground(&self) { + if self.stack.get_visible_child_name() != Some("episodes".into()) { + self.episodes.update(); + } + } + pub fn update_shows_view(&self) { self.shows.update(); } @@ -53,7 +63,7 @@ impl Content { self.stack.clone() } - pub fn get_shows(&self) -> Rc { + pub fn get_shows(&self) -> Arc { self.shows.clone() } } @@ -61,21 +71,19 @@ impl Content { #[derive(Debug, Clone)] pub struct ShowStack { stack: gtk::Stack, - header: Rc
, - epstack: Rc, + sender: Sender, } impl ShowStack { - fn new(header: Rc
, epstack: Rc) -> Rc { + fn new(sender: Sender) -> Arc { let stack = gtk::Stack::new(); - let show = Rc::new(ShowStack { + let show = Arc::new(ShowStack { stack, - header: header.clone(), - epstack, + sender: sender.clone(), }); - let pop = ShowsPopulated::new(show.clone(), header); + let pop = ShowsPopulated::new(show.clone(), sender.clone()); let widget = ShowWidget::default(); let empty = EmptyView::new(); @@ -103,10 +111,31 @@ impl ShowStack { pub fn update_podcasts(&self) { let vis = self.stack.get_visible_child_name().unwrap(); - let old = self.stack.get_child_by_name("podcasts").unwrap(); - let pop = ShowsPopulated::default(); - pop.init(Rc::new(self.clone()), self.header.clone()); + let old = self.stack + .get_child_by_name("podcasts") + // This is guaranted to exists, based on `ShowStack::new()`. + .unwrap() + .downcast::() + // This is guaranted to be a Box based on the `ShowsPopulated` impl. + .unwrap(); + debug!("Name: {:?}", WidgetExt::get_name(&old)); + + let scrolled_window = old.get_children() + .first() + // This is guaranted to exist based on the show_widget.ui file. + .unwrap() + .clone() + .downcast::() + // This is guaranted based on the show_widget.ui file. + .unwrap(); + debug!("Name: {:?}", WidgetExt::get_name(&scrolled_window)); + + let pop = ShowsPopulated::new(Arc::new(self.clone()), self.sender.clone()); + // Copy the vertical scrollbar adjustment from the old view into the new one. + scrolled_window + .get_vadjustment() + .map(|x| pop.set_vadjustment(&x)); self.stack.remove(&old); self.stack.add_named(&pop.container, "podcasts"); @@ -123,8 +152,30 @@ impl ShowStack { } pub fn replace_widget(&self, pd: &Podcast) { - let old = self.stack.get_child_by_name("widget").unwrap(); - let new = ShowWidget::new(Rc::new(self.clone()), self.header.clone(), pd); + let old = self.stack + .get_child_by_name("widget") + // This is guaranted to exists, based on `ShowStack::new()`. + .unwrap() + .downcast::() + // This is guaranted to be a Box based on the `ShowWidget` impl. + .unwrap(); + debug!("Name: {:?}", WidgetExt::get_name(&old)); + + let scrolled_window = old.get_children() + .first() + // This is guaranted to exist based on the show_widget.ui file. + .unwrap() + .clone() + .downcast::() + // This is guaranted based on the show_widget.ui file. + .unwrap(); + debug!("Name: {:?}", WidgetExt::get_name(&scrolled_window)); + + let new = ShowWidget::new(Arc::new(self.clone()), pd, self.sender.clone()); + // Copy the vertical scrollbar adjustment from the old view into the new one. + scrolled_window + .get_vadjustment() + .map(|x| new.set_vadjustment(&x)); self.stack.remove(&old); self.stack.add_named(&new.container, "widget"); @@ -164,14 +215,13 @@ impl ShowStack { #[derive(Debug, Clone)] pub struct EpisodeStack { - // populated: RecentEpisodes, - // empty: EmptyView, stack: gtk::Stack, + sender: Sender, } impl EpisodeStack { - fn new() -> Rc { - let episodes = EpisodesView::new(); + fn new(sender: Sender) -> Arc { + let episodes = EpisodesView::new(sender.clone()); let empty = EmptyView::new(); let stack = gtk::Stack::new(); @@ -184,16 +234,34 @@ impl EpisodeStack { stack.set_visible_child_name("episodes"); } - Rc::new(EpisodeStack { - // empty, - // populated: pop, - stack, - }) + Arc::new(EpisodeStack { stack, sender }) } pub fn update(&self) { - let old = self.stack.get_child_by_name("episodes").unwrap(); - let eps = EpisodesView::new(); + let old = self.stack + .get_child_by_name("episodes") + // This is guaranted to exists, based on `EpisodeStack::new()`. + .unwrap() + .downcast::() + // This is guaranted to be a Box based on the `EpisodesView` impl. + .unwrap(); + debug!("Name: {:?}", WidgetExt::get_name(&old)); + + let scrolled_window = old.get_children() + .first() + // This is guaranted to exist based on the episodes_view.ui file. + .unwrap() + .clone() + .downcast::() + // This is guaranted based on the episodes_view.ui file. + .unwrap(); + debug!("Name: {:?}", WidgetExt::get_name(&scrolled_window)); + + let eps = EpisodesView::new(self.sender.clone()); + // Copy the vertical scrollbar adjustment from the old view into the new one. + scrolled_window + .get_vadjustment() + .map(|x| eps.set_vadjustment(&x)); self.stack.remove(&old); self.stack.add_named(&eps.container, "episodes"); diff --git a/hammond-gtk/src/headerbar.rs b/hammond-gtk/src/headerbar.rs index 2244c0c..7c251fb 100644 --- a/hammond-gtk/src/headerbar.rs +++ b/hammond-gtk/src/headerbar.rs @@ -3,9 +3,10 @@ use gtk::prelude::*; use hammond_data::Source; -use std::rc::Rc; +use std::sync::mpsc::Sender; +use std::sync::Arc; -use utils; +use app::Action; use content::Content; #[derive(Debug, Clone)] @@ -48,13 +49,13 @@ impl Default for Header { impl Header { #[allow(dead_code)] - pub fn new(content: Rc) -> Rc
{ + pub fn new(content: Arc, sender: Sender) -> Arc
{ let h = Header::default(); - h.init(content); - Rc::new(h) + h.init(content, sender); + Arc::new(h) } - pub fn init(&self, content: Rc) { + pub fn init(&self, content: Arc, sender: Sender) { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/headerbar.ui"); let add_popover: gtk::Popover = builder.get_object("add_popover").unwrap(); @@ -66,12 +67,13 @@ impl Header { println!("{:?}", url.get_text()); }); - let header = Rc::new(self.clone()); - add_button.connect_clicked(clone!(content, header, add_popover, new_url => move |_| { - on_add_bttn_clicked(content.clone(), header.clone(), &new_url); + add_button.connect_clicked(clone!(add_popover, new_url, sender => move |_| { + on_add_bttn_clicked(&new_url, sender.clone()); add_popover.hide(); })); + self.add_toggle.set_popover(&add_popover); + let switch = &self.switch; let add_toggle = &self.add_toggle; let show_title = &self.show_title; @@ -120,16 +122,14 @@ impl Header { } } -fn on_add_bttn_clicked(content: Rc, headerbar: Rc
, entry: >k::Entry) { +fn on_add_bttn_clicked(entry: >k::Entry, sender: Sender) { let url = entry.get_text().unwrap_or_default(); let source = Source::from_url(&url); - if let Ok(s) = source { - info!("{:?} feed added", url); - // update the db - utils::refresh_feed(content, headerbar, Some(vec![s])); + if source.is_ok() { + sender.send(Action::UpdateSources(source.ok())).unwrap(); } else { - error!("Feed probably already exists."); + error!("Something went wrong."); error!("Error: {:?}", source.unwrap_err()); } } diff --git a/hammond-gtk/src/utils.rs b/hammond-gtk/src/utils.rs index 26c236d..4928abc 100644 --- a/hammond-gtk/src/utils.rs +++ b/hammond-gtk/src/utils.rs @@ -1,5 +1,4 @@ use send_cell::SendCell; -use glib; use gdk_pixbuf::Pixbuf; use hammond_data::feed; @@ -7,63 +6,34 @@ use hammond_data::{PodcastCoverQuery, Source}; use hammond_downloader::downloader; use std::thread; -use std::cell::RefCell; -use std::sync::mpsc::{channel, Receiver}; -use std::sync::Mutex; -use std::rc::Rc; +use std::sync::mpsc::Sender; +use std::sync::{Arc, Mutex}; use std::collections::HashMap; -use content::Content; use headerbar::Header; +use app::Action; -type Foo = RefCell, Rc
, Receiver)>>; - -// Create a thread local storage that will store the arguments to be transfered. -thread_local!(static GLOBAL: Foo = RefCell::new(None)); - -/// Update the rss feed(s) originating from `Source`. +/// Update the rss feed(s) originating from `source`. /// If `source` is None, Fetches all the `Source` entries in the database and updates them. -/// `delay` represents the desired time in seconds for the thread to sleep before executing. -/// When It's done,it queues up a `podcast_view` refresh. -pub fn refresh_feed(content: Rc, headerbar: Rc
, source: Option>) { +/// When It's done,it queues up a `RefreshViews` action. +pub fn refresh_feed(headerbar: Arc
, source: Option>, sender: Sender) { headerbar.show_update_notification(); - // Create a async channel. - let (sender, receiver) = channel(); - - // Pass the desired arguments into the Local Thread Storage. - GLOBAL.with(clone!(content, headerbar => move |global| { - *global.borrow_mut() = Some((content.clone(), headerbar.clone(), receiver)); - })); - thread::spawn(move || { if let Some(s) = source { feed::index_loop(s); } else { - let e = feed::index_all(); - if let Err(err) = e { + if let Err(err) = feed::index_all() { error!("Error While trying to update the database."); error!("Error msg: {}", err); - }; + } }; - sender.send(true).expect("Couldn't send data to channel");; - glib::idle_add(refresh_everything); + sender.send(Action::HeaderBarHideUpdateIndicator).unwrap(); + sender.send(Action::RefreshViews).unwrap(); }); } -fn refresh_everything() -> glib::Continue { - GLOBAL.with(|global| { - if let Some((ref content, ref headerbar, ref reciever)) = *global.borrow() { - if reciever.try_recv().is_ok() { - content.update(); - headerbar.hide_update_notification(); - } - } - }); - glib::Continue(false) -} - lazy_static! { static ref CACHED_PIXBUFS: Mutex>>> = { Mutex::new(HashMap::new()) diff --git a/hammond-gtk/src/views/episodes.rs b/hammond-gtk/src/views/episodes.rs index 7a4d794..c0b04a8 100644 --- a/hammond-gtk/src/views/episodes.rs +++ b/hammond-gtk/src/views/episodes.rs @@ -7,8 +7,10 @@ use hammond_data::EpisodeWidgetQuery; use widgets::episode::EpisodeWidget; use utils::get_pixbuf_from_path; +use app::Action; -use std::rc::Rc; +use std::sync::mpsc::Sender; +use std::sync::Arc; #[derive(Debug, Clone)] enum ListSplit { @@ -22,6 +24,7 @@ enum ListSplit { #[derive(Debug, Clone)] pub struct EpisodesView { pub container: gtk::Box, + scrolled_window: gtk::ScrolledWindow, frame_parent: gtk::Box, today_box: gtk::Box, yday_box: gtk::Box, @@ -39,6 +42,7 @@ impl Default for EpisodesView { fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episodes_view.ui"); let container: gtk::Box = builder.get_object("container").unwrap(); + let scrolled_window: gtk::ScrolledWindow = builder.get_object("scrolled_window").unwrap(); let frame_parent: gtk::Box = builder.get_object("frame_parent").unwrap(); let today_box: gtk::Box = builder.get_object("today_box").unwrap(); let yday_box: gtk::Box = builder.get_object("yday_box").unwrap(); @@ -53,6 +57,7 @@ impl Default for EpisodesView { EpisodesView { container, + scrolled_window, frame_parent, today_box, yday_box, @@ -68,14 +73,15 @@ impl Default for EpisodesView { } } +// TODO: REFACTOR ME impl EpisodesView { - pub fn new() -> Rc { + pub fn new(sender: Sender) -> Arc { let view = EpisodesView::default(); let episodes = dbqueries::get_episodes_widgets_with_limit(100).unwrap(); let now_utc = Utc::now(); episodes.into_iter().for_each(|mut ep| { - let viewep = EpisodesViewWidget::new(&mut ep); + let viewep = EpisodesViewWidget::new(&mut ep, sender.clone()); let t = split(&now_utc, i64::from(ep.epoch())); match t { @@ -118,7 +124,7 @@ impl EpisodesView { } view.container.show_all(); - Rc::new(view) + Arc::new(view) } pub fn is_empty(&self) -> bool { @@ -144,6 +150,11 @@ impl EpisodesView { true } + + /// Set scrolled window vertical adjustment. + pub fn set_vadjustment(&self, vadjustment: >k::Adjustment) { + self.scrolled_window.set_vadjustment(vadjustment) + } } fn split(now: &DateTime, epoch: i64) -> ListSplit { @@ -187,7 +198,7 @@ impl Default for EpisodesViewWidget { } impl EpisodesViewWidget { - fn new(episode: &mut EpisodeWidgetQuery) -> EpisodesViewWidget { + fn new(episode: &mut EpisodeWidgetQuery, sender: Sender) -> EpisodesViewWidget { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/episodes_view_widget.ui"); let container: gtk::Box = builder.get_object("container").unwrap(); @@ -200,7 +211,7 @@ impl EpisodesViewWidget { } } - let ep = EpisodeWidget::new(episode); + let ep = EpisodeWidget::new(episode, sender.clone()); container.pack_start(&ep.container, true, true, 6); EpisodesViewWidget { diff --git a/hammond-gtk/src/views/shows.rs b/hammond-gtk/src/views/shows.rs index 46b2865..df8dc57 100644 --- a/hammond-gtk/src/views/shows.rs +++ b/hammond-gtk/src/views/shows.rs @@ -7,51 +7,52 @@ use hammond_data::Podcast; use utils::get_pixbuf_from_path; use content::ShowStack; -use headerbar::Header; +use app::Action; -use std::rc::Rc; +use std::sync::mpsc::Sender; +use std::sync::Arc; #[derive(Debug, Clone)] pub struct ShowsPopulated { pub container: gtk::Box, + scrolled_window: gtk::ScrolledWindow, flowbox: gtk::FlowBox, - viewport: gtk::Viewport, } impl Default for ShowsPopulated { fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/shows_view.ui"); let container: gtk::Box = builder.get_object("fb_parent").unwrap(); + let scrolled_window: gtk::ScrolledWindow = builder.get_object("scrolled_window").unwrap(); let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap(); - let viewport: gtk::Viewport = builder.get_object("viewport").unwrap(); ShowsPopulated { container, + scrolled_window, flowbox, - viewport, } } } impl ShowsPopulated { - pub fn new(show: Rc, header: Rc
) -> ShowsPopulated { + pub fn new(show: Arc, sender: Sender) -> ShowsPopulated { let pop = ShowsPopulated::default(); - pop.init(show, header); + pop.init(show, sender); pop } - pub fn init(&self, show: Rc, header: Rc
) { + pub fn init(&self, show: Arc, sender: Sender) { use gtk::WidgetExt; // TODO: handle unwraps. self.flowbox - .connect_child_activated(clone!(show => move |_, child| { + .connect_child_activated(clone!(show, sender => move |_, child| { // This is such an ugly hack... let id = WidgetExt::get_name(child).unwrap().parse::().unwrap(); let pd = dbqueries::get_podcast_from_id(id).unwrap(); show.replace_widget(&pd); - header.switch_to_back(pd.title()); + sender.send(Action::HeaderBarShowTile(pd.title().into())).unwrap(); show.switch_widget_animated(); })); // Populate the flowbox with the Podcasts. @@ -73,6 +74,11 @@ impl ShowsPopulated { pub fn is_empty(&self) -> bool { self.flowbox.get_children().is_empty() } + + /// Set scrolled window vertical adjustment. + pub fn set_vadjustment(&self, vadjustment: >k::Adjustment) { + self.scrolled_window.set_vadjustment(vadjustment) + } } #[derive(Debug)] diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs index b0bafbe..c9245e8 100644 --- a/hammond-gtk/src/widgets/episode.rs +++ b/hammond-gtk/src/widgets/episode.rs @@ -15,6 +15,10 @@ use hammond_downloader::downloader; use app::DOWNLOADS_MANAGER; +use app::Action; + +use std::thread; +use std::sync::mpsc::Sender; use std::path::Path; #[derive(Debug, Clone)] @@ -71,24 +75,30 @@ impl Default for EpisodeWidget { } impl EpisodeWidget { - pub fn new(episode: &mut EpisodeWidgetQuery) -> EpisodeWidget { + pub fn new(episode: &mut EpisodeWidgetQuery, sender: Sender) -> EpisodeWidget { let widget = EpisodeWidget::default(); - widget.init(episode); + widget.init(episode, sender); widget } // TODO: calculate lenght. // TODO: wire the progress_bar to the downloader. // TODO: wire the cancel button. - fn init(&self, episode: &mut EpisodeWidgetQuery) { - self.title.set_xalign(0.0); - self.title.set_text(episode.title()); + fn init(&self, episode: &mut EpisodeWidgetQuery, sender: Sender) { + // Set the title label state. + self.set_title(episode); - if episode.played().is_some() { - self.title - .get_style_context() - .map(|c| c.add_class("dim-label")); - } + // Set the size label. + self.set_size(episode.length()); + + // Set the duaration label. + self.set_duration(episode.duration()); + + // Set the date label. + self.set_date(episode.epoch()); + + // Show or hide the play/delete/download buttons upon widget initialization. + self.show_buttons(episode.local_uri()); { let m = DOWNLOADS_MANAGER.lock().unwrap(); @@ -98,6 +108,77 @@ impl EpisodeWidget { }; } + let title = &self.title; + self.play + .connect_clicked(clone!(episode, title, sender => move |_| { + let mut episode = episode.clone(); + on_play_bttn_clicked(episode.rowid()); + if episode.set_played_now().is_ok() { + title + .get_style_context() + .map(|c| c.add_class("dim-label")); + sender.send(Action::RefreshEpisodesViewBGR).unwrap(); + }; + })); + + let cancel = &self.cancel; + let progress = self.progress.clone(); + self.download + .connect_clicked(clone!(episode, cancel, progress, sender => move |dl| { + on_download_clicked( + &mut episode.clone(), + dl, + &cancel, + progress.clone(), + sender.clone() + ); + })); + } + + /// Show or hide the play/delete/download buttons upon widget initialization. + fn show_buttons(&self, local_uri: Option<&str>) { + if local_uri.is_some() && Path::new(local_uri.unwrap()).exists() { + self.download.hide(); + self.play.show(); + } + } + + /// Determine the title state. + fn set_title(&self, episode: &EpisodeWidgetQuery) { + self.title.set_xalign(0.0); + self.title.set_text(episode.title()); + + // Grey out the title if the episode is played. + if episode.played().is_some() { + self.title + .get_style_context() + .map(|c| c.add_class("dim-label")); + } + } + + /// Set the date label depending on the current time. + fn set_date(&self, epoch: i32) { + let now = Utc::now(); + let date = Utc.timestamp(i64::from(epoch), 0); + if now.year() == date.year() { + self.date.set_text(&date.format("%e %b").to_string().trim()); + } else { + self.date + .set_text(&date.format("%e %b %Y").to_string().trim()); + }; + } + + /// Set the duration label. + fn set_duration(&self, seconds: Option) { + if let Some(secs) = seconds { + self.duration.set_text(&format!("{} min", secs / 60)); + self.duration.show(); + self.separator1.show(); + } + } + + /// Set the Episode label dependings on its size + fn set_size(&self, bytes: Option) { // Declare a custom humansize option struct // See: https://docs.rs/humansize/1.0.2/humansize/file_size_opts/struct.FileSizeOpts.html let custom_options = size_opts::FileSizeOpts { @@ -112,7 +193,7 @@ impl EpisodeWidget { allow_negative: false, }; - if let Some(size) = episode.length() { + if let Some(size) = bytes { if size != 0 { let s = size.file_size(custom_options); if let Ok(s) = s { @@ -122,51 +203,6 @@ impl EpisodeWidget { } } }; - - if let Some(secs) = episode.duration() { - self.duration.set_text(&format!("{} min", secs / 60)); - self.duration.show(); - self.separator1.show(); - }; - - let now = Utc::now(); - let date = Utc.timestamp(i64::from(episode.epoch()), 0); - if now.year() == date.year() { - self.date.set_text(&date.format("%e %b").to_string()); - } else { - self.date.set_text(&date.format("%e %b %Y").to_string()); - }; - - // Show or hide the play/delete/download buttons upon widget initialization. - let local_uri = episode.local_uri(); - if local_uri.is_some() && Path::new(local_uri.unwrap()).exists() { - self.download.hide(); - self.play.show(); - } - - let title = &self.title; - self.play - .connect_clicked(clone!(episode, title => move |_| { - let mut episode = episode.clone(); - on_play_bttn_clicked(episode.rowid()); - if episode.set_played_now().is_ok() { - title - .get_style_context() - .map(|c| c.add_class("dim-label")); - }; - })); - - let cancel = &self.cancel; - let progress = self.progress.clone(); - self.download - .connect_clicked(clone!(episode, cancel, progress => move |dl| { - on_download_clicked( - &episode, - dl, - &cancel, - progress.clone() - ); - })); } fn show_progess_bar(&self) { @@ -187,6 +223,7 @@ fn on_download_clicked( download_bttn: >k::Button, cancel_bttn: >k::Button, progress_bar: gtk::ProgressBar, + sender: Sender, ) { let progress = progress_bar.clone(); @@ -206,6 +243,7 @@ fn on_download_clicked( let man = DOWNLOADS_MANAGER.lock().unwrap(); man.add(ep.rowid(), &download_fold); } + sender.send(Action::RefreshEpisodesViewBGR).unwrap(); } fn on_play_bttn_clicked(episode_id: i32) { @@ -240,13 +278,13 @@ fn on_play_bttn_clicked(episode_id: i32) { // }; // } -pub fn episodes_listbox(pd: &Podcast) -> Result { +pub fn episodes_listbox(pd: &Podcast, sender: Sender) -> Result { let mut episodes = dbqueries::get_pd_episodeswidgets(pd)?; let list = gtk::ListBox::new(); episodes.iter_mut().for_each(|ep| { - let widget = EpisodeWidget::new(ep); + let widget = EpisodeWidget::new(ep, sender.clone()); list.add(&widget.container); }); diff --git a/hammond-gtk/src/widgets/show.rs b/hammond-gtk/src/widgets/show.rs index 0da781f..37a571e 100644 --- a/hammond-gtk/src/widgets/show.rs +++ b/hammond-gtk/src/widgets/show.rs @@ -12,14 +12,17 @@ use hammond_downloader::downloader; use widgets::episode::episodes_listbox; use utils::get_pixbuf_from_path; use content::ShowStack; -use headerbar::Header; +use app::Action; -use std::rc::Rc; +use std::sync::mpsc::Sender; +use std::sync::Arc; +use std::thread; use std::fs; #[derive(Debug, Clone)] pub struct ShowWidget { pub container: gtk::Box, + scrolled_window: gtk::ScrolledWindow, cover: gtk::Image, description: gtk::Label, link: gtk::Button, @@ -32,6 +35,7 @@ impl Default for ShowWidget { fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/show_widget.ui"); let container: gtk::Box = builder.get_object("container").unwrap(); + let scrolled_window: gtk::ScrolledWindow = builder.get_object("scrolled_window").unwrap(); let episodes: gtk::Frame = builder.get_object("episodes").unwrap(); let cover: gtk::Image = builder.get_object("cover").unwrap(); @@ -42,6 +46,7 @@ impl Default for ShowWidget { ShowWidget { container, + scrolled_window, cover, description, unsub, @@ -53,67 +58,95 @@ impl Default for ShowWidget { } impl ShowWidget { - pub fn new(shows: Rc, header: Rc
, pd: &Podcast) -> ShowWidget { + pub fn new(shows: Arc, pd: &Podcast, sender: Sender) -> ShowWidget { let pdw = ShowWidget::default(); - pdw.init(shows, header, pd); + pdw.init(shows, pd, sender); pdw } - pub fn init(&self, shows: Rc, header: Rc
, pd: &Podcast) { + pub fn init(&self, shows: Arc, pd: &Podcast, sender: Sender) { + // Hacky workaround so the pd.id() can be retrieved from the `ShowStack`. WidgetExt::set_name(&self.container, &pd.id().to_string()); - self.unsub.connect_clicked(clone!(shows, pd => move |bttn| { - on_unsub_button_clicked(shows.clone(), &pd, bttn); - header.switch_to_normal(); + self.unsub + .connect_clicked(clone!(shows, pd, sender => move |bttn| { + on_unsub_button_clicked(shows.clone(), &pd, bttn, sender.clone()); + sender.send(Action::HeaderBarNormal).unwrap(); })); - let listbox = episodes_listbox(pd); - if let Ok(l) = listbox { - self.episodes.add(&l); - } - - // TODO: Temporary solution until we render html urls/bold/italic probably with markup. - let desc = dissolve::strip_html_tags(pd.description()).join(" "); - self.description.set_text(&replace_extra_spaces(&desc)); - - let img = get_pixbuf_from_path(&pd.clone().into(), 128); - if let Some(i) = img { - self.cover.set_from_pixbuf(&i); - } + self.setup_listbox(pd, sender.clone()); + self.set_cover(pd); + self.set_description(pd.description()); let link = pd.link().to_owned(); + self.link.set_tooltip_text(Some(link.as_str())); self.link.connect_clicked(move |_| { info!("Opening link: {}", &link); let _ = open::that(&link); }); + } - // self.played.connect_clicked(clone!(shows, pd => move |_| { - // on_played_button_clicked(shows.clone(), &pd); - // })); + /// Populate the listbox with the shows episodes. + fn setup_listbox(&self, pd: &Podcast, sender: Sender) { + let listbox = episodes_listbox(pd, sender.clone()); + if let Ok(l) = listbox { + self.episodes.add(&l); + } + } + + /// Set the show cover. + fn set_cover(&self, pd: &Podcast) { + let img = get_pixbuf_from_path(&pd.clone().into(), 128); + if let Some(i) = img { + self.cover.set_from_pixbuf(&i); + } + } + + /// Set the descripton text. + fn set_description(&self, text: &str) { + // TODO: Temporary solution until we render html urls/bold/italic probably with markup. + let desc = dissolve::strip_html_tags(text).join(" "); + self.description.set_text(&replace_extra_spaces(&desc)); + } + + /// Set scrolled window vertical adjustment. + pub fn set_vadjustment(&self, vadjustment: >k::Adjustment) { + self.scrolled_window.set_vadjustment(vadjustment) } } -fn on_unsub_button_clicked(shows: Rc, pd: &Podcast, unsub_button: >k::Button) { - let res = dbqueries::remove_feed(pd); - if res.is_ok() { - info!("{} was removed succesfully.", pd.title()); - // hack to get away without properly checking for none. - // if pressed twice would panic. - unsub_button.hide(); +fn on_unsub_button_clicked( + shows: Arc, + pd: &Podcast, + unsub_button: >k::Button, + sender: Sender, +) { + // hack to get away without properly checking for none. + // if pressed twice would panic. + unsub_button.hide(); + // Spawn a thread so it won't block the ui. + thread::spawn(clone!(pd => move || { + let res = dbqueries::remove_feed(&pd); + if res.is_ok() { + info!("{} was removed succesfully.", pd.title()); - let dl_fold = downloader::get_download_folder(pd.title()); - if let Ok(fold) = dl_fold { - let res3 = fs::remove_dir_all(&fold); - if res3.is_ok() { - info!("All the content at, {} was removed succesfully", &fold); - } - }; - } + let dl_fold = downloader::get_download_folder(pd.title()); + if let Ok(fold) = dl_fold { + let res3 = fs::remove_dir_all(&fold); + // TODO: Show errors? + if res3.is_ok() { + info!("All the content at, {} was removed succesfully", &fold); + } + }; + } + })); shows.switch_podcasts_animated(); + // Queue a refresh after the switch to avoid blocking the db. + sender.send(Action::RefreshViews).unwrap(); } #[allow(dead_code)] -fn on_played_button_clicked(shows: Rc, pd: &Podcast) { +fn on_played_button_clicked(shows: Arc, pd: &Podcast) { let _ = dbqueries::update_none_to_played_now(pd); shows.update_widget();