出来上がったものがこちらです
なぜ、この記事を書こうと思ったのか
フリーソフトでバックアップツールはたくさんあると思うのですが、最近の Rust + Dioxus 熱の高まりで自分でもバックアップツールを作ってみようと思いました。
作っていく中で、
ファイルコピー時にCPUの数分スレッドを作成してコピーする処理
や
タスクバーアイコンに進捗バーを設定するやり方
や
onclick中に表示した警告ダイアログが応答不能になる問題を回避する方法
など勉強になったことがあったので、今回記事にまとめてみました。
Rustやdioxusに興味がある人や上記のやり方が分からずに困っている人には参考になるかもしれません。
使い方
バックアップ元、バックアップ先を設定して実行ボタンを押すとバックアップ処理が開始されます。

こだわった点
実行中は入力不可にする
実行中は、GUIへの入力を出来ないようにしたかったのでWorkStateが変更されるたびにis_running変数を更新して、true時に入力不可にしてみました。
ツール起動時と終了時にGUIの情報をローカルにload,saveする
Windowsの位置とサイズ。GUIのバックアップ先とバックアップ元は、jsonにまとめてローカルファイルにsave,するようにしました。
上記の情報はツール起動時にjsonからloadされます。
自分の場合は以下にjsonを保存することが多いです。
C:\Users\(ユーザー名)\Documents\script\Rust\*.json
ファイルコピー時にCPUの数分スレッドを作成してコピーする
ファイルコピー処理をスレッド化して、常にCPUがフルで活用されている状態にするようにしてみました。
バックアップ元の設定をtextareaにする
こだわった点とはちょっと違うかもしれませんが、バックアップ先がinputでバックアップ元がtextareaにするのは違和感があったのですがそこは使いやすさ優先にしました。

苦労した点
タスクバーアイコンに進捗バーを設定する

タスクバーのアイコンの下にあるバーに進捗バーを設定したかったので、色々調べた結果winsafeクレートで実現できそうなのでやってみました。
WindowsAPIは、書き方が独特なのでなんか好きになれないですね。。。
(それでもwinsafeクレートで大分書きやすくなっているとは思います。いつもありがとうございます。<(__)>)
2~3日調べてようやく出来ました。
今回、1番苦労した箇所です。
onclick 中の処理でダイアログが固まる点
ボタンを押したときのonclick: move |_| の処理でnative_dialogクレートのダイアログを表示するとツールが固まる問題に悩まされました。。。
結論から書くと onclick: move |_| を onclick: move |_| async move で非同期処理にすると解決できました。
まとめ
Dioxusを使い始めて1年くらい経つのですが、ようやく少し慣れてきた気がします。
特に今回は色々困っていたことが解決できたので、少し成長できたかなと思えて嬉しかったです。
良かったら使ってみてください。(*´∀`)ノ
参考にさせていただいたサイト