トップページ⇒linux
976コメント637KB

Kita - 2ch client for KDE part2

■ このスレッドは過去ログ倉庫に格納されています
0001kitaの中の人 ◆KITAulkOso 04/07/16 00:31ID:IZzU7SYf
KitaはKDE用2ちゃんねるブラウザです。
名前の由来はKDEの'K'に「板(board)」を加えたのと、キターー(゜∀゜)ーー!!から来てます。

Kitaのウェブサイト
http://kita.sourceforge.jp/
http://sourceforge.jp/projects/kita/

Kita Wiki
http://kita.sourceforge.jp/cgi-bin/hiki/hiki.cgi

前スレ
Kita - 2ch client for KDE
http://pc5.2ch.net/test/read.cgi/linux/1069738960/

前々スレ(DAT落ち)
おいお前ら! GTK+使ってLinux版かちゅーしゃ作れや
http://pc.2ch.net/test/read.cgi/linux/1022744633/
050042104/11/09 23:05:48ID:vN6zY7BW
なんか毎日のようにパッチ出してますが、それは来週からまた忙しくなるので
やれるうちにやれるるとこまでやっておこうと思ってるからだったりします・・・

という訳でパッチ。cvsからの差分でsrcフォルダで -p0。サイズはでかいですが、
ほとんどがParseMisc::->Kita::への変換だけです。

http://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1109.txt

(1)ParseMiscのkita_miscへの統合

移しただけ。ただしparseURL()をgetDatURL()に、datToThread()をgetThreadURL()
みたいに一部の関数名を変更してます。 parsemisc.cppは消してください。

(2)連鎖あぼーんや参照ツリーの表示がうまくいかないときがあるバグを修正

例えば

>>123
2ch

みたいなアンカーの場合にうまくいきません。レス内に張られてるアンカーのリストを
作成する関数 DatInfo::setAncList()の/* remove HTML tags */の下に
line.replace( "<br>", "\n" );の一行を追加して解決。つまりbrタグを消してたせいで
上の例だと>>1232chみたいに文字列がくっついて、123番じゃなくて1232番にアンカーを
張っていると誤判定してた訳で。

(3)その他、DatInfo 等の整理

具体的にはDatInfo::updateThreadInfo()を消して、ThreadIndex経由で情報を保存する場所を
DatInfo::slotFinishLoad()の/* save thread information */ 以下一ヶ所にまとめました。
その他、読み込み数も記録するためThreadIndex::setReadNum()という関数を追加したり
DatInfoList DatManager::m_datInfoをDatInfoList DatManager::m_datInfoListにしたり等。
0501kitaの中の人 ◆KITAulkOso 04/11/09 23:38:07ID:1IX0qKqX
先越されたorz

せっかく作ったのでsnapshot.
http://kita.sourceforge.jp/snapshot/kita-20041109.tar.gz

>>500はそのまま当たるのだけ確認してます。
今のところまずいバグは見つかってないですが一応バックアップをおすすめ。
050242104/11/09 23:51:03ID:vN6zY7BW
>>501
乙です。中の人も書いてますが、板の移転処理のとこで下手するとログが
消えるのでsnapshotを使うときはキャッシュのバックアップをおすすめ。
もちろん人柱は大歓迎w
0503kitaの中の人 ◆KITAulkOso 04/11/10 00:03:54ID:Xt4sLoMr
>>500のパッチコンパイルできない…libkita以外がごっそり抜けてるぽい
050442104/11/10 00:22:46ID:Wm6USiH2
>>503
ひょっとしてlibkita/parsemisc.hも消してませんか。
parsemisc.hは上のクラスとの橋渡しのために暫定的に残しています。
0505kitaの中の人 ◆KITAulkOso 04/11/10 01:06:47ID:Xt4sLoMr
一応今後の予定。先月と一緒ですがw
11/20 feature freeze
11/27 code freeze.
11/29 release.

お気に入り整理はほとんどコード書いてないので次のバージョンに入るかどうか微妙。

>>504
> ひょっとしてlibkita/parsemisc.hも消してませんか。
失礼しますたorz
050642104/11/10 01:25:46ID:Wm6USiH2
FC3のダウンロードしようと思ったけどDVDイメージ落とすの面倒くさくなったので雑誌待ちかな・・・

>>505
私の予定ですが、さっきも書きましたが来週から忙しくなるのと、金曜からしばらく不在に
なるってことで週末以降はパッチの数がガクっと減ると思います。

という訳で、parsemisc.hとboard.{cpp,h}の削除を明日か明後日あたりに強行するかも。
あとさっき書き忘れましたがpart/kitathreadpart.{cpp,h}は消してOKです。
0507login:Penguin04/11/10 05:12:57ID:doFU/neL
fc3で問題なく動きますた
0508rpmpointの中身04/11/10 08:03:11ID:gUQXX0Sw
Kita Snapshotを>>501に差し替えです。
050969104/11/10 21:55:19ID:VTVL5cC4
>>501のdebianパッケージを作成しました
>>500のパッチと>>506での削除も含んでます

http://www.geocities.jp/tossi0x19/soft_arc.html#kita_debianized

>>500
parsemisc.cppはただ消してもダメで
Makefile.amからも消しとかないとコンパイルに失敗します

>>506のpart/kitathreadpart.{cpp,h}も同様なので>>500を使う時は気を付けて

>>中の人
ソースアーカイブにadmin/CVSが紛れ込んでます
できれば削除お願いします
0510login:Penguin04/11/10 21:57:58ID:ZcvfsTx1
>>509
ぬぬぬ
2,3日忙しいので、暇ができたらやってみます。
051142104/11/10 22:23:30ID:Wn46hKqd
パッチ。>>500からの差分でkitaディレクトリで patch -p0。

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1110.txt

・Board クラス廃止

board.cpp, board.h は消してください。

・.kde/share/apps/kita/cache 廃止

スレの情報管理を完全にidxファイルに移しました。その影響で既読数の情報が
一時的に壊れますが、ログ自体が消える訳ではないので実害は無いと思います。
これでKitaThreadInfoクラスはいつでもThreadに統合して廃止できるようになったはず。

具体的には KitaMainWindow::loadCache() と KitaMainWindow::saveCache()
を消して、BoardManager::getThreadList()である板のスレリストを取得する際に、
新設のBoardManager::getThreadInfoFromIdx()を呼び出してその中でidxファイルから
既読数を読みこんでスレ情報のデータベース( Threadクラス )にセットます。ただし毎回
idxファイルを読んでるとオーバーヘッドが大きいのでその板を初めて開いたときだけidxを
読むようにしてます( BoardData::m_readIdx がFALSEの時だけidxを読み込む )。
同様にお気に入りスレの登録関数( FavoriteThreads::processThreadNode() )でも
idxから情報を取得するように変更しています。まとめると

(1) idxにスレ情報を保存する場所(タイミング)
→ DatInfo::slotFinishLoad() で鯖からログを取得直後
ここまで読んだはDatManager::setKokoyonNum()で直接

(2) idxからスレ情報を取得する場所(タイミング)
→BoardManager::getThreadList()である板のスレリストを取得するとき(初回のみ)
BoardManager::getCachedThreadList()でdat落ちログのリストを取得するとき
及びFavoriteThreads::readFromXML()でお気に入りスレを登録するとき
0512login:Penguin04/11/11 00:35:35ID:NNQ3GHT3
>>お気に入り整理はほとんどコード書いてないので次のバージョンに入るかどうか微妙。

( ´・ω・`) ショボーン
0513AA test04/11/11 09:37:52ID:tEXjfMhn
       ∧_∧  ┌─────────
      (   ・) < ひとつ言わせてくれ。
      ( ○  )  └─────────
      | | |
       (___(__)

               从从从从从从从从从从从从
      ∧_∧      ) 
      ( ・∀・)彡  く  ( ・∀・)< kitaっていいな。最新のスナップショットでは、ところどころ英語なところがあるが。
      (    9    ) 
      |  | |      WWWWWWWWWWWW
      (___)._)
0514login:Penguin04/11/11 10:32:52ID:Zt1EQGhK
しかし素晴らしい。
当初はnavi2chと並走で人柱モードだった俺だけど
今はむしろkitaだけで見てる事が多い。
使いだしてからほんの二週間くらいのはずなんだが。

おいら個人的には外部板関連の充実がすごく嬉しい。
いや、外部/2ch比が9:1以上で外部だったりするので
おいらの逝く2ch形式掲示板でもはや閲覧できないのは、
もはやOOo日本ユーザー会だけになってしまった。
すごい!
0515login:Penguin04/11/11 11:55:27ID:tEXjfMhn
ところで、外部掲示板を取り込む方法って、どうするんです?
厨な俺はなにをどうさわってもわからないんですが。
0516login:Penguin04/11/11 14:19:16ID:Zt1EQGhK
>>515

>>245を参照。
まだメニューにはなっちょらんようだ。

なお正しいのかたまたま動いちゃってるのか知らないが、
板名に多バイトを使いたい時はUTF-8にするとばっちり。俺はそうしてる。
KDE環境ならKateあたりで書いてUTF-8で保存すればお手軽。
少し前のバージョンだが、うっかりEUC-JPで書いたらコケたw
0517login:Penguin04/11/11 20:49:06ID:tEXjfMhn
ところで、スナップショットに乗り換えてから、動作がもっさり重いんですよね。(Suse9.1 KDE3.3.1 rpmpointさん提供のrpm使用)
なんてことを思ってる矢先、 レスツリーを表示しようとしたらクラッシュしてしまいました。

バックトレースにでた ものを ここに張ると、中の人とかの尾役に立ちますでしょうか?
0518kitaの中の人 ◆KITAulkOso 04/11/11 23:30:32ID:7ThW6ZlP
>>47のM/Bに続いて今度はHDDが壊れましたorz
バックアップ取ってたのでとりあえず新しいHDDに移行させましたが。

>>509
> parsemisc.cppはただ消してもダメで
> Makefile.amからも消しとかないとコンパイルに失敗します
そういえばそうでした。Makefile.amの編集は脳内補完してるので気づかなかった。

> ソースアーカイブにadmin/CVSが紛れ込んでます
> できれば削除お願いします
了解。影響はないので一応優先度は低め。

>>511
> スレの情報管理を完全にidxファイルに移しました。その影響で既読数の情報が
> 一時的に壊れますが、ログ自体が消える訳ではないので実害は無いと思います。
cache -> idxへの移行を別ツールで対応させようと思ってたんですが、
どれくらい需要あるかなぁ。
# KitaThreadInfoとKita::ThreadIndexだけ使えばいいので
# KDEの勉強にいいかも、とか言ってみる。

>>513
今のところ翻訳はリリース前にまとめてやってます。

>>514
自分は外部板使ってないなぁ。板探すのすら('A`)マンドクセ
OOo対応は一応TODOに入れておきます。

