commit e2b59ca0e04055b928e266cc61f486ac30811acf Author: MTRNord Date: Sat Oct 15 19:40:23 2022 +0200 Initial Commit diff --git a/.github/workflows/flatpak.yml b/.github/workflows/flatpak.yml new file mode 100644 index 0000000..f1bd1de --- /dev/null +++ b/.github/workflows/flatpak.yml @@ -0,0 +1,19 @@ +on: + push: + branches: [main] + pull_request: +name: CI +jobs: + flatpak-builder: + name: "Flatpak Builder" + runs-on: ubuntu-latest + container: + image: bilelmoussaoui/flatpak-github-actions:freedesktop-22.08 + options: --privileged + steps: + - uses: actions/checkout@v3 + - uses: flatpak/flatpak-github-actions/flatpak-builder@v4 + with: + bundle: "mtrnords-matrix-client-nightly.flatpak" + manifest-path: "build-aux/space.midnightthoughts.matrix_client.yml" + cache-key: flatpak-builder-${{ github.sha }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19f2331 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +/repo +/.flatpak-builder diff --git a/BUILD.md b/BUILD.md new file mode 100644 index 0000000..28550d5 --- /dev/null +++ b/BUILD.md @@ -0,0 +1,18 @@ +# Updating cargo modules + +``` +cargo update +python3 ./build-aux/scripts/flatpak-cargo-generator.py ./Cargo.lock -o ./build-aux/generated-sources.json +``` + +# Building + +``` +flatpak-builder --install repo build-aux/space.midnightthoughts.matrix_client.yml --force-clean --user -y +``` + +# Running + +``` +flatpak run space.midnightthoughts.matrix_client +``` diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..0af0181 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,736 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "cairo-rs" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "cfg-expr" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" +dependencies = [ + "smallvec", +] + +[[package]] +name = "field-offset" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "futures-channel" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" + +[[package]] +name = "futures-executor" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" + +[[package]] +name = "futures-macro" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-task" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" + +[[package]] +name = "futures-util" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "bitflags", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk4" +version = "0.5.0" +source = "git+https://github.com/gtk-rs/gtk4-rs.git#a9ce7534c322bdc519ab08b238cf3a9dab74b719" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk-pixbuf", + "gdk4-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk4-sys" +version = "0.5.0" +source = "git+https://github.com/gtk-rs/gtk4-rs.git#a9ce7534c322bdc519ab08b238cf3a9dab74b719" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gio" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-build-tools" +version = "0.1.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" + +[[package]] +name = "glib-macros" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "glib-sys" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "gobject-sys" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "graphene-rs" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "glib", + "graphene-sys", + "libc", +] + +[[package]] +name = "graphene-sys" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "glib-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gsk4" +version = "0.5.0" +source = "git+https://github.com/gtk-rs/gtk4-rs.git#a9ce7534c322bdc519ab08b238cf3a9dab74b719" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk4", + "glib", + "graphene-rs", + "gsk4-sys", + "libc", + "pango", +] + +[[package]] +name = "gsk4-sys" +version = "0.5.0" +source = "git+https://github.com/gtk-rs/gtk4-rs.git#a9ce7534c322bdc519ab08b238cf3a9dab74b719" +dependencies = [ + "cairo-sys-rs", + "gdk4-sys", + "glib-sys", + "gobject-sys", + "graphene-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk4" +version = "0.5.0" +source = "git+https://github.com/gtk-rs/gtk4-rs.git#a9ce7534c322bdc519ab08b238cf3a9dab74b719" +dependencies = [ + "bitflags", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk-pixbuf", + "gdk4", + "gio", + "glib", + "graphene-rs", + "gsk4", + "gtk4-macros", + "gtk4-sys", + "libc", + "once_cell", + "pango", +] + +[[package]] +name = "gtk4-macros" +version = "0.5.0" +source = "git+https://github.com/gtk-rs/gtk4-rs.git#a9ce7534c322bdc519ab08b238cf3a9dab74b719" +dependencies = [ + "anyhow", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gtk4-sys" +version = "0.5.0" +source = "git+https://github.com/gtk-rs/gtk4-rs.git#a9ce7534c322bdc519ab08b238cf3a9dab74b719" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "graphene-sys", + "gsk4-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "itoa" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" + +[[package]] +name = "libadwaita" +version = "0.2.0" +source = "git+https://gitlab.gnome.org/World/Rust/libadwaita-rs.git#dab619d571d1b3c74b100537214d78a0c0e6dc0c" +dependencies = [ + "bitflags", + "futures-channel", + "gdk-pixbuf", + "gdk4", + "gio", + "glib", + "gtk4", + "libadwaita-sys", + "libc", + "once_cell", + "pango", +] + +[[package]] +name = "libadwaita-sys" +version = "0.2.0" +source = "git+https://gitlab.gnome.org/World/Rust/libadwaita-rs.git#dab619d571d1b3c74b100537214d78a0c0e6dc0c" +dependencies = [ + "gdk4-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk4-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "libc" +version = "0.2.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" + +[[package]] +name = "matrix-client" +version = "0.1.0" +dependencies = [ + "glib-build-tools", + "gtk4", + "libadwaita", + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" + +[[package]] +name = "pango" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "bitflags", + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.16.0" +source = "git+https://github.com/gtk-rs/gtk-rs-core.git#bc63686118d9382a5e46260ed040e2028e88321c" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "pest" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" + +[[package]] +name = "proc-macro-crate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +dependencies = [ + "once_cell", + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "syn" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "thiserror" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +dependencies = [ + "serde", +] + +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + +[[package]] +name = "unicode-ident" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" + +[[package]] +name = "version-compare" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..f391e30 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,16 @@ +[package] +edition = "2021" +name = "matrix-client" +version = "0.1.0" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +adw = {version = "0.2.0", git = "https://gitlab.gnome.org/World/Rust/libadwaita-rs.git", package = "libadwaita", features = ["v1_2", "gtk_v4_6"]} +gtk = {version = "0.5.0", git = "https://github.com/gtk-rs/gtk4-rs.git", package = "gtk4", features = ["v4_6"]} +once_cell = "1.15.0" +serde = {version = "1.0", features = ["derive"]} +serde_json = "1.0" + +[build-dependencies] +glib-build-tools = {version = "0.1.0", git = "https://github.com/gtk-rs/gtk-rs-core.git"} diff --git a/build-aux/data/space.midnightthoughts.matrix_client.desktop b/build-aux/data/space.midnightthoughts.matrix_client.desktop new file mode 100644 index 0000000..4ce3355 --- /dev/null +++ b/build-aux/data/space.midnightthoughts.matrix_client.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=MTRNord's Matrix Client +Comment=A client just doing what MTRNord wants +Type=Application +# should be the same as the Cargo project name +Exec=matrix-client +Terminal=false +Categories=Utility;GTK; +Keywords=Rust;Flatpak;GTK; +# Icon=space.midnightthoughts.matrix_client +StartupNotify=true diff --git a/build-aux/data/space.midnightthoughts.matrix_client.metainfo.xml b/build-aux/data/space.midnightthoughts.matrix_client.metainfo.xml new file mode 100644 index 0000000..32fc460 --- /dev/null +++ b/build-aux/data/space.midnightthoughts.matrix_client.metainfo.xml @@ -0,0 +1,47 @@ + + + + + space.midnightthoughts.matrix_client + CC0 + GPL-3.0+ + MTRNord's Matrix Client + A client just doing what MTRNord wants + +

A client just doing what MTRNord wants

+
+ + + https://gitlab.gnome.org/World/design/contrast/raw/master/data/resources/screenshots/screenshot1.png + Main Window + + + https://nordgedanken.dev/ + + + intense + intense + + + + +

First release of MTRNord's Matrix Client

+
+
+
+ + + ModernToolkit + HiDpiIcon + + MTRNord + mtrnord1@gmail.com + + space.midnightthoughts.matrix_client.desktop +
diff --git a/build-aux/generated-sources.json b/build-aux/generated-sources.json new file mode 100644 index 0000000..f32b278 --- /dev/null +++ b/build-aux/generated-sources.json @@ -0,0 +1,925 @@ +[ + { + "type": "git", + "url": "https://github.com/gtk-rs/gtk-rs-core", + "commit": "bc63686118d9382a5e46260ed040e2028e88321c", + "dest": "flatpak-cargo/git/gtk-rs-core-bc63686" + }, + { + "type": "git", + "url": "https://github.com/gtk-rs/gtk4-rs", + "commit": "a9ce7534c322bdc519ab08b238cf3a9dab74b719", + "dest": "flatpak-cargo/git/gtk4-rs-a9ce753" + }, + { + "type": "git", + "url": "https://gitlab.gnome.org/World/Rust/libadwaita-rs", + "commit": "dab619d571d1b3c74b100537214d78a0c0e6dc0c", + "dest": "flatpak-cargo/git/libadwaita-rs-dab619d" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/anyhow/anyhow-1.0.65.crate", + "sha256": "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602", + "dest": "cargo/vendor/anyhow-1.0.65" + }, + { + "type": "inline", + "contents": "{\"package\": \"98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602\", \"files\": {}}", + "dest": "cargo/vendor/anyhow-1.0.65", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/autocfg/autocfg-1.1.0.crate", + "sha256": "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa", + "dest": "cargo/vendor/autocfg-1.1.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa\", \"files\": {}}", + "dest": "cargo/vendor/autocfg-1.1.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/bitflags/bitflags-1.3.2.crate", + "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a", + "dest": "cargo/vendor/bitflags-1.3.2" + }, + { + "type": "inline", + "contents": "{\"package\": \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\", \"files\": {}}", + "dest": "cargo/vendor/bitflags-1.3.2", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/cairo\" \"cargo/vendor/cairo-rs\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/cairo-rs", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/cairo/sys\" \"cargo/vendor/cairo-sys-rs\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/cairo-sys-rs", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/cfg-expr/cfg-expr-0.10.3.crate", + "sha256": "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db", + "dest": "cargo/vendor/cfg-expr-0.10.3" + }, + { + "type": "inline", + "contents": "{\"package\": \"0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db\", \"files\": {}}", + "dest": "cargo/vendor/cfg-expr-0.10.3", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/field-offset/field-offset-0.3.4.crate", + "sha256": "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92", + "dest": "cargo/vendor/field-offset-0.3.4" + }, + { + "type": "inline", + "contents": "{\"package\": \"1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92\", \"files\": {}}", + "dest": "cargo/vendor/field-offset-0.3.4", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/futures-channel/futures-channel-0.3.24.crate", + "sha256": "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050", + "dest": "cargo/vendor/futures-channel-0.3.24" + }, + { + "type": "inline", + "contents": "{\"package\": \"30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050\", \"files\": {}}", + "dest": "cargo/vendor/futures-channel-0.3.24", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/futures-core/futures-core-0.3.24.crate", + "sha256": "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf", + "dest": "cargo/vendor/futures-core-0.3.24" + }, + { + "type": "inline", + "contents": "{\"package\": \"4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf\", \"files\": {}}", + "dest": "cargo/vendor/futures-core-0.3.24", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/futures-executor/futures-executor-0.3.24.crate", + "sha256": "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab", + "dest": "cargo/vendor/futures-executor-0.3.24" + }, + { + "type": "inline", + "contents": "{\"package\": \"9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab\", \"files\": {}}", + "dest": "cargo/vendor/futures-executor-0.3.24", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/futures-io/futures-io-0.3.24.crate", + "sha256": "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68", + "dest": "cargo/vendor/futures-io-0.3.24" + }, + { + "type": "inline", + "contents": "{\"package\": \"bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68\", \"files\": {}}", + "dest": "cargo/vendor/futures-io-0.3.24", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/futures-macro/futures-macro-0.3.24.crate", + "sha256": "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17", + "dest": "cargo/vendor/futures-macro-0.3.24" + }, + { + "type": "inline", + "contents": "{\"package\": \"42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17\", \"files\": {}}", + "dest": "cargo/vendor/futures-macro-0.3.24", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/futures-task/futures-task-0.3.24.crate", + "sha256": "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1", + "dest": "cargo/vendor/futures-task-0.3.24" + }, + { + "type": "inline", + "contents": "{\"package\": \"a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1\", \"files\": {}}", + "dest": "cargo/vendor/futures-task-0.3.24", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/futures-util/futures-util-0.3.24.crate", + "sha256": "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90", + "dest": "cargo/vendor/futures-util-0.3.24" + }, + { + "type": "inline", + "contents": "{\"package\": \"44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90\", \"files\": {}}", + "dest": "cargo/vendor/futures-util-0.3.24", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/gdk-pixbuf\" \"cargo/vendor/gdk-pixbuf\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gdk-pixbuf", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/gdk-pixbuf/sys\" \"cargo/vendor/gdk-pixbuf-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gdk-pixbuf-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk4-rs-a9ce753/gdk4\" \"cargo/vendor/gdk4\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gdk4", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk4-rs-a9ce753/gdk4/sys\" \"cargo/vendor/gdk4-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gdk4-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/gio\" \"cargo/vendor/gio\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gio", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/gio/sys\" \"cargo/vendor/gio-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gio-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/glib\" \"cargo/vendor/glib\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/glib", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/glib-build-tools\" \"cargo/vendor/glib-build-tools\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/glib-build-tools", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/glib-macros\" \"cargo/vendor/glib-macros\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/glib-macros", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/glib/sys\" \"cargo/vendor/glib-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/glib-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/glib/gobject-sys\" \"cargo/vendor/gobject-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gobject-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/graphene\" \"cargo/vendor/graphene-rs\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/graphene-rs", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/graphene/sys\" \"cargo/vendor/graphene-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/graphene-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk4-rs-a9ce753/gsk4\" \"cargo/vendor/gsk4\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gsk4", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk4-rs-a9ce753/gsk4/sys\" \"cargo/vendor/gsk4-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gsk4-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk4-rs-a9ce753/gtk4\" \"cargo/vendor/gtk4\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gtk4", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk4-rs-a9ce753/gtk4-macros\" \"cargo/vendor/gtk4-macros\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gtk4-macros", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk4-rs-a9ce753/gtk4/sys\" \"cargo/vendor/gtk4-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/gtk4-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/heck/heck-0.4.0.crate", + "sha256": "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9", + "dest": "cargo/vendor/heck-0.4.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9\", \"files\": {}}", + "dest": "cargo/vendor/heck-0.4.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/itoa/itoa-1.0.4.crate", + "sha256": "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc", + "dest": "cargo/vendor/itoa-1.0.4" + }, + { + "type": "inline", + "contents": "{\"package\": \"4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc\", \"files\": {}}", + "dest": "cargo/vendor/itoa-1.0.4", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/libadwaita-rs-dab619d/libadwaita\" \"cargo/vendor/libadwaita\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/libadwaita", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/libadwaita-rs-dab619d/libadwaita/sys\" \"cargo/vendor/libadwaita-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/libadwaita-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/libc/libc-0.2.135.crate", + "sha256": "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c", + "dest": "cargo/vendor/libc-0.2.135" + }, + { + "type": "inline", + "contents": "{\"package\": \"68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c\", \"files\": {}}", + "dest": "cargo/vendor/libc-0.2.135", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/memoffset/memoffset-0.6.5.crate", + "sha256": "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce", + "dest": "cargo/vendor/memoffset-0.6.5" + }, + { + "type": "inline", + "contents": "{\"package\": \"5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce\", \"files\": {}}", + "dest": "cargo/vendor/memoffset-0.6.5", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/once_cell/once_cell-1.15.0.crate", + "sha256": "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1", + "dest": "cargo/vendor/once_cell-1.15.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1\", \"files\": {}}", + "dest": "cargo/vendor/once_cell-1.15.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/pango\" \"cargo/vendor/pango\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/pango", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "shell", + "commands": [ + "cp -r --reflink=auto \"flatpak-cargo/git/gtk-rs-core-bc63686/pango/sys\" \"cargo/vendor/pango-sys\"" + ] + }, + { + "type": "inline", + "contents": "{\"package\": null, \"files\": {}}", + "dest": "cargo/vendor/pango-sys", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/pest/pest-2.4.0.crate", + "sha256": "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a", + "dest": "cargo/vendor/pest-2.4.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a\", \"files\": {}}", + "dest": "cargo/vendor/pest-2.4.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/pin-project-lite/pin-project-lite-0.2.9.crate", + "sha256": "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116", + "dest": "cargo/vendor/pin-project-lite-0.2.9" + }, + { + "type": "inline", + "contents": "{\"package\": \"e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116\", \"files\": {}}", + "dest": "cargo/vendor/pin-project-lite-0.2.9", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/pin-utils/pin-utils-0.1.0.crate", + "sha256": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184", + "dest": "cargo/vendor/pin-utils-0.1.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184\", \"files\": {}}", + "dest": "cargo/vendor/pin-utils-0.1.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/pkg-config/pkg-config-0.3.25.crate", + "sha256": "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae", + "dest": "cargo/vendor/pkg-config-0.3.25" + }, + { + "type": "inline", + "contents": "{\"package\": \"1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae\", \"files\": {}}", + "dest": "cargo/vendor/pkg-config-0.3.25", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/proc-macro-crate/proc-macro-crate-1.2.1.crate", + "sha256": "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9", + "dest": "cargo/vendor/proc-macro-crate-1.2.1" + }, + { + "type": "inline", + "contents": "{\"package\": \"eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9\", \"files\": {}}", + "dest": "cargo/vendor/proc-macro-crate-1.2.1", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/proc-macro-error/proc-macro-error-1.0.4.crate", + "sha256": "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c", + "dest": "cargo/vendor/proc-macro-error-1.0.4" + }, + { + "type": "inline", + "contents": "{\"package\": \"da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c\", \"files\": {}}", + "dest": "cargo/vendor/proc-macro-error-1.0.4", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/proc-macro-error-attr/proc-macro-error-attr-1.0.4.crate", + "sha256": "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869", + "dest": "cargo/vendor/proc-macro-error-attr-1.0.4" + }, + { + "type": "inline", + "contents": "{\"package\": \"a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869\", \"files\": {}}", + "dest": "cargo/vendor/proc-macro-error-attr-1.0.4", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/proc-macro2/proc-macro2-1.0.47.crate", + "sha256": "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725", + "dest": "cargo/vendor/proc-macro2-1.0.47" + }, + { + "type": "inline", + "contents": "{\"package\": \"5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725\", \"files\": {}}", + "dest": "cargo/vendor/proc-macro2-1.0.47", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/quote/quote-1.0.21.crate", + "sha256": "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179", + "dest": "cargo/vendor/quote-1.0.21" + }, + { + "type": "inline", + "contents": "{\"package\": \"bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179\", \"files\": {}}", + "dest": "cargo/vendor/quote-1.0.21", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/rustc_version/rustc_version-0.3.3.crate", + "sha256": "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee", + "dest": "cargo/vendor/rustc_version-0.3.3" + }, + { + "type": "inline", + "contents": "{\"package\": \"f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee\", \"files\": {}}", + "dest": "cargo/vendor/rustc_version-0.3.3", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/ryu/ryu-1.0.11.crate", + "sha256": "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09", + "dest": "cargo/vendor/ryu-1.0.11" + }, + { + "type": "inline", + "contents": "{\"package\": \"4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09\", \"files\": {}}", + "dest": "cargo/vendor/ryu-1.0.11", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/semver/semver-0.11.0.crate", + "sha256": "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6", + "dest": "cargo/vendor/semver-0.11.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6\", \"files\": {}}", + "dest": "cargo/vendor/semver-0.11.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/semver-parser/semver-parser-0.10.2.crate", + "sha256": "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7", + "dest": "cargo/vendor/semver-parser-0.10.2" + }, + { + "type": "inline", + "contents": "{\"package\": \"00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7\", \"files\": {}}", + "dest": "cargo/vendor/semver-parser-0.10.2", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/serde/serde-1.0.145.crate", + "sha256": "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b", + "dest": "cargo/vendor/serde-1.0.145" + }, + { + "type": "inline", + "contents": "{\"package\": \"728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b\", \"files\": {}}", + "dest": "cargo/vendor/serde-1.0.145", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/serde_derive/serde_derive-1.0.145.crate", + "sha256": "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c", + "dest": "cargo/vendor/serde_derive-1.0.145" + }, + { + "type": "inline", + "contents": "{\"package\": \"81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c\", \"files\": {}}", + "dest": "cargo/vendor/serde_derive-1.0.145", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/serde_json/serde_json-1.0.86.crate", + "sha256": "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074", + "dest": "cargo/vendor/serde_json-1.0.86" + }, + { + "type": "inline", + "contents": "{\"package\": \"41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074\", \"files\": {}}", + "dest": "cargo/vendor/serde_json-1.0.86", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/slab/slab-0.4.7.crate", + "sha256": "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef", + "dest": "cargo/vendor/slab-0.4.7" + }, + { + "type": "inline", + "contents": "{\"package\": \"4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef\", \"files\": {}}", + "dest": "cargo/vendor/slab-0.4.7", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/smallvec/smallvec-1.10.0.crate", + "sha256": "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0", + "dest": "cargo/vendor/smallvec-1.10.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0\", \"files\": {}}", + "dest": "cargo/vendor/smallvec-1.10.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/syn/syn-1.0.102.crate", + "sha256": "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1", + "dest": "cargo/vendor/syn-1.0.102" + }, + { + "type": "inline", + "contents": "{\"package\": \"3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1\", \"files\": {}}", + "dest": "cargo/vendor/syn-1.0.102", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/system-deps/system-deps-6.0.2.crate", + "sha256": "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709", + "dest": "cargo/vendor/system-deps-6.0.2" + }, + { + "type": "inline", + "contents": "{\"package\": \"a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709\", \"files\": {}}", + "dest": "cargo/vendor/system-deps-6.0.2", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/thiserror/thiserror-1.0.37.crate", + "sha256": "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e", + "dest": "cargo/vendor/thiserror-1.0.37" + }, + { + "type": "inline", + "contents": "{\"package\": \"10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e\", \"files\": {}}", + "dest": "cargo/vendor/thiserror-1.0.37", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/thiserror-impl/thiserror-impl-1.0.37.crate", + "sha256": "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb", + "dest": "cargo/vendor/thiserror-impl-1.0.37" + }, + { + "type": "inline", + "contents": "{\"package\": \"982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb\", \"files\": {}}", + "dest": "cargo/vendor/thiserror-impl-1.0.37", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/toml/toml-0.5.9.crate", + "sha256": "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7", + "dest": "cargo/vendor/toml-0.5.9" + }, + { + "type": "inline", + "contents": "{\"package\": \"8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7\", \"files\": {}}", + "dest": "cargo/vendor/toml-0.5.9", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/ucd-trie/ucd-trie-0.1.5.crate", + "sha256": "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81", + "dest": "cargo/vendor/ucd-trie-0.1.5" + }, + { + "type": "inline", + "contents": "{\"package\": \"9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81\", \"files\": {}}", + "dest": "cargo/vendor/ucd-trie-0.1.5", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/unicode-ident/unicode-ident-1.0.5.crate", + "sha256": "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3", + "dest": "cargo/vendor/unicode-ident-1.0.5" + }, + { + "type": "inline", + "contents": "{\"package\": \"6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3\", \"files\": {}}", + "dest": "cargo/vendor/unicode-ident-1.0.5", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/version-compare/version-compare-0.1.0.crate", + "sha256": "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73", + "dest": "cargo/vendor/version-compare-0.1.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73\", \"files\": {}}", + "dest": "cargo/vendor/version-compare-0.1.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/version_check/version_check-0.9.4.crate", + "sha256": "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f", + "dest": "cargo/vendor/version_check-0.9.4" + }, + { + "type": "inline", + "contents": "{\"package\": \"49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f\", \"files\": {}}", + "dest": "cargo/vendor/version_check-0.9.4", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/winapi/winapi-0.3.9.crate", + "sha256": "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419", + "dest": "cargo/vendor/winapi-0.3.9" + }, + { + "type": "inline", + "contents": "{\"package\": \"5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419\", \"files\": {}}", + "dest": "cargo/vendor/winapi-0.3.9", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/winapi-i686-pc-windows-gnu/winapi-i686-pc-windows-gnu-0.4.0.crate", + "sha256": "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6", + "dest": "cargo/vendor/winapi-i686-pc-windows-gnu-0.4.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6\", \"files\": {}}", + "dest": "cargo/vendor/winapi-i686-pc-windows-gnu-0.4.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "archive", + "archive-type": "tar-gzip", + "url": "https://static.crates.io/crates/winapi-x86_64-pc-windows-gnu/winapi-x86_64-pc-windows-gnu-0.4.0.crate", + "sha256": "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f", + "dest": "cargo/vendor/winapi-x86_64-pc-windows-gnu-0.4.0" + }, + { + "type": "inline", + "contents": "{\"package\": \"712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f\", \"files\": {}}", + "dest": "cargo/vendor/winapi-x86_64-pc-windows-gnu-0.4.0", + "dest-filename": ".cargo-checksum.json" + }, + { + "type": "inline", + "contents": "[source.vendored-sources]\ndirectory = \"cargo/vendor\"\n\n[source.crates-io]\nreplace-with = \"vendored-sources\"\n\n[source.\"https://github.com/gtk-rs/gtk-rs-core\"]\ngit = \"https://github.com/gtk-rs/gtk-rs-core\"\nreplace-with = \"vendored-sources\"\n\n[source.\"https://github.com/gtk-rs/gtk4-rs\"]\ngit = \"https://github.com/gtk-rs/gtk4-rs\"\nreplace-with = \"vendored-sources\"\n\n[source.\"https://gitlab.gnome.org/World/Rust/libadwaita-rs\"]\ngit = \"https://gitlab.gnome.org/World/Rust/libadwaita-rs\"\nreplace-with = \"vendored-sources\"\n", + "dest": "cargo", + "dest-filename": "config" + } +] \ No newline at end of file diff --git a/build-aux/scripts/flatpak-cargo-generator.py b/build-aux/scripts/flatpak-cargo-generator.py new file mode 100644 index 0000000..1d88765 --- /dev/null +++ b/build-aux/scripts/flatpak-cargo-generator.py @@ -0,0 +1,362 @@ +#!/usr/bin/env python3 + +__license__ = 'MIT' +import json +from urllib.parse import urlparse, ParseResult, parse_qs +import os +import contextlib +import glob +import subprocess +import argparse +import logging +import hashlib +import asyncio +import aiohttp +import toml + +CRATES_IO = 'https://static.crates.io/crates' +CARGO_HOME = 'cargo' +CARGO_CRATES = f'{CARGO_HOME}/vendor' +VENDORED_SOURCES = 'vendored-sources' +GIT_CACHE = 'flatpak-cargo/git' +COMMIT_LEN = 7 + + +@contextlib.contextmanager +def workdir(path: str): + oldpath = os.getcwd() + os.chdir(path) + try: + yield + finally: + os.chdir(oldpath) + + +def canonical_url(url): + 'Converts a string to a Cargo Canonical URL, as per https://github.com/rust-lang/cargo/blob/35c55a93200c84a4de4627f1770f76a8ad268a39/src/cargo/util/canonical_url.rs#L19' + # Hrm. The upstream cargo does not replace those URLs, but if we don't then it doesn't work too well :( + url = url.replace('git+https://', 'https://') + u = urlparse(url) + # It seems cargo drops query and fragment + u = ParseResult(u.scheme, u.netloc, u.path, None, None, None) + u = u._replace(path = u.path.rstrip('/')) + + if u.netloc == 'github.com': + u = u._replace(scheme = 'https') + u = u._replace(path = u.path.lower()) + + if u.path.endswith('.git'): + u = u._replace(path = u.path[:-len('.git')]) + + return u + + +def get_git_tarball(repo_url, commit): + url = canonical_url(repo_url) + path = url.path.split('/')[1:] + + assert len(path) == 2 + owner = path[0] + if path[1].endswith('.git'): + repo = path[1].replace('.git', '') + else: + repo = path[1] + if url.hostname == 'github.com': + return f'https://codeload.{url.hostname}/{owner}/{repo}/tar.gz/{commit}' + elif url.hostname.split('.')[0] == 'gitlab': + return f'https://{url.hostname}/{owner}/{repo}/-/archive/{commit}/{repo}-{commit}.tar.gz' + elif url.hostname == 'bitbucket.org': + return f'https://{url.hostname}/{owner}/{repo}/get/{commit}.tar.gz' + else: + raise ValueError(f'Don\'t know how to get tarball for {repo_url}') + + +async def get_remote_sha256(url): + logging.info(f"started sha256({url})") + sha256 = hashlib.sha256() + async with aiohttp.ClientSession(raise_for_status=True) as http_session: + async with http_session.get(url) as response: + while True: + data = await response.content.read(4096) + if not data: + break + sha256.update(data) + logging.info(f"done sha256({url})") + return sha256.hexdigest() + + +def load_toml(tomlfile='Cargo.lock'): + with open(tomlfile, 'r') as f: + toml_data = toml.load(f) + return toml_data + + +def git_repo_name(git_url, commit): + name = canonical_url(git_url).path.split('/')[-1] + return f'{name}-{commit[:COMMIT_LEN]}' + + +def fetch_git_repo(git_url, commit): + repo_dir = git_url.replace('://', '_').replace('/', '_') + cache_dir = os.environ.get('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + clone_dir = os.path.join(cache_dir, 'flatpak-cargo', repo_dir) + if not os.path.isdir(os.path.join(clone_dir, '.git')): + subprocess.run(['git', 'clone', '--depth=1', git_url, clone_dir], check=True) + rev_parse_proc = subprocess.run(['git', 'rev-parse', 'HEAD'], cwd=clone_dir, check=True, + stdout=subprocess.PIPE) + head = rev_parse_proc.stdout.decode().strip() + if head[:COMMIT_LEN] != commit[:COMMIT_LEN]: + subprocess.run(['git', 'fetch', 'origin', commit], cwd=clone_dir, check=True) + subprocess.run(['git', 'checkout', commit], cwd=clone_dir, check=True) + return clone_dir + + +async def get_git_repo_packages(git_url, commit): + logging.info('Loading packages from %s', git_url) + git_repo_dir = fetch_git_repo(git_url, commit) + packages = {} + + with workdir(git_repo_dir): + if os.path.isfile('Cargo.toml'): + packages.update(await get_cargo_toml_packages(load_toml('Cargo.toml'), '.')) + else: + for toml_path in glob.glob('*/Cargo.toml'): + packages.update(await get_cargo_toml_packages(load_toml(toml_path), + os.path.dirname(toml_path))) + + assert packages, f"No packages found in {git_repo_dir}" + logging.debug('Packages in %s:\n%s', git_url, json.dumps(packages, indent=4)) + return packages + + +async def get_cargo_toml_packages(root_toml, root_dir): + assert not os.path.isabs(root_dir) and os.path.isdir(root_dir) + assert 'package' in root_toml or 'workspace' in root_toml + packages = {} + + async def get_dep_packages(entry, toml_dir): + assert not os.path.isabs(toml_dir) + # https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html + if 'dependencies' in entry: + for dep_name, dep in entry['dependencies'].items(): + if 'package' in dep: + dep_name = dep['package'] + if 'path' not in dep: + continue + if dep_name in packages: + continue + dep_dir = os.path.normpath(os.path.join(toml_dir, dep['path'])) + logging.debug("Loading dependency %s from %s", dep_name, dep_dir) + dep_toml = load_toml(os.path.join(dep_dir, 'Cargo.toml')) + assert dep_toml['package']['name'] == dep_name, toml_dir + await get_dep_packages(dep_toml, dep_dir) + packages[dep_name] = dep_dir + if 'target' in entry: + for _, target in entry['target'].items(): + await get_dep_packages(target, toml_dir) + + if 'package' in root_toml: + await get_dep_packages(root_toml, root_dir) + packages[root_toml['package']['name']] = root_dir + + if 'workspace' in root_toml: + for member in root_toml['workspace']['members']: + for subpkg_toml in glob.glob(os.path.join(root_dir, member, 'Cargo.toml')): + subpkg = os.path.normpath(os.path.dirname(subpkg_toml)) + logging.debug("Loading workspace member %s in %s", member, root_dir) + pkg_toml = load_toml(subpkg_toml) + await get_dep_packages(pkg_toml, subpkg) + packages[pkg_toml['package']['name']] = subpkg + + return packages + + +async def get_git_repo_sources(url, commit, tarball=False): + name = git_repo_name(url, commit) + if tarball: + tarball_url = get_git_tarball(url, commit) + git_repo_sources = [{ + 'type': 'archive', + 'archive-type': 'tar-gzip', + 'url': tarball_url, + 'sha256': await get_remote_sha256(tarball_url), + 'dest': f'{GIT_CACHE}/{name}', + }] + else: + git_repo_sources = [{ + 'type': 'git', + 'url': url, + 'commit': commit, + 'dest': f'{GIT_CACHE}/{name}', + }] + return git_repo_sources + + +async def get_git_package_sources(package, git_repos): + name = package['name'] + source = package['source'] + commit = urlparse(source).fragment + assert commit, 'The commit needs to be indicated in the fragement part' + canonical = canonical_url(source) + repo_url = canonical.geturl() + + git_repo = git_repos.setdefault(repo_url, { + 'commits': {}, + 'lock': asyncio.Lock(), + }) + async with git_repo['lock']: + if commit not in git_repo['commits']: + git_repo['commits'][commit] = await get_git_repo_packages(repo_url, commit) + + cargo_vendored_entry = { + repo_url: { + 'git': repo_url, + 'replace-with': VENDORED_SOURCES, + } + } + rev = parse_qs(urlparse(source).query).get('rev') + tag = parse_qs(urlparse(source).query).get('tag') + branch = parse_qs(urlparse(source).query).get('branch') + if rev: + assert len(rev) == 1 + cargo_vendored_entry[repo_url]['rev'] = rev[0] + elif tag: + assert len(tag) == 1 + cargo_vendored_entry[repo_url]['tag'] = tag[0] + elif branch: + assert len(branch) == 1 + cargo_vendored_entry[repo_url]['branch'] = branch[0] + + logging.info("Adding package %s from %s", name, repo_url) + pkg_subpath = git_repo['commits'][commit][name] + pkg_repo_dir = os.path.join(GIT_CACHE, git_repo_name(repo_url, commit), pkg_subpath) + git_sources = [ + { + 'type': 'shell', + 'commands': [ + f'cp -r --reflink=auto "{pkg_repo_dir}" "{CARGO_CRATES}/{name}"' + ], + }, + { + 'type': 'inline', + 'contents': json.dumps({'package': None, 'files': {}}), + 'dest': f'{CARGO_CRATES}/{name}', #-{version}', + 'dest-filename': '.cargo-checksum.json', + } + ] + + return (git_sources, cargo_vendored_entry) + + +async def get_package_sources(package, cargo_lock, git_repos): + metadata = cargo_lock.get('metadata') + name = package['name'] + version = package['version'] + + if 'source' not in package: + logging.debug('%s has no source', name) + return + source = package['source'] + + if source.startswith('git+'): + return await get_git_package_sources(package, git_repos) + + key = f'checksum {name} {version} ({source})' + if metadata is not None and key in metadata: + checksum = metadata[key] + elif 'checksum' in package: + checksum = package['checksum'] + else: + logging.warning(f'{name} doesn\'t have checksum') + return + crate_sources = [ + { + 'type': 'archive', + 'archive-type': 'tar-gzip', + 'url': f'{CRATES_IO}/{name}/{name}-{version}.crate', + 'sha256': checksum, + 'dest': f'{CARGO_CRATES}/{name}-{version}', + }, + { + 'type': 'inline', + 'contents': json.dumps({'package': checksum, 'files': {}}), + 'dest': f'{CARGO_CRATES}/{name}-{version}', + 'dest-filename': '.cargo-checksum.json', + }, + ] + return (crate_sources, {'crates-io': {'replace-with': VENDORED_SOURCES}}) + + +async def generate_sources(cargo_lock, git_tarballs=False): + # { + # "git-repo-url": { + # "lock": asyncio.Lock(), + # "commits": { + # "commit-hash": { + # "package-name": "./relative/package/path" + # } + # } + # } + # } + git_repos = {} + sources = [] + package_sources = [] + cargo_vendored_sources = { + VENDORED_SOURCES: {'directory': f'{CARGO_CRATES}'}, + } + + pkg_coros = [get_package_sources(p, cargo_lock, git_repos) for p in cargo_lock['package']] + for pkg in await asyncio.gather(*pkg_coros): + if pkg is None: + continue + else: + pkg_sources, cargo_vendored_entry = pkg + package_sources.extend(pkg_sources) + cargo_vendored_sources.update(cargo_vendored_entry) + + logging.debug('Adding collected git repos:\n%s', json.dumps(list(git_repos), indent=4)) + git_repo_coros = [] + for git_url, git_repo in git_repos.items(): + for git_commit in git_repo['commits']: + git_repo_coros.append(get_git_repo_sources(git_url, git_commit, git_tarballs)) + sources.extend(sum(await asyncio.gather(*git_repo_coros), [])) + + sources.extend(package_sources) + + logging.debug('Vendored sources:\n%s', json.dumps(cargo_vendored_sources, indent=4)) + sources.append({ + 'type': 'inline', + 'contents': toml.dumps({ + 'source': cargo_vendored_sources, + }), + 'dest': CARGO_HOME, + 'dest-filename': 'config' + }) + return sources + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('cargo_lock', help='Path to the Cargo.lock file') + parser.add_argument('-o', '--output', required=False, help='Where to write generated sources') + parser.add_argument('-t', '--git-tarballs', action='store_true', help='Download git repos as tarballs') + parser.add_argument('-d', '--debug', action='store_true') + args = parser.parse_args() + if args.output is not None: + outfile = args.output + else: + outfile = 'generated-sources.json' + if args.debug: + loglevel = logging.DEBUG + else: + loglevel = logging.INFO + logging.basicConfig(level=loglevel) + + generated_sources = asyncio.run(generate_sources(load_toml(args.cargo_lock), + git_tarballs=args.git_tarballs)) + with open(outfile, 'w') as out: + json.dump(generated_sources, out, indent=4, sort_keys=False) + + +if __name__ == '__main__': + main() diff --git a/build-aux/space.midnightthoughts.matrix_client.yml b/build-aux/space.midnightthoughts.matrix_client.yml new file mode 100644 index 0000000..2042785 --- /dev/null +++ b/build-aux/space.midnightthoughts.matrix_client.yml @@ -0,0 +1,83 @@ +id: space.midnightthoughts.matrix_client +runtime: org.freedesktop.Platform +runtime-version: "22.08" +sdk: org.freedesktop.Sdk +sdk-extensions: + - org.freedesktop.Sdk.Extension.rust-stable +command: matrix-client +finish-args: + - --share=ipc + - --socket=fallback-x11 + - --socket=wayland + - --device=dri + - --share=network + - --filesystem=home + - --env=G_MESSAGES_DEBUG=none + - --env=RUST_BACKTRACE=1 +build-options: + append-path: /usr/lib/sdk/rust-stable/bin +modules: + - name: py3cairo + buildsystem: simple + build-commands: + - python3 setup.py install --prefix=/app --root=/ + sources: + - type: archive + url: https://github.com/pygobject/pycairo/releases/download/v1.21.0/pycairo-1.21.0.tar.gz + sha256: 251907f18a552df938aa3386657ff4b5a4937dde70e11aa042bc297957f4b74b + - name: python3-gi + buildsystem: simple + build-commands: + - python3 setup.py install --prefix=/app --root=/ + sources: + - type: archive + url: https://github.com/GNOME/pygobject/archive/refs/tags/3.42.2.tar.gz + sha256: 56e6833f875bfe55409c780b9c87a9fc426c1cd55b3c65836de9d384d206201f + - name: graphene + buildsystem: meson + sources: + - type: archive + url: https://github.com/ebassi/graphene/archive/refs/tags/1.10.8.tar.gz + sha256: 922dc109d2dc5dc56617a29bd716c79dd84db31721a8493a13a5f79109a4a4ed + - name: gtk4 + buildsystem: meson + sources: + - type: archive + url: https://download.gnome.org/sources/gtk/4.8/gtk-4.8.1.tar.xz + sha256: 5ce8d8de98a23bd0c8eca1a61094e1c009b5f009dcbd60b45e990a8db1b742fd + - name: vala + buildsystem: autotools + build-options: + config-opts: + - --enable-unversioned + - --disable-valadoc + make-args: + - bootstrap + sources: + - type: archive + url: https://download.gnome.org/sources/vala/0.56/vala-0.56.3.tar.xz + sha256: e1066221bf7b89cb1fa7327a3888645cb33b604de3bf45aa81132fd040b699bf + - name: libadwaita + buildsystem: meson + sources: + - type: archive + url: https://download.gnome.org/sources/libadwaita/1.2/libadwaita-1.2.0.tar.xz + sha256: 322f3e1be39ba67981d9fe7228a85818eccaa2ed0aa42bcafe263af881c6460c + - name: matrix-client + buildsystem: simple + build-options: + env: + CARGO_HOME: /run/build/matrix-client/cargo + build-commands: + - cargo --offline fetch --manifest-path Cargo.toml --verbose + - cargo --offline build --release --verbose + - install -Dm644 ${FLATPAK_ID}.gschema.xml -t /app/share/glib-2.0/schemas/ + - glib-compile-schemas /app/share/glib-2.0/schemas/ + - install -Dm755 target/release/matrix-client -t /app/bin/ + - install -Dm644 build-aux/data/${FLATPAK_ID}.metainfo.xml -t /app/share/metainfo/ + - install -Dm644 build-aux/data/${FLATPAK_ID}.desktop -t /app/share/applications/ + #- install -Dm644 build-aux/data/${FLATPAK_ID}.svg -t /app/share/icons/hicolor/scalable/apps/ + sources: + - type: dir + path: ../ + - generated-sources.json diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..fee9d5c --- /dev/null +++ b/build.rs @@ -0,0 +1,7 @@ +fn main() { + glib_build_tools::compile_resources( + "resources", + "resources/resources.gresource.xml", + "main.gresource", + ); +} diff --git a/resources/resources.gresource.xml b/resources/resources.gresource.xml new file mode 100644 index 0000000..7023b47 --- /dev/null +++ b/resources/resources.gresource.xml @@ -0,0 +1,7 @@ + + + + shortcuts.ui + window.ui + + diff --git a/resources/shortcuts.ui b/resources/shortcuts.ui new file mode 100644 index 0000000..b6f88cb --- /dev/null +++ b/resources/shortcuts.ui @@ -0,0 +1,23 @@ + + + + True + + + shortcuts + 10 + + + General + + + Show shortcuts + win.show-help-overlay + + + + + + + + diff --git a/resources/window.ui b/resources/window.ui new file mode 100644 index 0000000..00512c7 --- /dev/null +++ b/resources/window.ui @@ -0,0 +1,92 @@ + + + + + diff --git a/space.midnightthoughts.matrix_client.gschema.xml b/space.midnightthoughts.matrix_client.gschema.xml new file mode 100644 index 0000000..c21fc42 --- /dev/null +++ b/space.midnightthoughts.matrix_client.gschema.xml @@ -0,0 +1,14 @@ + + + + + + + + + + 'All' + Filter of the tasks + + + diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..6ac32c8 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,34 @@ +mod utils; +mod window; + +use gtk::gio; +use gtk::prelude::*; +use window::Window; + +static APP_ID: &str = "space.midnightthoughts.matrix_client"; + +fn main() { + gio::resources_register_include!("main.gresource").expect("Failed to register resources."); + + // Create a new application + let app = adw::Application::builder().application_id(APP_ID).build(); + + // Connect to signals + app.connect_startup(setup_shortcuts); + app.connect_activate(build_ui); + + // Run the application + app.run(); +} + +fn setup_shortcuts(app: &adw::Application) { + app.set_accels_for_action("win.filter('All')", &["a"]); + app.set_accels_for_action("win.filter('Open')", &["o"]); + app.set_accels_for_action("win.filter('Done')", &["d"]); +} + +fn build_ui(app: &adw::Application) { + // Create a new custom window and show it + let window = Window::new(app); + window.show(); +} diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..620184e --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,13 @@ +use std::path::PathBuf; + +use gtk::glib; + +use crate::APP_ID; + +pub fn data_path() -> PathBuf { + let mut path = glib::user_data_dir(); + path.push(APP_ID); + std::fs::create_dir_all(&path).expect("Could not create directory."); + path.push("data.json"); + path +} diff --git a/src/window/imp.rs b/src/window/imp.rs new file mode 100644 index 0000000..e0f2106 --- /dev/null +++ b/src/window/imp.rs @@ -0,0 +1,58 @@ +use adw::prelude::*; +use adw::subclass::prelude::AdwApplicationWindowImpl; +use adw::subclass::prelude::*; +use adw::EntryRow; +use gio::Settings; +use glib::subclass::InitializingObject; +use gtk::{gio, glib, CompositeTemplate}; +use once_cell::sync::OnceCell; + +// Object holding the state +#[derive(CompositeTemplate, Default)] +#[template(resource = "/space/midnightthoughts/matrix_client/window.ui")] +pub struct Window { + #[template_child] + pub entry: TemplateChild, + pub settings: OnceCell, +} + +// The central trait for subclassing a GObject +#[glib::object_subclass] +impl ObjectSubclass for Window { + // `NAME` needs to match `class` attribute of template + const NAME: &'static str = "MainWindow"; + type Type = super::Window; + type ParentType = adw::ApplicationWindow; + + fn class_init(klass: &mut Self::Class) { + klass.bind_template(); + } + + fn instance_init(obj: &InitializingObject) { + obj.init_template(); + } +} + +// Trait shared by all GObjects +impl ObjectImpl for Window { + fn constructed(&self) { + let obj = self.instance(); + // Call "constructed" on parent + self.parent_constructed(); + + // Setup + obj.setup_settings(); + } +} + +// Trait shared by all widgets +impl WidgetImpl for Window {} + +// Trait shared by all windows +impl WindowImpl for Window {} + +// Trait shared by all application windows +impl ApplicationWindowImpl for Window {} + +// Trait shared by all adwaita application windows +impl AdwApplicationWindowImpl for Window {} diff --git a/src/window/mod.rs b/src/window/mod.rs new file mode 100644 index 0000000..64f783c --- /dev/null +++ b/src/window/mod.rs @@ -0,0 +1,30 @@ +mod imp; + +use gio::Settings; +use glib::Object; +use gtk::subclass::prelude::*; +use gtk::{gio, glib}; + +use crate::APP_ID; + +glib::wrapper! { + pub struct Window(ObjectSubclass) + @extends adw::ApplicationWindow, gtk::ApplicationWindow, gtk::Window, gtk::Widget, + @implements gio::ActionGroup, gio::ActionMap, gtk::Accessible, gtk::Buildable, + gtk::ConstraintTarget, gtk::Native, gtk::Root, gtk::ShortcutManager; +} + +impl Window { + pub fn new(app: &adw::Application) -> Self { + // Create new window + Object::new(&[("application", app)]) + } + + fn setup_settings(&self) { + let settings = Settings::new(APP_ID); + self.imp() + .settings + .set(settings) + .expect("`settings` should not be set before calling `setup_settings`."); + } +}