diff --git a/.github/workflows/linux-aarch64.yml b/.github/workflows/linux-aarch64.yml index a04dda843..3ddfd0f0a 100644 --- a/.github/workflows/linux-aarch64.yml +++ b/.github/workflows/linux-aarch64.yml @@ -35,7 +35,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 target: aarch64-unknown-linux-gnu override: true - name: cargo test (for generating dialogs with php) diff --git a/.github/workflows/linux-armv7.yml b/.github/workflows/linux-armv7.yml index 01df6995c..90611c8c9 100644 --- a/.github/workflows/linux-armv7.yml +++ b/.github/workflows/linux-armv7.yml @@ -35,7 +35,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 target: armv7-unknown-linux-gnueabihf override: true - name: cargo test (for generating dialogs with php) diff --git a/.github/workflows/linux-x86_64.yml b/.github/workflows/linux-x86_64.yml index 1ba7bc09b..f0ae33281 100644 --- a/.github/workflows/linux-x86_64.yml +++ b/.github/workflows/linux-x86_64.yml @@ -35,7 +35,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 override: true - name: cargo check uses: actions-rs/cargo@v1 @@ -64,7 +64,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 override: true - name: cargo build uses: actions-rs/cargo@v1 @@ -96,7 +96,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 override: true - run: rustup component add rustfmt - name: cargo fmt @@ -127,7 +127,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 override: true - run: rustup component add clippy - name: cargo clippy diff --git a/.github/workflows/macos-aarch64.yml b/.github/workflows/macos-aarch64.yml index e3191a1ba..a5aee3a37 100644 --- a/.github/workflows/macos-aarch64.yml +++ b/.github/workflows/macos-aarch64.yml @@ -22,8 +22,8 @@ jobs: - uses: webfactory/ssh-agent@v0.7.0 with: ssh-private-key: | - ${{ secrets.PRIVATE_PLAYTIME_CLIP_ENGINE_DEPLOY_KEY }} - ${{ secrets.PRIVATE_HELGOBOSS_LICENSE_PROCESSOR_DEPLOY_KEY }} + ${{ secrets.PRIVATE_PLAYTIME_CLIP_ENGINE_DEPLOY_KEY }} + ${{ secrets.PRIVATE_HELGOBOSS_LICENSE_PROCESSOR_DEPLOY_KEY }} - name: Update submodules run: | git submodule update --init @@ -32,15 +32,15 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 target: aarch64-apple-darwin override: true - name: Set SDKROOT run: echo "SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path)" >> $GITHUB_ENV - name: Set MACOSX_DEPLOYMENT_TARGET run: echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version)" >> $GITHUB_ENV -# - name: Setup tmate session -# uses: mxschmitt/action-tmate@v2 + # - name: Setup tmate session + # uses: mxschmitt/action-tmate@v2 - name: cargo build uses: actions-rs/cargo@v1 with: diff --git a/.github/workflows/macos-x86_64.yml b/.github/workflows/macos-x86_64.yml index 0f7f4772f..b3566d821 100644 --- a/.github/workflows/macos-x86_64.yml +++ b/.github/workflows/macos-x86_64.yml @@ -32,7 +32,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 override: true - name: cargo check uses: actions-rs/cargo@v1 @@ -62,15 +62,15 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 override: true - name: cargo build uses: actions-rs/cargo@v1 with: command: build args: --features playtime,egui -# - name: Setup tmate session -# uses: mxschmitt/action-tmate@v2 + # - name: Setup tmate session + # uses: mxschmitt/action-tmate@v2 - name: cargo test uses: actions-rs/cargo@v1 env: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5e20f4451..69c61dc1d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,26 +59,26 @@ jobs: strip-cmd: strip profile: release features: "" -# - artifact: linux-aarch64 -# os: ubuntu-22.04 -# toolchain-suffix: x86_64-unknown-linux-gnu -# lib-file-name: librealearn.so -# extension-file-name: "" -# target: aarch64-unknown-linux-gnu -# use-cross: true -# strip-cmd: aarch64-linux-gnu-strip -# profile: release -# features: "" -# - artifact: linux-armv7 -# os: ubuntu-22.04 -# toolchain-suffix: x86_64-unknown-linux-gnu -# lib-file-name: librealearn.so -# extension-file-name: "" -# target: armv7-unknown-linux-gnueabihf -# use-cross: true -# strip-cmd: arm-linux-gnueabihf-strip -# profile: release -# features: "" + # - artifact: linux-aarch64 + # os: ubuntu-22.04 + # toolchain-suffix: x86_64-unknown-linux-gnu + # lib-file-name: librealearn.so + # extension-file-name: "" + # target: aarch64-unknown-linux-gnu + # use-cross: true + # strip-cmd: aarch64-linux-gnu-strip + # profile: release + # features: "" + # - artifact: linux-armv7 + # os: ubuntu-22.04 + # toolchain-suffix: x86_64-unknown-linux-gnu + # lib-file-name: librealearn.so + # extension-file-name: "" + # target: armv7-unknown-linux-gnueabihf + # use-cross: true + # strip-cmd: arm-linux-gnueabihf-strip + # profile: release + # features: "" env: # This is relevant for macOS builds only (and only if not overridden). # TODO-high This is temporarily 10.9 (should be 10.7) until https://github.com/rust-lang/cc-rs/issues/902 is fixed @@ -99,7 +99,7 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0-${{ matrix.toolchain-suffix }} + toolchain: 1.76.0-${{ matrix.toolchain-suffix }} target: ${{ matrix.target }} override: true # Install OS dependencies (Linux/macOS only) @@ -289,15 +289,15 @@ jobs: asset_name: realearn-linux-x86_64.so asset_content_type: application/octet-stream # Upload Linux aarch64 artifacts -# - name: Upload linux-aarch64 release artifact -# uses: actions/upload-release-asset@v1 -# env: -# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -# with: -# upload_url: ${{ steps.create_release.outputs.upload_url }} -# asset_path: ./linux-aarch64/librealearn.so -# asset_name: realearn-linux-aarch64.so -# asset_content_type: application/octet-stream + # - name: Upload linux-aarch64 release artifact + # uses: actions/upload-release-asset@v1 + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # with: + # upload_url: ${{ steps.create_release.outputs.upload_url }} + # asset_path: ./linux-aarch64/librealearn.so + # asset_name: realearn-linux-aarch64.so + # asset_content_type: application/octet-stream # Upload Linux armv7 artifacts # - name: Upload linux-armv7 release artifact # uses: actions/upload-release-asset@v1 diff --git a/.github/workflows/windows-i686.yml b/.github/workflows/windows-i686.yml index cfe254afd..b763a64fe 100644 --- a/.github/workflows/windows-i686.yml +++ b/.github/workflows/windows-i686.yml @@ -31,7 +31,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0-i686-pc-windows-msvc + toolchain: 1.76.0-i686-pc-windows-msvc target: i686-pc-windows-msvc override: true - name: cargo build diff --git a/.github/workflows/windows-x86_64.yml b/.github/workflows/windows-x86_64.yml index 17d47571c..e5633aa39 100644 --- a/.github/workflows/windows-x86_64.yml +++ b/.github/workflows/windows-x86_64.yml @@ -31,7 +31,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 override: true - name: cargo check uses: actions-rs/cargo@v1 @@ -57,7 +57,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.75.0 + toolchain: 1.76.0 override: true - name: cargo build uses: actions-rs/cargo@v1 diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index dbd8ff660..4dd22cf44 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -3,22 +3,23 @@ :sectnums: :sectnumlevels: 2 -Contributions are welcome! *However, please open an issue first and discuss the details with me, preferably before you start working on a pull request!* And if possible, avoid very large PRs. I usually can't find the time to process large PRs. +Contributions are welcome! *However, please open an issue first and discuss the details with me, preferably before you start working on a pull request!* And if possible, avoid very large PRs. +I usually can't find the time to process large PRs. == Basics -ReaLearn is written in the programming language https://www.rust-lang.org/[Rust]. It makes heavy use of +ReaLearn is written in the programming language https://www.rust-lang.org/[Rust]. +It makes heavy use of https://github.com/helgoboss/reaper-rs[reaper-rs], which provides Rust bindings for the -https://www.reaper.fm/sdk/plugin/plugin.php[REAPER C++ API]. _reaper-rs_ was developed together with ReaLearn -but is designed as independent library that can be used for REAPER plug-ins of all sorts. +https://www.reaper.fm/sdk/plugin/plugin.php[REAPER C++ API]. _reaper-rs_ was developed together with ReaLearn but is designed as independent library that can be used for REAPER plug-ins of all sorts. -Another noteworthy dependency and byproduct of ReaLearn is https://github.com/helgoboss/helgoboss-learn[helgoboss-learn], a crate which -provides DAW-agnostic MIDI learn logic (basically the _source_ and _mode_ parts of ReaLearn). Like _reaper-rs_, it's -designed as independent library and could be used to provide similar MIDI-learn functionality in other DAWs. +Another noteworthy dependency and byproduct of ReaLearn is https://github.com/helgoboss/helgoboss-learn[helgoboss-learn], a crate which provides DAW-agnostic MIDI learn logic (basically the _source_ and _mode_ parts of ReaLearn). +Like _reaper-rs_, it's designed as independent library and could be used to provide similar MIDI-learn functionality in other DAWs. == Code statistics -Use https://github.com/XAMPPRocky/tokei[Tokei] or https://github.com/o2sh/onefetch:[Onefetch] to display some interesting statistics about the code, e.g. the lines of code and used languages. The file `.tokeignore` contains code to be ignored when counting the lines of code. +Use https://github.com/XAMPPRocky/tokei[Tokei] or https://github.com/o2sh/onefetch:[Onefetch] to display some interesting statistics about the code, e.g. the lines of code and used languages. +The file `.tokeignore` contains code to be ignored when counting the lines of code. == Architecture @@ -27,9 +28,9 @@ See link:ARCHITECTURE.adoc[here]. == Directory structure |=== -|Directory entry |Content +|Directory entry |Content -|`/` |Workspace root +|`/` |Workspace root |`/allocator` |A custom global allocator for deferring deallocation in real-time threads |`/api` |Data structures of ReaLearn's preset API (which is e.g. used in the Lua-based ReaLearn Script) |`/base` |Very generic utility code used by many crates in the workspace @@ -90,13 +91,13 @@ cargo run helgobox-artwork-processor === Windows -In the following you will find the complete instructions for Windows 10, including Rust setup. Points where you have to consider the target -architecture (REAPER 32-bit vs. 64-bit) are marked with :star:. +In the following you will find the complete instructions for Windows 10, including Rust setup. +Points where you have to consider the target architecture (REAPER 32-bit vs. 64-bit) are marked with :star:. . Enable "Developer mode" in the Windows settings (this is needed because ReaLearn uses link:https://stackoverflow.com/a/59761201[Symlinks within its Git repository]) . Setup "Build tools for Visual Studio 2019" -* Rust uses native build toolchains. On Windows, it's necessary to use the MSVC (Microsoft Visual Studio - C++) toolchain because REAPER plug-ins only work with that. +* Rust uses native build toolchains. +On Windows, it's necessary to use the MSVC (Microsoft Visual Studio C++) toolchain because REAPER plug-ins only work with that. * https://visualstudio.microsoft.com/downloads/[Visual Studio downloads] → All downloads → Tools for Visual Studio 2019 → Build Tools for Visual Studio 2019 * Start it and follow the installer instructions @@ -113,7 +114,7 @@ architecture (REAPER 32-bit vs. 64-bit) are marked with :star:. + [source,shell] ---- -rustup default 1.75.0-x86_64-pc-windows-msvc +rustup default 1.76.0-x86_64-pc-windows-msvc ---- . Download and install https://git-scm.com/download/win[Git for Windows] . Clone the ReaLearn Git repository @@ -140,8 +141,7 @@ cargo build --features egui === Linux -Complete instructions to build ReaLearn from a _fresh_ Ubuntu 18.04.3 LTS installation, -including Rust setup: +Complete instructions to build ReaLearn from a _fresh_ Ubuntu 18.04.3 LTS installation, including Rust setup: [source,shell] ---- @@ -155,7 +155,7 @@ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # choose 1 (defau source $HOME/.cargo/env # Set the correct toolchain default -rustup default 1.75.0-x86_64-unknown-linux-gnu +rustup default 1.76.0-x86_64-unknown-linux-gnu # Clone ReaLearn repository git clone https://github.com/helgoboss/realearn.git @@ -180,29 +180,25 @@ Some words about the native dependencies: * `php` is needed to translate the ReaLearn dialog resource file to C++ so it can be processed by the SWELL dialog generator. It's also necessary for generating the 64-bit EEL assembler code. All of this is the typical WDL C++ way of doing things, no Rust specifics here. -* `nasm` is needed for assembling the 64-bit EEL assembler code to produce `asm-nseel-x64.o`, which is - necessary to make the custom https://www.cockos.com/EEL2/[EEL] control and feedback transformations in ReaLearn's - absolute mode work. -* `llvm-dev libclang-dev clang` are necessary for building with feature `generate` (to generate - bindings to C). +* `nasm` is needed for assembling the 64-bit EEL assembler code to produce `asm-nseel-x64.o`, which is necessary to make the custom https://www.cockos.com/EEL2/[EEL] control and feedback transformations in ReaLearn's absolute mode work. +* `llvm-dev libclang-dev clang` are necessary for building with feature `generate` (to generate bindings to C). * `libxdo-dev` is needed to control the mouse (see target "Global: Mouse") * `libx11-dev libxcursor-dev libxcb-dri2-0-dev libxcb-icccm4-dev libx11-xcb-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev` are necessary for https://github.com/BillyDM/egui-baseview[egui-baseview] (https://github.com/emilk/egui[egui] is the GUI framework used for ReaLearn's control transformation editor) * `libspeechd-dev` is necessary for the speech source -* `libgtk-3-dev` is necessary to obtain the X window and X display from a SWELL - OS window, in order to fire up OpenGL/egui in it +* `libgtk-3-dev` is necessary to obtain the X window and X display from a SWELL OS window, in order to fire up OpenGL/egui in it === macOS -The following instructions include Rust setup. However, it's very well possible that some native toolchain setup -instructions are missing, because I don't have a bare macOS installation at my disposal. The Rust installation script -should provide you with the necessary instructions if something is missing. +The following instructions include Rust setup. +However, it's very well possible that some native toolchain setup instructions are missing, because I don't have a bare macOS installation at my disposal. +The Rust installation script should provide you with the necessary instructions if something is missing. [source,shell] ---- # Install Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # choose 1 (default) source $HOME/.cargo/env -rustup default 1.75.0-x86_64-apple-darwin +rustup default 1.76.0-x86_64-apple-darwin # Clone ReaLearn cd Downloads @@ -226,19 +222,23 @@ cargo build --features egui == GUI -The GUI dialogs are defined in the `dialogs` directory. Whenever ReaLearn is built, the code there generates an old-school Windows dialog resource file (`target/generated/msvc.rc`) and a Rust file which contains all the resource ID constants (`main/src/infrastructure/ui/bindings.rs`). +The GUI dialogs are defined in the `dialogs` directory. +Whenever ReaLearn is built, the code there generates an old-school Windows dialog resource file (`target/generated/msvc.rc`) and a Rust file which contains all the resource ID constants (`main/src/infrastructure/ui/bindings.rs`). Previously I used the Visual Studio C++ 2019 resource editor to WYSIWYG-edit this file as part of the solution link:main/src/infrastructure/ui/msvc/msvc.sln[msvc.sln], but this was too tedious. -WARNING: You can still preview the generated file in Visual Studio but don't edit the RC file, the changes will be overwritten at build time! Adjust the Rust code in the `dialogs` directory instead. +WARNING: You can still preview the generated file in Visual Studio but don't edit the RC file, the changes will be overwritten at build time! +Adjust the Rust code in the `dialogs` directory instead. On macOS and Linux, an extra step will happen at build time: It will try to use a PHP script (part of Cockos SWELL) to generate -`target/generated/msvc.rc_mac_dlg`, which is a translation of the RC file to C code using SWELL. So make sure you have PHP installed on these platforms! +`target/generated/msvc.rc_mac_dlg`, which is a translation of the RC file to C code using SWELL. +So make sure you have PHP installed on these platforms! == Test -Yes, there are tests but there should be more. While ReaLearn's basic building blocks +Yes, there are tests but there should be more. +While ReaLearn's basic building blocks https://github.com/helgoboss/helgoboss-learn[helgoboss-learn] and https://github.com/helgoboss/reaper-rs[reaper-rs] are tested pretty thoroughly, ReaLearn itself has room for improvement in that aspect. @@ -253,16 +253,15 @@ RUST_MIN_STACK=104857600 cargo test === Integration tests -There's a growing built-in -integration test, launchable via action `[developer] ReaLearn: Run integration test`. In future, it would be nice to run -this integration test during continuous integration, just like in _reaper-rs_. +There's a growing built-in integration test, launchable via action `[developer] ReaLearn: Run integration test`. +In future, it would be nice to run this integration test during continuous integration, just like in _reaper-rs_. == Log -It's possible to make ReaLearn output log messages to `stdout` by setting the `REALEARN_LOG` environment variable, -e.g. to `debug,vst=info`. It follows https://docs.rs/env_logger/0.8.2/env_logger/index.html[this] format. Beware -that e.g. on Windows, `stdout` is not shown, not even when executing REAPER from the command line. One way to make it -visible is to execute REAPER with a debugger. +It's possible to make ReaLearn output log messages to `stdout` by setting the `REALEARN_LOG` environment variable, e.g. to `debug,vst=info`. +It follows https://docs.rs/env_logger/0.8.2/env_logger/index.html[this] format. +Beware that e.g. on Windows, `stdout` is not shown, not even when executing REAPER from the command line. +One way to make it visible is to execute REAPER with a debugger. == Metrics @@ -271,7 +270,8 @@ It's possible to make ReaLearn expose execution metrics. === Prometheus endpoint * If the projection server is running, metrics will then be exposed at `/realearn/metrics` in the popular -https://prometheus.io/[Prometheus] format. That's great for visualization. +https://prometheus.io/[Prometheus] format. +That's great for visualization. ** Just add this to your `prometheus.yml` (you might need to adjust the port): [source,yaml] ---- @@ -290,18 +290,20 @@ Prometheus is usually available at http://localhost:9090/. - You can turn on ReaLearn metrics by setting the environment variable `REALEARN_METRICS` (value doesn't matter). - If this environment variable is set (value doesn't matter), ReaLearn will record some metrics and expose them on the Prometheus endpoint mentioned above. -- If ReaLearn is built with the Playtime Clip Engine, this flag will also enable Clip Engine metrics. This can negatively effect clip playing performance because many clip engine metrics are captured in real-time threads. +- If ReaLearn is built with the Playtime Clip Engine, this flag will also enable Clip Engine metrics. +This can negatively effect clip playing performance because many clip engine metrics are captured in real-time threads. == Debug === Debug REAPER scanning ReaLearn -Set `vst_scan=1` in the `[reaper]` section of `reaper.ini`. That makes the debugged REAPER process itself do the scanning. +Set `vst_scan=1` in the `[reaper]` section of `reaper.ini`. +That makes the debugged REAPER process itself do the scanning. === Obtain debug symbols -Debug symbols are stripped from release builds but stored as build artifact of the GitHub Actions "Create release" -workflow. If you want the symbols for a specific build, proceed as follows: +Debug symbols are stripped from release builds but stored as build artifact of the GitHub Actions "Create release" workflow. +If you want the symbols for a specific build, proceed as follows: . Open the https://github.com/helgoboss/realearn/actions?query=workflow%3A%22Create+release%22[list of ReaLearn "Create release" workflows]. . Use the branch filter to show all releases builds made for a specific version, e.g. "v1.11.0". @@ -314,22 +316,25 @@ workflow. If you want the symbols for a specific build, proceed as follows: === Turn on complete backtraces -As soon as you have the debug symbols, you can make ReaLearn print full backtraces (including line number etc.) -in the REAPER ReaScript console. Here's how you do it. +As soon as you have the debug symbols, you can make ReaLearn print full backtraces (including line number etc.) in the REAPER ReaScript console. +Here's how you do it. ==== Windows . Set the environment variable `_NT_ALT_SYMBOL_PATH` to some directory of your choice. . Copy the PDB file in there. -. Fire up REAPER with ReaLearn an make it panic. You should see a complete backtrace now. +. Fire up REAPER with ReaLearn an make it panic. +You should see a complete backtrace now. === Lookup symbols for symbol-less backtraces -The problem with release builds is that they don't contain debug symbols and therefore backtraces usually contain not -much more than memory addresses. Especially backtraces generated by Windows release builds leave a lot to be desired. +The problem with release builds is that they don't contain debug symbols and therefore backtraces usually contain not much more than memory addresses. +Especially backtraces generated by Windows release builds leave a lot to be desired. ReaLearn has a built-in REAPER action which attempts to look up symbol information for a given error report: -"ReaLearn: Resolve symbols from clipboard". Works on Windows only. To be used like this: +"ReaLearn: Resolve symbols from clipboard". +Works on Windows only. +To be used like this: . Make sure the PDB for the release build in question is on the search path (see section above). . Fire up an ReaLearn using exactly that release build. @@ -343,11 +348,11 @@ All documentation is written in AsciiDoc: - link:doc/user-guide.adoc[User guide] - link:ARCHITECTURE.adoc[Architecture] -Some SVGs embedded in the architecture documentation are generated via link:https://nodejs.org/[NodeJS] / link:https://svgjs.dev/[SVG.js] in link:doc/svg-gen/index.js[]. After modifying this file, you need to execute the following command in the project root: +Some SVGs embedded in the architecture documentation are generated via link:https://nodejs.org/[NodeJS] / link:https://svgjs.dev/[SVG.js] in link:doc/svg-gen/index.js[]. +After modifying this file, you need to execute the following command in the project root: node doc/svg-gen/index.js - == Release This serves mainly as checklist for ReaLearn's author. @@ -368,18 +373,16 @@ This serves mainly as checklist for ReaLearn's author. ** Can only be done by @helgoboss because it needs access to the https://github.com/helgoboss/helgoboss-org[helgoboss.org website repository]. ** If it's a prerelease, make sure we are on a prerelease cycle branch of the website repository. ** Add a changelog entry in https://github.com/helgoboss/helgoboss-org/blob/master/src/data/projects/realearn/data.yaml[data.yaml]. -** In `src/snippets/projects/realearn/repo`, enter `git checkout master` and `git pull` to pull the latest user - guide changes. +** In `src/snippets/projects/realearn/repo`, enter `git checkout master` and `git pull` to pull the latest user guide changes. ** Push via `git push origin HEAD` and wait until Netlify deployed the page. ** All the following stuff needs to be done using Netlify's branch preview if it's a prerelease! ** Update https://github.com/helgoboss/reaper-packages/blob/master/index.xml[helgoboss ReaPack index]. *** Generate ReaLearn-only ReaPack index by requesting https://www.helgoboss.org/projects/realearn/reapack.txt[/projects/realearn/reapack.txt]. *** Integrate the generated index by copying everything from `<category name="Extensions">` and pasting it to the - https://github.com/helgoboss/reaper-packages/blob/master/index.xml[helgoboss ReaPack index] without - overwriting the preset categories on the top of the file. +https://github.com/helgoboss/reaper-packages/blob/master/index.xml[helgoboss ReaPack index] without overwriting the preset categories on the top of the file. *** Don't push the index yet! ** Author a REAPER forum ReaLearn thread entry with help of https://www.helgoboss.org/projects/realearn/reaper-forum.txt[/projects/realearn/reaper-forum.txt] - but don't submit yet! +but don't submit yet! ** Download the user guide by requesting https://www.helgoboss.org/projects/realearn/user-guide[/projects/realearn/user-guide]. ** Copy the corresponding changelog entry in markdown format by requesting https://www.helgoboss.org/projects/realearn/changelog.md[/projects/realearn/changelog.md]. . Once the release job has finished successfully, edit the not-yet-published release that has been created. @@ -394,10 +397,14 @@ This serves mainly as checklist for ReaLearn's author. === Windows: ReaLearn DLL doesn't unload -In REAPER for Windows it's possible to enable complete unload of VST plug-ins (Preferences -> Plug-ins -> VST -> Allow complete unload of VST plug-ins). This also affects ReaLearn. Removing the last ReaLearn instance should work with and without this flag enabled, it's important to test this. +In REAPER for Windows it's possible to enable complete unload of VST plug-ins (Preferences -> Plug-ins -> VST -> Allow complete unload of VST plug-ins). +This also affects ReaLearn. +Removing the last ReaLearn instance should work with and without this flag enabled, it's important to test this. -I ran into a case in which Windows was *not* unloading ReaLearn even though that option was enabled. The reason turned out to be a registry entry that Windows must have created automatically at some point: +I ran into a case in which Windows was *not* unloading ReaLearn even though that option was enabled. +The reason turned out to be a registry entry that Windows must have created automatically at some point: `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers` -> `C:\REAPER\reaper.exe` with value `$ IgnoreFreeLibrary` -Removing this entry made unloading work again. What a nasty trap! \ No newline at end of file +Removing this entry made unloading work again. +What a nasty trap! \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 3cddcb623..f92af6b52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6261,6 +6261,7 @@ dependencies = [ "fragile", "libloading 0.8.0", "objc2", + "palette", "raw-window-handle 0.4.3", "reaper-common-types", "reaper-low", diff --git a/main/Cargo.toml b/main/Cargo.toml index 6fa513bbf..84a263773 100644 --- a/main/Cargo.toml +++ b/main/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Benjamin Klum "] edition = "2021" build = "build.rs" license = "GPL-3.0" -rust-version = "1.75.0" +rust-version = "1.76.0" publish = false [features] diff --git a/main/src/infrastructure/proto/generated.rs b/main/src/infrastructure/proto/generated.rs index ea84f33f9..096880846 100644 --- a/main/src/infrastructure/proto/generated.rs +++ b/main/src/infrastructure/proto/generated.rs @@ -1545,9 +1545,7 @@ impl TriggerInstanceAction { /// Creates an enum from field names used in the ProtoBuf definition. pub fn from_str_name(value: &str) -> ::core::option::Option { match value { - "TRIGGER_INSTANCE_ACTION_SHOW_HELGOBOX_PLUGIN" => { - Some(Self::ShowHelgoboxPlugin) - } + "TRIGGER_INSTANCE_ACTION_SHOW_HELGOBOX_PLUGIN" => Some(Self::ShowHelgoboxPlugin), _ => None, } } @@ -1755,15 +1753,9 @@ impl TriggerGlobalAction { TriggerGlobalAction::ArrangementTogglePlayStop => { "TRIGGER_GLOBAL_ACTION_ARRANGEMENT_TOGGLE_PLAY_STOP" } - TriggerGlobalAction::ArrangementPlay => { - "TRIGGER_GLOBAL_ACTION_ARRANGEMENT_PLAY" - } - TriggerGlobalAction::ArrangementStop => { - "TRIGGER_GLOBAL_ACTION_ARRANGEMENT_STOP" - } - TriggerGlobalAction::ArrangementPause => { - "TRIGGER_GLOBAL_ACTION_ARRANGEMENT_PAUSE" - } + TriggerGlobalAction::ArrangementPlay => "TRIGGER_GLOBAL_ACTION_ARRANGEMENT_PLAY", + TriggerGlobalAction::ArrangementStop => "TRIGGER_GLOBAL_ACTION_ARRANGEMENT_STOP", + TriggerGlobalAction::ArrangementPause => "TRIGGER_GLOBAL_ACTION_ARRANGEMENT_PAUSE", TriggerGlobalAction::ArrangementStartRecording => { "TRIGGER_GLOBAL_ACTION_ARRANGEMENT_START_RECORDING" } @@ -1865,9 +1857,7 @@ impl TriggerTrackAction { TriggerTrackAction::ToggleArm => "TRIGGER_TRACK_ACTION_TOGGLE_ARM", TriggerTrackAction::ShowFx => "TRIGGER_TRACK_ACTION_SHOW_FX", TriggerTrackAction::ShowRouting => "TRIGGER_TRACK_ACTION_SHOW_ROUTING", - TriggerTrackAction::ToggleLearnInput => { - "TRIGGER_TRACK_ACTION_TOGGLE_LEARN_INPUT" - } + TriggerTrackAction::ToggleLearnInput => "TRIGGER_TRACK_ACTION_TOGGLE_LEARN_INPUT", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -1927,9 +1917,7 @@ impl TriggerColumnAction { "TRIGGER_COLUMN_ACTION_TOGGLE_LEARN_SIMPLE_MAPPING" => { Some(Self::ToggleLearnSimpleMapping) } - "TRIGGER_COLUMN_ACTION_REMOVE_SIMPLE_MAPPING" => { - Some(Self::RemoveSimpleMapping) - } + "TRIGGER_COLUMN_ACTION_REMOVE_SIMPLE_MAPPING" => Some(Self::RemoveSimpleMapping), "TRIGGER_COLUMN_ACTION_ACTIVATE" => Some(Self::Activate), _ => None, } @@ -1971,9 +1959,7 @@ impl TriggerRowAction { TriggerRowAction::ToggleLearnSimpleMapping => { "TRIGGER_ROW_ACTION_TOGGLE_LEARN_SIMPLE_MAPPING" } - TriggerRowAction::RemoveSimpleMapping => { - "TRIGGER_ROW_ACTION_REMOVE_SIMPLE_MAPPING" - } + TriggerRowAction::RemoveSimpleMapping => "TRIGGER_ROW_ACTION_REMOVE_SIMPLE_MAPPING", TriggerRowAction::BuildSceneFromPlayingSlots => { "TRIGGER_ROW_ACTION_BUILD_SCENE_FROM_PLAYING_SLOTS" } @@ -2089,19 +2075,13 @@ impl TriggerSlotAction { TriggerSlotAction::Copy => "TRIGGER_SLOT_ACTION_COPY", TriggerSlotAction::Cut => "TRIGGER_SLOT_ACTION_CUT", TriggerSlotAction::Paste => "TRIGGER_SLOT_ACTION_PASTE", - TriggerSlotAction::ImportSelectedItems => { - "TRIGGER_SLOT_ACTION_IMPORT_SELECTED_ITEMS" - } + TriggerSlotAction::ImportSelectedItems => "TRIGGER_SLOT_ACTION_IMPORT_SELECTED_ITEMS", TriggerSlotAction::Panic => "TRIGGER_SLOT_ACTION_PANIC", - TriggerSlotAction::CreateEmptyMidiClip => { - "TRIGGER_SLOT_ACTION_CREATE_EMPTY_MIDI_CLIP" - } + TriggerSlotAction::CreateEmptyMidiClip => "TRIGGER_SLOT_ACTION_CREATE_EMPTY_MIDI_CLIP", TriggerSlotAction::ToggleLearnSimpleMapping => { "TRIGGER_SLOT_ACTION_TOGGLE_LEARN_SIMPLE_MAPPING" } - TriggerSlotAction::RemoveSimpleMapping => { - "TRIGGER_SLOT_ACTION_REMOVE_SIMPLE_MAPPING" - } + TriggerSlotAction::RemoveSimpleMapping => "TRIGGER_SLOT_ACTION_REMOVE_SIMPLE_MAPPING", TriggerSlotAction::TriggerOn => "TRIGGER_SLOT_ACTION_TRIGGER_ON", TriggerSlotAction::TriggerOff => "TRIGGER_SLOT_ACTION_TRIGGER_OFF", TriggerSlotAction::Activate => "TRIGGER_SLOT_ACTION_ACTIVATE", @@ -2117,19 +2097,13 @@ impl TriggerSlotAction { "TRIGGER_SLOT_ACTION_COPY" => Some(Self::Copy), "TRIGGER_SLOT_ACTION_CUT" => Some(Self::Cut), "TRIGGER_SLOT_ACTION_PASTE" => Some(Self::Paste), - "TRIGGER_SLOT_ACTION_IMPORT_SELECTED_ITEMS" => { - Some(Self::ImportSelectedItems) - } + "TRIGGER_SLOT_ACTION_IMPORT_SELECTED_ITEMS" => Some(Self::ImportSelectedItems), "TRIGGER_SLOT_ACTION_PANIC" => Some(Self::Panic), - "TRIGGER_SLOT_ACTION_CREATE_EMPTY_MIDI_CLIP" => { - Some(Self::CreateEmptyMidiClip) - } + "TRIGGER_SLOT_ACTION_CREATE_EMPTY_MIDI_CLIP" => Some(Self::CreateEmptyMidiClip), "TRIGGER_SLOT_ACTION_TOGGLE_LEARN_SIMPLE_MAPPING" => { Some(Self::ToggleLearnSimpleMapping) } - "TRIGGER_SLOT_ACTION_REMOVE_SIMPLE_MAPPING" => { - Some(Self::RemoveSimpleMapping) - } + "TRIGGER_SLOT_ACTION_REMOVE_SIMPLE_MAPPING" => Some(Self::RemoveSimpleMapping), "TRIGGER_SLOT_ACTION_TRIGGER_ON" => Some(Self::TriggerOn), "TRIGGER_SLOT_ACTION_TRIGGER_OFF" => Some(Self::TriggerOff), "TRIGGER_SLOT_ACTION_ACTIVATE" => Some(Self::Activate), @@ -2160,14 +2134,10 @@ impl TriggerClipAction { TriggerClipAction::Edit => "TRIGGER_CLIP_ACTION_EDIT", TriggerClipAction::Remove => "TRIGGER_CLIP_ACTION_REMOVE", TriggerClipAction::Promote => "TRIGGER_CLIP_ACTION_PROMOTE", - TriggerClipAction::OpenInMediaExplorer => { - "TRIGGER_CLIP_ACTION_OPEN_IN_MEDIA_EXPLORER" - } + TriggerClipAction::OpenInMediaExplorer => "TRIGGER_CLIP_ACTION_OPEN_IN_MEDIA_EXPLORER", TriggerClipAction::Quantize => "TRIGGER_CLIP_ACTION_QUANTIZE", TriggerClipAction::Unquantize => "TRIGGER_CLIP_ACTION_UNQUANTIZE", - TriggerClipAction::ExportToClipboard => { - "TRIGGER_CLIP_ACTION_EXPORT_TO_CLIPBOARD" - } + TriggerClipAction::ExportToClipboard => "TRIGGER_CLIP_ACTION_EXPORT_TO_CLIPBOARD", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -2177,9 +2147,7 @@ impl TriggerClipAction { "TRIGGER_CLIP_ACTION_EDIT" => Some(Self::Edit), "TRIGGER_CLIP_ACTION_REMOVE" => Some(Self::Remove), "TRIGGER_CLIP_ACTION_PROMOTE" => Some(Self::Promote), - "TRIGGER_CLIP_ACTION_OPEN_IN_MEDIA_EXPLORER" => { - Some(Self::OpenInMediaExplorer) - } + "TRIGGER_CLIP_ACTION_OPEN_IN_MEDIA_EXPLORER" => Some(Self::OpenInMediaExplorer), "TRIGGER_CLIP_ACTION_QUANTIZE" => Some(Self::Quantize), "TRIGGER_CLIP_ACTION_UNQUANTIZE" => Some(Self::Unquantize), "TRIGGER_CLIP_ACTION_EXPORT_TO_CLIPBOARD" => Some(Self::ExportToClipboard), @@ -2318,14 +2286,10 @@ impl SlotPlayState { SlotPlayState::Unknown => "SLOT_PLAY_STATE_UNKNOWN", SlotPlayState::Stopped => "SLOT_PLAY_STATE_STOPPED", SlotPlayState::Ignited => "SLOT_PLAY_STATE_IGNITED", - SlotPlayState::ScheduledForPlayStart => { - "SLOT_PLAY_STATE_SCHEDULED_FOR_PLAY_START" - } + SlotPlayState::ScheduledForPlayStart => "SLOT_PLAY_STATE_SCHEDULED_FOR_PLAY_START", SlotPlayState::Playing => "SLOT_PLAY_STATE_PLAYING", SlotPlayState::Paused => "SLOT_PLAY_STATE_PAUSED", - SlotPlayState::ScheduledForPlayStop => { - "SLOT_PLAY_STATE_SCHEDULED_FOR_PLAY_STOP" - } + SlotPlayState::ScheduledForPlayStop => "SLOT_PLAY_STATE_SCHEDULED_FOR_PLAY_STOP", SlotPlayState::ScheduledForRecordingStart => { "SLOT_PLAY_STATE_SCHEDULED_FOR_RECORDING_START" } @@ -2341,9 +2305,7 @@ impl SlotPlayState { "SLOT_PLAY_STATE_UNKNOWN" => Some(Self::Unknown), "SLOT_PLAY_STATE_STOPPED" => Some(Self::Stopped), "SLOT_PLAY_STATE_IGNITED" => Some(Self::Ignited), - "SLOT_PLAY_STATE_SCHEDULED_FOR_PLAY_START" => { - Some(Self::ScheduledForPlayStart) - } + "SLOT_PLAY_STATE_SCHEDULED_FOR_PLAY_START" => Some(Self::ScheduledForPlayStart), "SLOT_PLAY_STATE_PLAYING" => Some(Self::Playing), "SLOT_PLAY_STATE_PAUSED" => Some(Self::Paused), "SLOT_PLAY_STATE_SCHEDULED_FOR_PLAY_STOP" => Some(Self::ScheduledForPlayStop), @@ -2351,9 +2313,7 @@ impl SlotPlayState { Some(Self::ScheduledForRecordingStart) } "SLOT_PLAY_STATE_RECORDING" => Some(Self::Recording), - "SLOT_PLAY_STATE_SCHEDULED_FOR_RECORDING_STOP" => { - Some(Self::ScheduledForRecordingStop) - } + "SLOT_PLAY_STATE_SCHEDULED_FOR_RECORDING_STOP" => Some(Self::ScheduledForRecordingStop), _ => None, } } @@ -2373,9 +2333,7 @@ impl MidiDeviceStatus { pub fn as_str_name(&self) -> &'static str { match self { MidiDeviceStatus::Disconnected => "MIDI_DEVICE_STATUS_DISCONNECTED", - MidiDeviceStatus::ConnectedButDisabled => { - "MIDI_DEVICE_STATUS_CONNECTED_BUT_DISABLED" - } + MidiDeviceStatus::ConnectedButDisabled => "MIDI_DEVICE_STATUS_CONNECTED_BUT_DISABLED", MidiDeviceStatus::Connected => "MIDI_DEVICE_STATUS_CONNECTED", } } @@ -2383,9 +2341,7 @@ impl MidiDeviceStatus { pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "MIDI_DEVICE_STATUS_DISCONNECTED" => Some(Self::Disconnected), - "MIDI_DEVICE_STATUS_CONNECTED_BUT_DISABLED" => { - Some(Self::ConnectedButDisabled) - } + "MIDI_DEVICE_STATUS_CONNECTED_BUT_DISABLED" => Some(Self::ConnectedButDisabled), "MIDI_DEVICE_STATUS_CONNECTED" => Some(Self::Connected), _ => None, } @@ -2411,13 +2367,9 @@ impl ArrangementPlayState { ArrangementPlayState::Unknown => "ARRANGEMENT_PLAY_STATE_UNKNOWN", ArrangementPlayState::Stopped => "ARRANGEMENT_PLAY_STATE_STOPPED", ArrangementPlayState::Playing => "ARRANGEMENT_PLAY_STATE_PLAYING", - ArrangementPlayState::PlayingPaused => { - "ARRANGEMENT_PLAY_STATE_PLAYING_PAUSED" - } + ArrangementPlayState::PlayingPaused => "ARRANGEMENT_PLAY_STATE_PLAYING_PAUSED", ArrangementPlayState::Recording => "ARRANGEMENT_PLAY_STATE_RECORDING", - ArrangementPlayState::RecordingPaused => { - "ARRANGEMENT_PLAY_STATE_RECORDING_PAUSED" - } + ArrangementPlayState::RecordingPaused => "ARRANGEMENT_PLAY_STATE_RECORDING_PAUSED", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -2476,55 +2428,34 @@ pub mod helgobox_service_server { async fn get_host_info( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; async fn prove_authenticity( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; async fn get_app_settings( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Playtime matrix queries async fn get_project_dir( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; async fn get_arrangement_info( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Playtime clip queries async fn get_clip_detail( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// ReaLearn compartment queries async fn get_compartment_data( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// General global commands async fn trigger_global( &self, @@ -2689,12 +2620,8 @@ pub mod helgobox_service_server { ) -> std::result::Result, tonic::Status>; /// Server streaming response type for the GetOccasionalGlobalUpdates method. type GetOccasionalGlobalUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalGlobalUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// General global events async fn get_occasional_global_updates( @@ -2706,12 +2633,8 @@ pub mod helgobox_service_server { >; /// Server streaming response type for the GetOccasionalInstanceUpdates method. type GetOccasionalInstanceUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalInstanceUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// General instance events async fn get_occasional_instance_updates( @@ -2723,28 +2646,17 @@ pub mod helgobox_service_server { >; /// Server streaming response type for the GetOccasionalUnitUpdates method. type GetOccasionalUnitUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalUnitUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; async fn get_occasional_unit_updates( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Server streaming response type for the GetOccasionalMatrixUpdates method. type GetOccasionalMatrixUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalMatrixUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// Playtime matrix events async fn get_occasional_matrix_updates( @@ -2756,12 +2668,8 @@ pub mod helgobox_service_server { >; /// Server streaming response type for the GetContinuousMatrixUpdates method. type GetContinuousMatrixUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetContinuousMatrixUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; async fn get_continuous_matrix_updates( &self, @@ -2772,12 +2680,8 @@ pub mod helgobox_service_server { >; /// Server streaming response type for the GetOccasionalColumnUpdates method. type GetOccasionalColumnUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalColumnUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// Playtime column events async fn get_occasional_column_updates( @@ -2789,12 +2693,8 @@ pub mod helgobox_service_server { >; /// Server streaming response type for the GetContinuousColumnUpdates method. type GetContinuousColumnUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetContinuousColumnUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; async fn get_continuous_column_updates( &self, @@ -2805,12 +2705,8 @@ pub mod helgobox_service_server { >; /// Server streaming response type for the GetOccasionalTrackUpdates method. type GetOccasionalTrackUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalTrackUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// Playtime track events async fn get_occasional_track_updates( @@ -2822,71 +2718,43 @@ pub mod helgobox_service_server { >; /// Server streaming response type for the GetOccasionalRowUpdates method. type GetOccasionalRowUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalRowUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// Playtime row events async fn get_occasional_row_updates( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Server streaming response type for the GetOccasionalSlotUpdates method. type GetOccasionalSlotUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalSlotUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// Playtime slot events async fn get_occasional_slot_updates( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Server streaming response type for the GetContinuousSlotUpdates method. type GetContinuousSlotUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetContinuousSlotUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; async fn get_continuous_slot_updates( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; /// Server streaming response type for the GetOccasionalClipUpdates method. type GetOccasionalClipUpdatesStream: tonic::codegen::tokio_stream::Stream< - Item = std::result::Result< - super::GetOccasionalClipUpdatesReply, - tonic::Status, - >, - > - + Send + Item = std::result::Result, + > + Send + 'static; /// Playtime clip events async fn get_occasional_clip_updates( &self, request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; + ) -> std::result::Result, tonic::Status>; } #[derive(Debug)] pub struct HelgoboxServiceServer { @@ -2911,10 +2779,7 @@ pub mod helgobox_service_server { max_encoding_message_size: None, } } - pub fn with_interceptor( - inner: T, - interceptor: F, - ) -> InterceptedService + pub fn with_interceptor(inner: T, interceptor: F) -> InterceptedService where F: tonic::service::Interceptor, { @@ -2970,15 +2835,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetHostInfo" => { #[allow(non_camel_case_types)] struct GetHostInfoSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for GetHostInfoSvc { + impl tonic::server::UnaryService + for GetHostInfoSvc + { type Response = super::GetHostInfoReply; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -3016,23 +2877,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/ProveAuthenticity" => { #[allow(non_camel_case_types)] struct ProveAuthenticitySvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for ProveAuthenticitySvc { + impl + tonic::server::UnaryService + for ProveAuthenticitySvc + { type Response = super::ProveAuthenticityReply; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::prove_authenticity(&inner, request) - .await + ::prove_authenticity(&inner, request).await }; Box::pin(fut) } @@ -3063,23 +2920,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetAppSettings" => { #[allow(non_camel_case_types)] struct GetAppSettingsSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for GetAppSettingsSvc { + impl + tonic::server::UnaryService + for GetAppSettingsSvc + { type Response = super::GetAppSettingsReply; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_app_settings(&inner, request) - .await + ::get_app_settings(&inner, request).await }; Box::pin(fut) } @@ -3110,23 +2963,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetProjectDir" => { #[allow(non_camel_case_types)] struct GetProjectDirSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for GetProjectDirSvc { + impl + tonic::server::UnaryService + for GetProjectDirSvc + { type Response = super::GetProjectDirReply; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_project_dir(&inner, request) - .await + ::get_project_dir(&inner, request).await }; Box::pin(fut) } @@ -3157,26 +3006,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetArrangementInfo" => { #[allow(non_camel_case_types)] struct GetArrangementInfoSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for GetArrangementInfoSvc { + impl + tonic::server::UnaryService + for GetArrangementInfoSvc + { type Response = super::GetArrangementInfoReply; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_arrangement_info( - &inner, - request, - ) - .await + ::get_arrangement_info(&inner, request).await }; Box::pin(fut) } @@ -3207,23 +3049,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetClipDetail" => { #[allow(non_camel_case_types)] struct GetClipDetailSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for GetClipDetailSvc { + impl + tonic::server::UnaryService + for GetClipDetailSvc + { type Response = super::GetClipDetailReply; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_clip_detail(&inner, request) - .await + ::get_clip_detail(&inner, request).await }; Box::pin(fut) } @@ -3254,26 +3092,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetCompartmentData" => { #[allow(non_camel_case_types)] struct GetCompartmentDataSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for GetCompartmentDataSvc { + impl + tonic::server::UnaryService + for GetCompartmentDataSvc + { type Response = super::GetCompartmentDataReply; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_compartment_data( - &inner, - request, - ) - .await + ::get_compartment_data(&inner, request).await }; Box::pin(fut) } @@ -3304,23 +3135,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerGlobal" => { #[allow(non_camel_case_types)] struct TriggerGlobalSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerGlobalSvc { + impl + tonic::server::UnaryService + for TriggerGlobalSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::trigger_global(&inner, request) - .await + ::trigger_global(&inner, request).await }; Box::pin(fut) } @@ -3351,23 +3178,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetAppSettings" => { #[allow(non_camel_case_types)] struct SetAppSettingsSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetAppSettingsSvc { + impl + tonic::server::UnaryService + for SetAppSettingsSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_app_settings(&inner, request) - .await + ::set_app_settings(&inner, request).await }; Box::pin(fut) } @@ -3398,15 +3221,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/AddLicense" => { #[allow(non_camel_case_types)] struct AddLicenseSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for AddLicenseSvc { + impl tonic::server::UnaryService + for AddLicenseSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -3444,23 +3263,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SaveController" => { #[allow(non_camel_case_types)] struct SaveControllerSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SaveControllerSvc { + impl + tonic::server::UnaryService + for SaveControllerSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::save_controller(&inner, request) - .await + ::save_controller(&inner, request).await }; Box::pin(fut) } @@ -3491,23 +3306,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/DeleteController" => { #[allow(non_camel_case_types)] struct DeleteControllerSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for DeleteControllerSvc { + impl + tonic::server::UnaryService + for DeleteControllerSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::delete_controller(&inner, request) - .await + ::delete_controller(&inner, request).await }; Box::pin(fut) } @@ -3538,23 +3349,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerInstance" => { #[allow(non_camel_case_types)] struct TriggerInstanceSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerInstanceSvc { + impl + tonic::server::UnaryService + for TriggerInstanceSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::trigger_instance(&inner, request) - .await + ::trigger_instance(&inner, request).await }; Box::pin(fut) } @@ -3585,26 +3392,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetInstanceSettings" => { #[allow(non_camel_case_types)] struct SetInstanceSettingsSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetInstanceSettingsSvc { + impl + tonic::server::UnaryService + for SetInstanceSettingsSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_instance_settings( - &inner, - request, - ) - .await + ::set_instance_settings(&inner, request).await }; Box::pin(fut) } @@ -3635,23 +3435,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerMatrix" => { #[allow(non_camel_case_types)] struct TriggerMatrixSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerMatrixSvc { + impl + tonic::server::UnaryService + for TriggerMatrixSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::trigger_matrix(&inner, request) - .await + ::trigger_matrix(&inner, request).await }; Box::pin(fut) } @@ -3682,23 +3478,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetMatrixSettings" => { #[allow(non_camel_case_types)] struct SetMatrixSettingsSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetMatrixSettingsSvc { + impl + tonic::server::UnaryService + for SetMatrixSettingsSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_matrix_settings(&inner, request) - .await + ::set_matrix_settings(&inner, request).await }; Box::pin(fut) } @@ -3729,23 +3521,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetMatrixTempo" => { #[allow(non_camel_case_types)] struct SetMatrixTempoSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetMatrixTempoSvc { + impl + tonic::server::UnaryService + for SetMatrixTempoSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_matrix_tempo(&inner, request) - .await + ::set_matrix_tempo(&inner, request).await }; Box::pin(fut) } @@ -3776,25 +3564,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetMatrixTimeSignature" => { #[allow(non_camel_case_types)] struct SetMatrixTimeSignatureSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetMatrixTimeSignatureSvc { + impl + tonic::server::UnaryService + for SetMatrixTimeSignatureSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_matrix_time_signature( - &inner, - request, - ) + ::set_matrix_time_signature(&inner, request) .await }; Box::pin(fut) @@ -3826,23 +3608,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetMatrixVolume" => { #[allow(non_camel_case_types)] struct SetMatrixVolumeSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetMatrixVolumeSvc { + impl + tonic::server::UnaryService + for SetMatrixVolumeSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_matrix_volume(&inner, request) - .await + ::set_matrix_volume(&inner, request).await }; Box::pin(fut) } @@ -3873,23 +3651,18 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetMatrixPan" => { #[allow(non_camel_case_types)] struct SetMatrixPanSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetMatrixPanSvc { + impl tonic::server::UnaryService + for SetMatrixPanSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_matrix_pan(&inner, request) - .await + ::set_matrix_pan(&inner, request).await }; Box::pin(fut) } @@ -3920,23 +3693,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerColumn" => { #[allow(non_camel_case_types)] struct TriggerColumnSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerColumnSvc { + impl + tonic::server::UnaryService + for TriggerColumnSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::trigger_column(&inner, request) - .await + ::trigger_column(&inner, request).await }; Box::pin(fut) } @@ -3967,23 +3736,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/InsertColumns" => { #[allow(non_camel_case_types)] struct InsertColumnsSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for InsertColumnsSvc { + impl + tonic::server::UnaryService + for InsertColumnsSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::insert_columns(&inner, request) - .await + ::insert_columns(&inner, request).await }; Box::pin(fut) } @@ -4014,23 +3779,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetColumnSettings" => { #[allow(non_camel_case_types)] struct SetColumnSettingsSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetColumnSettingsSvc { + impl + tonic::server::UnaryService + for SetColumnSettingsSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_column_settings(&inner, request) - .await + ::set_column_settings(&inner, request).await }; Box::pin(fut) } @@ -4061,23 +3822,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetColumnTrack" => { #[allow(non_camel_case_types)] struct SetColumnTrackSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetColumnTrackSvc { + impl + tonic::server::UnaryService + for SetColumnTrackSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_column_track(&inner, request) - .await + ::set_column_track(&inner, request).await }; Box::pin(fut) } @@ -4108,15 +3865,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/DragColumn" => { #[allow(non_camel_case_types)] struct DragColumnSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for DragColumnSvc { + impl tonic::server::UnaryService + for DragColumnSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4154,15 +3907,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerTrack" => { #[allow(non_camel_case_types)] struct TriggerTrackSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerTrackSvc { + impl tonic::server::UnaryService + for TriggerTrackSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4200,23 +3949,18 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetTrackName" => { #[allow(non_camel_case_types)] struct SetTrackNameSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetTrackNameSvc { + impl tonic::server::UnaryService + for SetTrackNameSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_track_name(&inner, request) - .await + ::set_track_name(&inner, request).await }; Box::pin(fut) } @@ -4247,23 +3991,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetTrackColor" => { #[allow(non_camel_case_types)] struct SetTrackColorSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetTrackColorSvc { + impl + tonic::server::UnaryService + for SetTrackColorSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_track_color(&inner, request) - .await + ::set_track_color(&inner, request).await }; Box::pin(fut) } @@ -4294,23 +4034,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetTrackInput" => { #[allow(non_camel_case_types)] struct SetTrackInputSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetTrackInputSvc { + impl + tonic::server::UnaryService + for SetTrackInputSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_track_input(&inner, request) - .await + ::set_track_input(&inner, request).await }; Box::pin(fut) } @@ -4341,27 +4077,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetTrackInputMonitoring" => { #[allow(non_camel_case_types)] struct SetTrackInputMonitoringSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetTrackInputMonitoringSvc { + impl + tonic::server::UnaryService + for SetTrackInputMonitoringSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::SetTrackInputMonitoringRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_track_input_monitoring( - &inner, - request, - ) + ::set_track_input_monitoring(&inner, request) .await }; Box::pin(fut) @@ -4393,23 +4121,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetTrackVolume" => { #[allow(non_camel_case_types)] struct SetTrackVolumeSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetTrackVolumeSvc { + impl + tonic::server::UnaryService + for SetTrackVolumeSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_track_volume(&inner, request) - .await + ::set_track_volume(&inner, request).await }; Box::pin(fut) } @@ -4440,15 +4164,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetTrackPan" => { #[allow(non_camel_case_types)] struct SetTrackPanSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetTrackPanSvc { + impl tonic::server::UnaryService + for SetTrackPanSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4486,15 +4206,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerRow" => { #[allow(non_camel_case_types)] struct TriggerRowSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerRowSvc { + impl tonic::server::UnaryService + for TriggerRowSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4532,15 +4248,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetRowData" => { #[allow(non_camel_case_types)] struct SetRowDataSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetRowDataSvc { + impl tonic::server::UnaryService + for SetRowDataSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4578,15 +4290,9 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/DragRow" => { #[allow(non_camel_case_types)] struct DragRowSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for DragRowSvc { + impl tonic::server::UnaryService for DragRowSvc { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4624,15 +4330,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerSlot" => { #[allow(non_camel_case_types)] struct TriggerSlotSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerSlotSvc { + impl tonic::server::UnaryService + for TriggerSlotSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4670,15 +4372,9 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/DragSlot" => { #[allow(non_camel_case_types)] struct DragSlotSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for DragSlotSvc { + impl tonic::server::UnaryService for DragSlotSvc { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4716,15 +4412,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/ImportFiles" => { #[allow(non_camel_case_types)] struct ImportFilesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for ImportFilesSvc { + impl tonic::server::UnaryService + for ImportFilesSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4762,15 +4454,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerClip" => { #[allow(non_camel_case_types)] struct TriggerClipSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerClipSvc { + impl tonic::server::UnaryService + for TriggerClipSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4808,15 +4496,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetClipName" => { #[allow(non_camel_case_types)] struct SetClipNameSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetClipNameSvc { + impl tonic::server::UnaryService + for SetClipNameSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4854,15 +4538,11 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetClipData" => { #[allow(non_camel_case_types)] struct SetClipDataSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetClipDataSvc { + impl tonic::server::UnaryService + for SetClipDataSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4900,15 +4580,9 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/DragClip" => { #[allow(non_camel_case_types)] struct DragClipSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for DragClipSvc { + impl tonic::server::UnaryService for DragClipSvc { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, @@ -4946,23 +4620,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/TriggerSequence" => { #[allow(non_camel_case_types)] struct TriggerSequenceSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for TriggerSequenceSvc { + impl + tonic::server::UnaryService + for TriggerSequenceSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::trigger_sequence(&inner, request) - .await + ::trigger_sequence(&inner, request).await }; Box::pin(fut) } @@ -4993,23 +4663,19 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SetSequenceInfo" => { #[allow(non_camel_case_types)] struct SetSequenceInfoSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService - for SetSequenceInfoSvc { + impl + tonic::server::UnaryService + for SetSequenceInfoSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::set_sequence_info(&inner, request) - .await + ::set_sequence_info(&inner, request).await }; Box::pin(fut) } @@ -5040,29 +4706,22 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/SaveCustomCompartmentData" => { #[allow(non_camel_case_types)] struct SaveCustomCompartmentDataSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::UnaryService< - super::SaveCustomCompartmentDataRequest, - > for SaveCustomCompartmentDataSvc { + impl + tonic::server::UnaryService + for SaveCustomCompartmentDataSvc + { type Response = super::Empty; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::SaveCustomCompartmentDataRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::save_custom_compartment_data( - &inner, - request, - ) - .await + &inner, request, + ) + .await }; Box::pin(fut) } @@ -5093,30 +4752,25 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetOccasionalGlobalUpdates" => { #[allow(non_camel_case_types)] struct GetOccasionalGlobalUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalGlobalUpdatesRequest, - > for GetOccasionalGlobalUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetOccasionalGlobalUpdatesRequest, + > for GetOccasionalGlobalUpdatesSvc + { type Response = super::GetOccasionalGlobalUpdatesReply; type ResponseStream = T::GetOccasionalGlobalUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalGlobalUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_occasional_global_updates( - &inner, - request, - ) - .await + &inner, request, + ) + .await }; Box::pin(fut) } @@ -5146,33 +4800,26 @@ pub mod helgobox_service_server { } "/generated.HelgoboxService/GetOccasionalInstanceUpdates" => { #[allow(non_camel_case_types)] - struct GetOccasionalInstanceUpdatesSvc( - pub Arc, - ); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalInstanceUpdatesRequest, - > for GetOccasionalInstanceUpdatesSvc { + struct GetOccasionalInstanceUpdatesSvc(pub Arc); + impl + tonic::server::ServerStreamingService< + super::GetOccasionalInstanceUpdatesRequest, + > for GetOccasionalInstanceUpdatesSvc + { type Response = super::GetOccasionalInstanceUpdatesReply; type ResponseStream = T::GetOccasionalInstanceUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalInstanceUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_occasional_instance_updates( - &inner, - request, - ) - .await + &inner, request, + ) + .await }; Box::pin(fut) } @@ -5203,29 +4850,22 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetOccasionalUnitUpdates" => { #[allow(non_camel_case_types)] struct GetOccasionalUnitUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalUnitUpdatesRequest, - > for GetOccasionalUnitUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetOccasionalUnitUpdatesRequest, + > for GetOccasionalUnitUpdatesSvc + { type Response = super::GetOccasionalUnitUpdatesReply; type ResponseStream = T::GetOccasionalUnitUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalUnitUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_occasional_unit_updates( - &inner, - request, - ) + ::get_occasional_unit_updates(&inner, request) .await }; Box::pin(fut) @@ -5257,30 +4897,25 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetOccasionalMatrixUpdates" => { #[allow(non_camel_case_types)] struct GetOccasionalMatrixUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalMatrixUpdatesRequest, - > for GetOccasionalMatrixUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetOccasionalMatrixUpdatesRequest, + > for GetOccasionalMatrixUpdatesSvc + { type Response = super::GetOccasionalMatrixUpdatesReply; type ResponseStream = T::GetOccasionalMatrixUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalMatrixUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_occasional_matrix_updates( - &inner, - request, - ) - .await + &inner, request, + ) + .await }; Box::pin(fut) } @@ -5311,30 +4946,25 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetContinuousMatrixUpdates" => { #[allow(non_camel_case_types)] struct GetContinuousMatrixUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetContinuousMatrixUpdatesRequest, - > for GetContinuousMatrixUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetContinuousMatrixUpdatesRequest, + > for GetContinuousMatrixUpdatesSvc + { type Response = super::GetContinuousMatrixUpdatesReply; type ResponseStream = T::GetContinuousMatrixUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetContinuousMatrixUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_continuous_matrix_updates( - &inner, - request, - ) - .await + &inner, request, + ) + .await }; Box::pin(fut) } @@ -5365,30 +4995,25 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetOccasionalColumnUpdates" => { #[allow(non_camel_case_types)] struct GetOccasionalColumnUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalColumnUpdatesRequest, - > for GetOccasionalColumnUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetOccasionalColumnUpdatesRequest, + > for GetOccasionalColumnUpdatesSvc + { type Response = super::GetOccasionalColumnUpdatesReply; type ResponseStream = T::GetOccasionalColumnUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalColumnUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_occasional_column_updates( - &inner, - request, - ) - .await + &inner, request, + ) + .await }; Box::pin(fut) } @@ -5419,30 +5044,25 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetContinuousColumnUpdates" => { #[allow(non_camel_case_types)] struct GetContinuousColumnUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetContinuousColumnUpdatesRequest, - > for GetContinuousColumnUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetContinuousColumnUpdatesRequest, + > for GetContinuousColumnUpdatesSvc + { type Response = super::GetContinuousColumnUpdatesReply; type ResponseStream = T::GetContinuousColumnUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetContinuousColumnUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_continuous_column_updates( - &inner, - request, - ) - .await + &inner, request, + ) + .await }; Box::pin(fut) } @@ -5473,30 +5093,25 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetOccasionalTrackUpdates" => { #[allow(non_camel_case_types)] struct GetOccasionalTrackUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalTrackUpdatesRequest, - > for GetOccasionalTrackUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetOccasionalTrackUpdatesRequest, + > for GetOccasionalTrackUpdatesSvc + { type Response = super::GetOccasionalTrackUpdatesReply; type ResponseStream = T::GetOccasionalTrackUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalTrackUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_occasional_track_updates( - &inner, - request, - ) - .await + &inner, request, + ) + .await }; Box::pin(fut) } @@ -5527,29 +5142,21 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetOccasionalRowUpdates" => { #[allow(non_camel_case_types)] struct GetOccasionalRowUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalRowUpdatesRequest, - > for GetOccasionalRowUpdatesSvc { + impl + tonic::server::ServerStreamingService + for GetOccasionalRowUpdatesSvc + { type Response = super::GetOccasionalRowUpdatesReply; type ResponseStream = T::GetOccasionalRowUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalRowUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_occasional_row_updates( - &inner, - request, - ) + ::get_occasional_row_updates(&inner, request) .await }; Box::pin(fut) @@ -5581,29 +5188,22 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetOccasionalSlotUpdates" => { #[allow(non_camel_case_types)] struct GetOccasionalSlotUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalSlotUpdatesRequest, - > for GetOccasionalSlotUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetOccasionalSlotUpdatesRequest, + > for GetOccasionalSlotUpdatesSvc + { type Response = super::GetOccasionalSlotUpdatesReply; type ResponseStream = T::GetOccasionalSlotUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalSlotUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_occasional_slot_updates( - &inner, - request, - ) + ::get_occasional_slot_updates(&inner, request) .await }; Box::pin(fut) @@ -5635,29 +5235,22 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetContinuousSlotUpdates" => { #[allow(non_camel_case_types)] struct GetContinuousSlotUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetContinuousSlotUpdatesRequest, - > for GetContinuousSlotUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetContinuousSlotUpdatesRequest, + > for GetContinuousSlotUpdatesSvc + { type Response = super::GetContinuousSlotUpdatesReply; type ResponseStream = T::GetContinuousSlotUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetContinuousSlotUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_continuous_slot_updates( - &inner, - request, - ) + ::get_continuous_slot_updates(&inner, request) .await }; Box::pin(fut) @@ -5689,29 +5282,22 @@ pub mod helgobox_service_server { "/generated.HelgoboxService/GetOccasionalClipUpdates" => { #[allow(non_camel_case_types)] struct GetOccasionalClipUpdatesSvc(pub Arc); - impl< - T: HelgoboxService, - > tonic::server::ServerStreamingService< - super::GetOccasionalClipUpdatesRequest, - > for GetOccasionalClipUpdatesSvc { + impl + tonic::server::ServerStreamingService< + super::GetOccasionalClipUpdatesRequest, + > for GetOccasionalClipUpdatesSvc + { type Response = super::GetOccasionalClipUpdatesReply; type ResponseStream = T::GetOccasionalClipUpdatesStream; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; + type Future = + BoxFuture, tonic::Status>; fn call( &mut self, - request: tonic::Request< - super::GetOccasionalClipUpdatesRequest, - >, + request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { - ::get_occasional_clip_updates( - &inner, - request, - ) + ::get_occasional_clip_updates(&inner, request) .await }; Box::pin(fut) @@ -5740,18 +5326,14 @@ pub mod helgobox_service_server { }; Box::pin(fut) } - _ => { - Box::pin(async move { - Ok( - http::Response::builder() - .status(200) - .header("grpc-status", "12") - .header("content-type", "application/grpc") - .body(empty_body()) - .unwrap(), - ) - }) - } + _ => Box::pin(async move { + Ok(http::Response::builder() + .status(200) + .header("grpc-status", "12") + .header("content-type", "application/grpc") + .body(empty_body()) + .unwrap()) + }), } } } diff --git a/main/src/infrastructure/ui/app/app_library.rs b/main/src/infrastructure/ui/app/app_library.rs index 166d5310f..8d2f55af1 100644 --- a/main/src/infrastructure/ui/app/app_library.rs +++ b/main/src/infrastructure/ui/app/app_library.rs @@ -42,7 +42,6 @@ impl AppLibrary { // depend on it. "flutter_windows.dll", // The rest can have an arbitrary order. - "device_info_plus.dll", "desktop_drop_plugin.dll", "native_context_menu_plugin.dll", "screen_retriever_plugin.dll", @@ -54,23 +53,23 @@ impl AppLibrary { ) } else if cfg!(target_os = "macos") { ( - "Contents/MacOS/helgobox", - [ - // Important: This must be the first. Because below plug-in libraries - // depend on it. - "Contents/Frameworks/FlutterMacOS.framework/FlutterMacOS", - // The rest can have an arbitrary order. - "Contents/Frameworks/cryptography_flutter.framework/cryptography_flutter", - "Contents/Frameworks/device_info_plus.framework/device_info_plus", - "Contents/Frameworks/desktop_drop.framework/desktop_drop", - "Contents/Frameworks/native_context_menu.framework/native_context_menu", - "Contents/Frameworks/path_provider_foundation.framework/path_provider_foundation", - "Contents/Frameworks/screen_retriever.framework/screen_retriever", - "Contents/Frameworks/url_launcher_macos.framework/url_launcher_macos", - "Contents/Frameworks/window_manager.framework/window_manager", - "Contents/Frameworks/pointer_lock.framework/pointer_lock", - ].as_slice(), - ) + "Contents/MacOS/helgobox", + [ + // Important: This must be the first. Because below plug-in libraries + // depend on it. + "Contents/Frameworks/FlutterMacOS.framework/FlutterMacOS", + // The rest can have an arbitrary order. + "Contents/Frameworks/cryptography_flutter.framework/cryptography_flutter", + "Contents/Frameworks/device_info_plus.framework/device_info_plus", + "Contents/Frameworks/desktop_drop.framework/desktop_drop", + "Contents/Frameworks/native_context_menu.framework/native_context_menu", + "Contents/Frameworks/path_provider_foundation.framework/path_provider_foundation", + "Contents/Frameworks/screen_retriever.framework/screen_retriever", + "Contents/Frameworks/url_launcher_macos.framework/url_launcher_macos", + "Contents/Frameworks/window_manager.framework/window_manager", + "Contents/Frameworks/pointer_lock.framework/pointer_lock", + ].as_slice(), + ) } else if cfg!(target_os = "linux") { ( "helgobox.so", diff --git a/main/src/infrastructure/ui/welcome_panel.rs b/main/src/infrastructure/ui/welcome_panel.rs index 5a5af87c2..30539778c 100644 --- a/main/src/infrastructure/ui/welcome_panel.rs +++ b/main/src/infrastructure/ui/welcome_panel.rs @@ -97,7 +97,9 @@ fn custom_toolbar_api_is_available() -> bool { impl WelcomePanel { fn invalidate_controls(&self) { - self.invalidate_playtime_checkbox(); + if custom_toolbar_api_is_available() { + self.invalidate_playtime_checkbox(); + } self.invalidate_button(); } diff --git a/swell-ui/Cargo.toml b/swell-ui/Cargo.toml index 7cc86db60..39af019c1 100644 --- a/swell-ui/Cargo.toml +++ b/swell-ui/Cargo.toml @@ -20,6 +20,7 @@ fragile.workspace = true [target.'cfg(windows)'.dependencies] winapi.workspace = true libloading.workspace = true +palette.workspace = true [target.'cfg(target_os = "macos")'.dependencies] objc2 = "0.3.0-beta.3"