add a providers page & update deps

This commit is contained in:
Bilal Elmoussaoui 2020-11-16 17:13:40 +01:00
parent 2d9cadbe99
commit c581c12ab3
22 changed files with 775 additions and 358 deletions

365
Cargo.lock generated
View file

@ -111,9 +111,9 @@ dependencies = [
"serde_repr 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"strum 0.19.5 (registry+https://github.com/rust-lang/crates.io-index)",
"strum_macros 0.19.4 (registry+https://github.com/rust-lang/crates.io-index)",
"zbus 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"zvariant 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"zvariant_derive 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"zbus 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"zvariant 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"zvariant_derive 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -123,19 +123,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"concurrent-queue 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"event-listener 2.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "async-executor"
version = "1.3.0"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"async-task 4.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"concurrent-queue 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"fastrand 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-lite 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"vec-arena 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -144,16 +144,16 @@ name = "async-global-executor"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"async-executor 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"async-io 1.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"async-executor 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"async-io 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-lite 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "async-io"
version = "1.1.10"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"concurrent-queue 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -162,7 +162,7 @@ dependencies = [
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
"nb-connect 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"parking 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"polling 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"vec-arena 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -184,20 +184,20 @@ version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"async-global-executor 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"async-io 1.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"async-io 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"async-mutex 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"blocking 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"crossbeam-utils 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-lite 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"gloo-timers 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"kv-log-macro 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
"memchr 2.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project-lite 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -219,30 +219,6 @@ dependencies = [
"syn 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "atk"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
dependencies = [
"atk-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"glib 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gobject-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "atk-sys"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
dependencies = [
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gobject-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
"system-deps 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "atomic-waker"
version = "1.0.0"
@ -266,7 +242,7 @@ dependencies = [
"ashpd 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"diesel 1.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"diesel_migrations 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"gdk-pixbuf 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gdk4 0.1.0 (git+https://github.com/gtk-rs/gtk4-rs)",
"gettext-rs 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -298,7 +274,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "base-x"
version = "0.2.7"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -364,7 +340,7 @@ dependencies = [
"atomic-waker 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"fastrand 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-lite 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -400,7 +376,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "cairo-rs"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cairo-sys-rs 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -415,7 +391,7 @@ dependencies = [
[[package]]
name = "cairo-sys-rs"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
@ -463,7 +439,7 @@ dependencies = [
[[package]]
name = "cmake"
version = "0.1.44"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cc 1.0.62 (registry+https://github.com/rust-lang/crates.io-index)",
@ -595,7 +571,7 @@ dependencies = [
"openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"openssl-sys 0.9.58 (registry+https://github.com/rust-lang/crates.io-index)",
"schannel 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)",
"socket2 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
"socket2 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -758,6 +734,16 @@ dependencies = [
"instant 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "flume"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-sink 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"spinning_top 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "fnv"
version = "1.0.7"
@ -786,7 +772,7 @@ name = "freetype-sys"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cmake 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)",
"cmake 0.1.45 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
"pkg-config 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -798,45 +784,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "futures"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-executor 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-sink 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-task 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-executor 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-sink 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-task 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "futures-channel"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-sink 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-sink 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "futures-core"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "futures-executor"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-task 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-task 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "futures-io"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -845,8 +831,8 @@ version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fastrand 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"memchr 2.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"parking 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project-lite 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
@ -855,7 +841,7 @@ dependencies = [
[[package]]
name = "futures-macro"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro-hack 0.5.19 (registry+https://github.com/rust-lang/crates.io-index)",
@ -866,28 +852,28 @@ dependencies = [
[[package]]
name = "futures-sink"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "futures-task"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "futures-util"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-macro 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-sink 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-task 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-macro 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-sink 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-task 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"memchr 2.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -899,7 +885,7 @@ dependencies = [
[[package]]
name = "gdk-pixbuf"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"gdk-pixbuf-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gio 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -913,7 +899,7 @@ dependencies = [
[[package]]
name = "gdk-pixbuf-sys"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"gio-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -925,7 +911,7 @@ dependencies = [
[[package]]
name = "gdk4"
version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#59153da62b6ed59bb9820fb0898da80263a2500a"
source = "git+https://github.com/gtk-rs/gtk4-rs#95e9521e3b8a1113e42fc15c1e805ca5175a850e"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cairo-rs 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -944,7 +930,7 @@ dependencies = [
[[package]]
name = "gdk4-sys"
version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#59153da62b6ed59bb9820fb0898da80263a2500a"
source = "git+https://github.com/gtk-rs/gtk4-rs#95e9521e3b8a1113e42fc15c1e805ca5175a850e"
dependencies = [
"cairo-sys-rs 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gdk-pixbuf-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -1006,33 +992,33 @@ version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"color_quant 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"weezl 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"weezl 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "gio"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"gio-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"glib 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gobject-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"thiserror 1.0.22 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "gio-sys"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gobject-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -1044,26 +1030,26 @@ dependencies = [
[[package]]
name = "glib"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-executor 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-task 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-executor 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-task 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"glib-macros 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gobject-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "glib-macros"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"anyhow 1.0.34 (registry+https://github.com/rust-lang/crates.io-index)",
"heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1078,7 +1064,7 @@ dependencies = [
[[package]]
name = "glib-sys"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
"system-deps 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1089,8 +1075,8 @@ name = "gloo-timers"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"js-sys 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
"web-sys 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1099,7 +1085,7 @@ dependencies = [
[[package]]
name = "gobject-sys"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1109,7 +1095,7 @@ dependencies = [
[[package]]
name = "graphene-rs"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"glib 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -1121,7 +1107,7 @@ dependencies = [
[[package]]
name = "graphene-sys"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gobject-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -1133,7 +1119,7 @@ dependencies = [
[[package]]
name = "gsk4"
version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#59153da62b6ed59bb9820fb0898da80263a2500a"
source = "git+https://github.com/gtk-rs/gtk4-rs#95e9521e3b8a1113e42fc15c1e805ca5175a850e"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cairo-rs 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -1153,7 +1139,7 @@ dependencies = [
[[package]]
name = "gsk4-sys"
version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#59153da62b6ed59bb9820fb0898da80263a2500a"
source = "git+https://github.com/gtk-rs/gtk4-rs#95e9521e3b8a1113e42fc15c1e805ca5175a850e"
dependencies = [
"cairo-sys-rs 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gdk4-sys 0.1.0 (git+https://github.com/gtk-rs/gtk4-rs)",
@ -1173,10 +1159,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "gtk4"
version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#59153da62b6ed59bb9820fb0898da80263a2500a"
source = "git+https://github.com/gtk-rs/gtk4-rs#95e9521e3b8a1113e42fc15c1e805ca5175a850e"
dependencies = [
"atk 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"atk-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cairo-rs 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"cairo-sys-rs 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -1195,7 +1179,7 @@ dependencies = [
"gsk4-sys 0.1.0 (git+https://github.com/gtk-rs/gtk4-rs)",
"gtk4-sys 0.1.0 (git+https://github.com/gtk-rs/gtk4-rs)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pango 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"pango-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
]
@ -1203,9 +1187,8 @@ dependencies = [
[[package]]
name = "gtk4-sys"
version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#59153da62b6ed59bb9820fb0898da80263a2500a"
source = "git+https://github.com/gtk-rs/gtk4-rs#95e9521e3b8a1113e42fc15c1e805ca5175a850e"
dependencies = [
"atk-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"cairo-sys-rs 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gdk-pixbuf-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gdk4-sys 0.1.0 (git+https://github.com/gtk-rs/gtk4-rs)",
@ -1224,7 +1207,7 @@ name = "heck"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-segmentation 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1288,14 +1271,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"async-std 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"async-trait 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
"http-types 2.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"isahc 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)",
"http-types 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"isahc 0.9.13 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "http-types"
version = "2.7.0"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"anyhow 1.0.34 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1329,7 +1312,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-normalization 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-normalization 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1365,24 +1348,24 @@ dependencies = [
[[package]]
name = "isahc"
version = "0.9.11"
version = "0.9.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bytes 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
"crossbeam-channel 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
"crossbeam-utils 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"curl 0.4.34 (registry+https://github.com/rust-lang/crates.io-index)",
"curl-sys 0.4.38+curl-7.73.0 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"flume 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-lite 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)",
"http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"sluice 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"sluice 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
"tracing 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tracing-futures 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"url 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"waker-fn 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1436,7 +1419,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "libhandy4"
version = "0.1.0"
source = "git+https://gitlab.gnome.org/bilelmoussaoui/libhandy4-rs#aae9ccf3eabc52d10f8d4fb1ddbdc5e5d336a4ce"
source = "git+https://gitlab.gnome.org/bilelmoussaoui/libhandy4-rs#80834bb478e427a3d776793ad4ff23a2f1f36256"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"gdk-pixbuf 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -1459,7 +1442,7 @@ dependencies = [
[[package]]
name = "libhandy4-sys"
version = "0.1.0"
source = "git+https://gitlab.gnome.org/bilelmoussaoui/libhandy4-rs#aae9ccf3eabc52d10f8d4fb1ddbdc5e5d336a4ce"
source = "git+https://gitlab.gnome.org/bilelmoussaoui/libhandy4-rs#80834bb478e427a3d776793ad4ff23a2f1f36256"
dependencies = [
"gdk-pixbuf-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gdk4-sys 0.1.0 (git+https://github.com/gtk-rs/gtk4-rs)",
@ -1732,7 +1715,7 @@ dependencies = [
[[package]]
name = "once_cell"
version = "1.4.1"
version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -1765,21 +1748,21 @@ dependencies = [
[[package]]
name = "pango"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"glib 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gobject-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"libc 0.2.80 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pango-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
]
[[package]]
name = "pango-sys"
version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#1720bcbedd036342ef717ca2575efbf1554f3d31"
source = "git+https://github.com/gtk-rs/gtk-rs#d4ee5a4c20311aa66f69da5e8d4b2484cc977f0f"
dependencies = [
"glib-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
"gobject-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)",
@ -2339,13 +2322,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "sluice"
version = "0.5.2"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-io 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -2355,7 +2337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "socket2"
version = "0.3.15"
version = "0.3.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2364,6 +2346,14 @@ dependencies = [
"winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "spinning_top"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lock_api 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "standback"
version = "0.2.11"
@ -2402,7 +2392,7 @@ name = "stdweb-internal-macros"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"base-x 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"base-x 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"proc-macro2 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.117 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2447,12 +2437,12 @@ dependencies = [
"async-trait 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"encoding_rs 0.8.26 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
"http-client 6.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"http-types 2.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"http-types 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
"mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project-lite 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.117 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.59 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2524,7 +2514,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"jpeg-decoder 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
"miniz_oxide 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
"weezl 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"weezl 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -2564,7 +2554,15 @@ dependencies = [
[[package]]
name = "tinyvec"
version = "0.3.4"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"tinyvec_macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "tinyvec_macros"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -2637,15 +2635,15 @@ dependencies = [
[[package]]
name = "unicode-normalization"
version = "0.1.13"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"tinyvec 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"tinyvec 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-segmentation"
version = "1.6.0"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -2780,7 +2778,7 @@ dependencies = [
[[package]]
name = "weezl"
version = "0.1.2"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -2830,7 +2828,7 @@ dependencies = [
[[package]]
name = "zbus"
version = "1.2.1"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2838,17 +2836,17 @@ dependencies = [
"enumflags2 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
"fastrand 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"nix 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"scoped-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.117 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_repr 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"zbus_macros 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"zvariant 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"zbus_macros 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"zvariant 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "zbus_macros"
version = "1.2.1"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro-crate 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2859,18 +2857,18 @@ dependencies = [
[[package]]
name = "zvariant"
version = "2.2.0"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"enumflags2 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.117 (registry+https://github.com/rust-lang/crates.io-index)",
"zvariant_derive 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"zvariant_derive 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "zvariant_derive"
version = "2.2.0"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro-crate 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2894,20 +2892,18 @@ dependencies = [
"checksum anyhow 1.0.34 (registry+https://github.com/rust-lang/crates.io-index)" = "bf8dcb5b4bbaa28653b647d8c77bd4ed40183b48882e130c1f1ffb73de069fd7"
"checksum ashpd 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05092d6c609057712953f07e974752926ec8fcf5feed2782e9ed70a2ea0a2304"
"checksum async-channel 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "59740d83946db6a5af71ae25ddf9562c2b176b2ca42cf99a455f09f4a220d6b9"
"checksum async-executor 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d373d78ded7d0b3fa8039375718cde0aace493f2e34fb60f51cbf567562ca801"
"checksum async-executor 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146"
"checksum async-global-executor 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "73079b49cd26b8fd5a15f68fc7707fc78698dc2a3d61430f2a7a9430230dfa04"
"checksum async-io 1.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d54bc4c1c7292475efb2253227dbcfad8fe1ca4c02bc62c510cc2f3da5c4704e"
"checksum async-io 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "40a0b2bb8ae20fede194e779150fe283f65a4a08461b496de546ec366b174ad9"
"checksum async-mutex 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e"
"checksum async-std 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a7e82538bc65a25dbdff70e4c5439d52f068048ab97cdea0acd73f131594caa1"
"checksum async-task 4.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0"
"checksum async-trait 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b246867b8b3b6ae56035f1eb1ed557c1d8eae97f0d53696138a50fa0e3a3b8c0"
"checksum atk 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)" = "<none>"
"checksum atk-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)" = "<none>"
"checksum atomic-waker 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
"checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
"checksum autocfg 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
"checksum base-x 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c2734baf8ed08920ccecce1b48a2dfce4ac74a973144add031163bd21a1c5dab"
"checksum base-x 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b"
"checksum base64 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
"checksum base64 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
@ -2931,7 +2927,7 @@ dependencies = [
"checksum cipher 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
"checksum cloudabi 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467"
"checksum cmake 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)" = "0e56268c17a6248366d66d4a47a3381369d068cce8409bb1716ed77ea32163bb"
"checksum cmake 0.1.45 (registry+https://github.com/rust-lang/crates.io-index)" = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
"checksum color_quant 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
"checksum concurrent-queue 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
"checksum const_fn 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c478836e029dcef17fb47c89023448c64f781a046e0300e257ad8225ae59afab"
@ -2964,21 +2960,22 @@ dependencies = [
"checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
"checksum event-listener 2.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59"
"checksum fastrand 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3"
"checksum flume 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d9e818efa7776f4dd7df0e542f877f7a5a87bddd6a1a10f59a7732b71ffb9d55"
"checksum fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
"checksum form_urlencoded 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00"
"checksum freetype 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6"
"checksum freetype-sys 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
"checksum futures 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "95314d38584ffbfda215621d723e0a3906f032e03ae5551e650058dac83d4797"
"checksum futures-channel 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0448174b01148032eed37ac4aed28963aaaa8cfa93569a08e5b479bbc6c2c151"
"checksum futures-core 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "18eaa56102984bed2c88ea39026cff3ce3b4c7f508ca970cedf2450ea10d4e46"
"checksum futures-executor 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f5f8e0c9258abaea85e78ebdda17ef9666d390e987f006be6080dfe354b708cb"
"checksum futures-io 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6e1798854a4727ff944a7b12aa999f58ce7aa81db80d2dfaaf2ba06f065ddd2b"
"checksum futures 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0"
"checksum futures-channel 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64"
"checksum futures-core 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748"
"checksum futures-executor 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65"
"checksum futures-io 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb"
"checksum futures-lite 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5e6c079abfac3ab269e2927ec048dabc89d009ebfdda6b8ee86624f30c689658"
"checksum futures-macro 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e36fccf3fc58563b4a14d265027c627c3b665d7fed489427e88e7cc929559efe"
"checksum futures-sink 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0e3ca3f17d6e8804ae5d3df7a7d35b2b3a6fe89dac84b31872720fc3060a0b11"
"checksum futures-task 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "96d502af37186c4fef99453df03e374683f8a1eec9dcc1e66b3b82dc8278ce3c"
"checksum futures-util 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "abcb44342f62e6f3e8ac427b8aa815f724fd705dfad060b18ac7866c15bb8e34"
"checksum futures-macro 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556"
"checksum futures-sink 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d"
"checksum futures-task 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d"
"checksum futures-util 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2"
"checksum gdk-pixbuf 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)" = "<none>"
"checksum gdk-pixbuf-sys 0.13.0 (git+https://github.com/gtk-rs/gtk-rs)" = "<none>"
"checksum gdk4 0.1.0 (git+https://github.com/gtk-rs/gtk4-rs)" = "<none>"
@ -3011,13 +3008,13 @@ dependencies = [
"checksum hmac 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840"
"checksum http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9"
"checksum http-client 6.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "010092b71b94ee49293995625ce7a607778b8b4099c8088fa84fd66bd3e0f21c"
"checksum http-types 2.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa4e35764a650ce8e709c50e985431eb8963eee7fc793d923134d4aa8e530b4"
"checksum http-types 2.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6f316f6a06306570e899238d3b85375f350cfceda60ec47807c4164d6e169e58"
"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
"checksum image 0.23.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b4f0a8345b33b082aedec2f4d7d4a926b845cee184cbe78b703413066564431b"
"checksum infer 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
"checksum instant 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "cb1fc4429a33e1f80d41dc9fea4d108a88bec1de8053878898ae448a0b52f613"
"checksum isahc 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0cf84ee8215bcaa999a24870485ef49d051cd858985a80d123e56be2d921d811"
"checksum isahc 0.9.13 (registry+https://github.com/rust-lang/crates.io-index)" = "80aafab09693e9fa74b76ef207c55dc1cba5d9d5dc6dcc1b6a96d008a98000e9"
"checksum itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
"checksum itoa 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6"
"checksum jpeg-decoder 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)" = "cc797adac5f083b8ff0ca6f6294a999393d76e197c36488e2ef732c4715f6fa3"
@ -3056,7 +3053,7 @@ dependencies = [
"checksum objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
"checksum objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
"checksum objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
"checksum once_cell 1.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad"
"checksum once_cell 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0"
"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
"checksum opaque-debug 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
@ -3128,9 +3125,10 @@ dependencies = [
"checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
"checksum sha2 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e7aab86fe2149bad8c507606bdb3f4ef5e7b2380eb92350f56122cca72a42a8"
"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
"checksum sluice 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fed13b7cb46f13a15db2c4740f087a848acc8b31af89f95844d40137451f89b1"
"checksum sluice 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8e24ed1edc8e774f2ec098b0650eec82bfc7c59ddd16cd0e17797bdc92ce2bf1"
"checksum smallvec 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252"
"checksum socket2 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "b1fa70dc5c8104ec096f4fe7ede7a221d35ae13dcd19ba1ad9a81d2cab9a1c44"
"checksum socket2 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "7fd8b795c389288baa5f355489c65e71fd48a02104600d15c4cfbc561e9e429d"
"checksum spinning_top 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7e529d73e80d64b5f2631f9035113347c578a1c9c7774b83a2b880788459ab36"
"checksum standback 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f4e0831040d2cf2bdfd51b844be71885783d489898a192f254ae25d57cce725c"
"checksum stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
"checksum stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
@ -3150,7 +3148,8 @@ dependencies = [
"checksum time 0.2.22 (registry+https://github.com/rust-lang/crates.io-index)" = "55b7151c9065e80917fbf285d9a5d1432f60db41d170ccafc749a136b41a93af"
"checksum time-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
"checksum time-macros-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa"
"checksum tinyvec 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "238ce071d267c5710f9d31451efec16c5ee22de34df17cc05e56cbc92e967117"
"checksum tinyvec 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b78a366903f506d2ad52ca8dc552102ffdd3e937ba8a227f024dc1d1eae28575"
"checksum tinyvec_macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
"checksum toml 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)" = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645"
"checksum tracing 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27"
"checksum tracing-attributes 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80e0ccfc3378da0cce270c946b676a376943f5cd16aeba64568e7939806f4ada"
@ -3159,8 +3158,8 @@ dependencies = [
"checksum typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"
"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
"checksum unicode-normalization 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977"
"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
"checksum unicode-normalization 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "b7f98e67a4d84f730d343392f9bfff7d21e3fca562b9cb7a43b768350beeddc6"
"checksum unicode-segmentation 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db8716a166f290ff49dabc18b44aa407cb7c6dbe1aa0971b44b8a24b0ca35aae"
"checksum unicode-xid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
"checksum universal-hash 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402"
"checksum url 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e"
@ -3178,14 +3177,14 @@ dependencies = [
"checksum wasm-bindgen-macro-support 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe"
"checksum wasm-bindgen-shared 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307"
"checksum web-sys 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf6ef87ad7ae8008e15a355ce696bed26012b7caa21605188cfd8214ab51e2d"
"checksum weezl 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8795d6e0e17485803cc10ef126bb8c0d59b7c61b219d66cfe0b3216dd0e8580a"
"checksum weezl 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3e2bb9fc8309084dd7cd651336673844c1d47f8ef6d2091ec160b27f5c4aa277"
"checksum wepoll-sys 3.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0fcb14dea929042224824779fbc82d9fab8d2e6d3cbc0ac404de8edf489e77ff"
"checksum winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
"checksum winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
"checksum zbar-rust 0.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "656722fbc8aea14448b74c9116ce5e4e156f04be85453bccb382445019f4a94c"
"checksum zbus 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8a1a98eac87778308d7b2725cee6543a13936a3913b98e37fcf8ce9e4362da"
"checksum zbus_macros 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4d050be67f3b7a29878a6f0788a8dcd100c7297e619dcb91051f94679a8a4"
"checksum zvariant 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb79b31a454101beda19e64082dfd9ad59c5ff8afa41e1de1065333105b02740"
"checksum zvariant_derive 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "605bf414a59d93a3d55055e72ea066c5c0bc578ed2227df15c407207b1c780ef"
"checksum zbus 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d2f1803d7af14e3cddc5c1511b05af4bda27f89d8387e5e1aa3a7b918639cb18"
"checksum zbus_macros 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03273fa8aec65ed1be7026f58f92b90ecea09e622103718e9300591e21e24711"
"checksum zvariant 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc8bb578d9efd69a950d6061d12a9359ea5b2e961ad4dee10f25ccd4bc2201a4"
"checksum zvariant_derive 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8f327c66f7a22695719b1cf26ae671081a9c47f1c7fa6d79209039f6ad0f6acd"

View file

@ -17,13 +17,17 @@
<file compressed="true" preprocess="xml-stripblanks">about_dialog.ui</file>
<file compressed="true" preprocess="xml-stripblanks">window.ui</file>
<file compressed="true" preprocess="xml-stripblanks">preferences.ui</file>
<file>preferences_password_page.ui</file>
<file compressed="true" preprocess="xml-stripblanks">preferences_password_page.ui</file>
<file compressed="true" preprocess="xml-stripblanks" alias="preferences_provider_page.ui">resources/ui/preferences_provider_page.ui</file>
<file compressed="true" preprocess="xml-stripblanks" alias="preferences_providers_page.ui">resources/ui/preferences_providers_page.ui</file>
<file compressed="true" preprocess="xml-stripblanks" alias="provider_image.ui">resources/ui/provider_image.ui</file>
</gresource>
<gresource prefix="/com/belmoussaoui/Authenticator/icons/16x16/actions/">
<file alias="qrscanner-symbolic.svg">resources/icons/qrscanner-symbolic.svg</file>
<file alias="general-properties-symbolic.svg">resources/icons/general-properties-symbolic.svg</file>
<file alias="eye-not-looking-symbolic.svg">resources/icons/eye-not-looking-symbolic.svg</file>
<file alias="package-x-generic-symbolic.svg">resources/icons/package-x-generic-symbolic.svg</file>
<file alias="link-symbolic.svg">resources/icons/link-symbolic.svg</file>
<file alias="help-page-symbolic.svg">resources/icons/help-page-symbolic.svg</file>
</gresource>
</gresources>

View file

@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
<path d="M13.98 1.99a1 1 0 0 0-.687.303l-.984.984A8 8 0 0 0 8 2 8 8 0 0 0 .262 8.01a8 8 0 0 0 2.943 4.37l-.912.913a1 1 0 1 0 1.414 1.414l11-11a1 1 0 0 0-.727-1.717zM8 4a4 4 0 0 1 2.611.974l-1.42 1.42A2 2 0 0 0 8 6a2 2 0 0 0-2 2 2 2 0 0 0 .396 1.19l-1.42 1.42A4 4 0 0 1 4 8a4 4 0 0 1 4-4zm7.03 2.209l-3.344 3.343a4 4 0 0 1-2.127 2.127l-2.28 2.28a8 8 0 0 0 .721.04 8 8 0 0 0 7.738-6.01 8 8 0 0 0-.709-1.78zm-7.53.79a.5.5 0 0 1 .5.5.5.5 0 0 1-.5.5.5.5 0 0 1-.5-.5.5.5 0 0 1 .5-.5z" fill="#2e3436"/>
</svg>

Before

Width:  |  Height:  |  Size: 571 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#474747"><path d="M8 0C3.585 0 0 3.585 0 8s3.585 8 8 8 8-3.585 8-8-3.585-8-8-8zm0 2c3.341 0 6 2.659 6 6s-2.659 6-6 6-6-2.659-6-6 2.659-6 6-6z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" color="#bebebe" font-weight="400" font-family="sans-serif" overflow="visible"/><path d="M7.338 5A2.344 2.344 0 005 7.338v1.324A2.344 2.344 0 007.338 11h1.324A2.344 2.344 0 0011 8.662V7.338A2.344 2.344 0 008.662 5zm0 1h1.324C9.412 6 10 6.588 10 7.338v1.324C10 9.412 9.412 10 8.662 10H7.338C6.588 10 6 9.412 6 8.662V7.338C6 6.588 6.588 6 7.338 6z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" color="#bebebe" font-weight="400" font-family="sans-serif" overflow="visible"/><path d="M4.719 1.438A5.881 5.881 0 001.437 4.75l3.75 1.875c.252-.64.743-1.17 1.375-1.438zm6.562 0l-1.844 3.75a2.574 2.574 0 011.376 1.437l3.75-1.875a5.881 5.881 0 00-3.282-3.313zm-6.094 8l-3.75 1.874a5.904 5.904 0 003.282 3.25l1.875-3.75a2.59 2.59 0 01-1.407-1.374zm5.625 0a2.59 2.59 0 01-1.406 1.374l1.875 3.75a5.904 5.904 0 003.281-3.25z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="15.999999"
height="15.999999"
viewBox="0 0 4.233333 4.2333332"
version="1.1"
id="svg59656"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
sodipodi:docname="external-link-symbolic.svg">
<defs
id="defs59650" />
<sodipodi:namedview
inkscape:snap-midpoints="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-intersection-paths="true"
inkscape:object-paths="true"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="9.466419"
inkscape:cx="20.719427"
inkscape:cy="8.1779351"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="true"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid59669"
originx="-414.0729"
originy="-67.204172" />
</sodipodi:namedview>
<metadata
id="metadata59653">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-414.07291,-67.20417)">
<g
id="g11496-6"
style="fill:#241f31;fill-opacity:1"
transform="matrix(0.26458333,0,0,0.26458333,-1962.1773,-501.98004)">
<path
sodipodi:nodetypes="cscccccsscscccsc"
d="m 8988.453,2154.2416 0.7071,0.7071 c 0.1825,0.1824 0.4667,0.2829 0.7305,0.2878 h 1.8102 l -5.0762,5.0762 1.4142,1.4142 5.0769,-5.0769 v 1.813 c 0,0.2631 0.1047,0.5473 0.2864,0.7291 l 0.7064,0.7064 0.7071,-0.7071 c 0.2192,-0.2192 0.3267,-0.454 0.3316,-0.7291 l -0.044,-5.2149 -5.2142,-0.044 c -0.2744,0.01 -0.5098,0.1124 -0.729,0.3316 z"
style="line-height:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;white-space:normal;fill:#241f31;fill-opacity:1"
color="#000000"
font-weight="400"
font-family="sans-serif"
overflow="visible"
fill="#2e3436"
id="path11473-6" />
<path
sodipodi:nodetypes="ccccccccccc"
id="path11492-4"
d="m 8983.1032,2154.248 v 10.9994 h 11.0003 v -3.9994 h -2 v 1.9994 h -7.0003 v -6.9994 h 2.0003 v -2 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#474747"><path d="M3 8h10v7.059c0 .492-.472.937-.996.937H4c-.539 0-1-.43-1-1z" style="marker:none" color="#bebebe" overflow="visible"/><path d="M6.794 2.97a1 1 0 00-.754.378L3.225 6.805a1 1 0 00-.224.633v1a1 1 0 102 0v-.645l2.592-3.181a1 1 0 00-.8-1.643zm2.213 3.003a1 1 0 00-.145 1.988l2.17.38v.16a1 1 0 102 0v-1a1 1 0 00-.828-.987l-2.998-.523a1 1 0 00-.2-.018z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" color="#000" font-weight="400" font-family="sans-serif" overflow="visible"/></g></svg>

After

Width:  |  Height:  |  Size: 929 B

View file

@ -30,3 +30,31 @@
.account-row {
padding: 12px;
}
listview.content.small > row {
margin: 0px;
border-radius: 0px;
border-left-width: 0px;
border-right-width: 0px;
}
listview.content.small > row:first-child {
border-top-width: 0px;
}
listview.content.small > row:last-child {
border-bottom-width: 0px;
}
listview > row:first-child {
margin-top: 12px;
}
listview > row:last-child {
margin-bottom: 12px;
}
listview > row {
margin-left: 12px;
margin-right: 12px;
}

View file

@ -143,44 +143,57 @@
</child>
<child>
<object class="GtkListBox" id="more_list">
<property name="visible">False</property>
<property name="selection_mode">none</property>
<child>
<object class="HdyActionRow">
<property name="activatable_widget">provider_website_entry</property>
<object class="HdyActionRow" id="provider_website_row">
<property name="title" translatable="yes">Website</property>
<child>
<object class="GtkEntry" id="provider_website_entry">
<object class="GtkImage">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="input_purpose">url</property>
<property name="enable_emoji_completion">True</property>
<property name="icon-name">link-symbolic</property>
</object>
</child>
</object>
</child>
<child>
<object class="HdyActionRow" id="provider_help_row">
<property name="title" translatable="yes">How to setup</property>
<child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="icon-name">help-page-symbolic</property>
</object>
</child>
</object>
</child>
<child>
<object class="HdyActionRow">
<property name="activatable_widget">period_spinbutton</property>
<property name="title" translatable="yes">Period</property>
<child>
<object class="GtkSpinButton" id="period_spinbutton">
<object class="GtkLabel" id="period_label">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">period_adjustment</property>
<property name="numeric">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="HdyComboRow" id="algorithm_comborow">
<object class="HdyActionRow" id="algorithm_row">
<property name="title" translatable="yes">Algorithm</property>
<property name="expression">
<lookup type="HdyEnumValueObject" name="name"/>
</property>
<child>
<object class="GtkLabel" id="algorithm_label">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
</object>
</child>
</object>
</child>
<style>
@ -210,16 +223,9 @@
</attributes>
</child>
</object>
<object class="GtkAdjustment" id="period_adjustment">
<property name="upper">60</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="period_spinbutton"/>
<widget name="provider_entry"/>
<widget name="provider_website_entry"/>
<widget name="username_entry"/>
<widget name="token_entry"/>
</widgets>

View file

@ -126,19 +126,6 @@
</child>
</object>
</child>
<child>
<object class="HdyPreferencesPage">
<property name="icon-name">eye-not-looking-symbolic</property>
<property name="title">Providers</property>
<child>
<object class="GtkListBox">
<style>
<class name="content" />
</style>
</object>
</child>
</object>
</child>
</object>
</interface>

View file

@ -0,0 +1,155 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="GtkAdjustment" id="period_adjustment">
<property name="upper">60</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="period_spinbutton"/>
<widget name="provider_website_entry"/>
<widget name="name_entry"/>
</widgets>
</object>
<object class="GtkBox" id="provider_page">
<property name="orientation">vertical</property>
<property name="hexpand">True</property>
<child>
<object class="GtkHeaderBar">
<property name="show-title-buttons">False</property>
<property name="title-widget">
<object class="GtkLabel" id="title">
<style>
<class name="title" />
</style>
</object>
</property>
<child type="start">
<object class="GtkButton" id="back_btn">
<property name="receives_default">True</property>
<property name="action_name">preferences.close_page</property>
<property name="icon-name">go-previous-symbolic</property>
</object>
</child>
<child type="end">
<object class="GtkButton" id="save_btn">
<property name="label" translatable="yes">Save</property>
<property name="sensitive">False</property>
<property name="receives_default">True</property>
<property name="action_name">provider.save</property>
<style>
<class name="suggested-action"/>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="HdyClamp">
<property name="valign">center</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
<property name="vexpand">True</property>
<property name="maximum-size">400</property>
<property name="tightening-threshold">400</property>
<child>
<object class="GtkBox" id="main_container">
<property name="orientation">vertical</property>
<property name="spacing">42</property>
<property name="margin-start">8</property>
<property name="margin-end">8</property>
<child>
<object class="GtkStack" id="image_stack">
<property name="transition-type">crossfade</property>
<child>
<object class="GtkStackPage">
<property name="name">image</property>
<property name="child">
<object class="GtkImage" id="image">
<property name="icon-name">image-missing</property>
<property name="pixel-size">96</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkStackPage">
<property name="name">loading</property>
<property name="child">
<object class="GtkSpinner" id="spinner">
<property name="valign">center</property>
<property name="halign">center</property>
</object>
</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBox">
<property name="selection_mode">none</property>
<child>
<object class="HdyActionRow">
<property name="activatable_widget">name_entry</property>
<property name="title" translatable="yes">Name</property>
<child>
<object class="GtkEntry" id="name_entry">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="enable_emoji_completion">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="HdyActionRow">
<property name="activatable_widget">provider_website_entry</property>
<property name="title" translatable="yes">Website</property>
<child>
<object class="GtkEntry" id="provider_website_entry">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="input_purpose">url</property>
<property name="enable_emoji_completion">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="HdyActionRow">
<property name="activatable_widget">period_spinbutton</property>
<property name="title" translatable="yes">Period</property>
<child>
<object class="GtkSpinButton" id="period_spinbutton">
<property name="halign">end</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">period_adjustment</property>
<property name="numeric">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="HdyComboRow" id="algorithm_comborow">
<property name="title" translatable="yes">Algorithm</property>
<property name="expression">
<lookup type="HdyEnumValueObject" name="name"/>
</property>
</object>
</child>
<style>
<class name="content"/>
</style>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="HdyPreferencesPage" id="providers_page">
<property name="icon-name">package-x-generic-symbolic</property>
<property name="title">Providers</property>
<child>
<object class="GtkScrolledWindow">
<child>
<object class="HdyClampScrollable">
<property name="vexpand">True</property>
<property name="hexpand">True</property>
<child>
<object class="GtkListView" id="providers_list">
<property name="vexpand">true</property>
<property name="single_click_activate">True</property>
<style>
<class name="content" />
</style>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>

View file

@ -4,7 +4,6 @@ use crate::models::{Account, Provider, ProvidersModel};
use crate::widgets::{AddAccountDialog, PreferencesWindow, View, Window, WindowPrivate};
use gio::prelude::*;
use glib::subclass::prelude::*;
use glib::translate::*;
use glib::{subclass, WeakRef};
use gtk::prelude::*;
use gtk::subclass::prelude::{ApplicationImpl, ApplicationImplExt, GtkApplicationImpl};
@ -47,6 +46,7 @@ static PROPERTIES: [subclass::Property; 2] = [
impl ObjectSubclass for ApplicationPrivate {
const NAME: &'static str = "Application";
type ParentType = gtk::Application;
type Type = super::Application;
type Instance = subclass::simple::InstanceStruct<Self>;
type Class = subclass::simple::ClassStruct<Self>;
@ -73,7 +73,7 @@ impl ObjectSubclass for ApplicationPrivate {
}
impl ObjectImpl for ApplicationPrivate {
fn set_property(&self, _obj: &glib::Object, id: usize, value: &glib::Value) {
fn set_property(&self, _obj: &Self::Type, id: usize, value: &glib::Value) {
let prop = &PROPERTIES[id];
match *prop {
@ -95,7 +95,7 @@ impl ObjectImpl for ApplicationPrivate {
}
}
fn get_property(&self, _obj: &glib::Object, id: usize) -> Result<glib::Value, ()> {
fn get_property(&self, _obj: &Self::Type, id: usize) -> Result<glib::Value, ()> {
let prop = &PROPERTIES[id];
match *prop {
@ -108,13 +108,12 @@ impl ObjectImpl for ApplicationPrivate {
impl GtkApplicationImpl for ApplicationPrivate {}
impl ApplicationImpl for ApplicationPrivate {
fn startup(&self, application: &gio::Application) {
self.parent_startup(application);
let app_ = ObjectSubclass::get_instance(self)
.downcast::<Application>()
.unwrap();
fn startup(&self, app: &Self::Type) {
self.parent_startup(app);
libhandy::functions::init();
let app = app.downcast_ref::<Application>().unwrap();
if let Some(ref display) = gdk::Display::get_default() {
let p = gtk::CssProvider::new();
gtk::CssProvider::load_from_resource(&p, "/com/belmoussaoui/Authenticator/style.css");
@ -123,18 +122,14 @@ impl ApplicationImpl for ApplicationPrivate {
theme.add_resource_path("/com/belmoussaoui/Authenticator/icons/");
}
action!(
application,
"quit",
clone!(@strong application as app => move |_, _| app.quit())
);
action!(app, "quit", clone!(@strong app => move |_, _| app.quit()));
action!(
application,
app,
"preferences",
clone!(@strong app_ => move |_,_| {
let window = app_.get_active_window().unwrap();
let preferences = PreferencesWindow::new();
clone!(@strong app, @weak self.model as model => move |_,_| {
let window = app.get_active_window().unwrap();
let preferences = PreferencesWindow::new(model);
preferences.widget.set_transient_for(Some(&window));
preferences.widget.show();
})
@ -142,10 +137,10 @@ impl ApplicationImpl for ApplicationPrivate {
// About
action!(
application,
app,
"about",
clone!(@strong app_ => move |_, _| {
let window = app_.get_active_window().unwrap();
clone!(@strong app => move |_, _| {
let window = app.get_active_window().unwrap();
let builder = gtk::Builder::from_resource("/com/belmoussaoui/Authenticator/about_dialog.ui");
get_widget!(builder, gtk::AboutDialog, about_dialog);
@ -155,33 +150,29 @@ impl ApplicationImpl for ApplicationPrivate {
);
action!(
application,
app,
"lock",
clone!(@strong app_ => move |_, _| {
app_.set_locked(true);
clone!(@strong app => move |_, _| {
app.set_locked(true);
})
);
application
.bind_property("can-be-locked", &get_action!(application, @lock), "enabled")
app.bind_property("can-be-locked", &get_action!(app, @lock), "enabled")
.flags(glib::BindingFlags::DEFAULT | glib::BindingFlags::SYNC_CREATE)
.build();
application
.bind_property("locked", &get_action!(application, @preferences), "enabled")
app.bind_property("locked", &get_action!(app, @preferences), "enabled")
.flags(glib::BindingFlags::INVERT_BOOLEAN | glib::BindingFlags::SYNC_CREATE)
.build();
}
fn activate(&self, _app: &gio::Application) {
fn activate(&self, app: &Self::Type) {
if let Some(ref win) = *self.window.borrow() {
let window = win.upgrade().unwrap();
window.present();
return;
}
let app = ObjectSubclass::get_instance(self)
.downcast::<Application>()
.unwrap();
let app = app.downcast_ref::<Application>().unwrap();
let window = app.create_window();
window.present();
self.window.replace(Some(window.downgrade()));
@ -197,19 +188,16 @@ impl ApplicationImpl for ApplicationPrivate {
app.set_locked(has_set_password);
app.set_can_be_locked(has_set_password);
let receiver = self.receiver.borrow_mut().take().unwrap();
receiver.attach(None, move |action| app.do_action(action));
receiver.attach(
None,
clone!(@strong app => move |action| app.do_action(action)),
);
}
}
glib_wrapper! {
pub struct Application(
Object<subclass::simple::InstanceStruct<ApplicationPrivate>,
subclass::simple::ClassStruct<ApplicationPrivate>>)
pub struct Application(ObjectSubclass<ApplicationPrivate>)
@extends gio::Application, gtk::Application, gio::ActionMap;
match fn {
get_type => || ApplicationPrivate::get_type().to_glib(),
}
}
impl Application {

View file

@ -57,6 +57,8 @@ sources = files(
'widgets/providers/row.rs',
'widgets/preferences/mod.rs',
'widgets/preferences/password_page.rs',
'widgets/preferences/provider_page.rs',
'widgets/preferences/providers_page.rs',
'widgets/preferences/window.rs',
'widgets/mod.rs',
'widgets/window.rs',

View file

@ -5,7 +5,6 @@ use anyhow::Result;
use core::cmp::Ordering;
use diesel::{BelongingToDsl, ExpressionMethods, QueryDsl, RunQueryDsl};
use glib::subclass::{self, prelude::*};
use glib::translate::*;
use glib::{Cast, ObjectExt, StaticType, ToValue};
use std::cell::{Cell, RefCell};
@ -65,6 +64,7 @@ static PROPERTIES: [subclass::Property; 4] = [
impl ObjectSubclass for AccountPriv {
const NAME: &'static str = "Account";
type Type = super::Account;
type ParentType = glib::Object;
type Instance = subclass::simple::InstanceStruct<Self>;
type Class = subclass::simple::ClassStruct<Self>;
@ -86,7 +86,7 @@ impl ObjectSubclass for AccountPriv {
}
impl ObjectImpl for AccountPriv {
fn set_property(&self, _obj: &glib::Object, id: usize, value: &glib::Value) {
fn set_property(&self, _obj: &Self::Type, id: usize, value: &glib::Value) {
let prop = &PROPERTIES[id];
match *prop {
@ -122,7 +122,7 @@ impl ObjectImpl for AccountPriv {
}
}
fn get_property(&self, _obj: &glib::Object, id: usize) -> Result<glib::Value, ()> {
fn get_property(&self, _obj: &Self::Type, id: usize) -> Result<glib::Value, ()> {
let prop = &PROPERTIES[id];
match *prop {
@ -134,12 +134,9 @@ impl ObjectImpl for AccountPriv {
}
}
}
glib_wrapper! {
pub struct Account(Object<subclass::simple::InstanceStruct<AccountPriv>, subclass::simple::ClassStruct<AccountPriv>>);
match fn {
get_type => || AccountPriv::get_type().to_glib(),
}
glib_wrapper! {
pub struct Account(ObjectSubclass<AccountPriv>);
}
impl Account {

View file

@ -1,3 +1,4 @@
use gettextrs::gettext;
use std::str::FromStr;
use std::string::ToString;
@ -13,6 +14,16 @@ pub enum Algorithm {
Steam = 2,
}
impl Algorithm {
pub fn to_locale_string(&self) -> String {
match *self {
Algorithm::HOTP => gettext("HOTP"),
Algorithm::OTP => gettext("One-Time-Password"),
Algorithm::Steam => gettext("Steam"),
}
}
}
impl FromStr for Algorithm {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {

View file

@ -7,7 +7,6 @@ use diesel::{QueryDsl, RunQueryDsl};
use gio::prelude::*;
use gio::FileExt;
use glib::subclass::{self, prelude::*};
use glib::translate::*;
use glib::{Cast, StaticType, ToValue};
use gtk::FilterListModelExt;
use std::cell::{Cell, RefCell};
@ -117,6 +116,7 @@ static PROPERTIES: [subclass::Property; 8] = [
impl ObjectSubclass for ProviderPriv {
const NAME: &'static str = "Provider";
type Type = super::Provider;
type ParentType = glib::Object;
type Instance = subclass::simple::InstanceStruct<Self>;
type Class = subclass::simple::ClassStruct<Self>;
@ -144,7 +144,7 @@ impl ObjectSubclass for ProviderPriv {
}
impl ObjectImpl for ProviderPriv {
fn set_property(&self, _obj: &glib::Object, id: usize, value: &glib::Value) {
fn set_property(&self, _obj: &Self::Type, id: usize, value: &glib::Value) {
let prop = &PROPERTIES[id];
match *prop {
@ -197,7 +197,7 @@ impl ObjectImpl for ProviderPriv {
}
}
fn get_property(&self, _obj: &glib::Object, id: usize) -> Result<glib::Value, ()> {
fn get_property(&self, _obj: &Self::Type, id: usize) -> Result<glib::Value, ()> {
let prop = &PROPERTIES[id];
match *prop {
@ -212,12 +212,9 @@ impl ObjectImpl for ProviderPriv {
}
}
}
glib_wrapper! {
pub struct Provider(Object<subclass::simple::InstanceStruct<ProviderPriv>, subclass::simple::ClassStruct<ProviderPriv>>);
match fn {
get_type => || ProviderPriv::get_type().to_glib(),
}
glib_wrapper! {
pub struct Provider(ObjectSubclass<ProviderPriv>);
}
impl Provider {

View file

@ -1,12 +1,11 @@
use crate::application::Action;
use crate::helpers::qrcode;
use crate::models::{Account, Algorithm, Provider, ProvidersModel};
use crate::models::{Account, Provider, ProvidersModel};
use anyhow::Result;
use gio::prelude::*;
use glib::StaticType;
use glib::{signal::Inhibit, Receiver, Sender};
use gtk::prelude::*;
use libhandy::ComboRowExt;
use libhandy::ActionRowExt;
use std::cell::RefCell;
use std::rc::Rc;
@ -71,7 +70,7 @@ impl AddAccountDialog {
token_entry.connect_changed(validate_entries);
let event_controller = gtk::EventControllerKey::new();
event_controller.connect_key_pressed(clone!(@weak self.widget as widget => @default-return Inhibit(false), move |e, k, u, m| {
event_controller.connect_key_pressed(clone!(@weak self.widget as widget => @default-return Inhibit(false), move |_, k, _, _| {
if k == 65307 {
widget.close();
}
@ -100,30 +99,7 @@ impl AddAccountDialog {
}
fn save(&self) -> Result<()> {
let provider = match self.selected_provider.borrow().clone() {
Some(p) => p,
None => {
let provider_website =
get_widget!(self.builder, gtk::Entry, @provider_website_entry).get_text();
let provider_name = get_widget!(self.builder, gtk::Entry, @provider_entry)
.get_text()
.unwrap();
let period = get_widget!(self.builder, gtk::SpinButton, @period_spinbutton)
.get_value() as i32;
let selected_alg =
get_widget!(self.builder, libhandy::ComboRow, @algorithm_comborow)
.get_selected();
let algorithm: Algorithm = unsafe { std::mem::transmute(selected_alg) };
Provider::create(
&provider_name,
period,
algorithm,
provider_website.map(|w| w.to_string()),
)
.unwrap()
}
};
if let Some(provider) = self.selected_provider.borrow().clone() {
let username = get_widget!(self.builder, gtk::Entry, @username_entry)
.get_text()
.unwrap();
@ -136,27 +112,30 @@ impl AddAccountDialog {
self.global_sender,
Action::AccountCreated(account, provider)
);
}
Ok(())
}
fn set_provider(&self, provider: Provider) {
get_widget!(self.builder, gtk::ListBox, @more_list).show();
get_widget!(self.builder, gtk::Entry, @provider_entry).set_text(&provider.name());
get_widget!(self.builder, gtk::SpinButton, @period_spinbutton)
.set_value(provider.period() as f64);
get_widget!(self.builder, gtk::Label, @period_label)
.set_text(&format!("{} seconds", provider.period()));
get_widget!(self.builder, gtk::Label, @algorithm_label)
.set_text(&provider.algorithm().to_locale_string());
if let Some(ref website) = provider.website() {
get_widget!(self.builder, gtk::Entry, @provider_website_entry).set_text(website);
get_widget!(self.builder, libhandy::ActionRow, provider_website_row);
provider_website_row.set_subtitle(Some(website));
}
if let Some(ref help_url) = provider.help_url() {
get_widget!(self.builder, libhandy::ActionRow, provider_help_row);
provider_help_row.set_subtitle(Some(help_url));
}
get_widget!(self.builder, gtk::Stack, @image_stack).set_visible_child_name("loading");
get_widget!(self.builder, gtk::Spinner, @spinner).start();
unsafe {
// This is safe because of the repr(u32)
let selected_position: u32 = std::mem::transmute(provider.algorithm());
get_widget!(self.builder, libhandy::ComboRow, @algorithm_comborow)
.set_selected(selected_position);
}
let p = provider.clone();
let sender = self.sender.clone();
spawn!(async move {
@ -165,9 +144,6 @@ impl AddAccountDialog {
}
});
get_widget!(self.builder, gtk::Entry, @token_entry)
.set_property_secondary_icon_sensitive(provider.help_url().is_some());
self.selected_provider.replace(Some(provider));
}
@ -209,12 +185,7 @@ impl AddAccountDialog {
get_widget!(self.builder, gtk::EntryCompletion, provider_completion);
provider_completion.set_model(Some(&self.model.completion_model()));
get_widget!(self.builder, gtk::Entry, @token_entry)
.set_property_secondary_icon_sensitive(false);
get_widget!(self.builder, libhandy::ComboRow, algorithm_comborow);
let algorithms_model = libhandy::EnumListModel::new(Algorithm::static_type());
algorithm_comborow.set_model(Some(&algorithms_model));
get_widget!(self.builder, gtk::Entry, @token_entry);
provider_completion.connect_match_selected(
clone!(@strong dialog, @strong self.model as model => move |_, store, iter| {
@ -225,16 +196,6 @@ impl AddAccountDialog {
Inhibit(false)
}),
);
get_widget!(self.builder, gtk::Entry, token_entry);
token_entry.connect_icon_press(clone!(@strong dialog => move |_, pos| {
if pos == gtk::EntryIconPosition::Secondary {
if let Some(ref provider) = dialog.selected_provider.borrow().clone() {
provider.open_help();
}
}
}));
get_widget!(self.builder, gtk::SpinButton, @period_spinbutton).set_value(30.0);
}
fn do_action(&self, action: AddAccountAction) -> glib::Continue {

View file

@ -1,4 +1,6 @@
mod password_page;
mod provider_page;
mod providers_page;
mod window;
pub use window::PreferencesWindow;

View file

@ -0,0 +1,68 @@
use super::window::PreferencesAction;
use crate::models::{Algorithm, Provider};
use glib::translate::ToGlib;
use glib::Sender;
use gtk::prelude::*;
use libhandy::ComboRowExt;
use std::rc::Rc;
pub struct ProviderPage {
pub widget: gtk::Box,
builder: gtk::Builder,
sender: Sender<PreferencesAction>,
algorithms_model: libhandy::EnumListModel,
}
impl ProviderPage {
pub fn new(sender: Sender<PreferencesAction>) -> Rc<Self> {
let builder = gtk::Builder::from_resource(
"/com/belmoussaoui/Authenticator/preferences_provider_page.ui",
);
get_widget!(builder, gtk::Box, provider_page);
let algorithms_model = libhandy::EnumListModel::new(Algorithm::static_type());
let page = Rc::new(Self {
widget: provider_page,
sender,
builder,
algorithms_model,
});
page.init();
page
}
pub fn set_provider(&self, provider: Provider) {
get_widget!(self.builder, gtk::Entry, @name_entry).set_text(&provider.name());
get_widget!(self.builder, gtk::SpinButton, @period_spinbutton)
.set_value(provider.period() as f64);
if let Some(ref website) = provider.website() {
get_widget!(self.builder, gtk::Entry, @provider_website_entry).set_text(website);
}
get_widget!(self.builder, gtk::Stack, @image_stack).set_visible_child_name("loading");
get_widget!(self.builder, gtk::Spinner, @spinner).start();
get_widget!(self.builder, libhandy::ComboRow, algorithm_comborow);
algorithm_comborow.set_selected(
self.algorithms_model
.find_position(provider.algorithm().to_glib()),
);
let p = provider.clone();
/*let sender = self.sender.clone();
spawn!(async move {
if let Ok(file) = p.favicon().await {
send!(sender, AddAccountAction::SetIcon(file));
}
});*/
get_widget!(self.builder, gtk::Label, title);
title.set_text(&format!("Editing provider: {}", provider.name()));
}
fn init(&self) {
get_widget!(self.builder, libhandy::ComboRow, algorithm_comborow);
algorithm_comborow.set_model(Some(&self.algorithms_model));
}
}

View file

@ -0,0 +1,69 @@
use super::window::PreferencesAction;
use crate::models::{Provider, ProvidersModel};
use gio::ListModelExt;
use glib::Sender;
use gtk::prelude::*;
use std::rc::Rc;
pub struct ProvidersPage {
pub widget: libhandy::PreferencesPage,
builder: gtk::Builder,
model: Rc<ProvidersModel>,
sender: Sender<PreferencesAction>,
}
impl ProvidersPage {
pub fn new(model: Rc<ProvidersModel>, sender: Sender<PreferencesAction>) -> Rc<Self> {
let builder = gtk::Builder::from_resource(
"/com/belmoussaoui/Authenticator/preferences_providers_page.ui",
);
get_widget!(builder, libhandy::PreferencesPage, providers_page);
let page = Rc::new(Self {
widget: providers_page,
builder,
model,
sender,
});
page.init();
page
}
fn init(&self) {
get_widget!(self.builder, gtk::ListView, providers_list);
let factory = gtk::SignalListItemFactory::new();
factory.connect_bind(|_, list_item| {
let item = list_item.get_item().unwrap();
let provider = item.downcast_ref::<Provider>().unwrap();
let row = Row::new(provider);
list_item.set_child(Some(&row.widget));
});
providers_list.set_factory(Some(&factory));
let selection_model = gtk::NoSelection::new(Some(&self.model.model));
providers_list.set_model(Some(&selection_model));
providers_list.connect_activate(
clone!(@strong self.sender as sender => move|listview, pos|{
let model = listview.get_model().unwrap();
let provider = model.get_object(pos).unwrap().downcast::<Provider>().unwrap();
send!(sender, PreferencesAction::EditProvider(provider));
}),
);
}
}
pub struct Row<'a> {
pub widget: libhandy::ActionRow,
provider: &'a Provider,
}
impl<'a> Row<'a> {
pub fn new(provider: &'a Provider) -> Self {
let widget = libhandy::ActionRowBuilder::new()
.title(&provider.name())
.build();
Self { widget, provider }
}
}

View file

@ -1,38 +1,61 @@
use super::password_page::PasswordPage;
use super::provider_page::ProviderPage;
use super::providers_page::ProvidersPage;
use crate::config;
use crate::models::{Provider, ProvidersModel};
use gio::ActionMapExt;
use gio::SettingsExt;
use glib::{Receiver, Sender};
use gtk::prelude::*;
use libhandy::PreferencesWindowExt;
use std::cell::RefCell;
use std::rc::Rc;
pub enum PreferencesAction {
EditProvider(Provider),
}
pub struct PreferencesWindow {
pub widget: libhandy::PreferencesWindow,
builder: gtk::Builder,
settings: gio::Settings,
providers_model: Rc<ProvidersModel>,
password_page: Rc<PasswordPage>,
providers_page: Rc<ProvidersPage>,
provider_page: Rc<ProviderPage>,
actions: gio::SimpleActionGroup,
sender: Sender<PreferencesAction>,
receiver: RefCell<Option<Receiver<PreferencesAction>>>,
}
impl PreferencesWindow {
pub fn new() -> Self {
pub fn new(providers_model: Rc<ProvidersModel>) -> Rc<Self> {
let builder = gtk::Builder::from_resource("/com/belmoussaoui/Authenticator/preferences.ui");
get_widget!(builder, libhandy::PreferencesWindow, preferences_window);
let settings = gio::Settings::new(config::APP_ID);
let actions = gio::SimpleActionGroup::new();
let preferences = Self {
let (sender, r) = glib::MainContext::channel(glib::PRIORITY_DEFAULT);
let receiver = RefCell::new(Some(r));
let preferences = Rc::new(Self {
widget: preferences_window,
builder,
settings,
providers_page: ProvidersPage::new(providers_model.clone(), sender.clone()),
provider_page: ProviderPage::new(sender.clone()),
password_page: PasswordPage::new(actions.clone()),
providers_model,
actions,
};
preferences.init();
sender,
receiver,
});
preferences.init(preferences.clone());
preferences.setup_actions();
preferences
}
fn init(&self) {
fn init(&self, preferences: Rc<Self>) {
get_widget!(self.builder, gtk::Switch, dark_theme_switch);
self.settings.bind(
"dark-theme",
@ -54,6 +77,21 @@ impl PreferencesWindow {
.bind_property("active", &lock_timeout_spin_btn, "sensitive")
.flags(glib::BindingFlags::DEFAULT | glib::BindingFlags::SYNC_CREATE)
.build();
self.widget.add(&self.providers_page.widget);
let receiver = self.receiver.borrow_mut().take().unwrap();
receiver.attach(None, move |action| preferences.do_action(action));
}
fn do_action(&self, action: PreferencesAction) -> glib::Continue {
match action {
PreferencesAction::EditProvider(provider) => {
self.provider_page.set_provider(provider);
self.widget.present_subpage(&self.provider_page.widget)
}
}
glib::Continue(true)
}
fn setup_actions(&self) {

View file

@ -7,7 +7,6 @@ use crate::window_state;
use gio::prelude::*;
use glib::subclass;
use glib::subclass::prelude::*;
use glib::translate::*;
use glib::{signal::Inhibit, Sender};
use gtk::prelude::*;
use gtk::subclass::prelude::{WidgetImpl, WindowImpl};
@ -28,6 +27,7 @@ pub struct WindowPrivate {
impl ObjectSubclass for WindowPrivate {
const NAME: &'static str = "Window";
type Type = super::Window;
type ParentType = libhandy::ApplicationWindow;
type Instance = subclass::simple::InstanceStruct<Self>;
type Class = subclass::simple::ClassStruct<Self>;
@ -57,14 +57,8 @@ impl gtk::subclass::prelude::ApplicationWindowImpl for WindowPrivate {}
impl libhandy::subclass::prelude::ApplicationWindowImpl for WindowPrivate {}
glib_wrapper! {
pub struct Window(
Object<subclass::simple::InstanceStruct<WindowPrivate>,
subclass::simple::ClassStruct<WindowPrivate>>)
pub struct Window(ObjectSubclass<WindowPrivate>)
@extends gtk::Widget, gtk::Window, gtk::ApplicationWindow, libhandy::ApplicationWindow, gio::ActionMap;
match fn {
get_type => || WindowPrivate::get_type().to_glib(),
}
}
impl Window {
@ -187,7 +181,6 @@ impl Window {
}
fn setup_signals(&self, app: &Application, sender: Sender<Action>) {
let self_ = WindowPrivate::from_instance(self);
app.connect_local(
"notify::locked",
false,