• R/O
  • HTTP
  • SSH
  • HTTPS

gikonavi: Commit


Commit MetaInfo

Revisión0dedd6ceccd88a251afb9517bbd2a993aef3eef6 (tree)
Tiempo2008-03-03 23:59:26
Autorcvs2git <cvs2git>
Commitercvs2git

Log Message

This commit was manufactured by cvs2svn to create tag 'v1_58_0_745'.

Cambiar Resumen

Diferencia incremental

--- a/BrowserRecord.pas
+++ b/BrowserRecord.pas
@@ -183,37 +183,17 @@ const
183183 var
184184 CmdTarget : IOleCommandTarget;
185185 vaIn, vaOut: OleVariant;
186- PtrGUID: PGUID;
187186 begin
188- if (Self.Browser <> nil) and (Self.Browser.Document <> nil) then begin
189- //ブラウザがデータの読み込み中の時は読み込みを待つ
190- while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and
191- (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
192- Sleep(1);
193- Application.ProcessMessages;
187+ if Assigned(Self.Browser) then begin
188+ vaIn := 0;
189+ vaOut := 0;
190+ try
191+ CmdTarget := Self.Browser.ControlInterface.Document as IOleCommandTarget;
192+ if Assigned(CmdTarget) then begin
193+ CmdTarget.Exec(@CGID_WebBrowser, HTMLID_FIND, 0, vaIn, vaOut);
194+ end;
195+ except
194196 end;
195- vaIn := 0;
196- vaOut := 0;
197- New(PtrGUID);
198- PtrGUID^ := CGID_WebBrowser;
199- try
200- try
201- if Self.Browser.Document
202- .QueryInterface(IOleCommandTarget, CmdTarget)
203- = S_OK then begin
204- if CmdTarget <> nil then begin
205- try
206- CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);
207- finally
208- CmdTarget._Release;
209- end;
210- end;
211- end;
212- except
213- end;
214- finally
215- Dispose(PtrGUID);
216- end;
217197 end;
218198 end;
219199
--- /dev/null
+++ b/ExtPreviewDatamodule.dfm
@@ -0,0 +1,16 @@
1+object ExtPreviewDM: TExtPreviewDM
2+ OldCreateOrder = False
3+ OnCreate = DataModuleCreate
4+ OnDestroy = DataModuleDestroy
5+ Left = 200
6+ Top = 120
7+ Height = 150
8+ Width = 215
9+ object ExecuteTimer: TTimer
10+ Enabled = False
11+ Interval = 200
12+ OnTimer = ExecuteTimerTimer
13+ Left = 120
14+ Top = 40
15+ end
16+end
--- /dev/null
+++ b/ExtPreviewDatamodule.pas
@@ -0,0 +1,181 @@
1+unit ExtPreviewDatamodule;
2+
3+interface
4+
5+uses
6+ SysUtils, Classes, bmRegExp, ExtCtrls;
7+
8+type
9+ TCommand = class(TObject)
10+ private
11+ FCommand: String;
12+ FConfirm: Boolean;
13+ FContinue: Boolean;
14+ FToURL: String;
15+ public
16+ constructor Create(const comm: String);
17+ property Command: String read FCommand;
18+ property Confirm: Boolean read FConfirm write FConfirm;
19+ property Continue: Boolean read FContinue write FContinue;
20+ property ToURL: String read FToURL write FToURL;
21+ end;
22+
23+ TExtPreviewDM = class(TDataModule)
24+ ExecuteTimer: TTimer;
25+ procedure DataModuleCreate(Sender: TObject);
26+ procedure DataModuleDestroy(Sender: TObject);
27+ procedure ExecuteTimerTimer(Sender: TObject);
28+ private
29+ { Private 宣言 }
30+ FAWKStr: TAWKStr;
31+ FRegs: TStringList;
32+ FExecCommand: TCommand;
33+ function ReadCommand(const Line: String): TCommand;
34+ public
35+ { Public 宣言 }
36+ function PreviewURL(const URL: String): Boolean;
37+ end;
38+
39+var
40+ ExtPreviewDM: TExtPreviewDM;
41+
42+implementation
43+
44+uses
45+ GikoSystem, IniFiles, GikoUtil, Windows;
46+
47+constructor TCommand.Create(const comm: String);
48+begin
49+ FCommand := comm;
50+ FConfirm := False;
51+ FContinue := False;
52+ FToURL := '';
53+end;
54+{$R *.dfm}
55+{
56+\brief コンストラクタ
57+}
58+procedure TExtPreviewDM.DataModuleCreate(Sender: TObject);
59+var
60+ values: TStringList;
61+ i, pos: Integer;
62+begin
63+ FAWKStr := TAWKStr.Create(Self);
64+ FRegs := TStringList.Create;
65+ if (FileExists(GikoSys.GetExtpreviewFileName)) then begin
66+ values := TStringList.Create;
67+ try
68+ values.LoadFromFile(GikoSys.GetExtpreviewFileName);
69+ for i := 0 to values.Count - 1 do begin
70+ if ( AnsiPos('#',values[i]) = 1 ) then begin
71+ // 先頭#で始まるはコメント行
72+ end else begin
73+ pos := AnsiPos(#9,values[i]);
74+ if (pos > 0) then begin
75+ FRegs.AddObject(
76+ Copy(values[i], 1, pos - 1),
77+ ReadCommand(
78+ Copy(values[i], pos + 1, Length(values[i])))
79+ );
80+ end;
81+ end;
82+ end;
83+ finally
84+ values.Free;
85+ end;
86+ end;
87+end;
88+{
89+\brief デストラクタ
90+}
91+procedure TExtPreviewDM.DataModuleDestroy(Sender: TObject);
92+begin
93+ FRegs.Clear;
94+ FRegs.Free;
95+ FAWKStr.Free;
96+end;
97+{
98+\brief コマンド行解釈
99+}
100+function TExtPreviewDM.ReadCommand(const Line: String): TCommand;
101+var
102+ pos: Integer;
103+ sub: String;
104+begin
105+
106+ // FCommand , FConfirm , FContinue の順
107+ pos := AnsiPos(#9, Line);
108+ if (pos > 0) then begin
109+ Result := TCommand.Create( Copy(Line, 1, pos - 1) );
110+ sub := Copy(Line, pos + 1, Length(Line));
111+ end else begin
112+ Result := TCommand.Create( '' );
113+ sub := '';
114+ end;
115+ pos := AnsiPos(#9, sub);
116+ if (pos > 0) then begin
117+ if (AnsiLowerCase(Copy(sub, 1, pos - 1)) = 'true' ) then begin
118+ Result.Confirm := True;
119+ end;
120+ sub := Copy(Line, pos + 1, Length(Line));
121+ end;
122+ sub := Trim(sub);
123+ if (AnsiLowerCase(sub) = 'true' ) then begin
124+ Result.Continue := True;
125+ end;
126+end;
127+{
128+\brief 登録されたURLを処理するコマンドを返す
129+}
130+function TExtPreviewDM.PreviewURL(const URL: String): Boolean;
131+var
132+ i: Integer;
133+ RStart: Integer;
134+ RLength: Integer;
135+ EsqURL: String;
136+begin
137+ Result := False;
138+ ExecuteTimer.Interval := 0;
139+ ExecuteTimer.Enabled := False;
140+ FExecCommand := nil;
141+ if (Length(URL) > 0) and (FRegs.Count > 0) then begin
142+ EsqURL := FAWKStr.ProcessEscSeq(URL);
143+ for i := 0 to FRegs.Count - 1 do begin
144+ FAWKStr.RegExp := FRegs[i];
145+ if ( FAWKStr.Match(EsqURL, RStart, RLength ) <> 0 ) then begin
146+ FExecCommand := TCommand(FRegs.Objects[i]);
147+ FExecCommand.ToURL := Copy(EsqURL, RStart, RLength);
148+ ExecuteTimer.Interval := GikoSys.Setting.PreviewWait;
149+ ExecuteTimer.Enabled := True;
150+ Result := not FExecCommand.FContinue;
151+ break;
152+ end;
153+ end;
154+ end;
155+end;
156+
157+procedure TExtPreviewDM.ExecuteTimerTimer(Sender: TObject);
158+var
159+ rc: Integer;
160+begin
161+ // タイマー停止
162+ ExecuteTimer.Interval := 0;
163+ ExecuteTimer.Enabled := False;
164+
165+ if (FExecCommand <> nil) then begin
166+ rc := ID_YES;
167+ if (FExecCommand.Confirm) then begin
168+ // Msg
169+ rc := GikoUtil.MsgBox(0, FExecCommand.Command + 'に'#13#10 +
170+ FExecCommand.ToURL + ' を渡しますか?',
171+ '確認', MB_ICONQUESTION or MB_YESNO);
172+ end;
173+
174+ if (rc = ID_YES) then begin
175+ GikoSys.CreateProcess(
176+ FExecCommand.Command, '"' + FExecCommand.ToURL + '"');
177+ end;
178+ end;
179+end;
180+
181+end.
--- a/Favorite.pas
+++ b/Favorite.pas
@@ -48,10 +48,9 @@ type
4848 private
4949 { Private 宣言 }
5050 FAbEnd: Boolean;
51- FStack: TStack;
5251 FTreeView: TTreeView;
5352 FModified: boolean;
54- procedure ReadNode(Node: IXMLNode);
53+ procedure ReadNode(Node: IXMLNode; Stack: TStack; TreeView: TTreeView);
5554 procedure AddSaveString(Node: TTreeNode; SaveList: TStringList);
5655 public
5756 { Public 宣言 }
@@ -288,6 +287,7 @@ var
288287 i: Integer;
289288 FavFolder: TFavoriteFolder;
290289 LinkExists: Boolean;
290+ Stack: TStack;
291291 begin
292292 FABend := False;
293293
@@ -306,13 +306,13 @@ begin
306306 LoadXMLDocument(FileName, XMLDoc);
307307 XMLNode := XMLDoc.DocumentElement;
308308
309- FStack := TStack.Create;
309+ Stack := TStack.Create;
310310 try
311- FStack.Push(Node);
311+ Stack.Push(Node);
312312 LinkExists := False;
313313 if XMLNode.NodeName = 'favorite' then begin
314314 for i := XMLNode.ChildNodes.Count - 1 downto 0 do begin
315- ReadNode(XMLNode.ChildNodes[i]);
315+ ReadNode(XMLNode.ChildNodes[i], Stack, FTreeView);
316316 if (XMLNode.ChildNodes[i].NodeName = 'folder') and
317317 (XMLNode.ChildNodes[i].Attributes['title'] = FAVORITE_LINK_NAME) then begin
318318 LinkExists := True;
@@ -327,7 +327,7 @@ begin
327327 end;
328328
329329 finally
330- FStack.Free;
330+ Stack.Free;
331331 XMLDoc.Free;
332332 end;
333333 except
@@ -337,29 +337,9 @@ begin
337337 end;
338338 end;
339339
340-{
341- FavFolder := TFavoriteFolder.Create;
342- Node := FTreeView.Items.AddChildObjectFirst(nil, FAVORITE_ROOT_NAME, FavFolder);
343- Node.ImageIndex := 12;
344- Node.SelectedIndex := 13;
345-
346- FileName := GikoSys.GetConfigDir + FAVORITE_FILE_NAME;
347- if not FileExists(FileName) then
348- Exit;
349-
350- FavSAXHandler.OnStartDocument := SAXStartDocument;
351- FavSAXHandler.OnEndDocument := SAXEndDocument;
352- FavSAXHandler.OnStartElement := SAXStartElement;
353- FavSAXHandler.OnStartElement := SAXStartElement;
354- FavSAXHandler.OnEndElement := SAXEndElement;
355- FavSAXHandler.OnCharacters := SAXCharacters;
356-
357- FavSAXReader.Vendor := 'Keith Wood';
358- FavSAXReader.URL := FileName;
359- FavSAXReader.Parse;}
360340 end;
361341
362-procedure TFavoriteDM.ReadNode(Node: IXMLNode);
342+procedure TFavoriteDM.ReadNode(Node: IXMLNode; Stack: TStack; TreeView: TTreeView);
363343 var
364344 i: Integer;
365345
@@ -372,24 +352,25 @@ var
372352 threadItem : TThreadItem;
373353 begin
374354 if Node.NodeName = 'folder' then begin
375- ParentNode := FStack.Peek;
355+ CurrentNode := nil;
356+ ParentNode := Stack.Peek;
376357 if TObject(ParentNode.Data) is TFavoriteFolder then begin
377358 FavFolder := TFavoriteFolder.Create;
378- CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavFolder);
359+ CurrentNode := TreeView.Items.AddChildObjectFirst(ParentNode, Node.Attributes['title'], FavFolder);
379360 CurrentNode.ImageIndex := 14;
380361 CurrentNode.SelectedIndex := 14;
381- FStack.Push(CurrentNode);
362+ Stack.Push(CurrentNode);
382363 end;
383364 for i := Node.ChildNodes.Count - 1 downto 0 do begin
384- ReadNode(Node.ChildNodes[i]);
365+ ReadNode(Node.ChildNodes[i], Stack, TreeView);
385366 end;
386- if TObject(ParentNode.Data) is TFavoriteFolder then
367+ if CurrentNode <> nil then
387368 CurrentNode.Expanded := Node.Attributes[ 'expanded' ] = 'true';
388- if FStack.Count <> 0 then
389- FStack.Pop;
369+ if Stack.Count <> 0 then
370+ Stack.Pop;
390371 end else if Node.NodeName = 'favitem' then begin
391372 try
392- ParentNode := FStack.Peek;
373+ ParentNode := Stack.Peek;
393374 if TObject(ParentNode.Data) is TFavoriteFolder then begin
394375 if Node.Attributes['favtype'] = 'board' then begin
395376 FavBoard := nil;
@@ -403,7 +384,7 @@ begin
403384 FavBoard := TFavoriteBoardItem.Create(
404385 Node.Attributes[ 'url' ], MojuUtils.UnSanitize(Node.Attributes[ 'title' ]), nil );
405386 end;
406- CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavBoard);
387+ CurrentNode := TreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavBoard);
407388 CurrentNode.ImageIndex := 15;
408389 CurrentNode.SelectedIndex := 15;
409390 end else if Node.Attributes['favtype'] = 'thread' then begin
@@ -431,7 +412,7 @@ begin
431412 FavThread := TFavoriteThreadItem.Create(
432413 Node.Attributes[ 'url' ], UnSanitize(Node.Attributes[ 'title' ]), nil );
433414 end;
434- CurrentNode := FTreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavThread);
415+ CurrentNode := TreeView.Items.AddChildObjectFirst(ParentNode, UnSanitize(Node.Attributes['title']), FavThread);
435416 CurrentNode.ImageIndex := 16;
436417 CurrentNode.SelectedIndex := 16;
437418 end;
--- a/Giko.pas
+++ b/Giko.pas
@@ -19,7 +19,7 @@ uses
1919 {HintWindow,} GikoCoolBar, GikoListView, Search, ExternalBoardManager,
2020 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
2121 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22- ShellAPI,Preview, HistoryList, ResPopupBrowser;
22+ ShellAPI,Preview, HistoryList, ResPopupBrowser, ExtPreviewDatamodule;
2323
2424 const
2525 NGWORDNAME_PANEL = 3;
@@ -1992,7 +1992,10 @@ begin
19921992
19931993 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
19941994 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1995-
1995+ // 他のアプリで処理するURLか確認
1996+ if (ExtPreviewDM.PreviewURL(Text2)) then begin
1997+ Exit;
1998+ end;
19961999 s := '';
19972000 Ext := AnsiLowerCase(ExtractFileExt(Text2));
19982001 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
@@ -2533,9 +2536,11 @@ begin
25332536
25342537 //巡回ありの場合&1000超は巡回削除
25352538 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2536- Item.ThreadItem.Round := False;
2537- //Item.ThreadItem.RoundName := '';
2538- AddMessageList('★1000発言を超えたので巡回を削除しました - [' + Item.ThreadItem.Title + ']', nil, gmiOK);
2539+ // 2ch以外は、1000が最高か不明なので、2ch限定にする
2540+ if (Item.ThreadItem.ParentBoard.Is2ch) then begin
2541+ Item.ThreadItem.Round := False;
2542+ AddMessageList('★1000発言を超えたので巡回を削除しました - [' + Item.ThreadItem.Title + ']', nil, gmiOK);
2543+ end;
25392544 end;
25402545 TreeView.Refresh;
25412546 //ListViewでこのスレが含まれる板を表示しているときの更新処理
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -256,6 +256,7 @@ type
256256 procedure AddOutofIndexDat(Board: TBoard; DatList: TStringList; AllCreate: boolean = True);
257257 //! ファイル名からのスレッド作成日の取得
258258 function GetCreateDateFromName(FileName: String): TDateTime;
259+ function GetExtpreviewFileName: String;
259260 end;
260261
261262 var
@@ -3447,6 +3448,12 @@ function TGikoSys.GetReplaceFileName: String;
34473448 begin
34483449 Result := Setting.GetReplaceFileName;
34493450 end;
3451+//! プレビュー拡張の設定ファイル取得
3452+function TGikoSys.GetExtpreviewFileName: String;
3453+begin
3454+ Result := Setting.GetExtprevieFileName;
3455+end;
3456+
34503457 //! ファイル名からのスレッド作成日の取得
34513458 function TGikoSys.GetCreateDateFromName(FileName: String): TDateTime;
34523459 var
--- a/Setting.pas
+++ b/Setting.pas
@@ -538,9 +538,10 @@ type
538538 procedure WriteLogFolder(AVal : String);
539539 function GetInputAssistFileName : String;
540540 function GetReplaceFileName: String;
541+ function GetExtprevieFileName: String;
541542 {
542543 \brief リンク履歴の保持サイズのsetter
543- \param AVal 設定するサイズ( >0)
544+ \param AVal 設定するサイズ( >0)
544545 }
545546 procedure SetMoveHistorySize(AVal : Integer);
546547 //受信バッファサイズ
@@ -860,6 +861,7 @@ const
860861 INPUTASSIST_FILE_NAME = 'InputAssist.ini';
861862 FIXED_COOKIE = 'hana=mogera';
862863 REPLACE_FILE_NAME = 'replace.ini';
864+ EXT_PREVIEW_FILE_NAME = 'extpreview.ini';
863865
864866 implementation
865867
@@ -2167,6 +2169,10 @@ function TSetting.GetReplaceFileName: String;
21672169 begin
21682170 Result := GetConfigDir + REPLACE_FILE_NAME;
21692171 end;
2172+function TSetting.GetExtprevieFileName: String;
2173+begin
2174+ Result := GetConfigDir + EXT_PREVIEW_FILE_NAME;
2175+end;
21702176 procedure TSetting.SetMoveHistorySize(AVal : Integer);
21712177 begin
21722178 if (AVal > 0) then begin
--- a/gikoNavi.dpr
+++ b/gikoNavi.dpr
@@ -79,7 +79,8 @@ uses
7979 ReplaceDataModule in 'ReplaceDataModule.pas' {ReplaceDM: TDataModule},
8080 ResPopupBrowser in 'ResPopupBrowser.pas',
8181 SkinFiles in 'SkinFiles.pas',
82- NewBoardURL in 'NewBoardURL.pas' {NewBoardURLForm};
82+ NewBoardURL in 'NewBoardURL.pas' {NewBoardURLForm},
83+ ExtPreviewDatamodule in 'ExtPreviewDatamodule.pas' {ExtPreviewDM: TDataModule};
8384
8485 {$R *.RES}
8586 {$R gikoResource.res}
@@ -137,6 +138,7 @@ begin
137138 Application.CreateForm(TInputAssistDM, InputAssistDM);
138139 Application.CreateForm(TReplaceDM, ReplaceDM);
139140 Application.CreateForm(TGikoForm, GikoForm);
141+ Application.CreateForm(TExtPreviewDM, ExtPreviewDM);
140142 Application.Run;
141143 ReleaseMutex(hMutex);
142144 end;
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/defaultFiles.ini
+++ b/readme/defaultFiles.ini
@@ -21,3 +21,7 @@ TO=config\Board\
2121 [replace]
2222 FROM=config\default\replace.default
2323 TO=config\replace.ini
24+
25+[extpreview]
26+FROM=config\default\extpreview.default
27+TO=config\extpreview.ini
--- a/readme/gikoSetup.iss
+++ b/readme/gikoSetup.iss
@@ -13,8 +13,8 @@ SourceDir=G:\Release
1313 OutputDir=G:\InnoSetup\Output
1414 SetupIconFile="G:\gikoNaviSFX_102\MainIcon.ico"
1515 ; ギコナビのバージョンにあわせてください
16-VersionInfoVersion=1.56.1.716
17-OutputBaseFilename=gikoNavi_b56_setup
16+VersionInfoVersion=1.57.1.744
17+OutputBaseFilename=gikoNavi_b57_setup
1818
1919
2020 [Tasks]
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -108,7 +108,7 @@ LICENSE
108108 ------------------------------
109109 履歴
110110 ------------------------------
111-2008/XX/XX
111+2008/03/08
112112 Version バタ57
113113 詳細設定に、スレッド一覧読み込み時にローカルのdatファイルをチェックしないオプションを追加
114114 レスポップアップのウィンドウをダブルクリックで消せるように修正
--- /dev/null
+++ b/res/default/extpreview.default
@@ -0,0 +1,6 @@
1+# 行頭の#はコメント
2+# 対象URLの正規表現(AWK)[TAB]実行プログラム(内部で"に囲まれる)[TAB]確認ダイアログを出す(true/other)[TAB]ギコナビでも処理する(true/other)
3+# youtubeはFirefoxに送る(確認不要)
4+#http://jp.youtube.com/watch\?.* C:\Program Files\Mozilla Firefox\firefox.exe false false
5+# ニコニコ動画も、Firefoxに送る(毎回確認する)
6+#http://www.nicovideo.jp/watch/sm[0-9]+$ C:\Program Files\Mozilla Firefox\firefox.exe true false
Show on old repository browser