>>517
メソッド名とか詳しく載ってるなら多分役立つのでとりあえず貼ってもらえると助かります。
051942104/11/12 01:47:04ID:BTVDHZ0i
> 動作がもっさり重い

デバック情報の表示をしまくっているのでコンソールから起動すると重いです。

> cache -> idxへの移行を別ツール

それよりはキャッシュ内のログを全部検索して、idxが無いかidx内の項目が足りてないときは
idxを作る関数みたいなのを作った方が良いかも。

> OOo対応

さっきFlash CGI/Mini Thread スクリプト読み込み対応と、ついでにまちBBSとJBBSの
更新時の逐次表示対応をやって一応出来ましたが、明日からしばらく不在でテストもしてないので
完成するのは来週の初めくらいかなあ。
0520login:Penguin04/11/12 01:52:02ID:p62KLcdr
>>518
ごくろうさまです。要望ばかりですみません。

OOo日本ユーザ会のURLはこれです。
ttp://oooug.jp/cgi-bin/bbs/users/
現状は「壊れてます」メッセージがいっぱい出ます。

けど俺以外に誰も声あげないようならこれは対応する必要性ゼロかも。
単によその2chブラウザで閲覧できるものを片っ端から試してみたというだけで
したらば等のように多数の板があるわけでもありませんし。

動作がもっさりしてきたという方の意見には俺も同意です。
しかし現状、単に当方のフォント絡みなのか通信部分なのか区別がついていません。

では。
0521login:Penguin04/11/12 02:17:01ID:p62KLcdr
うわ、リロードしてなかった。

>>519
OOo対応にかかっていただきありがとうございます。
520に書いてた事と少し矛盾しますが、正直動くと大変うれしいです。
お手間をとらせてすみません。
よろしくお願いいたします。

知ってるとこで試してないBBSがなくなっちまいました。
セリオ板やTS板なんていう誰も知らないマイナーなサーバでもバリバリ使えてます。
俺の知る限りではありますが、現時点でnavi2chやp2の対応範囲にも負けてないと思う。
かなりヘビーなp2ユーザだったんですが、こちらからの移行も完了しました。
正直脱帽です。本当に感謝します。

続けていぢり倒してるので何か気づいたことあったらまた書きます。
では。
0522login:Penguin04/11/12 22:25:43ID:ozf6g45w
mandrakeでのRPMのにぎり方を教えて下さい
0523mami ◆mamiFD..V2 04/11/12 22:49:38ID:k5A3NXnH
前 Mini Thread についてちょっと調べたんですが、
.dat の <> で区切った各フィールドはこんな感じでした。
参考まで。

0: 名前欄
1: メール欄
2: 投稿日時
3: 本文
4: スレタイトル
5: URL 欄
6: 削除パスワード (暗号化されている)
削除済みのときは削除者の名前?
7: リモホ (ID の算出には salt が必要)
8: 等幅 (<tt>) 表示フラグ
9: スレストフラグ
10: キャップの名前欄の文字色
11: アップロードファイル?
12: 未使用?
13: 未使用?
0524kitaの中の人 ◆KITAulkOso 04/11/13 11:13:41ID:v2vemVEg
>>500
merged.

>>511
以下の2つの大きな問題があるのでcommitしてません。

・お気に入り板が表示されない
kita.cppのloadFavoriteBoard()の位置を変えたのが原因なので、
"board_list"を読み込む前に移動したらうまくいきました。

・idxに既読数の情報があっても既読数が"1"になってしまう。
内容は詳しく見てませんが、該当スレのidxファイルが正しいのは確認済み。

>>519
> それよりはキャッシュ内のログを全部検索して、idxが無いかidx内の項目が足りてないときは
> idxを作る関数みたいなのを作った方が良いかも。
既読情報は"cache"にしかないので両方必要だと思います。
あと起動中だといろいろ整合性取るのが大変そうな気もします。
0525login:Penguin04/11/13 13:58:12ID:lAs9oZ3q
質問です。
CVS版ですが、たぶんそうじゃなくても発生するかもしれない。
ttp://penguin.s4.xrea.com/imgboard/img-box/img20041113114918.jpg
(ガイドライン板、ネコミミモードスレより。右のnavi2chの表示がたぶん正しい)

なんか「>>番号」とAAが混在すると重なって出る事があるみたい。
他に出てる報告がないので、フォント設定とかのローカルな問題かと思ってたのですが、
いろいろ変えてみても変化がないのでためしに投げてみました。
俺の設定ミスならごめんなさい。
052648404/11/13 15:03:54ID:hzWjW35l
SUSE9.2 professional AMD64 (x86_64) で kita 0.172.0、 make 出来ました。
やったのはこれだけ。
./configure --enable-libsuffix=64 --prefix=/opt/kde3
make
make install

ついでにいうと、Atok なんかインスールしなくても
SCIM + UIM-Anthy で、KDE3.3 上の kita 0.172.0 から
こうして普通に日本語書き込めます。知らなかった....

別の SUSE9.2 を入れた Pentium4 マシンでは、
rpmbuild --rebuild kita-0.172.0.src.rpm
だけでビルドできました。SUSE対応ありがとう。

ついでといっては何ですが、次のバージョンから x86_64 対応も
自動化してくれるとうれしいなぁ.....
052742104/11/14 21:22:25ID:85izyi2Z
帰ってきました。

>>524
> ・お気に入り板が表示されない
それは単にloadFavorites()が内部で板情報を使うためm_boardTab->showBoardList()
の後にloadFavoriteBoards()と一緒にコピペしたら読み込まなくなったっていう超凡ミスなので
board_listを読み込む前に戻せば直ります。

> ・idxに既読数の情報があっても既読数が"1"になってしまう。
こっちは状況が良く分からないのですが、ログはあるけどidxファイルにReadNumの項目が無いときは
既読数が1になります。一回スレを開けば直ります。例えばこのスレの正しいidxファイルはこんな感じ。
ReadNumの項目があるのに1になるならバグですので直します。

ReadNum=526
ResNum=526
Subject=Kita - 2ch client for KDE part2
ViewPos=519

>既読情報は"cache"にしかないので両方必要
"cache"の中にはURLと既読数しか登録されていないため、どちらにしろ名前とレス数はsubject.txtかdat
自体から取る必要があるのと、idxに既読数の情報が無いときは上に書いたように一時的に1にリセットしますが、
ログ自体が消える訳ではなく特に害は無いということから、"cache"は必要ない(むしろインテグリティの面から
有害)と判断しました。

>あと起動中だといろいろ整合性取るのが大変そうな気もします。
起動中に毎回やってると大変なので、ファイルメニューあたりに「インデックス作成」みたいなメニューを作った
方が良いと思います。他の2chブラウザからのログの移動もそれで兼ねることが出来ますし。

>>525
それはKDE側のバグなのでどうしようもないというか、直す気がないというか。誰か直してw
0528kitaの中の人 ◆KITAulkOso 04/11/14 23:25:50ID:rcXAR16G
>>527
> こっちは状況が良く分からないのですが、ログはあるけど
> idxファイルにReadNumの項目が無いときは既読数が1になります。
.idxにReadNumがないのを確認しました。
既存のファイルに影響はないようなので、>>511のパッチは取り込む予定。
(お気に入りの修正を含めて)

> ログ自体が消える訳ではなく特に害は無いということから
既読情報がなくなるのはやっぱり害だと思います。少なくとも自分は混乱したので。
http://kita.sourceforge.jp/cgi-bin/hiki/hiki.cgi?%A5%E1%A5%E2+-+%A5%A4%A5%F3%A5%C7%A5%C3%A5%AF%A5%B9%A5%D5%A5%A1%A5%A4%A5%EB%A4%D8%A4%CE%B0%DC%B9%D4
特に問題がなければ↑の方法で行こうと考えています。

