Skip to content

Commit

Permalink
Merge pull request JDimproved#1351 from JDimproved/migrate-machi-to-o…
Browse files Browse the repository at this point in the history
…fflaw-cgi-to-v2

Migrate machi.to offlaw.cgi API to v2
  • Loading branch information
ma8ma committed Feb 24, 2024
2 parents a093b88 + 03c29d1 commit f181725
Show file tree
Hide file tree
Showing 15 changed files with 140 additions and 160 deletions.
16 changes: 8 additions & 8 deletions docs/manual/external.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,16 @@ layout: default

<a name="machi_offlaw"></a>
### まちBBSのofflaw形式対応について
まちBBSでofflaw形式の読み込みを行うには、
`設定`メニュー → `一般``まちBBSでofflaw.cgiを使用する`をチェックする。
offlaw形式での読み込みには以下のような長短がある。
まちBBSのスレを read.cgi で読み込む方法は廃止され offlaw.cgi v2 で読み込むように変更された。
<small>(v0.11.0-20240224 から変更)</small>

○ 読み込みが速い<br>
○ ネットワーク負荷が小さい<br>
○ お気に入りで更新チェックが出来る
後方互換性のため read.cgi と offlaw.cgi v1 を使って作成したrawデータの読み込みはサポートされる。

× リモートホストのかわりにIDを取得して表示する<br>
× offlaw形式で読み込んだログは過去のバージョンのJDimでは読めない
メニューバーの`設定(C)``一般(G)`にある `まちBBSでID表示を使用する(I)`
をチェックすると、まちBBSのスレはホスト情報からIDの表示に切り替わる。
また、ホスト情報を表示する状態でもスレの更新チェックが可能になった。

**注意**: offlaw.cgi 形式で読み込んだログは JD 2.4.0-beta090429 (2009-04-29) より過去のバージョンでは表示できない。


