下書きを保存 新規トピック

優先度:低

プラットフォーム:Discourse モバイル iOS(他のプラットフォームでは未検証)。Discourse メタおよび try.Discourse.org で再現確認済み。

説明:プロンプトが表示された際に新規トピックの下書きを保存するよう指示されますが、「下書きを開く」ボタンが機能しません。

再現手順:

  1. Discourse ホームページに移動します。
    • 新規トピック をクリックします。
  2. 件名に「Testing Drafts」と入力し、本文に「Testing」と入力します。カテゴリは未分類のままにします。
  3. キャンセル(Discourse モバイルのゴミ箱アイコン)をクリックします。「後で下書きを保存しますか?」という確認が表示されるので、そのオプションを選択します。
    • 新規トピック ボタンが + 下書きを開く に変更されます。
    • 下書きを開く をクリックしても何も起こりません。
  4. 下書きフォルダを確認すると、下書きが保存されていません。

影響:これにより、一時的に新規トピックの作成ができなくなりました。

回避策:無効な + 下書きを開く ボタンを何度かクリックすると、最終的にモバイルアプリ内の Discourse サイトがクラッシュし、ドメイン選択画面に戻ります。Discourse に戻ると、+ 下書きを開く がクリアされ、+ 新規トピック に戻っています。

「いいね!」 5

タイトルが短すぎてこのバリデーションを通過できません
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/models/composer.js#L1184
しかし、なぜコードがエラーをキャッチするのではなく、解決(resolve)しているのか疑問です。

エラーはここでキャッチできると思います

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/controllers/composer.js#L1244

以下のような感じです

this._saveDraftPromise = model.saveDraft().then(() => {
    this._lastDraftSaved = Date.now();
    ...
}, error => {
    // ここでエラー処理
}).finally(() => {
    this._saveDraftPromise = null;
});

@eviltrout 何かご意見はありますか?

「いいね!」 7

この保存コードは残念ながら当社の最も古く、かつ頻繁に最も脆弱なものの一つです。長年にわたり、多くの機能を重ねて追加してきました。また、下書きの保存のように成功または失敗する可能性がある処理には独自の機能が必要となり、それがさらに複雑さを増しています。

あなたの直感はおそらく正しいと思いますが、すべてのテストがどのように実行されているかを確認しない限り、私には断定できません。もし将来、PR(プルリクエスト)を作成する時間があるようであれば、大変嬉しく思います。

「いいね!」 5

Rhidian さんの以下の手順に従って、MacOS の Chrome で Discourse meta においてこのバグを再現できました:

「いいね!」 2

こんにちは、

バグ報告ありがとうございます。Discourseの最新バージョンで修正されました。問題は、本来保存されないはずの非常に短い下書きでも保存を提案していた点でした。

「いいね!」 4

このトピックは3日後に自動的に閉鎖されました。新しい返信は許可されていません。