…ってここまで書いてて気づいたのですが、ReadNumとResNumって常に同じ値になりません?
スレッド一覧に表示する既読数については"ViewPos"を使えば良さそうな気もします。
# そもそもidxの案では"ReadNum"はなかったし…
052942104/11/14 23:57:33ID:85izyi2Z
> ReadNumとResNumって常に同じ値になりません

現在は>>511で書いたタイミングでidxに保存しているため同じ値になりますが、将来的には
オフラインモードやdat落ちしたときのことも考えてsubject.txtから(ログのあるスレの)
レス数を取得したタイミングでレス数だけセーブするつもりなので、異なる値になる場合がある
ため今のうちに項目を別にしておきました。ViewPosも既読数つまりログの取得数とは異なる
ので別にした方が良いと思います。

> 既読情報がなくなるのはやっぱり害だと思います

私はどっちかというとユーザの都合よりもプログラムの都合を優先させてコードを書く悪癖が
あるので、ユーザが混乱するとかそういうことはあまり考えてなかったりしてw あとhikiの

> 起動時に"cache"ファイルの存在をチェックし、存在する場合は上の関数を実行

の方法も一度考えたんですが、一度しか使わない関数を書くのが面倒臭かったので
やめたという経緯もあったりしてw

まあ、この辺はリリース日までにもう少し仕様を詰める必要がありますね。
053042104/11/15 00:00:45ID:7NGKoUqL
で、パッチ。一応>>511からの差分で src で-p0。

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1114.txt

(1) 2ch以外のBBSの更新時も逐次表示するように

Access::emitDatLineList()という関数を新設して、そこで入力されたデータを行単位で
2chタイプのdat形式データに変換してDatInfo::slotReceiveData()に行単位のリスト形式で
送るようにしました。これによってAccessクラスで各BBSのスクリプト間の差が吸収されるため、
DatInfo以上のクラスではスクリプトが2chなのか他のスクリプトなのかを気にしなくても済むようにしました。

(2) Flash CGI/Mini Thread の読み込みに内部対応 ( 書き込みは未テスト )

で、Kita::ParseFlashCGIOneLine()という関数を作って、とりあえずテスト用に
oooug.jp が外部板に登録されてたら Flash CGI 型のスクリプトと認識するようにしました
( BoardManager::parseBoardURLの/* test for Flash CGI/Mini Thread */のところ )。
というかextbrd.confの仕様もぽちぽち決めないとなあ。

以下、非2chスクリプトの掲示板を表示させるための改造方法についてメモ。基本的にはこんな感じで。

(1) boardmanager.hの/* type of board */ のとこにタイプを登録して
(2) BoardData::setHostName(),BoardData::createKeys()、
BoardManager::readSubjectTxt()、Kita::convertURL()をタイプに合わせて更新して
(3) kita_misc.cppにKita::ParseFlashCGIOneLine()みたいなパース関数を追加して
(4) Access::emitDatLineList()でデータを2ch型dat形式に変換する
(5) BBSのrawmode.cgiみたいに特殊なスクリプトを使わなければいけないときは
Access::getupdate()も変更
053142104/11/15 00:17:54ID:7NGKoUqL
> (5) BBSのrawmode.cgi

いちいち書かなくても良い気がしますが、「(5) JBBSのrawmode.cgi」の間違いです。

あと書き忘れた気がするので書きますが、>>511のパッチをあてると、お気に入り
スレ情報のXMLファイルが0.172.0以前のファイルと互換性が無くなるので注意して
下さい(これもインテグリティの問題でスレ名とかレス数とかのノードを消した)。
まあ、これも過渡期の間はXMLファイルの互換性を持たせるために
FavoriteThreads::toXML()を元に戻した方が良いかも。

とまあ、こんな風にいま内部をかなり変えてるところなので、軽い気持ちでcvs
とかsnapshotをインストールすると泣くはめになるので気を付けて下さいw
バックアップは基本。
053242104/11/15 23:00:32ID:7NGKoUqL
パッチ。>>530からの差分でkitaで-p0。

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1115.txt

・>>1-1000みたいなリンクが張ってあると、レスの参照ツリー表示のときにいちいちその
レスが参照されるのがウザかったので、20個以上のスレにリンクを張ってるときはそのリンクを
無視することに( DatInfo::checkRes() のとこ)

・Flash CGI/Mini Threadへの書き込み、スレ立て対応

最新版のスクリプトがローカルで動かなかったのでVer3.21aでテスト。


ちなみにあるスクリプトの書き込み、スレ立て対応をする手順は次の通り。

(1) KitaWriteView::KitaWriteView()で
書き込みスクリプトのアドレス(m_bbscgi)を設定して

(2) KitaWriteView::slotPostMessage() で
スクリプト別に投稿メッセージを作って(setPostStr()みたいに)

(3) KitaWriteView::resultCode()やKitaWriteView::resultMessage()で
スクリプトのレスポンスからリザルトコードやメッセージを取得

一番難しいのは(3)で、デバッグ出力でスクリプトのレスポンスをみながら調整する必要があります。
0533kitaの中の人 ◆KITAulkOso 04/11/15 23:40:23ID:LCbJtlpL
# ちょっとお怒りモード

>>531
> まあ、これも過渡期の間はXMLファイルの互換性を持たせるために
> FavoriteThreads::toXML()を元に戻した方が良いかも。
こういうことは先に言ってください。>>511の後元に戻したらお気に入りが消えましたorz
# まあバックアップ取ったので問題ではないですが…

>>511のパッチはrejectします。
・お気に入り板が読めない問題
・XMLファイルの互換性
・既読数が1になってしまう問題
を解決しないと取り込めません。
最後は"ReadNum"でなく"ViewPos"を使う案でいいので、パッチを再作成してください。
0534kitaの中の人 ◆KITAulkOso 04/11/16 00:00:57ID:HUHW5Lx0
パッチは>>511からの差分でもいいです。というかその方が見やすい。
053542104/11/16 00:00:59ID:zE/fWQoP
>>533
> ・お気に入り板が読めない問題

これは>>527で書いたようにただの凡ミスなので簡単に直ります。

> ・XMLファイルの互換性

favorites.xmlはQDomDocument()を使って作っているため、FavoriteThreads::toXML()を
元に戻すだけでいつでも元のファイル形式に戻す事ができるため特に問題は無いと思います。
やっぱりしばらくは互換性持たせた方が良いかな。

> ・既読数が1になってしまう問題

これはHikiに書いてあるようにcache->idx変換関数を書けば解決できますが、書いた方が
良いのかな。

まあいずれにしろ後でなんとかできる問題ばかりなのでとりあえずマージしちゃって後で調節
して行くって方法をとりたいのですが・・・
0536kitaの中の人 ◆KITAulkOso 04/11/16 00:24:31ID:HUHW5Lx0
>>535
> やっぱりしばらくは互換性持たせた方が良いかな。
少なくとも、「古いバージョンから新しいバージョンへ移行」
「新しいバージョンから古いバージョンへ移行」したときに取り返しの
付かない問題が起きないようにすることが必須です。
少なくともバックアップファイルを作成する必要があります。

# 新→旧を入れてるのは大きなトラブルがあったときとかに元に戻せるようにするため。

あと、favorites.xmlについてはブックマーク整理のUI作るときに
別のフォーマットに移行させます。なので今変えてもあまり意味ないです。

> まあいずれにしろ後でなんとかできる問題ばかりなのでとりあえずマージしちゃって後で調節
> して行くって方法をとりたいのですが・・・
それなら>>511>>530>>532を当てた状態でさらに当てるパッチを出してください。
全部当てた状態でテストしますので。

こっちもパッチの調整ばかりしてるの嫌なんですよ…。
0537kitaの中の人 ◆KITAulkOso 04/11/16 00:36:01ID:HUHW5Lx0
↑の発言は一旦撤回します。ちょっとまって。
053842104/11/16 01:11:34ID:zE/fWQoP
いやあ何か混乱させて申し訳ないですorz

ちなみに私がパッチを小出しで出すのは

(1) 物理的に一日の作業時間がそんなに取れない
(2) 大きいパッチを一気に当てると細かい説明をするのが面倒になる(というか
最初の方で修正した項目を忘れるw)
(3) 小刻みにチェックポイントを作りたい
(4) パッチ単位で修正点などの意見を聞いて柔軟に調節したい

のが理由です。まあ(1)が主な理由なんですが。

> # 新→旧を入れてるのは大きなトラブルがあったときとかに元に戻せるようにするため。
> あと、favorites.xmlについてはブックマーク整理のUI作るときに
> 別のフォーマットに移行させます。なので今変えてもあまり意味ないです。

了解です。FavoriteThreads::toXML()は元に戻す方向で、cacheは(情報は使わない
けど)しばらくは既読情報を保存する方向で調整します。
053942104/11/16 01:15:25ID:zE/fWQoP
書いた直後に思いついたけど・・・

> cacheは(情報は使わないけど)しばらくは既読情報を保存する方向で調整します。

idxにReadNumの項がない時は1にするんじゃなくてcacheから既読数を取得するよう
にすれば良いのか。これなら簡単かつ自然にcache->idxへの移行が出来るかな。
0540kitaの中の人 ◆KITAulkOso 04/11/16 01:21:33ID:HUHW5Lx0
> いやあ何か混乱させて申し訳ないですorz
こちらこそすみませんorz