<a name="register_bbsmenu"></a>
Expand Down
4 changes: 2 additions & 2 deletions docs/manual/operation.md
Original file line number Diff line number Diff line change
Expand Up @@ -723,8 +723,8 @@ about:configの設定 `スレタイ検索時にアドレスとスレタイを取
- サイドバーのお気に入りや履歴での更新チェックはデフォルトでは板の更新をチェックしない。
チェックしたい場合は `about:config`の「`更新チェック時に板の更新もチェックする`」を「はい」にする。
- したらばのスレはLast-Modifiedを取得できないため更新チェック出来ない(常にHTTPコード200が返る)。
- まちBBSのスレは`設定`メニューの`一般`から「`まちBBSでofflaw.cgiを使用する`」を有効にしないとチェックできない
( 常にHTTPコード 500 が返るため)。ただしこの設定を有効にするとリモートホストのIPが表示されなくなる。
- まちBBSのスレはメニューバーの`設定(C)``一般(G)`にある「`まちBBSでID表示を使用する(I)`」の状態に関係なく
更新チェックが可能になった。 <small>(v0.11.0-20240224 から変更)</small>
- 複数のスレをチェックするときは、同時にチェックしないで前のスレのチェックが終わってから順次チェックするため
若干時間がかる。従って、ある特定の板のスレがお気に入りに数多く登録されている場合はその板を直接開いた方が
速くてサーバに対する負荷も小さい。
Expand Down
6 changes: 5 additions & 1 deletion src/config/configitems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,10 @@ bool ConfigItems::load( const bool restore )
use_header_bar = cf.get_option_int( "use_header_bar", CONF_USE_HEADER_BAR, 0, 2 );

// まちBBSの取得に offlaw.cgi を使用する
use_machi_offlaw = cf.get_option_bool( "use_machi_offlaw", CONF_USE_MACHI_OFFLAW );
use_machi_offlaw = cf.get_option_bool( "use_machi_offlaw", false );

// まちBBSでID表示を使用する
show_machi_id = cf.get_option_bool( "show_machi_id", CONF_SHOW_MACHI_ID );

// 書き込み履歴のあるスレを削除する時にダイアログを表示
show_del_written_thread_diag = cf.get_option_bool( "show_del_written_thread_diag", CONF_SHOW_DEL_WRITTEN_THREAD_DIAG );
Expand Down Expand Up @@ -954,6 +957,7 @@ void ConfigItems::save_impl( const std::string& path )
cf.update( "change_statitle_color", change_statitle_color );
cf.update( "use_header_bar", use_header_bar );
cf.update( "use_machi_offlaw", use_machi_offlaw );
cf.update( "show_machi_id", show_machi_id );
cf.update( "show_del_written_thread_diag", show_del_written_thread_diag );
cf.update( "delete_img_in_thread", delete_img_in_thread );
cf.update( "max_resnumber", max_resnumber );
Expand Down
7 changes: 5 additions & 2 deletions src/config/configitems.h
Original file line number Diff line number Diff line change
Expand Up @@ -526,8 +526,11 @@ namespace CONFIG
// Client-Side Decorationを使うか( 0: 使わない 1: 使う 2: デスクトップに合わせる )
int use_header_bar{};

// まちBBSの取得に offlaw.cgi を使用する
bool use_machi_offlaw{};
// まちBBSの取得に offlaw.cgi を使用する (未使用だが互換性のため廃止予定にする)
bool use_machi_offlaw{}; // Deprecated in v0.11.0 (2024-02) is superseded by show_machi_id.

/// @brief まちBBSでID表示を使用する
bool show_machi_id{};

// 書き込み履歴のあるスレを削除する時にダイアログを表示
bool show_del_written_thread_diag{};
Expand Down
2 changes: 1 addition & 1 deletion src/config/defaultconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ namespace CONFIG
CONF_CHANGE_STASTATUS_COLOR = 1, // 状態変更時にメインステータスバーの色を変える
CONF_CHANGE_STATITLE_COLOR = 1, // 状態変更時にスレビュータイトルの色を変える
CONF_USE_HEADER_BAR = 2, // Client-Side Decorationを使うか( 0: 使わない 1: 使う 2: デスクトップに合わせる )
CONF_USE_MACHI_OFFLAW = 0, // まちBBSの取得に offlaw.cgi を使用する
CONF_SHOW_MACHI_ID = 0, ///< まちBBSでID表示を使用する
CONF_SHOW_DEL_WRITTEN_THREAD_DIAG = 1, // 書き込み履歴のあるスレを削除する時にダイアログを表示
CONF_DELETE_IMG_IN_THREAD = 0, // スレを削除する時に画像キャッシュも削除する ( 0: ダイアログ表示 1: 削除 2: 削除しない )
CONF_MAX_RESNUMBER = 65536, //最大表示可能レス数
Expand Down
6 changes: 3 additions & 3 deletions src/config/globalconf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -604,9 +604,9 @@ bool CONFIG::get_change_statitle_color(){ return get_confitem()->change_statitle
// Client-Side Decorationを使うか( 0: 使わない 1: 使う 2: デスクトップに合わせる )
int CONFIG::get_use_header_bar() { return get_confitem()->use_header_bar; }

// まちBBSの取得に offlaw.cgi を使用する
bool CONFIG::get_use_machi_offlaw(){ return get_confitem()->use_machi_offlaw; }
void CONFIG::set_use_machi_offlaw( const bool set ){ get_confitem()->use_machi_offlaw = set; }
// まちBBSでID表示を使用する
bool CONFIG::get_show_machi_id(){ return get_confitem()->show_machi_id; }
void CONFIG::set_show_machi_id( const bool set ){ get_confitem()->show_machi_id = set; }

// 書き込み履歴のあるスレを削除する時にダイアログを表示
bool CONFIG::get_show_del_written_thread_diag(){ return get_confitem()->show_del_written_thread_diag; }
Expand Down
6 changes: 3 additions & 3 deletions src/config/globalconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -608,9 +608,9 @@ namespace CONFIG
// Client-Side Decorationを使うか( 0: 使わない 1: 使う 2: デスクトップに合わせる )
int get_use_header_bar();

// まちBBSの取得に offlaw.cgi を使用する
bool get_use_machi_offlaw();
void set_use_machi_offlaw( const bool set );
// まちBBSでID表示を使用する
bool get_show_machi_id();
void set_show_machi_id( const bool set );

// 書き込み履歴のあるスレを削除する時にダイアログを表示
bool get_show_del_written_thread_diag();
Expand Down
7 changes: 4 additions & 3 deletions src/core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -623,8 +623,9 @@ void Core::run( const bool init, const bool skip_setupdiag )
sigc::mem_fun( *this, &Core::slot_toggle_save_post_history ) );


m_action_group->add( Gtk::ToggleAction::create( "UseMachiOfflaw", "まちBBSでofflaw.cgiを使用する(_O)", std::string(), CONFIG::get_use_machi_offlaw() ),
sigc::mem_fun( *this, &Core::slot_toggle_use_machi_offlaw ) );
m_action_group->add( Gtk::ToggleAction::create( "ShowMachiID", "まちBBSでID表示を使用する(_I)",
std::string(), CONFIG::get_show_machi_id() ),
sigc::mem_fun( *this, &Core::slot_toggle_show_machi_id ) );


// マウス/キーボード
Expand Down Expand Up @@ -988,7 +989,7 @@ void Core::run( const bool init, const bool skip_setupdiag )
"<menuitem action='SavePostLog'/>"
"<menuitem action='SavePostHist'/>"
"<separator/>"
"<menuitem action='UseMachiOfflaw'/>"
"<menuitem action='ShowMachiID'/>"
"</menu>"
"<separator/>"

Expand Down
2 changes: 1 addition & 1 deletion src/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ namespace CORE
void slot_toggle_save_post_log();
void slot_toggle_save_post_history();
void slot_toggle_use_mosaic();
void slot_toggle_use_machi_offlaw();
void slot_toggle_show_machi_id();
void slot_toggle_tabbutton();
void slot_toggle_popupwarpmode();
void slot_shortmargin_popup();
Expand Down
8 changes: 0 additions & 8 deletions src/dbtree/articlemachi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,6 @@ std::string ArticleMachi::url_subbbscgi() const
}



// offlawモードなら更新チェック可能
bool ArticleMachi::enable_check_update() const
{
return CONFIG::get_use_machi_offlaw();
}


NodeTreeBase* ArticleMachi::create_nodetree()
{
#ifdef _DEBUG
Expand Down
3 changes: 0 additions & 3 deletions src/dbtree/articlemachi.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,6 @@ namespace DBTREE
std::string url_subbbscgi() const override;

private:

// offlawモードなら更新チェック可能
bool enable_check_update() const override;

NodeTreeBase* create_nodetree() override;
};
Expand Down
40 changes: 39 additions & 1 deletion src/dbtree/boardmachi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,45 @@ std::string BoardMachi::url_dat( const std::string& url, int& num_from, int& num
<< "num = " << num_str << std::endl;
#endif
}
else return std::string();
else {
// offlaw.cgi v2 のdat URLを解析する
// NOTE: read.cgi のdat URLはお気に入りやスレ履歴の保存に使われているため、
// url_dat() の戻り値を offlaw.cgi v2 の形式に変更すると互換性が壊れる。
// 1. offlaw.cgi v2 のURL解析を実装しておき互換性の問題が小さくなる将来まで待つ。 <- いまここ
// 2. url_dat() の戻り値を offlaw.cgi v2 の形式に変更する。
// 3. read.cgi のdat URLを解析する処理は後方互換性のため残す。
const std::string datpath2 = MISC::replace_str( "/bbs/offlaw.cgi/2/" + get_id() + "/", "?", "\\?" );
const std::string query_dat2 = "^ *https?://.+" + datpath2 + "([0-9]+)(?:/|/l([0-9]+)|/([0-9]+)(-)?([0-9]+)?)?";
if( regex.exec( query_dat2, url, offset, icase, newline, usemigemo, wchar ) ) {

id = regex.str( 1 );

if( regex.length( 2 ) > 0 ) { // l50 など
num_from = 1;
num_to = std::atoi( regex.str( 2 ).c_str() );
}
else {
num_from = std::atoi( regex.str( 3 ).c_str() );
num_to = std::atoi( regex.str( 5 ).c_str() );
}

if( num_from != 0 ) {
num_from = (std::max)( 1, num_from );

// 12- みたいな場合はとりあえず大きい数字を入れとく
if( regex.length( 4 ) > 0 && num_to == 0 ) num_to = CONFIG::get_max_resnumber() + 1;
}

// -15 みたいな場合
else if( num_to != 0 ) {
num_from = 1;
}

num_to = (std::max)( num_from, num_to );
num_str = MISC::get_filename( url );
}
else return std::string();
}

return url_datbase() + id;
}
Expand Down

0 comments on commit f181725

Please sign in to comment.