Skip to content
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

Implement external BBSMENU #1307

Merged
merged 9 commits into from Dec 23, 2023
Merged

Implement external BBSMENU #1307

merged 9 commits into from Dec 23, 2023

Conversation

ma8ma
Copy link
Collaborator

@ma8ma ma8ma commented Dec 23, 2023

Implement CACHE::path_bbsmenu() and CACHE::path_bbsmenu_root()

外部BBSMENUのディレクトリと設定ファイルのファイルパスを表す文字列を返す関数を実装します。

Implement XML::Dom::remove_if()

Domオブジェクトが持つchildノードのうちpred(child)がtrueを返すものをすべて削除するメンバー関数を実装します。
remove_if()はchild自体もdeleteして開放します。また、削除したchildの数を返します。

  • Add test case for XML::Dom::remove_if()

Implement DBTREE::BBSMenu class

BBSMENUの取得と板一覧のデータを構築するクラスを実装します。

DBTREE::Rootクラスを元にして実装した関数があるため src/dbtree/bbsmenu.cpp のライセンスは GPL-2.0-only になります。
メンバー関数のうちBBSMenu::path_bbsmenu_boards_xml()は新規に書かれたコードなので抽出して GPL-2.0-or-later でライセンスすることが可能です。

Root: Implement member functions for external BBSMENU

Rootクラスに外部BBSMENUを取り扱うためのメンバーとメンバー関数を実装します。
外部BBSMENUの登録条件はURLの重複を許可しませんがBBSMENU名は重複できます。

Implement DBTREE interface functions for external BBSMENU

Rootクラスに実装された外部BBSMENUの機能にアクセスするインターフェース関数を実装します。

Implement AddEtcBBSMenuDialog class

外部BBSMENUを追加/編集するダイアログボックスを実装します。

AddEtcBBSMenuDialogクラスは新規に書かれたコードなので抽出して GPL-2.0-or-later でライセンスすることが可能です。

bbslist: Implement GUI for external BBSMENU

外部BBSMENUを追加するためのGUIを実装します。

動作

  • 板一覧の一番上に「外部BBSMENU」サブディレクトリを追加します。
  • 「外部BBSMENU」を右クリックして「外部BBSMENUを追加する」を選択するとBBSMENU名とURLを入力するダイアログが表示されます。
  • 入力してOKボタンを押すとBBSMENUがダウンロードされ板一覧の末尾に板が追加されます。
  • 追加した外部BBSMENUの名前やURLを変更したいときは板一覧の「外部BBSMENU」をクリックしてサブディレクトリを開き変更したい項目を右クリックしてメニューの「編集」を選択して行います。
  • 追加した外部BBSMENUを削除するときは同じくメニューの「外部BBSMENUを削除する」を選択します。確認ダイアログは表示しません。

設定ファイルのフォーマットは予告なく変更する場合があります。
そのためファイルの編集による登録はサポートしていません。

この機能は実験的なサポートのため変更または廃止の可能性があります。

背景

修正前のJDimはBBSMENUの登録が一つに限られておりBBSMENUに含まれてない板は外部板に一つずつ追加していく必要がありました。
BBSMENUの登録数を増やして複数のBBSMENUから板を読み込めると便利になります。

manual: Add description for external BBSMENU

外部BBSMENUの説明をオンラインマニュアルに追加します。

関連のissue: #1301

外部BBSMENUのディレクトリと設定ファイルのファイルパスを表す文字列を
返す関数を実装します。
Domオブジェクトが持つchildノードのうちpred(child)がtrueを返すものを
すべて削除するメンバー関数を実装します。`remove_if()`はchild自体も
deleteして開放します。また、削除したchildの数を返します。

* Add test case for XML::Dom::remove_if()
BBSMENUの取得と板一覧のデータを構築するクラスを実装します。

DBTREE::Rootクラスを元にして実装した関数があるため
src/dbtree/bbsmenu.cpp のライセンスは GPL-2.0-only になります。
メンバー関数のうち`BBSMenu::path_bbsmenu_boards_xml()`は新規に
書かれたコードなので抽出して GPL-2.0-or-later でライセンスすることが
可能です。
Rootクラスに外部BBSMENUを取り扱うためのメンバーとメンバー関数を
実装します。 外部BBSMENUの登録条件はURLの重複を許可しませんが
BBSMENU名は重複できます。
Rootクラスに実装された外部BBSMENUの機能にアクセスするインターフェース
関数を実装します。
外部BBSMENUを追加/編集するダイアログボックスを実装します。

`AddEtcBBSMenuDialog`クラスは新規に書かれたコードなので抽出して
GPL-2.0-or-later でライセンスすることが可能です。
外部BBSMENUを追加するためのGUIを実装します。

動作
- 板一覧の一番上に「外部BBSMENU」サブディレクトリを追加します。
- 「外部BBSMENU」を右クリックして「外部BBSMENUを追加する」を
  選択するとBBSMENU名とURLを入力するダイアログが表示されます。
- 入力してOKボタンを押すとBBSMENUがダウンロードされ板一覧の末尾に
  板が追加されます。
- 追加した外部BBSMENUの名前やURLを変更したいときは板一覧の
 「外部BBSMENU」をクリックしてサブディレクトリを開き変更したい
  項目を右クリックしてメニューの「編集」を選択して行います。
- 追加した外部BBSMENUを削除するときは同じくメニューの
  「外部BBSMENUを削除する」を選択します。確認ダイアログは表示しません。

設定ファイルのフォーマットは予告なく変更する場合があります。
そのためファイルの編集による登録はサポートしていません。

この機能は実験的なサポートのため変更または廃止の可能性があります。

背景
修正前のJDimはBBSMENUの登録が一つに限られておりBBSMENUに含まれてない板は
外部板に一つずつ追加していく必要がありました。
BBSMENUの登録数を増やして複数のBBSMENUから板を読み込めると便利になります。
外部BBSMENUの説明をオンラインマニュアルに追加します。
@ma8ma ma8ma added the feature 機能の追加と削除 label Dec 23, 2023
Comment on lines 53 to 58
BBSMenu( BBSMenu&& ) noexcept = default;
BBSMenu( const BBSMenu& ) = delete;

~BBSMenu() noexcept = default;

BBSMenu& operator=( BBSMenu&& ) noexcept = default;
Copy link
Collaborator Author

@ma8ma ma8ma Dec 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

調べたところ clang-7, clang-8 はnoexceptを含むdefault constructor/destructorのコードがコンパイルできないようです。

In file included from ../src/bbslist/bbslistview.cpp:11:
../src/bbslist/../dbtree/bbsmenu.h:53:5: error: exception specification of explicitly defaulted move constructor does not match the calculated one
    BBSMenu( BBSMenu&& ) noexcept = default;
    ^
../src/bbslist/../dbtree/bbsmenu.h:58:14: error: exception specification of explicitly defaulted move assignment operator does not match the calculated one
    BBSMenu& operator=( BBSMenu&& ) noexcept = default;
             ^

clang 8以下ではデフォルトコンストラクタにnoexceptを追加すると
コンパイルエラーになるため条件コンパイルを使いnoexceptのtrue/falseを
切り替えます。

参考文献:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86583
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 機能の追加と削除
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

None yet

1 participant