えっと、>>511>>530>>532のパッチのマージ&
> ・お気に入り板が読めない問題
> ・XMLファイルの互換性
> ・既読数が1になってしまう問題
のfixやってしまいました。CVS版に入っています。
既読数が1になってるのは"ViewPos"を使うことで対応してます。

お気に入りの情報がおかしいですが…これも何とかしないとまずいな。
054142104/11/16 03:18:35ID:zE/fWQoP
仕事しててまだ起きてたりして・・・orz

>>540
乙です。

> 既読数が1になってるのは"ViewPos"を使うことで対応してます。

idxが無いログではうまく働かないと思うので、>>539の仕組みも
同時に入れとこうと思います。こんな感じで

(1) idxからReadNum読む
(2) 無かったらViewPosを読む
(3) 無かったらcacheから取得

> お気に入りの情報がおかしいですが

明日辺り私も見ときます。
0542kitaの中の人04/11/16 22:07:46ID:HUHW5Lx0
今Windowsで作業中なのでトリップなし(多分ID一緒だからいいでしょう)。
>>541
(1)(2)は逆にしてください。もしくはcolumnを追加。
「既得数」でなくあくまで「既読数」なので。

面倒ならその順序でパッチ出してください。自分がやります。
054342104/11/16 22:20:26ID:jQaZyowR
> (1)(2)は逆にしてください。もしくはcolumnを追加。
> 「既得数」でなくあくまで「既読数」なので。

ちょっと遅かったですw いまパッチを書いて簡単なテストが終わったとこなので、
とりあえずそのまま出しますが、後で説明するように ThreadIndex::getResNum()
や ThreadIndex::getReadNum()で>>541の作業をするようにしたので変更するなら
その辺をいじって下さい。

でパッチ。cvsからの差分でkitaディレクトリで-po。
あれこれやってるうちに何時の間にかfeature freezeの日も近付いてきたのでデカいパッチは
一応これで最後にしてあとは調整とデバッグに移ります。

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1116.txt

内容は主に昨日話した旧バージョンとの互換問題の解決+アルファ。board.{cpp,h}は消しても良いです。
もうちょっと詳しく説明すると

(1) KitaMainWindow::loadCache() と KitaMainWindow::saveCache() を復活させて
cacheの情報も使うようにした。具体的には ThreadIndex::getResNum() や
ThreadIndex::getReadNum()を変更して、idxがないか、又はidxにその項目が無いときは
KitaMainWindow::loadCache()で読み込んでおいたcacheの情報を使ってidxの項目
を作ります。idxにその項目があるときはidxから読み取った数値が使われます。また既読数は
KitaMainWindow::saveCache()でcacheにも保存されるので旧バージョンとの互換性もあり。

(2) BoardManager::readSubjectTxt()の拡張。BoardManager::getThreadInfoFromIdx()を
統合してやや速度向上。BoardManager::readSubjectTxt()でセッション中に初めて板を開いたとき
(つまりbdata->readIdx() == FALSE のとき)にidxから既読数やレス数を取得。

つづく
054442104/11/16 22:25:17ID:jQaZyowR
つづき

(3) Thread::m_cached という変数を追加してそのスレがキャッシュに存在するかどうかを
Thread::m_cached が TRUE か FALSE で判定することに。KitaThreadInfo::readNum()==0
でも判定できますが、いちいちQMapで検索するのはオーバーヘッドがでかいのと将来的にKitaThreadInfo
は廃止する事からとりあえず別パラメータにしときましたが、この辺りは仕様変更が若干あるかも。
なおthread->setCached( TRUE )によってThread::m_cachedをTRUEにセットする場所とタイミングは

・BoardManager::getCachedThreadList(): dat落ちしたログのリストを取得したとき
・BoardManager::readSubjectTxt(): セッション中に初めて板を開いたとき
・DatInfo::saveIndex(): キャッシュにあるログの表示やスレのロードが終わったときに
DatInfo::initPrivate() や DatInfo::slotFinishLoad()の中から呼ばれる

の3箇所。逆にFALSEにするのは DatInfo::deleteCache() の一ヶ所。

(4) subject.txtを読み込んだとき、subject.txtから読み取ったレス数とidxのResNumの値が
違っていたら新しいレス数をidxにセーブするようにした。具体的にはBoardManager::readSubjectTxt()の
/* update res num */ 以下の部分で、スレッドがキャッシュされていて( thread->isCached() == TRUE )
かつ旧レス数( oldNum )と新しいレス数( newNum )が違うときはThreadIndex::setResNum()を呼んで
新しいレス数をセーブするという仕組み。これによってidxのResNumとReadNumは基本的に違う値になる。

とりあえず私的には

ResNum・・・サーバ上のレスの数
ReadNum・・・ローカルキャッシュ上のレスの数(既得数)
ViewPos・・・ここまで読んだの位置

という感じでやってましたが、この辺は適当に調整しておいて下さい。
054542104/11/16 23:48:59ID:jQaZyowR
相変わらず仕事中orz

ところで

> もしくはcolumnを追加。

ということから察するに、スレ一覧の「既読数」にViewPosの値をセットしたいということ
でしょうか。となると現在DatManager::getKokoyonNum()では直接idxからViewPosを
取得しているため非常にパフォーマンスが悪いので、ViewPosをメモリにキャッシュ
しておいて読み込むときはメモリから読むような機構にしておきますが・・・
0546rpmpoint no naka no hito04/11/17 00:10:10ID:FGWV9h+I
doumo
rpmpoint no naka no hito desu.
tetigai kara SuSE ga kidou sinaku narimasita node
korekara 1syuukan gurai no uti ni Snapshot ga riri-su sarete mo
kousin ga dekimasen node go yousya kudasai

orz
0547kitaの中の人 ◆KITAulkOso 04/11/17 01:44:22ID:qx23v2F3
パーティションいじってたらWindowsが起動しなくなって大変でしたorz

>>545
> ということから察するに、スレ一覧の「既読数」にViewPosの値をセットしたいということでしょうか。
そういうことです。

> ResNum・・・サーバ上のレスの数
> ReadNum・・・ローカルキャッシュ上のレスの数(既得数)
> ViewPos・・・ここまで読んだの位置
の解釈でいいと思いますが、普段使う分にはViewPosで、ReadNumは見える必要はないと思うので。
やっぱりReadNumも見えた方がいいというのなら、項目を追加する方向で行きます。
という意味でかきますた。

> 非常にパフォーマンスが悪いので
そんなにパフォーマンス悪くなります?実測で明らかに遅いなら入れてもいいですが…。

>>546
お大事に…。
054842104/11/17 02:09:56ID:9xOg/LBj
>>547
> > ということから察するに、スレ一覧の「既読数」にViewPosの値をセットしたいということでしょうか。
> そういうことです。

了解しました。

> そんなにパフォーマンス悪くなります?

>>543のパッチで修正していますが、cvsのKitaSubjectView::loadBoardだと
int readNum = Kita::DatManager::getKokoyonNum( datURL ); と
なっていましたが板を開く早さがうちのPCだと5倍位違いました。Linux板は普段なら
setting.txtをダウンロードした後1秒程度で開くのですが、DatManager::getKokoyonNum
を使うと5秒以上かかります。やっぱりいちいちHDDにアクセスしてファイルを
オープンするのは禿げ遅ですなあ。

つう訳で明日あたりこの辺の話のことをやろうかと思います・・・。Threadクラスをちょっと
拡張するだけなのでそんなに大変じゃないかな。

>>546
私もFC3入れたいけど時間がないなあ・・・
0549login:Penguin04/11/17 11:19:11ID:Keq27Qk9
「お気に入り」タブで「板のリロード」を実行しても
「レス数」「既読数」「未読」の数字が変化しないのですが、
皆様のところではいかがでしょうか?

kita の 20041109 のスナップショットを Fedora Core2 で使っています。
0550login:Penguin04/11/17 15:53:25ID:ERm6Yf8o
>>549
>>397,398,399,403,405,505,512
0551login:Penguin04/11/17 17:00:37ID:g2zTluWp
>>549

>>418も♪
0552login:Penguin04/11/17 19:00:08ID:9USYoFY5
当方FreeBSD5.3 KDE3.3.0なのですが,kitaをソースからmakeしようとすると
configureでこけます.
configure:24394: error: libart_lgpl_2 was not found!
となるのですが,/usr/local/lib/にlibart_lgpl_2.soは存在しています.

どなたかFreeBSDでmakeができた方がいましたら,ヒントを教えていただけませんか?
教えて君で申し訳ないです.
0553login:Penguin04/11/17 21:11:26ID:ERm6Yf8o
>>552
/usr/local/libってことはパスが通ってない悪寒
linuxなら/etc/ld.so.confに追加してldconfigだ(ったと思う)が、
FreeBSDは分からない
0554login:Penguin04/11/17 22:28:15ID:6Gva/oFt
>>552
kitaのtar玉を展開して出てくる"INSTALL"って名前のファイルを穴があくまで読みやがれ
055542104/11/17 23:12:14ID:l27aQPKp
>>549
その辺はいま直してるとこなので気にしないでおいて下さい。

でパッチ。内容は昨日話したあたりのところ。>>543からの差分でkitaで-p0。
サイズが思ったより大きくなってしまったorz。これでやっとデバッグモードに入れるかな・・

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1117.txt

・ViewPosをキャッシュ処理してスレ一覧の既読数に表示

Thread::m_viewPosというパラメータにキャッシュすることに。値を取得する関数は
DatManager::getViewPos()、セットするには DatManager::setViewPos()。

