update per latest gtk-rs changes

This commit is contained in:
Bilal Elmoussaoui 2021-01-10 00:57:38 +01:00
parent 9d82a33c80
commit c7b5ca9718
23 changed files with 264 additions and 271 deletions

273
Cargo.lock generated
View file

@ -77,14 +77,14 @@ dependencies = [
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.35" version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c0df63cb2955042487fad3aefd2c6e3ae7389ac5dc1beb28921de0b69f779d4" checksum = "ee67c11feeac938fae061b232e38e0b6d94f97a9df10e6271319325ac4c56a86"
[[package]] [[package]]
name = "ashpd" name = "ashpd"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/bilelmoussaoui/ashpd#50dadd3782c4193a3956780bb30d56fffdf257ee" source = "git+https://github.com/bilelmoussaoui/ashpd#d7ec2103565301b8476d6706ef34090e197b021c"
dependencies = [ dependencies = [
"enumflags2", "enumflags2",
"gdk4", "gdk4",
@ -189,7 +189,7 @@ dependencies = [
"memchr", "memchr",
"num_cpus", "num_cpus",
"once_cell", "once_cell",
"pin-project-lite 0.2.0", "pin-project-lite 0.2.3",
"pin-utils", "pin-utils",
"slab", "slab",
"wasm-bindgen-futures", "wasm-bindgen-futures",
@ -352,9 +352,9 @@ checksum = "41aa2ec95ca3b5c54cf73c91acf06d24f4495d5f1b1c12506ae3483d646177ac"
[[package]] [[package]]
name = "byteorder" name = "byteorder"
version = "1.3.4" version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
[[package]] [[package]]
name = "bytes" name = "bytes"
@ -362,6 +362,12 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
[[package]]
name = "bytes"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad1f8e949d755f9d79112b5bb46938e0ef9d3804a0b16dfab13aafcaa5f0fa72"
[[package]] [[package]]
name = "cache-padded" name = "cache-padded"
version = "1.1.1" version = "1.1.1"
@ -371,7 +377,7 @@ checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"
[[package]] [[package]]
name = "cairo-rs" name = "cairo-rs"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-sys-rs", "cairo-sys-rs",
@ -384,7 +390,7 @@ dependencies = [
[[package]] [[package]]
name = "cairo-sys-rs" name = "cairo-sys-rs"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -450,9 +456,9 @@ dependencies = [
[[package]] [[package]]
name = "const_fn" name = "const_fn"
version = "0.4.4" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd51eab21ab4fd6a3bf889e2d0958c0a6e3a61ad04260325e919e652a2a62826" checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"
[[package]] [[package]]
name = "cookie" name = "cookie"
@ -615,9 +621,9 @@ dependencies = [
[[package]] [[package]]
name = "derivative" name = "derivative"
version = "2.1.1" version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb582b60359da160a9477ee80f15c8d784c477e69c217ef2cdd4169c24ea380f" checksum = "eaed5874effa6cde088c644ddcdcb4ffd1511391c5be4fdd7a5ccd02c7e4a183"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -824,9 +830,9 @@ dependencies = [
[[package]] [[package]]
name = "futures" name = "futures"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" checksum = "c70be434c505aee38639abccb918163b63158a4b4bb791b45b7023044bdc3c9c"
dependencies = [ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
@ -839,9 +845,9 @@ dependencies = [
[[package]] [[package]]
name = "futures-channel" name = "futures-channel"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" checksum = "f01c61843314e95f96cc9245702248733a3a3d744e43e2e755e3c7af8348a0a9"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-sink", "futures-sink",
@ -849,15 +855,15 @@ dependencies = [
[[package]] [[package]]
name = "futures-core" name = "futures-core"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" checksum = "db8d3b0917ff63a2a96173133c02818fac4a746b0a57569d3baca9ec0e945e08"
[[package]] [[package]]
name = "futures-executor" name = "futures-executor"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" checksum = "9ee9ca2f7eb4475772cf39dd1cd06208dce2670ad38f4d9c7262b3e15f127068"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-task", "futures-task",
@ -866,9 +872,9 @@ dependencies = [
[[package]] [[package]]
name = "futures-io" name = "futures-io"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" checksum = "e37c1a51b037b80922864b8eed90692c5cd8abd4c71ce49b77146caa47f3253b"
[[package]] [[package]]
name = "futures-lite" name = "futures-lite"
@ -881,15 +887,15 @@ dependencies = [
"futures-io", "futures-io",
"memchr", "memchr",
"parking", "parking",
"pin-project-lite 0.2.0", "pin-project-lite 0.2.3",
"waker-fn", "waker-fn",
] ]
[[package]] [[package]]
name = "futures-macro" name = "futures-macro"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" checksum = "0f8719ca0e1f3c5e34f3efe4570ef2c0610ca6da85ae7990d472e9cbfba13664"
dependencies = [ dependencies = [
"proc-macro-hack", "proc-macro-hack",
"proc-macro2", "proc-macro2",
@ -899,24 +905,24 @@ dependencies = [
[[package]] [[package]]
name = "futures-sink" name = "futures-sink"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" checksum = "f6adabac1290109cfa089f79192fb6244ad2c3f1cc2281f3e1dd987592b71feb"
[[package]] [[package]]
name = "futures-task" name = "futures-task"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" checksum = "a92a0843a2ff66823a8f7c77bffe9a09be2b64e533562c412d63075643ec0038"
dependencies = [ dependencies = [
"once_cell", "once_cell",
] ]
[[package]] [[package]]
name = "futures-util" name = "futures-util"
version = "0.3.8" version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" checksum = "036a2107cdeb57f6d7322f1b6c363dad67cd63ca3b7d1b925bdf75bd5d96cda9"
dependencies = [ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
@ -925,7 +931,7 @@ dependencies = [
"futures-sink", "futures-sink",
"futures-task", "futures-task",
"memchr", "memchr",
"pin-project 1.0.2", "pin-project-lite 0.2.3",
"pin-utils", "pin-utils",
"proc-macro-hack", "proc-macro-hack",
"proc-macro-nested", "proc-macro-nested",
@ -935,7 +941,7 @@ dependencies = [
[[package]] [[package]]
name = "gdk-pixbuf" name = "gdk-pixbuf"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gio", "gio",
@ -946,7 +952,7 @@ dependencies = [
[[package]] [[package]]
name = "gdk-pixbuf-sys" name = "gdk-pixbuf-sys"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"gio-sys", "gio-sys",
"glib-sys", "glib-sys",
@ -958,7 +964,7 @@ dependencies = [
[[package]] [[package]]
name = "gdk4" name = "gdk4"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
@ -973,7 +979,7 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-sys" name = "gdk4-sys"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@ -988,7 +994,7 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-wayland" name = "gdk4-wayland"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"gdk4", "gdk4",
"gdk4-wayland-sys", "gdk4-wayland-sys",
@ -1001,7 +1007,7 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-wayland-sys" name = "gdk4-wayland-sys"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -1011,7 +1017,7 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-x11" name = "gdk4-x11"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"gdk4", "gdk4",
"gdk4-x11-sys", "gdk4-x11-sys",
@ -1024,7 +1030,7 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-x11-sys" name = "gdk4-x11-sys"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"gdk4-sys", "gdk4-sys",
"glib-sys", "glib-sys",
@ -1045,11 +1051,11 @@ dependencies = [
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.1.15" version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
dependencies = [ dependencies = [
"cfg-if 0.1.10", "cfg-if 1.0.0",
"libc", "libc",
"wasi", "wasi",
] ]
@ -1075,10 +1081,11 @@ dependencies = [
[[package]] [[package]]
name = "ghash" name = "ghash"
version = "0.3.0" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6e27f0689a6e15944bdce7e45425efb87eaa8ab0c6e87f11d0987a9133e2531" checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375"
dependencies = [ dependencies = [
"opaque-debug",
"polyval", "polyval",
] ]
@ -1095,14 +1102,12 @@ dependencies = [
[[package]] [[package]]
name = "gio" name = "gio"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"futures",
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-io", "futures-io",
"futures-util",
"gio-sys", "gio-sys",
"glib", "glib",
"libc", "libc",
@ -1113,7 +1118,7 @@ dependencies = [
[[package]] [[package]]
name = "gio-sys" name = "gio-sys"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -1125,14 +1130,13 @@ dependencies = [
[[package]] [[package]]
name = "glib" name = "glib"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-executor", "futures-executor",
"futures-task", "futures-task",
"futures-util",
"glib-macros", "glib-macros",
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -1144,7 +1148,7 @@ dependencies = [
[[package]] [[package]]
name = "glib-macros" name = "glib-macros"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"heck", "heck",
@ -1159,7 +1163,7 @@ dependencies = [
[[package]] [[package]]
name = "glib-sys" name = "glib-sys"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"libc", "libc",
"system-deps", "system-deps",
@ -1181,7 +1185,7 @@ dependencies = [
[[package]] [[package]]
name = "gobject-sys" name = "gobject-sys"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -1191,7 +1195,7 @@ dependencies = [
[[package]] [[package]]
name = "graphene-rs" name = "graphene-rs"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"glib", "glib",
"graphene-sys", "graphene-sys",
@ -1201,7 +1205,7 @@ dependencies = [
[[package]] [[package]]
name = "graphene-sys" name = "graphene-sys"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -1212,7 +1216,7 @@ dependencies = [
[[package]] [[package]]
name = "gsk4" name = "gsk4"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
@ -1227,7 +1231,7 @@ dependencies = [
[[package]] [[package]]
name = "gsk4-sys" name = "gsk4-sys"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk4-sys", "gdk4-sys",
@ -1248,7 +1252,7 @@ checksum = "1874c48e670519ce192093ac906c08a6dde7cb2d18b28722ef237726a39c3a63"
[[package]] [[package]]
name = "gtk4" name = "gtk4"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
@ -1269,7 +1273,7 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-macros" name = "gtk4-macros"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"heck", "heck",
@ -1284,7 +1288,7 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-sys" name = "gtk4-sys"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/gtk-rs/gtk4-rs#d393f59dbf97518add962d250de9e3b69339f251" source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@ -1301,9 +1305,9 @@ dependencies = [
[[package]] [[package]]
name = "heck" name = "heck"
version = "0.3.1" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"
dependencies = [ dependencies = [
"unicode-segmentation", "unicode-segmentation",
] ]
@ -1345,11 +1349,11 @@ dependencies = [
[[package]] [[package]]
name = "http" name = "http"
version = "0.2.2" version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84129d298a6d57d246960ff8eb831ca4af3f96d29e2e28848dae275408658e26" checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747"
dependencies = [ dependencies = [
"bytes", "bytes 1.0.0",
"fnv", "fnv",
"itoa", "itoa",
] ]
@ -1449,7 +1453,7 @@ version = "0.9.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a" checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a"
dependencies = [ dependencies = [
"bytes", "bytes 0.5.6",
"crossbeam-utils", "crossbeam-utils",
"curl", "curl",
"curl-sys", "curl-sys",
@ -1477,9 +1481,9 @@ dependencies = [
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "0.4.6" version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
[[package]] [[package]]
name = "jpeg-decoder" name = "jpeg-decoder"
@ -1517,14 +1521,14 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.81" version = "0.2.82"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"
[[package]] [[package]]
name = "libhandy4" name = "libhandy4"
version = "0.1.0" version = "0.1.0"
source = "git+https://gitlab.gnome.org/bilelmoussaoui/libhandy4-rs#511b3e4a398aacb9ffa30ccff9926955e135b7bc" source = "git+https://gitlab.gnome.org/bilelmoussaoui/libhandy4-rs#ea059551d1e0c2f77a483f37ad83eb5b358d4c5d"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"gdk-pixbuf", "gdk-pixbuf",
@ -1541,7 +1545,7 @@ dependencies = [
[[package]] [[package]]
name = "libhandy4-sys" name = "libhandy4-sys"
version = "0.1.0" version = "0.1.0"
source = "git+https://gitlab.gnome.org/bilelmoussaoui/libhandy4-rs#511b3e4a398aacb9ffa30ccff9926955e135b7bc" source = "git+https://gitlab.gnome.org/bilelmoussaoui/libhandy4-rs#ea059551d1e0c2f77a483f37ad83eb5b358d4c5d"
dependencies = [ dependencies = [
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gdk4-sys", "gdk4-sys",
@ -1892,9 +1896,9 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
[[package]] [[package]]
name = "openssl-sys" name = "openssl-sys"
version = "0.9.59" version = "0.9.60"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de52d8eabd217311538a39bba130d7dea1f1e118010fee7a033d966845e7d5fe" checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"cc", "cc",
@ -1906,7 +1910,7 @@ dependencies = [
[[package]] [[package]]
name = "pango" name = "pango"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"glib", "glib",
@ -1918,7 +1922,7 @@ dependencies = [
[[package]] [[package]]
name = "pango-sys" name = "pango-sys"
version = "0.13.0" version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#f9714995940f334a712f5bfcccd558f600007e9f" source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -1945,9 +1949,9 @@ dependencies = [
[[package]] [[package]]
name = "parking_lot_core" name = "parking_lot_core"
version = "0.8.1" version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7c6d9b8427445284a09c55be860a15855ab580a417ccad9da88f5a06787ced0" checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"instant", "instant",
@ -1969,16 +1973,7 @@ version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15" checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15"
dependencies = [ dependencies = [
"pin-project-internal 0.4.27", "pin-project-internal",
]
[[package]]
name = "pin-project"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7"
dependencies = [
"pin-project-internal 1.0.2",
] ]
[[package]] [[package]]
@ -1992,17 +1987,6 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "pin-project-internal"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.1.11" version = "0.1.11"
@ -2011,9 +1995,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b"
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.2.0" version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" checksum = "ba36e0a6cc5a4c645073f4984f1ed55d09f5857d4de7c14550baa81a39ef5a17"
[[package]] [[package]]
name = "pin-utils" name = "pin-utils"
@ -2054,11 +2038,12 @@ dependencies = [
[[package]] [[package]]
name = "polyval" name = "polyval"
version = "0.4.3" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4fd92d8e0c06d08525d2e2643cc2b5c80c69ae8eb12c18272d501cd7079ccc0" checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd"
dependencies = [ dependencies = [
"cpuid-bool 0.2.0", "cpuid-bool 0.2.0",
"opaque-debug",
"universal-hash", "universal-hash",
] ]
@ -2159,9 +2144,9 @@ dependencies = [
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.7" version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
@ -2251,9 +2236,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
[[package]] [[package]]
name = "regex" name = "regex"
version = "1.4.2" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
@ -2263,9 +2248,9 @@ dependencies = [
[[package]] [[package]]
name = "regex-syntax" name = "regex-syntax"
version = "0.6.21" version = "0.6.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
[[package]] [[package]]
name = "ring" name = "ring"
@ -2387,9 +2372,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.60" version = "1.0.61"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a"
dependencies = [ dependencies = [
"itoa", "itoa",
"ryu", "ryu",
@ -2469,15 +2454,15 @@ dependencies = [
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.5.1" version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae524f056d7d770e174287294f562e95044c68e88dec909a00d2094805db9d75" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
[[package]] [[package]]
name = "socket2" name = "socket2"
version = "0.3.18" version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97e0e9fd577458a4f61fb91fcb559ea2afecc54c934119421f9f5d3d5b1a1057" checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"libc", "libc",
@ -2501,9 +2486,9 @@ dependencies = [
[[package]] [[package]]
name = "standback" name = "standback"
version = "0.2.13" version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf906c8b8fc3f6ecd1046e01da1d8ddec83e48c8b08b84dcc02b585a6bedf5a8" checksum = "c66a8cff4fa24853fdf6b51f75c6d7f8206d7c75cab4e467bcd7f25c2b1febe0"
dependencies = [ dependencies = [
"version_check", "version_check",
] ]
@ -2605,9 +2590,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.54" version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2af957a63d6bd42255c359c93d9bfdb97076bd3b820897ce55ffbfbf107f44" checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -2640,18 +2625,18 @@ dependencies = [
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.22" version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl",
] ]
[[package]] [[package]]
name = "thiserror-impl" name = "thiserror-impl"
version = "1.0.22" version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -2660,9 +2645,9 @@ dependencies = [
[[package]] [[package]]
name = "thread_local" name = "thread_local"
version = "1.0.1" version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" checksum = "bb9bc092d0d51e76b2b19d9d85534ffc9ec2db959a2523cdae0697e2972cd447"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
] ]
@ -2680,9 +2665,9 @@ dependencies = [
[[package]] [[package]]
name = "time" name = "time"
version = "0.2.23" version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcdaeea317915d59b2b4cd3b5efcd156c309108664277793f5351700c02ce98b" checksum = "273d3ed44dca264b0d6b3665e8d48fb515042d42466fad93d2a45b90ec4058f7"
dependencies = [ dependencies = [
"const_fn", "const_fn",
"libc", "libc",
@ -2748,7 +2733,7 @@ checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"log", "log",
"pin-project-lite 0.2.0", "pin-project-lite 0.2.3",
"tracing-attributes", "tracing-attributes",
"tracing-core", "tracing-core",
] ]
@ -2779,7 +2764,7 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c"
dependencies = [ dependencies = [
"pin-project 0.4.27", "pin-project",
"tracing", "tracing",
] ]
@ -2967,9 +2952,9 @@ checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158"
[[package]] [[package]]
name = "wayland-client" name = "wayland-client"
version = "0.28.2" version = "0.28.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "222b227f47871e47d657c1c5e5360b4af9a877aa9c892716787be1c192c78c42" checksum = "bdbdbe01d03b2267809f3ed99495b37395387fde789e0f2ebb78e8b43f75b6d7"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"downcast-rs", "downcast-rs",
@ -2983,9 +2968,9 @@ dependencies = [
[[package]] [[package]]
name = "wayland-commons" name = "wayland-commons"
version = "0.28.2" version = "0.28.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "230b3ffeda101f877ff8ecb8573f5d26e7beb345b197807c4df34ec06879a3e6" checksum = "480450f76717edd64ad04a4426280d737fc3d10a236b982df7b1aee19f0e2d56"
dependencies = [ dependencies = [
"nix 0.18.0", "nix 0.18.0",
"once_cell", "once_cell",
@ -2995,9 +2980,9 @@ dependencies = [
[[package]] [[package]]
name = "wayland-scanner" name = "wayland-scanner"
version = "0.28.2" version = "0.28.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ee5bd43a1d746efc486515fec561e47205f328b74802b959f10f5500f7e56cc" checksum = "7010ba5767b3fcd350decc59055390b4ebe6bd1b9279a9feb1f1888987f1133d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -3006,9 +2991,9 @@ dependencies = [
[[package]] [[package]]
name = "wayland-sys" name = "wayland-sys"
version = "0.28.2" version = "0.28.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0814adbecc7ea97869971e1d1c1b657e31863dda6fd768f119ad3dc408a01e58" checksum = "6793834e0c35d11fd96a97297abe03d37be627e1847da52e17d7e0e3b51cc099"
dependencies = [ dependencies = [
"dlib", "dlib",
"pkg-config", "pkg-config",
@ -3099,16 +3084,20 @@ dependencies = [
[[package]] [[package]]
name = "zbus" name = "zbus"
version = "1.3.0" version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2f1803d7af14e3cddc5c1511b05af4bda27f89d8387e5e1aa3a7b918639cb18" checksum = "40b4d4aa39daed4e32aed75f0c37b969184949a0fdfd5f2e1277abfda61f02a8"
dependencies = [ dependencies = [
"async-io",
"byteorder", "byteorder",
"derivative", "derivative",
"enumflags2", "enumflags2",
"fastrand", "fastrand",
"futures",
"nb-connect",
"nix 0.17.0", "nix 0.17.0",
"once_cell", "once_cell",
"polling",
"scoped-tls", "scoped-tls",
"serde", "serde",
"serde_repr", "serde_repr",
@ -3118,9 +3107,9 @@ dependencies = [
[[package]] [[package]]
name = "zbus_macros" name = "zbus_macros"
version = "1.3.0" version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03273fa8aec65ed1be7026f58f92b90ecea09e622103718e9300591e21e24711" checksum = "87cc141cda72384bef359badf1808e391d3968f9299e8f3c3cbb78dafa1e0930"
dependencies = [ dependencies = [
"proc-macro-crate", "proc-macro-crate",
"proc-macro2", "proc-macro2",

View file

@ -5,16 +5,15 @@ use crate::{
widgets::{PreferencesWindow, ProvidersDialog, Window}, widgets::{PreferencesWindow, ProvidersDialog, Window},
}; };
use gettextrs::gettext; use gettextrs::gettext;
use gio::subclass::ObjectSubclass;
use glib::clone; use glib::clone;
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*}; use gtk::{gio, glib, prelude::*};
use gtk_macros::{action, get_action}; use gtk_macros::{action, get_action};
use std::env; use std::env;
mod imp { mod imp {
use super::*; use super::*;
use glib::{subclass, subclass::prelude::*, WeakRef}; use glib::{subclass, WeakRef};
use gtk::subclass::prelude::{ApplicationImpl, ApplicationImplExt, GtkApplicationImpl};
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
pub struct Application { pub struct Application {

View file

@ -35,7 +35,7 @@ impl Backupable for AndOTP {
gettext("Into a plain-text JSON file") gettext("Into a plain-text JSON file")
} }
fn backup(model: ProvidersModel, into: gtk::gio::File) -> Result<()> { fn backup(model: &ProvidersModel, into: &gtk::gio::File) -> Result<()> {
let mut items = Vec::new(); let mut items = Vec::new();
for i in 0..model.get_n_items() { for i in 0..model.get_n_items() {
@ -82,6 +82,8 @@ impl Backupable for AndOTP {
} }
impl Restorable for AndOTP { impl Restorable for AndOTP {
type Item = Self;
fn identifier() -> String { fn identifier() -> String {
"andotp".to_string() "andotp".to_string()
} }
@ -94,30 +96,31 @@ impl Restorable for AndOTP {
gettext("From a plain-text JSON file") gettext("From a plain-text JSON file")
} }
fn restore(model: ProvidersModel, from: gtk::gio::File) -> Result<()> { fn restore(from: &gtk::gio::File) -> Result<Vec<Self::Item>> {
let (data, _) = from.load_contents(gtk::gio::NONE_CANCELLABLE)?; let (data, _) = from.load_contents(gtk::gio::NONE_CANCELLABLE)?;
let items: Vec<AndOTP> = serde_json::de::from_slice(&data)?; let items: Vec<AndOTP> = serde_json::de::from_slice(&data)?;
items.iter().try_for_each(|item| -> anyhow::Result<()> { Ok(items)
info!( }
"Restoring account: {} - {} from AndOTP",
item.issuer, item.label
);
let provider = model.find_or_create( fn restore_item(item: &Self::Item, model: &ProvidersModel) -> Result<()> {
&item.issuer, info!(
item.period.unwrap_or(30), "Restoring account: {} - {} from AndOTP",
item.method, item.issuer, item.label
None, );
item.algorithm,
item.digits,
item.counter.unwrap_or(1),
)?;
let account = Account::create(&item.label, &item.secret, &provider)?; let provider = model.find_or_create(
provider.add_account(&account); &item.issuer,
Ok(()) item.period.unwrap_or(30),
}); item.method,
None,
item.algorithm,
item.digits,
item.counter.unwrap_or(1),
)?;
let account = Account::create(&item.label, &item.secret, &provider)?;
provider.add_account(&account);
Ok(()) Ok(())
} }
} }

View file

@ -8,6 +8,8 @@ use serde::{Deserialize, Serialize};
pub struct Bitwarden; pub struct Bitwarden;
impl Restorable for Bitwarden { impl Restorable for Bitwarden {
type Item = Self;
fn identifier() -> String { fn identifier() -> String {
"bitwarden".to_string() "bitwarden".to_string()
} }
@ -20,7 +22,11 @@ impl Restorable for Bitwarden {
gettext("From a plain-text JSON file") gettext("From a plain-text JSON file")
} }
fn restore(model: ProvidersModel, from: gtk::gio::File) -> Result<()> { fn restore(from: &gtk::gio::File) -> Result<Vec<Self::Item>> {
Ok(Vec::new())
}
fn restore_item(item: &Self::Item, model: &ProvidersModel) -> Result<()> {
Ok(()) Ok(())
} }
} }

View file

@ -22,7 +22,7 @@ impl Backupable for FreeOTP {
gettext("Into a plain-text file, compatible with FreeOTP+") gettext("Into a plain-text file, compatible with FreeOTP+")
} }
fn backup(model: ProvidersModel, into: gtk::gio::File) -> Result<()> { fn backup(model: &ProvidersModel, into: &gtk::gio::File) -> Result<()> {
let mut items: Vec<String> = Vec::new(); let mut items: Vec<String> = Vec::new();
for i in 0..model.get_n_items() { for i in 0..model.get_n_items() {
@ -55,6 +55,7 @@ impl Backupable for FreeOTP {
} }
impl Restorable for FreeOTP { impl Restorable for FreeOTP {
type Item = OTPUri;
fn identifier() -> String { fn identifier() -> String {
"authenticator".to_string() "authenticator".to_string()
} }
@ -67,30 +68,33 @@ impl Restorable for FreeOTP {
gettext("From a plain-text file, compatible with FreeOTP+") gettext("From a plain-text file, compatible with FreeOTP+")
} }
fn restore(model: ProvidersModel, from: gtk::gio::File) -> Result<()> { fn restore(from: &gtk::gio::File) -> Result<Vec<Self::Item>> {
let (data, _) = from.load_contents(gtk::gio::NONE_CANCELLABLE)?; let (data, _) = from.load_contents(gtk::gio::NONE_CANCELLABLE)?;
let uris = String::from_utf8(data)?; let uris = String::from_utf8(data)?;
uris.split('\n') let items = uris
.split('\n')
.into_iter() .into_iter()
.try_for_each(|uri| -> Result<()> { .map(|uri| OTPUri::from_str(uri))
println!("{:#?}", uri); .filter(|uri| uri.is_ok())
let otp_uri = OTPUri::from_str(uri)?; .map(|uri| uri.unwrap())
let provider = model.find_or_create( .collect::<Vec<OTPUri>>();
&otp_uri.issuer, Ok(items)
otp_uri.period.unwrap_or(30), }
otp_uri.method,
None,
otp_uri.algorithm,
otp_uri.digits.unwrap_or(6),
otp_uri.counter.unwrap_or(1),
)?;
let account = Account::create(&otp_uri.label, &otp_uri.secret, &provider)?; fn restore_item(item: &Self::Item, model: &ProvidersModel) -> Result<()> {
provider.add_account(&account); let provider = model.find_or_create(
&item.issuer,
item.period.unwrap_or(30),
item.method,
None,
item.algorithm,
item.digits.unwrap_or(6),
item.counter.unwrap_or(1),
)?;
Ok(()) let account = Account::create(&item.label, &item.secret, &provider)?;
}); provider.add_account(&account);
Ok(()) Ok(())
} }
} }

View file

@ -21,6 +21,8 @@ pub struct LegacyAuthenticator {
} }
impl Restorable for LegacyAuthenticator { impl Restorable for LegacyAuthenticator {
type Item = Self;
fn identifier() -> String { fn identifier() -> String {
"authenticator_legacy".to_string() "authenticator_legacy".to_string()
} }
@ -33,31 +35,30 @@ impl Restorable for LegacyAuthenticator {
gettext("From a plain-text JSON file") gettext("From a plain-text JSON file")
} }
fn restore(model: ProvidersModel, from: gtk::gio::File) -> Result<()> { fn restore(from: &gtk::gio::File) -> Result<Vec<Self::Item>> {
let (data, _) = from.load_contents(gtk::gio::NONE_CANCELLABLE)?; let (data, _) = from.load_contents(gtk::gio::NONE_CANCELLABLE)?;
let items: Vec<LegacyAuthenticator> = serde_json::de::from_slice(&data)?; let items: Vec<LegacyAuthenticator> = serde_json::de::from_slice(&data)?;
Ok(items)
}
items.iter().try_for_each(|item| -> anyhow::Result<()> { fn restore_item(item: &Self::Item, model: &ProvidersModel) -> Result<()> {
let issuer = item.tags.get(0).unwrap(); let issuer = item.tags.get(0).unwrap();
info!( info!(
"Restoring account: {} - {} from LegacyAuthenticator", "Restoring account: {} - {} from LegacyAuthenticator",
issuer, item.label issuer, item.label
); );
let provider = model.find_or_create( let provider = model.find_or_create(
&issuer, &issuer,
item.period, item.period,
item.method, item.method,
None, None,
item.algorithm, item.algorithm,
item.digits, item.digits,
1, 1,
)?; )?;
let account = Account::create(&item.label, &item.secret, &provider)?; let account = Account::create(&item.label, &item.secret, &provider)?;
provider.add_account(&account); provider.add_account(&account);
Ok(())
})?;
Ok(()) Ok(())
} }
} }

View file

@ -1,3 +1,5 @@
use std::fmt::Debug;
use crate::models::ProvidersModel; use crate::models::ProvidersModel;
use anyhow::Result; use anyhow::Result;
@ -7,20 +9,23 @@ pub enum Operation {
Restore, Restore,
} }
pub trait Restorable { pub trait Restorable: Sized {
type Item: Debug;
fn title() -> String; fn title() -> String;
fn subtitle() -> String; fn subtitle() -> String;
// Used to define the `restore.$identifier` action // Used to define the `restore.$identifier` action
fn identifier() -> String; fn identifier() -> String;
fn restore(model: ProvidersModel, from: gtk::gio::File) -> Result<()>; fn restore(from: &gtk::gio::File) -> Result<Vec<Self::Item>>;
fn restore_item(item: &Self::Item, model: &ProvidersModel) -> Result<()>;
} }
pub trait Backupable { pub trait Backupable: Sized {
fn title() -> String; fn title() -> String;
fn subtitle() -> String; fn subtitle() -> String;
// Used to define the `backup.$identifier` action // Used to define the `backup.$identifier` action
fn identifier() -> String; fn identifier() -> String;
fn backup(model: ProvidersModel, into: gtk::gio::File) -> Result<()>; fn backup(model: &ProvidersModel, into: &gtk::gio::File) -> Result<()>;
} }
mod andotp; mod andotp;

View file

@ -7,8 +7,9 @@ use anyhow::Result;
use byteorder::{BigEndian, ReadBytesExt}; use byteorder::{BigEndian, ReadBytesExt};
use core::cmp::Ordering; use core::cmp::Ordering;
use diesel::{BelongingToDsl, ExpressionMethods, QueryDsl, RunQueryDsl}; use diesel::{BelongingToDsl, ExpressionMethods, QueryDsl, RunQueryDsl};
use gio::{subclass::ObjectSubclass, FileExt};
use glib::{clone, Cast, ObjectExt, StaticType, ToValue}; use glib::{clone, Cast, ObjectExt, StaticType, ToValue};
use gtk::prelude::*;
use gtk::subclass::prelude::*;
use gtk::{gio, glib}; use gtk::{gio, glib};
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
use qrcode::QrCode; use qrcode::QrCode;
@ -42,7 +43,7 @@ pub struct DiAccount {
#[doc(hidden)] #[doc(hidden)]
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass::{self, prelude::*}; use glib::subclass;
static PROPERTIES: [subclass::Property; 6] = [ static PROPERTIES: [subclass::Property; 6] = [
subclass::Property("id", |name| { subclass::Property("id", |name| {

View file

@ -1,12 +1,11 @@
use super::account::Account; use super::account::Account;
use gio::subclass::ObjectSubclass;
use glib::StaticType; use glib::StaticType;
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*}; use gtk::{gio, glib, prelude::*};
mod imp { mod imp {
use super::*; use super::*;
use gio::subclass::ListModelImpl; use glib::subclass;
use glib::{subclass, subclass::prelude::*};
use std::cell::RefCell; use std::cell::RefCell;
#[derive(Debug)] #[derive(Debug)]

View file

@ -8,8 +8,8 @@ use anyhow::Result;
use async_std::prelude::*; use async_std::prelude::*;
use core::cmp::Ordering; use core::cmp::Ordering;
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl}; use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl};
use gio::subclass::ObjectSubclass;
use glib::{Cast, StaticType, ToValue}; use glib::{Cast, StaticType, ToValue};
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*}; use gtk::{gio, glib, prelude::*};
use std::{ use std::{
cell::{Cell, RefCell}, cell::{Cell, RefCell},
@ -49,7 +49,7 @@ pub struct DiProvider {
} }
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass::{self, prelude::*}; use glib::subclass;
static PROPERTIES: [subclass::Property; 11] = [ static PROPERTIES: [subclass::Property; 11] = [
subclass::Property("id", |name| { subclass::Property("id", |name| {
@ -480,13 +480,13 @@ impl Provider {
pub fn filter(&self, text: String) { pub fn filter(&self, text: String) {
let self_ = imp::Provider::from_instance(self); let self_ = imp::Provider::from_instance(self);
let filter = gtk::CustomFilter::new(Some(Box::new(move |obj| { let filter = gtk::CustomFilter::new(move |obj| {
let account = obj.downcast_ref::<Account>().unwrap(); let account = obj.downcast_ref::<Account>().unwrap();
account account
.name() .name()
.to_ascii_lowercase() .to_ascii_lowercase()
.contains(&text.to_ascii_lowercase()) .contains(&text.to_ascii_lowercase())
}))); });
self_.filter_model.set_filter(Some(&filter)); self_.filter_model.set_filter(Some(&filter));
} }

View file

@ -1,13 +1,12 @@
use super::{Account, Algorithm, OTPMethod, Provider}; use super::{Account, Algorithm, OTPMethod, Provider};
use anyhow::Result; use anyhow::Result;
use gio::subclass::ObjectSubclass;
use glib::StaticType; use glib::StaticType;
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*}; use gtk::{gio, glib, prelude::*};
mod imp { mod imp {
use super::*; use super::*;
use gio::subclass::ListModelImpl; use glib::subclass;
use glib::{subclass, subclass::prelude::*};
use std::cell::RefCell; use std::cell::RefCell;
#[derive(Debug)] #[derive(Debug)]

View file

@ -4,8 +4,8 @@ use crate::{
widgets::{ProviderImage, UrlRow}, widgets::{ProviderImage, UrlRow},
}; };
use anyhow::Result; use anyhow::Result;
use gio::{subclass::ObjectSubclass, ActionMapExt};
use glib::{clone, signal::Inhibit}; use glib::{clone, signal::Inhibit};
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{gio, glib, prelude::*, CompositeTemplate};
use gtk_macros::{action, get_action}; use gtk_macros::{action, get_action};
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
@ -13,7 +13,6 @@ use once_cell::sync::OnceCell;
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
use std::cell::RefCell; use std::cell::RefCell;
#[derive(CompositeTemplate)] #[derive(CompositeTemplate)]

View file

@ -1,11 +1,10 @@
use crate::{models::Account, widgets::UrlRow}; use crate::{models::Account, widgets::UrlRow};
use gio::{subclass::ObjectSubclass, FileExt}; use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{glib, prelude::*, CompositeTemplate};
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
#[derive(Debug, CompositeTemplate)] #[derive(Debug, CompositeTemplate)]
pub struct AccountDetailsPage { pub struct AccountDetailsPage {

View file

@ -1,6 +1,6 @@
use crate::models::Account; use crate::models::Account;
use gio::{subclass::ObjectSubclass, ActionMapExt};
use glib::clone; use glib::clone;
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{gio, glib, prelude::*, CompositeTemplate};
use gtk_macros::{action, get_action}; use gtk_macros::{action, get_action};
use std::cell::RefCell; use std::cell::RefCell;
@ -8,7 +8,6 @@ use std::cell::RefCell;
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
static PROPERTIES: [subclass::Property; 1] = [subclass::Property("account", |name| { static PROPERTIES: [subclass::Property; 1] = [subclass::Property("account", |name| {
glib::ParamSpec::object( glib::ParamSpec::object(

View file

@ -1,6 +1,6 @@
use crate::{config, helpers::Keyring}; use crate::{config, helpers::Keyring};
use gio::subclass::ObjectSubclass;
use glib::clone; use glib::clone;
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{gio, glib, prelude::*, CompositeTemplate};
use gtk_macros::{action, get_action}; use gtk_macros::{action, get_action};
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
@ -10,7 +10,6 @@ mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
#[derive(CompositeTemplate)] #[derive(CompositeTemplate)]
pub struct PasswordPage { pub struct PasswordPage {
pub actions: OnceCell<gio::SimpleActionGroup>, pub actions: OnceCell<gio::SimpleActionGroup>,

View file

@ -4,9 +4,10 @@ use crate::{
config, config,
models::ProvidersModel, models::ProvidersModel,
}; };
use anyhow::Result;
use gettextrs::gettext; use gettextrs::gettext;
use gio::{subclass::ObjectSubclass, ActionMapExt};
use glib::clone; use glib::clone;
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{gio, glib, prelude::*, CompositeTemplate};
use libhandy::prelude::*; use libhandy::prelude::*;
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
@ -14,7 +15,6 @@ use once_cell::sync::OnceCell;
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
use libhandy::subclass::{ use libhandy::subclass::{
preferences_window::PreferencesWindowImpl, window::WindowImpl as HdyWindowImpl, preferences_window::PreferencesWindowImpl, window::WindowImpl as HdyWindowImpl,
}; };
@ -156,7 +156,7 @@ impl PreferencesWindow {
let dialog = win.select_file(filters, Operation::Backup); let dialog = win.select_file(filters, Operation::Backup);
dialog.connect_response(clone!(@weak model, @weak win => move |d, response| { dialog.connect_response(clone!(@weak model, @weak win => move |d, response| {
if response == gtk::ResponseType::Accept { if response == gtk::ResponseType::Accept {
T::backup(model, d.get_file().unwrap()); T::backup(&model, &d.get_file().unwrap());
} }
d.destroy(); d.destroy();
})); }));
@ -177,16 +177,15 @@ impl PreferencesWindow {
.action_name(&format!("restore.{}", T::identifier())) .action_name(&format!("restore.{}", T::identifier()))
.build(); .build();
let model = self_.model.get().unwrap();
gtk_macros::action!( gtk_macros::action!(
self_.restore_actions, self_.restore_actions,
&T::identifier(), &T::identifier(),
clone!(@weak self as win, @weak model => move |_, _| { clone!(@weak self as win => move |_, _| {
let dialog = win.select_file(filters, Operation::Restore); let dialog = win.select_file(filters, Operation::Restore);
dialog.connect_response(clone!(@weak model, @weak win => move |d, response| { dialog.connect_response(clone!(@weak win => move |d, response| {
if response == gtk::ResponseType::Accept { if response == gtk::ResponseType::Accept {
T::restore(model, d.get_file().unwrap()).unwrap(); let items: Vec<T::Item> = T::restore(&d.get_file().unwrap()).unwrap();
win.emit("restore-completed", &[]).unwrap(); //win.restore_items(items);
} }
d.destroy(); d.destroy();
})); }));
@ -196,6 +195,11 @@ impl PreferencesWindow {
self_.restore_group.get().add(&row); self_.restore_group.get().add(&row);
} }
fn restore_items<T: Restorable>(&self, items: Vec<T::Item>) -> Result<()> {
println!("{:#?}", items);
Ok(())
}
fn select_file( fn select_file(
&self, &self,
filters: &'static [&str], filters: &'static [&str],

View file

@ -1,14 +1,13 @@
use super::{ProviderPage, ProviderPageMode}; use super::{ProviderPage, ProviderPageMode};
use crate::models::{Provider, ProviderSorter, ProvidersModel}; use crate::models::{Provider, ProviderSorter, ProvidersModel};
use gio::{subclass::ObjectSubclass, ListModelExt};
use glib::{clone, signal::Inhibit}; use glib::{clone, signal::Inhibit};
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{gio, glib, prelude::*, CompositeTemplate};
use row::ProviderActionRow; use row::ProviderActionRow;
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
use libhandy::subclass::window::WindowImpl as HdyWindowImpl; use libhandy::subclass::window::WindowImpl as HdyWindowImpl;
#[derive(CompositeTemplate)] #[derive(CompositeTemplate)]
@ -190,13 +189,13 @@ impl ProvidersDialog {
fn search(&self, text: String) { fn search(&self, text: String) {
let self_ = imp::ProvidersDialog::from_instance(self); let self_ = imp::ProvidersDialog::from_instance(self);
let providers_filter = gtk::CustomFilter::new(Some(Box::new(move |object| { let providers_filter = gtk::CustomFilter::new(move |object| {
let provider = object.downcast_ref::<Provider>().unwrap(); let provider = object.downcast_ref::<Provider>().unwrap();
provider provider
.name() .name()
.to_ascii_lowercase() .to_ascii_lowercase()
.contains(&text.to_ascii_lowercase()) .contains(&text.to_ascii_lowercase())
}))); });
self_.filter_model.set_filter(Some(&providers_filter)); self_.filter_model.set_filter(Some(&providers_filter));
} }
@ -219,7 +218,6 @@ mod row {
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
use std::cell::RefCell; use std::cell::RefCell;
static PROPERTIES: [subclass::Property; 1] = [subclass::Property("provider", |name| { static PROPERTIES: [subclass::Property; 1] = [subclass::Property("provider", |name| {

View file

@ -1,6 +1,6 @@
use crate::models::Provider; use crate::models::Provider;
use gio::{subclass::ObjectSubclass, FileExt};
use glib::{clone, Receiver, Sender}; use glib::{clone, Receiver, Sender};
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{gio, glib, prelude::*, CompositeTemplate};
pub enum ImageAction { pub enum ImageAction {
@ -11,7 +11,6 @@ pub enum ImageAction {
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
static PROPERTIES: [subclass::Property; 2] = [ static PROPERTIES: [subclass::Property; 2] = [

View file

@ -3,14 +3,13 @@ use crate::{
models::{Account, Provider, ProviderSorter, ProvidersModel}, models::{Account, Provider, ProviderSorter, ProvidersModel},
widgets::providers::ProviderRow, widgets::providers::ProviderRow,
}; };
use gio::{subclass::ObjectSubclass, ListModelExt};
use glib::clone; use glib::clone;
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{gio, glib, prelude::*, CompositeTemplate};
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
#[derive(Debug, CompositeTemplate)] #[derive(Debug, CompositeTemplate)]
pub struct ProvidersList { pub struct ProvidersList {
@ -75,10 +74,10 @@ impl ProvidersList {
pub fn set_model(&self, model: ProvidersModel) { pub fn set_model(&self, model: ProvidersModel) {
let self_ = imp::ProvidersList::from_instance(self); let self_ = imp::ProvidersList::from_instance(self);
let accounts_filter = gtk::CustomFilter::new(Some(Box::new(|object| { let accounts_filter = gtk::CustomFilter::new(move |object| {
let provider = object.downcast_ref::<Provider>().unwrap(); let provider = object.downcast_ref::<Provider>().unwrap();
provider.has_accounts() provider.has_accounts()
}))); });
self_.filter_model.set_filter(Some(&accounts_filter)); self_.filter_model.set_filter(Some(&accounts_filter));
self_.filter_model.set_model(Some(&model)); self_.filter_model.set_model(Some(&model));
} }
@ -95,11 +94,11 @@ impl ProvidersList {
pub fn search(&self, text: String) { pub fn search(&self, text: String) {
let self_ = imp::ProvidersList::from_instance(self); let self_ = imp::ProvidersList::from_instance(self);
let accounts_filter = gtk::CustomFilter::new(Some(Box::new(move |object| { let accounts_filter = gtk::CustomFilter::new(move |object| {
let provider = object.downcast_ref::<Provider>().unwrap(); let provider = object.downcast_ref::<Provider>().unwrap();
provider.filter(text.clone()); provider.filter(text.clone());
provider.accounts().get_n_items() != 0 provider.accounts().get_n_items() != 0
}))); });
self_.filter_model.set_filter(Some(&accounts_filter)); self_.filter_model.set_filter(Some(&accounts_filter));
} }
@ -115,7 +114,7 @@ impl ProvidersList {
self_.providers_list.get().bind_model( self_.providers_list.get().bind_model(
Some(&sort_model), Some(&sort_model),
Some(Box::new(clone!(@weak self as list => move |obj| { clone!(@weak self as list => move |obj| {
let provider = obj.clone().downcast::<Provider>().unwrap(); let provider = obj.clone().downcast::<Provider>().unwrap();
let row = ProviderRow::new(provider); let row = ProviderRow::new(provider);
row.connect_local("changed", false, clone!(@weak list => move |_| { row.connect_local("changed", false, clone!(@weak list => move |_| {
@ -130,7 +129,7 @@ impl ProvidersList {
})).unwrap(); })).unwrap();
row.upcast::<gtk::Widget>() row.upcast::<gtk::Widget>()
}))), }),
); );
} }
} }

View file

@ -2,9 +2,9 @@ use crate::{
models::{Algorithm, OTPMethod, Provider}, models::{Algorithm, OTPMethod, Provider},
widgets::ProviderImage, widgets::ProviderImage,
}; };
use gio::subclass::ObjectSubclass;
use glib::{clone, translate::ToGlib}; use glib::{clone, translate::ToGlib};
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::subclass::prelude::*;
use gtk::{glib, prelude::*, CompositeTemplate};
use libhandy::ComboRowExt; use libhandy::ComboRowExt;
pub enum ProviderPageMode { pub enum ProviderPageMode {
@ -17,7 +17,6 @@ mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
#[derive(Debug, CompositeTemplate)] #[derive(Debug, CompositeTemplate)]
pub struct ProviderPage { pub struct ProviderPage {

View file

@ -2,19 +2,13 @@ use crate::{
models::{Account, AccountSorter, OTPMethod, Provider}, models::{Account, AccountSorter, OTPMethod, Provider},
widgets::{accounts::AccountRow, ProviderImage}, widgets::{accounts::AccountRow, ProviderImage},
}; };
use gio::subclass::ObjectSubclass; use gtk::subclass::prelude::*;
use gtk::{ use gtk::{glib, glib::clone, prelude::*, CompositeTemplate};
gio, glib,
glib::{clone, subclass::prelude::*},
prelude::*,
CompositeTemplate,
};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
static PROPERTIES: [subclass::Property; 2] = [ static PROPERTIES: [subclass::Property; 2] = [
@ -262,6 +256,6 @@ impl ProviderRow {
self_ self_
.accounts_list .accounts_list
.get() .get()
.bind_model(Some(&sort_model), Some(Box::new(create_callback))); .bind_model(Some(&sort_model), create_callback);
} }
} }

View file

@ -1,12 +1,11 @@
use gio::subclass::ObjectSubclass;
use glib::{clone, ObjectExt, ToValue}; use glib::{clone, ObjectExt, ToValue};
use gtk::{gio, glib, WidgetExt}; use gtk::subclass::prelude::*;
use gtk::{glib, WidgetExt};
use libhandy::ActionRowExt; use libhandy::ActionRowExt;
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
use libhandy::subclass::action_row::ActionRowImpl; use libhandy::subclass::action_row::ActionRowImpl;
use std::cell::RefCell; use std::cell::RefCell;

View file

@ -6,8 +6,8 @@ use crate::{
widgets::{accounts::AccountDetailsPage, providers::ProvidersList, AccountAddDialog}, widgets::{accounts::AccountDetailsPage, providers::ProvidersList, AccountAddDialog},
window_state, window_state,
}; };
use gio::subclass::ObjectSubclass;
use glib::{clone, signal::Inhibit}; use glib::{clone, signal::Inhibit};
use gtk::subclass::prelude::*;
use gtk::{gio, glib, prelude::*, CompositeTemplate}; use gtk::{gio, glib, prelude::*, CompositeTemplate};
use gtk_macros::{action, get_action}; use gtk_macros::{action, get_action};
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
@ -22,7 +22,6 @@ pub enum View {
mod imp { mod imp {
use super::*; use super::*;
use glib::subclass; use glib::subclass;
use gtk::subclass::prelude::*;
use libhandy::subclass::application_window::ApplicationWindowImpl as HdyApplicationWindowImpl; use libhandy::subclass::application_window::ApplicationWindowImpl as HdyApplicationWindowImpl;
#[derive(Debug, CompositeTemplate)] #[derive(Debug, CompositeTemplate)]