Dialogs, StdCtrls, ComCtrls, ExtCtrls, ToolWin, Menus, OleCtrls, Registry,
{$IF Defined(DELPRO) }
SHDocVw,
+ MSHTML,
{$ELSE}
SHDocVw_TLB,
+ MSHTML_TLB,
{$IFEND}
ActiveX, {HTTPApp,} YofUtils, Trip, IniFiles, StrUtils,
GikoSystem, GikoUtil, ImgList, Clipbrd, BoardGroup,
CloseMenu: TMenuItem;
N01: TMenuItem;
StatusBar: TStatusBar;
- EditorPage: TPageControl;
+ EditorPage: TPageControl;
EditorTab: TTabSheet;
PreviewTab: TTabSheet;
Browser: TWebBrowser;
SelectAllAction: TAction;
N2: TMenuItem;
SelectAll1: TMenuItem;
- Timer1: TTimer;
- QuotePasteAction: TAction;
- QuotePasteMenuItem: TMenuItem;
- C1: TMenuItem;
- SpaceToNBSPAction: TAction;
- AmpToCharRefAction: TAction;
- SpaceTabnbsp1: TMenuItem;
- amp1: TMenuItem;
+ Timer1: TTimer;
+ QuotePasteAction: TAction;
+ QuotePasteMenuItem: TMenuItem;
+ C1: TMenuItem;
+ SpaceToNBSPAction: TAction;
+ AmpToCharRefAction: TAction;
+ SpaceTabnbsp1: TMenuItem;
+ amp1: TMenuItem;
+ BoardInformationTab: TTabSheet;
+ BoardtopTab: TTabSheet;
+ TitlePictureBrowser: TWebBrowser;
+ BoardTop: TMenuItem;
+ BoardInformationMemo: TMemo;
+ GetSETTINGTXTAction: TAction;
+ N3: TMenuItem;
+ SETTINGTXT2: TMenuItem;
+ GetTitlePictureAction: TAction;
+ OP1: TMenuItem;
+ GetHeadTXTAction: TAction;
+ HeadTXT1: TMenuItem;
+
procedure EditorPageChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BrowserStatusTextChange(Sender: TObject;
procedure IdLogDebugSend(ASender: TIdConnectionIntercept;
AStream: TStream);
procedure SelectAllActionExecute(Sender: TObject);
- procedure StatusBarResize(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- procedure FormActivate(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure StatusBarResize(Sender: TObject);
+ procedure Timer1Timer(Sender: TObject);
+ procedure FormActivate(Sender: TObject);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure QuotePasteActionExecute(Sender: TObject);
- procedure SpaceToNBSPActionExecute(Sender: TObject);
- procedure AmpToCharRefActionExecute(Sender: TObject);
+ procedure SpaceToNBSPActionExecute(Sender: TObject);
+ procedure AmpToCharRefActionExecute(Sender: TObject);
+ procedure BoardTopClick(Sender: TObject);
+ procedure GetSETTINGTXTActionExecute(Sender: TObject);
+ procedure GetTitlePictureActionUpdate(Sender: TObject);
+ procedure GetTitlePictureActionExecute(Sender: TObject);
+ procedure GetHeadTXTActionExecute(Sender: TObject);
private
FThreadItem: TThreadItem;
FBoard: TBoard;
FStatusCode: Integer;
FDebugStrReceive: string;
FDebugStrSend: string;
- FSambaTime: TDateTime;
- FHost: string;
+ FSambaTime: TDateTime;
+ FHost: string;
FNow: TDateTime;
procedure Preview;
function RepHtml(s: string): string;
// procedure GetSendData(Source: TStringStream);
procedure GetSendData(Source: TStringStream);
procedure SaveSendFile;
- procedure SetContent(Content: string);
+ procedure SetContent(Content: string; ABrowser: TWebBrowser);
function GetSPID(CookieLine: string): string;
function GetPON(CookieLine: string): string;
function GetResultType(ResponseText: string): TGikoResultType;
- procedure ReadSambaTime(const AHost: string);
- procedure WriteSambaTime(const AHost: string; ATime: TDateTime);
- function ReadSettingTime(const AHost: string): Integer;
- function CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean;
+ procedure ReadSambaTime(const AHost: string);
+ procedure WriteSambaTime(const AHost: string; ATime: TDateTime);
+ function ReadSettingTime(const AHost: string): Integer;
+ function CheckSambaTime(const AHost: string; ATime: TDateTime): Boolean;
procedure SetSamba24(AURL: string);
/// \88ø\97p\95\84\82Ì\8eæ\93¾
function GetOEIndentChar : string;
/// \96{\95¶\82Ì\8eæ\93¾
function GetBody : string;
+ //IdHttp\82Ì\8f\89\8aú\89»
+ procedure InitIdHTTP(http: TIdHTTP);
+ procedure ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
+ function GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
+ procedure ShowTitlePicture();
+ function GetFusianaName(body: TStringList; ABoard: TBoard): String;
protected
procedure CreateParams(var Params: TCreateParams); override;
public
+ FBBSID: String;
procedure SetFont;
procedure SetThreadItem(Item: TThreadItem);
procedure SetBoard(Item: TBoard);
+ property BBSID: string read FBBSID write FBBSID;
+
end;
implementation
RES2CH_COOKIE = '<!-- 2ch_X:cookie -->';
+ BBS2CH_NAME: string = '\82Q\82¿\82á\82ñ\82Ë\82é';
+ BBS2CH_LOG_FOLDER: string = '2ch';
+ EXTERNAL_LOG_FOLDER: string = 'exboard';
+
+ FOLDER_INI_FILENAME: string = 'Folder.ini';
+ FOLDER_INDEX_FILENAME: string = 'Folder.idx';
+ SUBJECT_FILENAME: string = 'subject.txt';
+ PATH_DELIM: string = '\';
+
+
type
TSelection = record
StartPos, EndPos: Integer;
var
wp: TWindowPlacement;
hUser32 : HINST;
+ ini: TIniFile;
begin
FWork := False;
Browser.Navigate('about:blank');
-
+ TitlePictureBrowser.Navigate('about:blank');
FBoard := nil;
FThreadItem := nil;
SpaceToNBSPAction.Checked := GikoSys.Setting.SpaceToNBSP;
AmpToCharRefAction.Checked := GikoSys.Setting.AmpToCharRef;
+
+ ini := TIniFile.Create(GikoSys.Setting.GetFileName);
+
+ try
+ BoardtopTab.TabVisible := ini.Readbool('EditorForm', 'BoardTopTab', False);
+ BoardTop.Checked := BoardtopTab.TabVisible;
+ finally
+ ini.Free;
+ end;
+
end;
procedure TEditorForm.SetBoard(Item: TBoard);
MailComboBox.Text := FBoard.KotehanMail;
SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
TitlePanel.Visible := True;
- SetSamba24('');
+ SetSamba24(FBoard.URL);
+ ShowBoardInformation(FBoard, BoardInformationMemo);
+ ShowTitlePicture();
end;
procedure TEditorForm.SetThreadItem(Item: TThreadItem);
MailComboBox.Text := FThreadItem.ParentBoard.KotehanMail;
SageCheckBox.Checked := AnsiPos('sage', MailComboBox.Text) <> 0;
TitlePanel.Visible := False;
- SetSamba24(FThreadItem.ParentBoard.URL);
+ SetSamba24(FThreadItem.ParentBoard.URL);
+ ShowBoardInformation(FThreadItem.ParentBoard, BoardInformationMemo);
+ ShowTitlePicture();
end;
function TEditorForm.GetBody : string;
end;
body := GetBody;
-
Namae := RepHtml(NameComboBox.Text);
Mail := RepHtml(MailComboBox.Text);
Body := RepHtml(body);
else
s := s + '<DT>' + No + ' \81F <A href="mailto:' + Mail + '"><B>' + Namae + '</B></A> [' + Mail + ']\81F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10;
s := s + '</BODY></HTML>';
- SetContent(s);
+ SetContent(s, Browser);
end;
function TEditorForm.RepHtml(s: string): string;
Result := TitleEdit.Handle
else
Result := 0;
+ end else if Editorpage.ActivePage = BoardInformationTab then begin
+ if ActiveControl = BoardInformationMemo then
+ Result := BoardInformationMemo.Handle
+ else
+ Result := 0;
end else
Result := 0;
end;
-procedure TEditorForm.SetContent(Content: string);
+procedure TEditorForm.SetContent(Content: string; ABrowser: TWebBrowser);
var
- doc : Variant;
+ doc: Variant;
begin
- if Browser.Document <> nil then begin
- doc := Browser.Document;
+ if ABrowser.Document <> nil then begin
+ doc := Idispatch( olevariant(ABrowser.ControlInterface).Document) as IHTMLDocument2;
doc.Clear;
doc.open;
doc.charset := 'Shift_JIS';
doc.Close;
end;
end;
+procedure TEditorForm.InitIdHTTP(http: TIdHTTP);
+begin
+ http.Request.Clear;
+ http.ProxyParams.BasicAuthentication := False;
+ if GikoSys.Setting.WriteProxy then begin
+ http.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
+ http.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
+ http.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
+ http.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
+ if GikoSys.Setting.ReadProxyUserID <> '' then
+ http.ProxyParams.BasicAuthentication := True;
+ end else begin
+ http.ProxyParams.ProxyServer := '';
+ http.ProxyParams.ProxyPort := 80;
+ http.ProxyParams.ProxyUsername := '';
+ http.ProxyParams.ProxyPassword := '';
+ end;
+ Indy.Request.UserAgent := GikoSys.GetUserAgent;
+ Indy.Request.AcceptEncoding := '';
+end;
procedure TEditorForm.Send(SPID: string; PON: string; FirstWriting: Boolean);
var
sysMenu : HMENU;
//fusianasan\83g\83\89\83b\83v by\92è\8aú\95Ö
Namae: String;
- SettingTxt: String;
- RefeURL: string;
+// SettingTxt: String;
+// RefeURL: string;
+// RuleURL: String;
+// RuleTxt: String;
+// Name: String;
+// SettingBody: TStringList;
+// tmpBoard: TBoard;
begin
FAbort := False;
State := gdsError;
else
Board := FThreadItem.ParentBoard;
- Indy.Request.Clear;
- Indy.ProxyParams.BasicAuthentication := False;
- if GikoSys.Setting.WriteProxy then begin
- Indy.ProxyParams.ProxyServer := GikoSys.Setting.WriteProxyAddress;
- Indy.ProxyParams.ProxyPort := GikoSys.Setting.WriteProxyPort;
- Indy.ProxyParams.ProxyUsername := GikoSys.Setting.WriteProxyUserID;
- Indy.ProxyParams.ProxyPassword := GikoSys.Setting.WriteProxyPassword;
- if GikoSys.Setting.ReadProxyUserID <> '' then
- Indy.ProxyParams.BasicAuthentication := True;
- end else begin
- Indy.ProxyParams.ProxyServer := '';
- Indy.ProxyParams.ProxyPort := 80;
- Indy.ProxyParams.ProxyUsername := '';
- Indy.ProxyParams.ProxyPassword := '';
- end;
+
+ InitIdHTTP(Indy);
if FThreadItem = nil then begin
URL := FBoard.GetSendURL;
RefURL := GikoSys.UrlToServer(FBoard.URL) + 'test/bbs.cgi';
URL := FThreadItem.GetSendURL;
RefURL := FThreadItem.URL;
end;
- Indy.Request.UserAgent := GikoSys.GetUserAgent;
+// Indy.Request.UserAgent := GikoSys.GetUserAgent;
Indy.Request.Referer := RefURL;
- Indy.Request.AcceptEncoding := '';
+// Indy.Request.AcceptEncoding := '';
Cookie := '';
if SPID <> '' then
ResultType := GetResultType(ResponseText);
- //MsgResult\8f\89\8aú\89»
- MsgResult := IDNO;
+ //MsgResult\8f\89\8aú\89»
+ MsgResult := IDNO;
//\83t\83V\83A\83i\83g\83\89\83b\83v\8cx\8d\90(LocalMode) by \92è\8aú\95Ö
- if Namae = '\8eR\8dè\8fÂ' then begin
- MsgResult := MsgBox(
- Handle,
- '\83\8a\83\82\81[\83g\83z\83X\83g\82ð\95\\8e¦\82·\82é\8b@\94\\82ª\8eg\82í\82ê\82Ä\82¢\82Ü\82·' + #13#10 +
- '\82à\82µ\82à\8aÔ\88á\82Á\82Ä\82±\82Ì\95û\96@\82Å\83z\83X\83g\82ª\95\\8e¦\82³\82ê\82½\82Æ\82µ\82Ä\82à\81A\8e©\8cÈ\90Ó\94C\82È\82Ì\82Å\8dí\8f\9c\88Ë\97\8a\82É\82Í\89\9e\82¶\82Ü\82¹\82ñ\81B' + #13#10#13#10 +
- '\90Ó\94C\82ð\95\89\82¤\82±\82Æ\82ð\8f³\91ø\82µ\82Ä\8f\91\82«\8d\9e\82Ý\82Ü\82·\82©\81H',
- '\8fî\95ñ',
- MB_YESNO or MB_ICONQUESTION);
- if MsgResult = IDYES then begin
- end
- end else
- if MsgResult = IDNO then begin
- Exit;
- Close;
- end else
- if Namae = 'fusianasan' then begin
+ if ((Namae = '\8eR\8dè\8fÂ') or (Namae = 'fusianasan')) and (FirstWriting) then begin
MsgResult := MsgBox(
Handle,
'\83\8a\83\82\81[\83g\83z\83X\83g\82ð\95\\8e¦\82·\82é\8b@\94\\82ª\8eg\82í\82ê\82Ä\82¢\82Ü\82·' + #13#10 +
'\90Ó\94C\82ð\95\89\82¤\82±\82Æ\82ð\8f³\91ø\82µ\82Ä\8f\91\82«\8d\9e\82Ý\82Ü\82·\82©\81H',
'\8fî\95ñ',
MB_YESNO or MB_ICONQUESTION);
- if MsgResult = IDYES then begin
- end
- end else
- if MsgResult = IDNO then begin
- Exit;
- Close;
+ if MsgResult = IDNO then begin
+ Board.SPID := '';
+ Board.PON := '';
+ FWork := false;
+ EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
+ DrawMenuBar(Handle);
+ Exit;
+ end;
end;
- //\83t\83V\83A\83i\83g\83\89\83b\83v\8cx\8d\90(SETTING.TXT Mode) by \92è\8aú\95Ö
- RefURL := GikoSys.UrlToServer(FBoard.URL)
- + GikoSys.UrlToID(FBoard.URL)
- + '/';
- //RefURL\82ð\8c³\82ÉSETTING.TXT\83A\83h\83\8c\83X\8ew\92è
- RefeURL := RefURL
- + 'SETTING.TXT';
-
- Settingtxt := Indy.Get(RefeURL);
-
- //DebugOnly
- { if Settingtxt = '' then begin
- ShowMessage(Settingtxt);
- Exit;
- end else begin
- ShowMessage(Settingtxt);
- Exit;
- end; }
if ResultType = grtOK then begin
- WriteSambaTime(FHost, Now());
+ WriteSambaTime(FHost, Now());
State := gdsComplete;
end else if ResultType = grtCookie then begin
//\83\8b\81[\83v\96h\8e~
else
GikoForm.AddMessageList(FThreadItem.Title + ' [\83\8c\83X\91\97\90M\8fI\97¹]', nil, gmiOK);
Close;
+ Exit;
end;
if State = gdsComplete then begin
GikoForm.PlaySound('ResEnd');
else
GikoForm.AddMessageList(FThreadItem.Title + ' [\83\8c\83X\91\97\90M\8e¸\94s]', nil, gmiNG);
EditorPage.ActivePage := PreviewTab;
- SetContent(ResponseText);
+ SetContent(ResponseText, Browser);
end else if State = gdsAbort then begin
GikoForm.AddMessageList(FThreadItem.Title + ' [\92\86\92f]', nil, gmiSAD);
end;
Preview;
end;
-end.
+procedure TEditorForm.BoardTopClick(Sender: TObject);
+var
+ ini: TIniFile;
+begin
+ ini := TIniFile.Create(GikoSys.Setting.GetFileName);
+ try
+ BoardtopTab.TabVisible := BoardTop.Checked;
+ ini.WriteBool('EditorForm', 'BoardTopTab', BoardtopTab.TabVisible);
+ finally
+ ini.Free;
+ end;
+end;
+
+
+procedure TEditorForm.GetSETTINGTXTActionExecute(Sender: TObject);
+var
+ URL, RefURL: string;
+ settingBody: TStringList;
+ tmpBoard: TBoard;
+begin
+ InitIdHTTP(Indy);
+ if FThreadItem = nil then
+ tmpBoard := FBoard
+ else
+ tmpBoard := FThreadItem.ParentBoard;
+
+ if tmpBoard = nil then Exit;
+
+ RefURL := tmpBoard.URL;
+ if RefURL[Length(RefURL)] <> '/' then
+ URL := RefURL + '/' + 'SETTING.TXT'
+ else
+ URL := RefURL + 'SETTING.TXT';
+
+ Indy.Request.LastModified := tmpBoard.SETTINGTXTTime;
+ Indy.Request.Referer := RefURL;
+ Screen.Cursor := crHourGlass;
+ settingBody := TStringList.Create;
+ try
+ StatusBar.Panels[0].Text := 'SETTING.TXT\83_\83E\83\93\83\8d\81[\83h\92\86';
+ try
+ settingBody.Text := Indy.Get(URL);
+ if( Indy.ResponseCode = 200 ) then begin
+ settingBody.SaveToFile(tmpBoard.GetSETTINGTXTFileName);
+ tmpBoard.SETTINGTXTTime := Indy.Response.LastModified;
+ tmpBoard.IsSETTINGTXT := true;
+ tmpBoard.TitlePictureURL := GetTitlePictureURL(settingBody, tmpBoard);
+ tmpBoard.Modified := true;
+ StatusBar.Panels[0].Text := 'SETTING.TXT\8eæ\93¾\8a®\97¹(' + IntToStr(Indy.ResponseCode) + ')';
+ end;
+ except
+ on E: EIdException do begin
+ if( AnsiPos('304', E.Message) > 0 ) then
+ StatusBar.Panels[0].Text := 'SETTING.TXT\8dX\90V\96³\82µ(' + IntToStr(Indy.ResponseCode) + ')'
+ else
+ StatusBar.Panels[0].Text := 'SETTING.TXT\8eæ\93¾\83G\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
+ end;
+ end;
+ finally
+ settingBody.Free;
+ Screen.Cursor := crDefault;
+ end;
+ ShowBoardInformation(tmpBoard, BoardInformationMemo);
+end;
+procedure TEditorForm.ShowBoardInformation(ABoard: TBoard; AMemo: TMemo);
+var
+ body: TStringList;
+begin
+ AMemo.Clear;
+ AMemo.Lines.Add('[SETTING.TXT]');
+ if ABoard.IsSETTINGTXT then begin
+ if FileExists(ABoard.GetSETTINGTXTFileName) then begin
+ AMemo.Lines.Add(DateTimeToStr(ABoard.SETTINGTXTTime) + ' \8dX\90V');
+ body := TStringList.Create;
+ try
+ body.LoadFromFile(ABoard.GetSETTINGTXTFileName);
+ AMemo.Lines.AddStrings(body);
+ finally
+ body.Free;
+ end;
+ end else begin
+ ABoard.IsSETTINGTXT := false;
+ ABoard.SETTINGTXTTime := ZERO_DATE;
+ AMemo.Lines.Add('Local\82É\95Û\91¶\82³\82ê\82½SETTING.TXT\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ');
+ AMemo.Lines.Add('\83\81\83j\83\85\81[\82æ\82è\8dÄ\8eæ\93¾\82µ\82Ä\82\82¾\82³\82¢\81B');
+ end;
+ end else begin
+ AMemo.Lines.Add('SETTING.TXT\82ð\8eæ\93¾\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B');
+ AMemo.Lines.Add('\83\81\83j\83\85\81[\82æ\82è\8eæ\93¾\82µ\82Ä\82\82¾\82³\82¢\81B');
+ end;
+end;
+function TEditorForm.GetTitlePictureURL(body: TStringList; ABoard: TBoard): string;
+//BBS_TITLE_PICTURE=
+//BBS_FIGUREHEAD=
+var
+ i: Integer;
+ tmp: string;
+begin
+ Result := '';
+ for i := 0 to body.Count - 1 do begin
+ if (AnsiPos('BBS_TITLE_PICTURE=', body[i]) > 0) or
+ (AnsiPos('BBS_FIGUREHEAD=', body[i]) > 0) then begin
+ tmp := body[i];
+ Delete(tmp, 1, AnsiPos('=', tmp));
+ if AnsiPos('../', tmp) > 0 then begin
+ tmp := CustomStringReplace(tmp, '../', GikoSys.UrlToServer(ABoard.URL));
+ end;
+ Result := tmp;
+ Exit;
+ end;
+ end;
+end;
+
+procedure TEditorForm.GetTitlePictureActionUpdate(Sender: TObject);
+begin
+ if FThreadItem = nil then
+ GetTitlePictureAction.Enabled := FBoard.IsSETTINGTXT
+ else
+ GetTitlePictureAction.Enabled := FThreadItem.ParentBoard.IsSETTINGTXT;
+
+end;
+
+procedure TEditorForm.GetTitlePictureActionExecute(Sender: TObject);
+var
+ memStream: TMemoryStream;
+ tmpBoard: TBoard;
+ tmp : string;
+begin
+ InitIdHTTP(Indy);
+ memStream := TMemoryStream.Create;
+ try
+ if FThreadItem = nil then
+ tmpBoard := FBoard
+ else
+ tmpBoard := FThreadItem.ParentBoard;
+
+ Indy.Request.Referer := tmpBoard.URL;
+ if tmpBoard.TitlePictureURL <> '' then begin
+ StatusBar.Panels[0].Text := '\94Â\83g\83b\83v\89æ\91\9c\83_\83E\83\93\83\8d\81[\83h\92\86';
+ Screen.Cursor := crHourGlass;
+ try
+ Indy.Get(tmpBoard.TitlePictureURL, memStream);
+ if Indy.ResponseCode = 200 then begin
+ memStream.SaveToFile(tmpBoard.GetTitlePictureFileName);
+ ShowTitlePicture();
+ tmpBoard.Modified := true;
+ end;
+ except
+ end;
+ end;
+ finally
+ Screen.Cursor := crDefault;
+ StatusBar.Panels[0].Text := '\94Â\83g\83b\83v\89æ\91\9c (' + IntToStr(Indy.ResponseCode) + ')';
+ memStream.Free;
+ end;
+
+end;
+procedure TEditorForm.ShowTitlePicture();
+var
+ tmpBoard: TBoard;
+ s: String;
+begin
+ if FThreadItem = nil then
+ tmpBoard := FBoard
+ else
+ tmpBoard := FThreadItem.ParentBoard;
+
+ if FileExists(tmpBoard.GetTitlePictureFileName) then begin
+ TitlePictureBrowser.Navigate(tmpBoard.GetTitlePictureFileName);
+ end else begin
+ s := '\94Â\83g\83b\83v\89æ\91\9c\96¢\8eæ\93¾\82Å\82·\81B<br>\83\81\83j\83\85\81[\82æ\82è\8eæ\93¾\82µ\82Ä\82\82¾\82³\82¢\81B';
+ SetContent(s, TitlePictureBrowser);
+ end;
+end;
+
+function TEditorForm.GetFusianaName(body: TStringList; ABoard: TBoard): String;
+var
+ i: Integer;
+ tmp: string;
+begin
+ for i := 0 to body.Count - 1 do begin
+ if (AnsiPos('BBS_NONAME_NAME=', body[i]) > 0) then begin
+ tmp := body[i];
+ Delete(tmp, 1, AnsiPos('=', tmp));
+ Result := tmp;
+ Exit;
+ end;
+ end;
+end;
+
+procedure TEditorForm.GetHeadTXTActionExecute(Sender: TObject);
+var
+ URL, RefURL: string;
+ settingBody: TStringList;
+ tmpBoard: TBoard;
+
+begin
+ InitIdHTTP(Indy);
+ if FThreadItem = nil then
+ tmpBoard := FBoard
+ else
+ tmpBoard := FThreadItem.ParentBoard;
+
+ if tmpBoard = nil then Exit;
+
+ RefURL := tmpBoard.URL;
+ if RefURL[Length(RefURL)] <> '/' then
+ URL := RefURL + '/' + 'head.txt'
+ else
+ URL := RefURL + 'head.txt';
+
+ if FileExists(tmpBoard.GETHEADTXTFileName) then
+ Indy.Request.LastModified := tmpBoard.HEADTXTTime
+ else
+ Indy.Request.LastModified := ZERO_DATE;
+
+ Indy.Request.Referer := RefURL;
+ Screen.Cursor := crHourGlass;
+ settingBody := TStringList.Create;
+ try
+ StatusBar.Panels[0].Text := 'head.txt\83_\83E\83\93\83\8d\81[\83h\92\86';
+ try
+ settingBody.Text := Indy.Get(URL);
+ if( Indy.ResponseCode = 200 ) then begin
+ settingBody.Insert(0, '<HTML lang="ja"><HEAD>');
+ settingBody.Insert(1, '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">');
+ settingBody.Insert(2, '<TITLE>' + tmpBoard.Title + '</TITLE>');
+ settingBody.Insert(3, '<base href="' + RefURL + '"></HEAD><BODY>');
+ settingBody.Add('</BODY></HTML>');
+ settingBody.SaveToFile(tmpBoard.GETHEADTXTFileName);
+ tmpBoard.HEADTXTTime := Indy.Response.LastModified;
+ tmpBoard.IsHEADTXT := true;
+ tmpBoard.Modified := true;
+ StatusBar.Panels[0].Text := 'head.txt\8eæ\93¾\8a®\97¹(' + IntToStr(Indy.ResponseCode) + ')';
+ end;
+ except
+ on E: EIdException do begin
+ if( AnsiPos('304', E.Message) > 0 ) then
+ StatusBar.Panels[0].Text := 'head.txt\8dX\90V\96³\82µ(' + IntToStr(Indy.ResponseCode) + ')'
+ else
+ StatusBar.Panels[0].Text := 'head.txt\8eæ\93¾\83G\83\89\81[(' + IntToStr(Indy.ResponseCode) + ')';
+ end;
+ end;
+ finally
+ settingBody.Free;
+ Screen.Cursor := crDefault;
+ end;
+ if tmpBoard.IsHEADTXT then
+ GikoSys.OpenBrowser(tmpBoard.GETHEADTXTFileName, gbtUserApp);
+end;
+
+end.