ついでにThread::m_resNumと Thread::m_readNum も作って resNum と readNum の
管理もThreadクラスに移し、新設したKitaSubjectView::updateListViewItem()でやってる
みたいに、Threadクラスのポインタから直接レス数などを取得できるようにしたのでパフォーマンスが
向上しました(まあ本当はクラス間の結合度が上がるのでポインタを使うのはいくないんですが、
KitaSubjectView::updateListViewItem()は特例ということで)。これでThreadInfoクラスは
旧バージョンとの互換性のために残しているだけになります。というかぶっちゃけThreadInfoクラスが
無くてもKitaは動きます。ThreadIndex::saveIndex()の/* save "cache" */のところで
ThreadInfoクラスにレス数などの情報を"おすそわけ"しています。

つづく
055642104/11/17 23:14:47ID:l27aQPKp
つづき

・>>544の(3)のThread::m_cachedはやっぱり廃止。

Thread::m_readNum == 0 かどうかでキャッシュにログがあるかどうか判定することに。

・idxの保存、読み込みまわりのコード整理

で、idxの保存と読み込みの場所とタイミングが>>511からすこし変わったのでメモ

----------------------------------------------------------------
(1) idxにスレ情報を保存する場所(タイミング)

a) キャッシュにあるスレを表示した直後(鯖からデータをロードする前)に
DatInfo::initPrivate() からThreadIndex::saveIndex()を呼ぶ。

b) スレのロードが終わったときに
DatInfo::slotFinishLoad()からThreadIndex::saveIndex()を呼ぶ。

c) ViewPosを変更するときは はDatManager::setViewPos()で直接 ViewPos を保存

(2) idxからスレ情報を取得する場所(タイミング)

a) 板のスレリストを取得するとき(初回のみ1回だけ)
BoardManager::readSubjectTxt()からThreadIndex::loadIndex()を呼ぶ。

b) dat落ちログのリストを取得するときに
BoardManager::getCachedThreadList()からThreadIndex::loadIndex()を呼ぶ。

c) 起動時にお気に入りスレを登録するときに
FavoriteThreads::processThreadNode()からThreadIndex::loadIndex()を呼ぶ。
0557kitaの中の人 ◆KITAulkOso 04/11/18 02:28:48ID:aa1PkYlF
>>543>>555
merged.
あぼーんがあったりスレ停止があったときにsubjectがおかしくなる問題があったので、
ひとまず直しておきました。DatInfo::parseDat()です。

今のところの問題点は
・「ここまで読んだ」をセットしている場合、スレ一覧でのマークが緑色になる
くらいでしょうか。

古いキャッシュの廃止は移行環境が整ってからになるかな。

>>548
了解。それだけ遅ければキャッシュ利用した方がいいですね。
055842104/11/18 02:51:14ID:oF+1Wu7X
まあ相変わらず仕事してて起きてる訳ですがorz

>>557
> ・「ここまで読んだ」をセットしている場合、スレ一覧でのマークが緑色になる

マークなんですが、KitaSubjectView::updateListViewItem()を見れば分かると
思いますが、現在の仕様ではViewPosとResNumでは無くて、ReadNumとResNum
の差を見て付けています。つまり鯖側にあるdatとキャッシュにあるdatが違って
いると赤、同じなら緑という感じで。

「既得数(ReadNum)」のcolumnがあればマークの動作が分かりやすくなるかなとも
思ったんですが、最近項目が増え気味なので入れても良いものかどうか躊躇中。
>>381みたいにスレ一覧の項目の表示ON/OFFがあれば良いんでしょうけど・・・

> キャッシュ利用

Threadクラスによるスレ情報のキャッシュ方式に移行したらスレ一覧の表示が
3割ほど速くなったような気が。ThreadInfo利用時のQMapの検索速度ってそんな
に遅かったのかw
055955204/11/18 12:00:42ID:Z8mpNkQ8
>>553,554
CPPFLAGS=-L/usr/local/libを追加することでconfigureはできるようになりました
でも,結局コンパイルでもlibart_lgpl_2がないといわれるので,/usr/lib/に
リンクを作ることで解決しました
スマートな解決ではないですが,無事kitaから書き込むことができました
どうもでした
0560kitaの中の人 ◆KITAulkOso 04/11/18 23:25:48ID:aa1PkYlF
お気に入り整理のUI作る前に新ファイルフォーマット考えるの忘れてたorzので
作りました。何か気になる点があったら言ってください。
http://kita.sourceforge.jp/cgi-bin/hiki/hiki.cgi?%A5%E1%A5%E2+-+%A4%AA%B5%A4%A4%CB%C6%FE%A4%EA%A4%CE%B0%DC%B9%D4

・同じURLで2つ別の名前が付けられないが問題ないか
(名前については問題ないはずだけど他の属性で問題が出ないか)
・スレを識別するキーはdatファイルのURLでいい?
・互換性について(移行は当然サポートします)。

>>558
> >>381みたいにスレ一覧の項目の表示ON/OFFがあれば良いんでしょうけど・・・
んじゃそっちを先に対応します。お気に入り整理は今回は間に合いそうにないので
あきらめますたorz
056142104/11/19 00:55:35ID:JmaYCgMd
現在バグ取り中。変更点が多いだけあって結構バグが多いなあw
とりあえず

datmanager.{cpp,h}
datinfo.{cpp,h}

あたりをメインに直しているので、2,3日はその辺をあまりいじらないでおいて下さい。

> > >>381みたいにスレ一覧の項目の表示ON/OFFがあれば良いんでしょうけど・・・
> んじゃそっちを先に対応します。

ではそちらはおながいします。

お気に入り整理の新ファイルフォーマット

> 同じURLで2つ別の名前が付けられないが問題ないか
エイリアス機能ってことですか?まあ、あればあったで良いけど無くても良いような。

> ・スレを識別するキーはdatファイルのURLでいい?
どうせ内部的にはKita::getDatURL()で違いが吸収される(dat形式になる)ので、
read.cgi形式でもdat形式でもどっちでも良いと思いますがdat形式が無難かと。

> 板名の情報は誰が管理?
これはBoardManager(とboard_list)が全部管理してるので、ここでは特に
考えなくても良いと思われ。

> スレ名、レス数は.idxから取得
レス数はidxから取るので必要ないと思いますが、スレ名は手動で編集するときに
便利なので、使わないとしてもラベルとして入れておいた方が良いかも。
0562kitaの中の人 ◆KITAulkOso 04/11/19 01:42:13ID:YJYSSRcW
スレ一覧の項目On/Offは一筋縄でいかないようなので、
先に、カラムの順序、サイズの保存を実装する予定。
手動でリサイズ&移動すればOff状態とまああまり変わらないということでw

ちなみに、サイズと順序はKListView::saveLayout()で保存できるようですが、
複数ビューがあるので同期をどうやって取ろうかなと悩んでます。

>>561
> エイリアス機能ってことですか?まあ、あればあったで良いけど無くても良いような。
いや、とりあえず制限事項になるので挙げてみただけです。
逆に、1つ編集したら同じURLは全て一緒になるのでむしろこの方がよいかなと。

> これはBoardManager(とboard_list)が全部管理してるので、ここでは特に
> 考えなくても良いと思われ。
了解。まあ、板情報を入れるのは簡単なので実装してから考えます。
056342104/11/19 02:08:30ID:JmaYCgMd
相変わらずまだ起きてる訳ですがw

> スレ一覧の項目On/Off

GUIを作るのが面倒ならとりあえずKitaConfigかあるいは別の設定ファイルを
作ってそこで手動でOn/Offするようにしてみてはどうでしょうか。あとスレッド
ビューのツールバーのボタンの表示On/Offもあると良いなあとか言ってみるテスト。

同期はSignalCollection経由で他のサブジェクトビューに更新があったことを
知らせるのが常套手段だと思いますが、面倒なら次に開いたビューから変更って
タイプでも良いんじゃないですかね・・・
056442104/11/19 23:14:01ID:iR+YSKnS
パッチ。cvsからの差分でkitaで-p0。デバッグとパフォーマンス向上が主な内容です。
以後は肉の日までテストしながら細かいデバッグパッチを出していって、テストが終わ
った部分から順次qDebugを消して行く予定。

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1119.txt

・ここまで読んだの処理で変だったところを修正

・スレ一覧からのログ削除高速化

DatManager::deleteCache()のとこ。従来はいちいちDatInfoを作って
いたため削除が激重だったのを、DatInfoを作らないでログを消すように変更

・ついでにDatManager コード整理

主にDatManager::getDatInfo()のあたり。あといちいちmutexかけてたのをやめて
DatManager::boardURL()みたいなobsoleteな関数をいくつか削除。これでだいぶ
見やすくなったかな。

・ThreadIndex::loadIndex()、ThreadIndex::saveIndex()を高速化

項目毎にいちいちファイルをオープンしてたのをやめ

・BoardManager::getBoardData()とかKita::convertURL()をキャッシュ使って高速化

・その他細かいデバッグいろいろ
056542104/11/20 00:07:03ID:AKAy4KPd
いまテストしててひとつバグを見つけたのでパッチ。

既に移転済みの板を開いて(もちろんスレ一覧は空白)から板の移転を行った後に再度板を開くと
既読のはずのスレが未読表示になるバグの修正。

