## Issue
https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/issues/207
## 状況
[[Obsidian Mobile]] 1.4.16で再現するが、状況による。
### 再現する状況
- [[Obsidian Mobile]]
- Obsidian Desktopで以下すべての条件を満たしたとき
- `app.emulateMobile(true)` でモバイルデバッグモード
- 横幅を縮めてモバイルと同じUI状態にする
### 挙動とエラー
- ダイアログが閉じて何も起こらない
- エラーは発生しない
## 調査
- navigateの2回目の呼び出しがうまくいってなさそう
- 1回目はちゃんと機能しているはず(たぶん)
- `navigate`は`close()`の処理前に呼ばれる本体のメソッドなのか (なるほど)
- 再現環境では `this.close()` でそもそもダイアログが閉じてないが..?
### `chooseCurrentSuggestion` 実行後の挙動
デスクトップ版では `navigate` で登録したcallbackが順番に実行される
- `this.close()` で既に閉じてはいたけど `markClosed` に代入されるのはこのときか
- `markClosed` もObsidianのパラメータかな..?
モバイル環境では`chooseCurrentSuggestion`メソッドがすべて終わってから、以下の箇所で遅延して実行されてそう。
```ts
function Ie(e, t, n) {
Le(e),
De(e, t.from);
var i = {
props: t,
fn: function() {
return Le(e)
},
timer: 0,
complete: n,
win: e.win
};
Me.set(e, i);
null === Pe && (Pe = [],
setTimeout((function() {
document.body.offsetHeight;
var e = Pe;
Pe = null;
for (var t = 0, n = e; t < n.length; t++) {
(0,
n[t])()
}
}
```
ここをもうちょっと調べてみる。
とりあえず問題は『openFileの処理が閉じた後に呼ばれないこと』なので。
`this.close`の処理。`LT.isPhone`のところで処理が分岐してそう。
```ts
e.prototype.close = function() {
// ... 中略
Lt.isPhone ? function(e, t) {
return new Promise((function(n) {
// ... 中略
))
}(o, a).then((function() {
// rはcontainerEl
r.detach()
// eはthis.modalEl
e.onClose()
}
)) : (r.detach(),
this.onClose()),
```
ちなみにisMobileはUIがモバイルになっているかどうか。Obsidian mobileかどうかは `isMobileApp`のはず。
```ts
export const Platform: {
/**
* The UI is in desktop mode.
* @public
*/
isDesktop: boolean;
/**
* The UI is in mobile mode.
* @public
*/
isMobile: boolean;
/**
* We're running the electron-based desktop app.
* @public
*/
```
## 対策
`this.close()`の前に`this.onClose()`を実行することで、`this.close()`のアニメーションを待たなくても処理が継続するようにする。
`this.close()`が呼び出されている箇所は多いので、overrideして実装する。
```ts
close() {
if (Platform.isMobile) {
// https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/issues/207
this.onClose();
}
super.close();
}
```
通常は
- `close`
- `detach`
- `onClose`
という順番が
- `onClose`
- `close`
- `detach`
と変わってしまうので副作用が発生する可能性はある。ただ、デスクトップUIでは影響ないので、モバイルUIが全く動作しない今よりはマシだと思う。