-
Notifications
You must be signed in to change notification settings - Fork 310
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: WindowManagerを追加 #2455
Conversation
🚀 プレビュー用ページを作成しました 🚀 更新時点でのコミットハッシュ: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
WindowManager
がBrowserWindow
インスタンスを保持するようにしています。
ただしダイアログやIPC周りがwindow
を使うので取得できるようになっています。
この設計があまり良くないような感じがします。
586baf4
to
64adc17
Compare
90511fd
to
d0e2ccf
Compare
テストが通らないので一度ドラフトに戻します。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ほぼLGTMです!!!
実装も読みやすく、いろいろ考えてくださっている気配も感じました!!ありがとうございます!!
ちょっとコード移動がかなり発生していつつ、ちょくちょくリファクタリングも入っているので、レビューを丁寧に行いました!
今のPRの形で良い感じなので、ここからはコード移動が発生しないような変更(その行の変更・追加・削除)だけを意識していただけると助かります・・・!!!
コメントがばらついちゃいましたが、たぶんこの3点の変更で綺麗に行けそう!!
- isMaximizedなどをWindowManagerに生やす
- whenReadyをon(ready)にする
- 利用されてるdialog.show系関数をWindowManagerの下に生やし、
_win
有無で呼ぶ関数を切り替える
以下の作業をしました。
ふと気が付いたのですがConfigManagerの初期化とデフォルトエンジンのダウンロードは多重起動防止のために呼んでいる |
たしかに!!
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!!
細かいコメントをいくつかしていますが、もう自明なのでこちらで変更してマージさせていただこうと思います!!
(app.requestSingleInstanceLock()
の近くにTODOコメント書くのも)
かなりすっきりしましたね!!
WindowManagerにdialog.show()系を内蔵するのがだいぶ効いてそう!
たぶんまだ他にもelectronのdialog.show
を叩いてるコードがいっぱいあると思うので、よかったらそれもgetWindowManger().show
系に切り替えちゃったほうが良い気がしてます。(winインスタンス与え忘れ防止になるので)
もしよかったらPRお待ちしてます 🙏
次なるelectron/main.tsの解体ですが、いよいよ voicevox/src/backend/electron/main.ts Line 332 in fea3334
ファイル名は何がいいかな・・・型名と被りますが、 ipcMainHandle.ts とか・・・?たぶん関連する関数などもごそっと移動するので、main.tsの見通しはかなり良くなるんじゃないかなと思ってます!! 設計ですが、この たぶんこんな感じになるかなと!! // ipcMainHandle.ts
export function getIpcMainHandle(
app: 型不明, // TODO: AppManagerを作ってgetAppManager()に置き換える
getAppState: 型不明,
): IpcMainHandle {
const configManager = getConfigManager()
// 他の必要なインスタンスを宣言
return {
GET_APP_INFOS: () => {
// 実装もコピー
},
GET_TEXT_ASSET: async (_, textType) => {
// 実装もコピー
},
// ...
} satisfies IpcMainHandle
} // electron/main.ts
registerIpcMainHandle(getIpcMainHandle()) もちろんipcMainHandle内で使ってたローカル関数等も この切り出しが本当に良いものなのか、あるいはもっと良い もしよければぜひ!!! |
内容
#2339 (comment) で提案されたwin周りの処理をWIndowManagerに切り出すリファクタリングです。
関連 Issue