最初に板を開いたときにBoardData::m_readIdxがTRUEにセットされたため、それを
リセットしないとidxの読み込みがおこなわれないというのが理由。

*** libkita-org/boardmanager.cpp 2004-11-19 23:01:23.000000000 +0900
--- libkita/boardmanager.cpp 2004-11-19 23:45:34.992309872 +0900
***************
*** 906,911 ****
--- 906,915 ----
keyHosts.prepend( newhost );
bdata->createKeys( keyHosts );

+ /* reset BoardData */
+ bdata->setReadIdx( FALSE );
+ bdata->setSettingLoaded( FALSE );
+

/*---------------------------*/
/* move cache dir */
056642104/11/21 00:08:04ID:WvvQKFPl
パッチ。といっても特に変更点は無くて、DownloadManagerをテストして特に問題が
無かったのでqDebugを消してコメント入れただけ。libkitaで pacth < patch-1120.txt

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1120.txt
0567kitaの中の人 ◆KITAulkOso 04/11/21 01:58:59ID:K8+Vt0l8
明日あたりにsnapshot出します。

>>564-566
merged.

> 同期はSignalCollection経由で他のサブジェクトビューに更新があったことを
> 知らせるのが常套手段だと思いますが、面倒なら次に開いたビューから変更って
> タイプでも良いんじゃないですかね・・・
とりあえずそれで実装しました。
リサイズ時にいちいち書き込みするので遅いかなぁと思ったんですが、
うちの環境だと問題なかったのでとりあえずそのまま。

しかし一番最後のCokumnだけhideColumnが効いてないみたい…。なぜだ…
0568login:Penguin04/11/21 07:55:36ID:YtiHxrKy
ほかのKDEアプリにはない現象なんでKita特有なんじゃないかと思うんですが、
ウインドウを最大化している状態でシェードし、元に戻すと強制的に最大化が
解除されてしまいます。

すごく使いにくいんですが、これは仕様でしょうか?
056942104/11/21 13:53:06ID:yZR+sU9h
>>568修正。cvs差分kitaで-p0。

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1121.txt

原因は KitaThreadView::setFocus() の if ( topWidget->isMinimized() ) topWidget->showNormal();
の一文です。最小化してる状態からスレッドビューにフォーカスが移るとウィンドウが通常状態に戻ります。

何故setFocus()に topWidget->showNormal() なんてコードが入っているかと言うとウィンドウの切替え処理を行うためです。

つづく。
057042104/11/21 13:54:26ID:yZR+sU9h
つづき。例えば「3」のボタンを押すと

(1) KitaTabWidgetBase::setupActions()で new KAction( i18n( "Switch to Thread" ), Key_3 )が定義
されてるので 3 を押すとsignalcollectionにswitchToThread()シグナルが飛ぶ

(2) signalcollection::switchToThread() は KitaThreadDock::setupAsMainView() と
KitaThreadDock::setupAsKitaNavi() で KitaDockWidgetBase::slotShowDock() にコネクトされているので
KitaDockWidgetBase::slotShowDock()が呼び出される。

(3) KitaDockWidgetBase::slotShowDock() で ShowDockEvent() イベントが作られる

(4) イベントループに戻った後、KitaDockWidgetBase::customEvent() が呼び出されて
KitaDockWidgetBase::showDock() が呼び出される

(5) そこの if ( w ) w->slotCurrentChanged( w->currentPage() ); から
KitaTabWidgetBase::slotCurrentChanged() が呼び出される

(6) w->setFocus(); より KitaThreadView::setFocus() が呼び出される。

という流れでKitaThreadView::setFocus()が呼び出されてスレッドビューにフォーカスが移ります。ここで
画像ビュワーみたいにメインウィンドウから切り離したウィンドウ上で「3」を押したときにメインウィンドウが
最小化されてるとウィンドウが切り替わらないので最小化されてるメインウィンドウを表示させるため
topWidget->showNormal()を呼んでいます。とまあ原因は分かっていたんですが、単にtopWidget->show()と
しただけでは最小化は解除されないため、解決方法が良く分からなかったので突っ込まれるまで見て見ぬふりしてましたw

で超アドホックな解決方法としてはKitaThreadDock::slotShowThreadDock()というスロットを作って
signalcollection::switchToThread()シグナルをそこにコネクトしてそこでtopWidget->showNormal();
することに。これで一応最小化状態からフォーカスが移ったときに最大化状態が外れることはなくなります。
最小化状態で他のウィンドウから「3」を押したときに最大化状態が外れる問題はそのうち直すってことで。
0571kitaの中の人 ◆KITAulkOso 04/11/21 14:59:19ID:K8+Vt0l8
snapshot
http://kita.sourceforge.jp/snapshot/kita-20041121.tar.gz
>>569まで入れてます。

あとスレ一覧でサイズを変更するとその位置が保存されるようにしてます。
お気に入りはその情報を利用してないですが…やっぱり対応した方がいいかな?

とりあえず致命的な問題はないはず。
お気に入り整理は次(以降)にしますorz
0572kitaの中の人 ◆KITAulkOso 04/11/21 19:47:05ID:K8+Vt0l8
書き忘れてたけど>>571のsnapshotでrpmを作ろうとするとエラーが出るので
%filesセクションのkitapart/kita*ui.rcを削除してください。
057342104/11/21 22:14:01ID:yZR+sU9h
乙です。snapshotですが、今回のは以前までのと比べて危険度は低いですが、恐い人は
一応バックアップを取ってから起動してください。

で、そのsnapshotですが、Qt3.1だとQListView::hideColumn()がエラーを出します。
マニュアルを見る限りだとsetColumnWidth( column, 0 )にすれば良いのかな。

あと cache と idx の互換性問題のテストをしたのでThreadIndexクラスを若干修正
しました。libkita で patch < patch-1121-2.txt

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1121-2.txt

テスト手順は、例の如くKNOPPIX3.6を使ってまっさらな状態から

(1) kita-0.172.0 をインストール
(2) 適当にスレを見る
(3) snapshot を make
(4) snapshot を起動してidxのViewPosからReadNumを作るかチェック
(5) idxを全部消してからsnapshotを起動してcacheからidxを作るかチェック
(6) 適当にスレを見る
(7) kita-0.172.0を起動してcacheが保存されてるかチェック

ってな感じ。明日はAccessクラスあたりを軽くテストする予定。
0574kitaの中の人 ◆KITAulkOso 04/11/22 02:01:43ID:BQLsuu/N
>>573
merged.
気になったのが、ロードしてもスレ一覧の既読数が更新されないこと。
スレッドのタブを閉じたらその時にアップデートされるようですが。

ロード時に既読数が更新されるのも違和感があるので、
意図したものでなければ直さない方がいいかもしれません。

>>558
> マークなんですが、KitaSubjectView::updateListViewItem()を見れば分かると
> 思いますが、現在の仕様ではViewPosとResNumでは無くて、ReadNumとResNum
> の差を見て付けています。つまり鯖側にあるdatとキャッシュにあるdatが違って
> いると赤、同じなら緑という感じで。
やっぱりViewPosとResNumの差を取るようにしてください。
ユーザの観点からすると、

赤:まだ見てないレスがある
緑:もう見るレスがない

というのが分かりやすいので。
057542104/11/22 02:23:08ID:UnXhyNRq
寝る前に・・・

>>574
> 気になったのが、ロードしてもスレ一覧の既読数が更新されないこと。

これは正常動作です。今まではViewPosがReadNumも兼ねていたため、変則的に
ロード直後にViewPos=ResNumにしていたのですが、今回からViewPosとReadNumが
分離されたため、あくまでViewPosはここまで読んだの位置になります。つまり
スレッドのタブを閉じた時点でここまで読んだが最後に移動したということになる
ためその時点でアップデートされます。

> やっぱりViewPosとResNumの差を取るようにしてください。

しばらくはサブジェクトビュー周りはいじる予定は無いのでこの辺りは任せます。

あと明日はaccess.cppだけでなくてkita_misc.cppもちょっとだけいじるかも・・・
0576kitaの中の人 ◆KITAulkOso 04/11/22 03:30:36ID:BQLsuu/N
まだ起きてるのかよ<自分

>>575
> しばらくはサブジェクトビュー周りはいじる予定は無いのでこの辺りは任せます。
修正しました。
057742104/11/22 22:21:28ID:3vQSWaNY
パッチ。access.、kita_miscを若干変更。srcで-p0

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1122.txt

・Accessの方はm_orgDataを消してAccess::writeCacheData()で m_threadData
だけを追加保存するように変更。これによりメモリ消費量を減らして速度も向上。

まあ速いマシンではあまり変わらないと思いますが、ちょっと古くてHDDが遅いマシンなら
多少効果ありかと。

・kita_miscはHOST表示対応

削除依頼とかまちBBSとかHOST表示される板でHOST表示するようにしました。
Kita::parseDateId()とKita::parseTITLEdat()に数行追加しただけ。
でもホスト表示させると横幅が長すぎるかな・・・

あとは軽くテストしてqDebugを消したりとか。明日は休みなので、また
KNOPPINXを使って板の移転処理まわりの最終テストをする予定。
057842104/11/22 22:27:05ID:3vQSWaNY
やっぱりマークの動作が微妙に気になるので問題点と解決案をまとめてみました。
基本的に ViewPos <= ReadNum <= ResNum の関係が成り立ってるので取れる状態は

(0) ReadNum == 0, キャッシュ無し
(1) ViewPos <= ReadNum < ResNum、未読有り、新しい書き込み有り
(2) ViewPos < ReadNum = ResNum、未読有り、新しい書き込み無し
(3) ViewPos = ReadNum = ResNum、未読無し、新しい書き込み無し

の4つ。(0)はマーク無し(or New)、(1)を赤、(3)を緑にするのは問題ないけど、
(2)を赤、緑どっちに分類するかが問題。

(2)を緑の問題点: 未読があるのが分かりにくい
(2)を赤の問題点: スレを閉じない限り(緑にならないので)新しい書き込みがあっても分かりにくい

・解決案 1: マークを増やす。例えば

(1)赤○、(2)緑○、(3)緑□

みたいに。つまり新しい書き込み有り無しを色、未読有り無しを形で分別(逆でも可)。もしくは単に

(1)赤、(2)黄、(3)緑

みたいに色を変える。問題はユーザが新マークに馴れる必要があること。

・解決案 2: 内部パラメータを増やして従来通りの動作にする。

従来はDatInfo::m_kokoyonNumというパラメータを使って(2)をさらに

(2-1) ViewPos < ReadNum = ResNum、ロード直後でない
(2-2) ViewPos < ReadNum = ResNum、ロード直後

と分けて(1),(2-1)を赤、(2-2),(3)を緑にしてた。問題は内部コードがぐちゃぐちゃになること。
0579login:Penguin04/11/22 23:41:46ID:CFYXtOSd
kitaで既読情報やお気に入りなどを保存するタイミングってメインウィジェットの
終了時でしょうか? ウインドウを開いたままKDEを終了すると保存されていない
ようなのですが。
058042104/11/23 00:21:06ID:zOYbsGHe
いまboardmanager と kitaboardview のデバッグをしてますが、細かいバグが
結構残ってますね・・・

>>579
既読情報は0.172.0以前は終了時、最新版は>>556のタイミング

お気に入りは終了時 (KitaMainWindow::~KitaMainWindow()の saveFavoriteBoards()
と saveFavorites()のとこ )

です。
0581kitaの中の人 ◆KITAulkOso 04/11/23 01:05:18ID:9ejod1vc
>>578
(1)(2)を積極的に区別する必要性が分かりません。
少なくとも(2)(3)に比べたら区別する必要性は低いです。
なので、(1)赤○、(2)赤□、(3)緑□ なら反対しませんが。

あとむしろ問題なのは、スレを開いたときにスレ一覧(KitaSubjectView)の
色が更新されないことです。少なくとも赤のままはまずいです。
今まで通り緑にするか、新しく「開いているスレ=黄色」にするのがいいと思います。
種類を増やすのは危険ですが…。

>>579-580
今回断念したorzお気に入りの編集でまとめて直そうと思ってたのですが、
登録/削除のタイミングで保存するのなら簡単に出来ると思うので直しましょうか?
KitaMainWindow::bookmark()でsaveFavorites()を呼べばいいだけだと思うので。
058242104/11/23 03:11:32ID:zOYbsGHe
まだ起きてたりして。休みはありがたいなあw

>>581
> (1)(2)を積極的に区別する必要性が分かりません

区別しないことで生じる問題点は>>578の「(2)を赤の問題点」以下で述べて
ることで、要するに「少なくとも赤のままはまずい」ということです。で、

> (1)赤○、(2)赤□、(3)緑□

これが解決案1の「逆でも可」のところで

> 今まで通り緑にするか、

これが解決案2で

> 新しく「開いているスレ=黄色」

これが解決案1の「色で分ける」のとこですね。どの解決案を選ぶかは
一任しますが、個人的見解を言うとせっかくコードをきれいにしたので
解決案2は出来れば避けたいところ。
0583kitaの中の人 ◆KITAulkOso 04/11/23 11:59:39ID:9ejod1vc
>>582
> 区別しないことで生じる問題点は>>578の「(2)を赤の問題点」以下で述べて
> ることで、要するに「少なくとも赤のままはまずい」ということです。で、
何か話がかみ合ってないようですが、421さんは内部仕様の話をして、
自分は外部仕様の話をしてるような気が…。
外部仕様が決まらないと内部仕様の話はありえないです。

外部仕様としては、多くても以下の4種類しかありえないです。
(A) 未読スレ
(B) 既読スレ、未読あり
(C) 既読スレ、未読なし
(D) 開いているスレ

(D)は今の仕様にはないもので、(C)と区別される必要はないですが、
(B)とは区別される必要があります。これを満たさない内部仕様は不許可です。

で、どの案を採用するかですが…これはまた後で書きます。
0584kitaの中の人 ◆KITAulkOso 04/11/23 12:44:11ID:9ejod1vc
長くなったのでWikiに書きました。
http://kita.sourceforge.jp/cgi-bin/hiki/hiki.cgi?%A5%B9%A5%EC%A5%C3%A5%C9%B0%EC%CD%F7%A4%CE%A5%DE%A1%BC%A5%AF%A4%CE%BB%C5%CD%CD
058542104/11/23 13:24:48ID:qRM01ICu
いま起きました。休日最高w

>>583,584
Hiki見ましたが、パターン1が従来パターン(解決案2)ですね。

でパターン2なんですが、上の方で懸念していた問題点は、鯖側で新しい書き込みがあっても
パターン2では分からないこと・・・だったんですが、良く考えたらReadNumの数字をスレ一覧に
表示しとけば分かるのか。

と言う訳で「(D)状態のマークを新設してパターン2+ReadNumの数字をスレ一覧に表示」案に一票。
ちなみにJaneViewはそのパターンみたいです。
0586kitaの中の人 ◆KITAulkOso 04/11/23 13:47:40ID:9ejod1vc
>>585
> と言う訳で「(D)状態のマークを新設してパターン2+ReadNumの数字をスレ一覧に表示」案に一票。
パターン2はいいですが、>>547へループする危険性があるので注意してください。
未読のあるなしに比べたら数字の大小は大した問題ではないですが。
058742104/11/23 22:30:13ID:qRM01ICu
休みなんでつい遊んじゃったなあw

まあどっちにしろ(D)の状態を判定する関数が必要なので、DatManagerとKitaHTMLPartに数行加えて
スレが開いているかどうかをチェックする関数を追加しました。cvsからの差分でkitaで-po

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1123.txt

bool DatManager::isMainThreadOpened( const KURL& url );
bool DatManager::isMainThreadOpenedFast( const KURL& datURL );

使いかたは url を入れて開いてればTRUE閉じてればFALSE。下の方はKita::getDatURL()を使わないで
高速化したバージョンなので、KitaSubjectView::updateListViewItem()で使うときは
isMainThreadOpenedFast()の方が良いと思います。ただしURLとして datURLを入れてください。

その他追加した関数に関しては

KitaHTMLPart::setup()でDatManager::addMainThreadToList()を呼んでURLを登録
KitaHTMLPart::clearPart()でKita::DatManager::removeMainThreadFromList()を呼んでURL抹消

って感じ。
058842104/11/23 22:38:45ID:qRM01ICu
それと、とりあえずまたKNOPPIXを使って板移転まわりの最終テストもしました。もう少し
微調整して後でパッチ出します。boardmanagerとkitaboardviewあたりいじってます。
しかしKNOPPIXって開発環境があらかた揃っててCVS版でも余裕でmake出来るのでほんと
テスト用に最適ですなw テスト手順はこんな感じ

(1) KNOPPIXにkitaをインストール
(2) linux板を開いて適当なスレを開く。とりあえずこのスレ(1089905503.dat)とKNOPPIXのスレ(1094401227.dat)
(3) kitaを閉じる。
(4) pc.2ch.net から pc5.2ch.net に移転したという仮定の元でテストする。1094401227.dat を
擬似的に前々スレ( http://pc.2ch.net/test/read.cgi/linux/1022744633/ )とする。

cd /var/tmp/kdecache-knoppix/kita
mv pc5.2ch.net pc.2ch.net/
mv pc.2ch.net/linux/1094401227.dat pc.2ch.net/linux/1022744633.dat
mv pc.2ch.net/linux/1094401227.dat.idx pc.2ch.net/linux/1022744633.dat.idx
board_list を書き換えて pc5.2ch.net/linux から pc.2ch.net/linux に変更。

(5) kitaを再起動して linux 板を開いて開かないことを確認。
(6) 板一覧を更新
(7) Linux板をもう一度開いてキャッシュと既読情報が受け継がれてるか確認
(8) >>1の前々スレのリンクがポップアップするかチェック
(9) もう一度再起動して pc5.2ch.net/linux/BBSHISTORY がうまく読まれるかチェック
(10) BBSHISTORYとBBS_MOVEDの中身をチェック
058942104/11/23 23:46:48ID:qRM01ICu
てわけでBoardManagerの修正パッチ。cvsからの差分でkitaで-po。
変更対象は boardmanager.{h,cpp}とkitaboardview.cpp

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1123-2.txt

・外部板の登録の仕方を若干変更

KitaBoardView::loadExtBoard()のあたり。まあ、相変わらず暫定仕様な訳ですが。
oooug.jpみたいな Flash CGI/mini thread 型の板の場合はextbrd.confで

OpenOffice.org<>http://oooug.jp/cgi-bin/bbs/users/<;>3

みたいに最後に「<>3」を付けて下さい。するとこの板はFlash CGI/mini thread 型として登録されます。
その他の2ch互換板、したらばの場合は自動判定するので「<>数字」は必要ないです。ちなみにこの3って数字は
boardmanager.hの/* type of board */以下の数値だったりして。

・板リストの更新前に本当に更新するかメッセージボックスを出すようにした

KitaBoardView::downloadBoardList()のとこ。これで移転かなと思ったら気軽にメニューの板一覧更新で
移転があったか確認できます。あとついでに新板や移転した板の名前をクリップボードにコピーできるようにしたり。

ちなみに板移転ですが、従来どおりプリファレンスのデバッグのページで手動で移転することも可能ですが、
そっちでは板リストは更新されないのでなるべく手動で移転するのは避けてください(デバッグのページは
消しちゃった方が安全かも・・・)

・あとはこまかいバグの修正とかqDebug消したりとか。

明日はDatManagerのチェックをする予定。
0590login:Penguin04/11/24 01:35:52ID:NIUn7ONT
中の人&421氏、いつも開発乙です

1行AA、適当に拾って来て足しときますた。
気に入らないのは削ってください。

#RPMPOINTの人はPC復活したんだろうか…?
0591kitaの中の人 ◆KITAulkOso 04/11/24 02:10:02ID:HeQ5hYMF
パッチを全部マージしました。
あと>>574あたりから議論していた未読表示の対応を入れました。
とりあえず黄色にしましたがいまいちなのでたぶん変更しますw

ヘッダのOn/Offも入れましたがまだ微妙にバグが残ってます。
とりあえず明日snapshot出す予定なので、やばそうなら止めてくださいw

>>590
どもです。README.2chに入れました。
# hikiって履歴を辿っていけないのかなぁ。
059242104/11/24 22:13:14ID:Q57DaliP
いまDatManagerの最終チェックしてます・・・。終わるの0時頃かなあ。とりあえず
thread.{cpp,h}
datmanager.{cpp,h}
kitathreadview.cpp
kitahtmlpart.cpp
kita.cpp
を少しだけ修正してます。

ところでcvsですが、Qt3.1だと下のエラーが出ます。

kitasubjectview.cpp: In member function `virtual bool
KitaSubjectView::eventFilter(QObject*, QEvent*)':
kitasubjectview.cpp:498: error: `adjustColumn' undeclared (first use this
function)
kitasubjectview.cpp:498: error: (Each undeclared identifier is reported only
once for each function it appears in.)
kitasubjectview.cpp: In member function `void
KitaSubjectView::loadHeaderOnOff()':
kitasubjectview.cpp:537: error: `adjustColumn' undeclared (first use this
function)
059342104/11/24 23:39:48ID:Q57DaliP
まあテストして問題無いみたいなので修正パッチ。cvsからの差分でkitaで-p0。修正したソースは
thread.{cpp,h} datmanager.{cpp,h} kitathreadview.cpp kitahtmlpart.cpp kita.cpp

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1124.txt

・>>587のDatManager::isMainThreadOpened()の仕様を若干変更して効率化

パラメータ Thread::m_isOpened で判定するようにしたので、KitaSubjectViewの
Kita::DatManager::isMainThreadOpenedFast( datURL ) の部分は
thread->isOpened() に変更しておいて下さい。

ちなみに他のクラスから開いているかどうか知りたい時は DatManager::isMainThreadOpened()
のままでOK。

・KitaHTMLPart::setup()あたりを若干整理

ついでにコメント増やしたりとか。

・登録されてる板上のスレッドのURLかどうかをチェックする DatManager::isThreadEnrolled( url )
という関数を新設

で、KitaMainWindow::slotOpenURLRequestExt()でURLをスレッドタブを開くかどうかを
その関数で判定するようにした。

・終了時にDatInfoをdeleteするようにした

~KitaMainWindow()のKita::DatManager::deleteAllDatInfo()のとこ。
まあ何もしなくてもOSが開放してくれますが一応明示的に。

・あとは細かい修正とかqDebug消したりとか。

明日はKitaWriteViewあたりをチェックする予定。
0594kitaの中の人 ◆KITAulkOso 04/11/25 01:45:31ID:D9N/zWPi
snapshot
つhttp://kita.sourceforge.jp/snapshot/kita-20041125.tar.gz

あとはUIの整理と翻訳くらいの予定
0595rpmpoint04/11/25 23:06:41ID:9LzanXSc
>>590
すんません、時間がとれてなくてまだです
もうしわけありません
059642104/11/25 23:19:35ID:IULYOANR
KitaWriteViewまわりの修正パッチ。cvsからの差分でkitaで-p0。
対象は threadindex.{h,cpp} datmanager.{cpp,h} boardmanager.{cpp,h}
kitawriteview.cpp kitawritetabwidget.cpp
多分いま中の人がいじってる最中のあたりとはバッティングしてないはず。

ttp://www.geocities.co.jp/SiliconValley-Bay/7435/patch-1125.txt

・ViewPos = 0 の時に、スレッドプロパティなどから直接 ThreadIndex::getViewPos() を呼ぶと
ViewPosの数字がidxとキャッシュでずれるバグ修正

ThreadIndex::getViewPosPrivate()のところ。ViewPos=0のときに無条件で"cache"の情報
を利用していたのを止めた。

・あとは細かいバグ修正とqDebug外したくらい。

明日は全体的な微調整とレビューをおこなう予定。というかレビュー要員募集中。
ここの動作が変だとか言ってくれないとそのままリリースされる可能性が大なので。
059742104/11/26 00:10:14ID:98xYxq86
ところでKDE3.3では直ってるかもしれませんが、kita最大かつ致命的なバグは

aaaa   aaa>>123

みたいに全角空白があって、その後にテキストノード、Aノードが続くと
Aノードの位置がずれることだと思います。それで、いま晩飯食いながら
なんとなくKDEのWebCVSでKHTMLのコードを眺めてた訳ですが、

とりあえず昔KDE3.1の時代に先頭の全角空白が詰まる問題のパッチでは
kdelibs/khtml/rendering/bidi.cppを直してたので、多分そこにまだ
問題が残ってるんだろうなと当たりを付けて眺めてみたら、
computeHorizontalPositionsForLine()というそれっぽい関数があって、
コメントとか見ながらその関数の中を眺めてたら
int x = leftOffset(m_height); という行と
int rightPos = lineBox->placeBoxesHorizontally(x); という
行があって、どうもノードの幅の計算をするときに、先頭の全角空白問題の時
みたいに全角空白を半角空白として認識して空白を詰めて計算してるため続く
Aノードの位置が左にずれてるらしい・・・という結論から言うと至極当り前な
推測に至ったのですが、良く考えるとKDEの開発MLにも参加してない自分が
バグの追求をしても仕方ないとふと我に帰ってやめましたw まあ30分位しか
調べてないので全然違う理由なのかもしれませんが・・・

と言う訳で、もしKDEの開発MLか何かに参加してる人がこれを読んでたら
開発者に直してと頼んでもらえるとありがたかったり。
0598kitaの中の人 ◆KITAulkOso 04/11/26 01:56:59ID:uJKFpkbe
snapshot
つhttp://kita.sourceforge.jp/snapshot/kita-20041126.tar.gz
全部パッチは入ってるはず。

あととりあえず翻訳終わりました。
今まで英語のままのところが多かったのは>>492のKitaThreadPart廃止による副作用でした。
あとプリファレンスから「デバッグ」を消しています。>>589
Qt 3.1の対応(>>592)も入れてますが面倒なので30pxに強制的に設定してますw
設定する機会も少ないと思うので影響は少ないと思いますが…。

直したいところは終わったので何事もなければリリースの準備にします。
0599login:Penguin04/11/26 18:56:12ID:6s/ZOlZl
>>598
乙彼です
板一覧の選択色がKDEのカラースキームの設定に関わらず群青色固定なのですが仕様でしょうか
あとkitaイメージビューワで表示したあとKonquerorに画像を渡すと文字で表示されてしまいます
(リロードすれば大丈夫)
060042104/11/26 23:15:51ID:akDpOYEt
なんかpc5に繋がらないので2重投稿になったらスマソ

>>599
最初の方はバグです。listviewitem.cppのpaintCellを次に修正してください。

void ListViewItem::paintCell( QPainter *p, const QColorGroup &cg,
int column, int width, int align )
{
QColorGroup color = cg;
color.setColor( QColorGroup::Text, m_textColor );
color.setColor( QColorGroup::Base, m_baseColor );
KListViewItem::paintCell( p, color, column, width, align );
}

2つ目は実は結構難しい問題で、そもそも何故テキストが表示されるかと言うとkitaimgtabwidget.cppの
480行目あたりの openURLRequestExt( view->url(), KParts::URLArgs(), "text/html" );
の部分でMIMEタイプを"text/html"と指定して画像ファイルをKonquerorに送ってるのを、Konquerorが
ファイルのヘッダも調べずにテキスト形式ファイルと決めつけてファイルを開いているからで、じゃあ
"image/png"みたいにMIMEタイプを指定して送ればよいじゃんと思うかもしれませんが、そうすると今度は
KonquerorじゃなくてKViewやkuickshowで画像を開いてしまうという問題が。

結局、取れる対策は2つ

1、コントロールセンターのファイルの関係付け経由でなくて自前で外部ブラウザを設定する。
2、MozillaかFireFoxを使う。
■ このスレッドは過去ログ倉庫に格納されています