『スタパライフ』エージェント Ver1.22 setup.pas




   0:unit setup;
   1:
   2:interface
   3:
   4:uses
   5:  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   6:  StdCtrls;
   7:
   8:type
   9:  Tsetup = class(TForm)
  10:    Label2: TLabel;
  11:    Label3: TLabel;
  12:    Label5: TLabel;
  13:    Label6: TLabel;
  14:    Label7: TLabel;
  15:    Label8: TLabel;
  16:    Label8: TLabel;
  17:    lblAgentName: TLabel;
  18:    lblAgentVersion: TLabel;
  19:    lblLocalLogFileName: TLabel;
  20:    lblDownloadURL: TLabel;
  21:    txtURL: TEdit;
  22:    chkAutoBrowserOpen: TCheckBox;
  23:    chkCollectionImage: TCheckBox;
  24:    cmbBrowser: TComboBox;
  25:    cmdOK: TButton;
  26:    cmdExit: TButton;
  27:    cmdJump: TButton;
  28:    procedure cmdOKClick(Sender: TObject);
  29:    procedure FormCreate(Sender: TObject);
  30:    procedure cmdJumpClick(Sender: TObject);
  31:    procedure cmdExitClick(Sender: TObject);
  32:  private
  33:    { Private declarations }
  34:  public
  35:    procedure SaveSettings();
  36:    procedure CopyFileEx(From: string; Dest: string; CheckExists: Boolean);
  37:  end;
  38:
  39:var
  40:  setup: Tsetup;
  41:  Log: TStringList;
  42:  Failed: Boolean;
  43:
  44:implementation
  45:
  46:{$R *.DFM}
  47:procedure Tsetup.CopyFileEx(From: string; Dest: string; CheckExists: Boolean);
  48:var
  49:  Tmp: string;
  50:begin
  51:  Tmp := ': ファイルのコピー ' + From + ' -> ' + Dest;
  52:  if CheckExists and FileExists(Dest) then begin
  53:    Log.Add('OK' + Tmp);
  54:  end else begin
  55:    if CopyFile(From, Dest, False) then begin
  56:      Log.Add('OK' + Tmp);
  57:    end else begin
  58:      Log.Add('NG' + Tmp);
  59:      Failed := True;
  60:    end;
  61:  end;
  62:end;
  63:
  64:procedure Tsetup.FormCreate(Sender: TObject);
  65:var
  66:  userfile:string;
  67:  Leg:TLegistry;
  68:  Auto: Boolean;
  69:  Base: string;
  70:  Prefix: string;
  71:  InstallDir: string;
  72:begin
  73://Pluginディレクトリィへのファイルコピーの準備
  74:  Auto := False;
  75:  Base := ExtractFilePath(Params.Items[0]);
  76:  Prefix := 'stpl';
  77:
  78://ADSによるセットアップかどうかの判別
  79:  InstallDir := PluginDir + '\' + Prefix;
  80:  if (Params.Count > 1) then DebugText(Params.Items[1]);
  81:  if (Params.Count > 1) and (LowerCase(Params.Items[1]) = '-auto') then begin
  82:    Auto := True;
  83:  end;
  84:  Failed := False;
  85:  Log := TStringList.Create;
  86:
  87://ベースディレクトリィが相対ディレクトリィじゃない時 かつ
  88://ベースディレクトリィとインストール先ディレクトリィが違うとき、ファイルのコピーを実行
  89:  if (Base <> 'stpl\') and (Base <> InstallDir +'\') then begin
  90:    if not DirectoryExists(InstallDir) then begin
  91:      if not CreateDir(InstallDir) then begin
  92:        Log.Add('NG: フォルダ(' + InstallDir + ') が作成できませんでした');
  93:        Failed := True;
  94:      end;
  95:    end;
  96:
  97:    if not Failed then begin
  98:      CopyFileEx(Base + 'setup.pas'      , InstallDir + '\setup.pas'      , False);
  99:      CopyFileEx(Base + 'setup.dfm'      , InstallDir + '\setup.dfm'      , False);
 100:      CopyFileEx(Base + 'stplBrowser.dfm', InstallDir + '\stplBrowser.dfm', False);
 101:      CopyFileEx(Base + 'autostpl.r'     , InstallDir + '\autostpl.r'     , False);
 102:      CopyFileEx(Base + 'stplBrowser.pas', InstallDir + '\stplBrowser.pas', False);
 103:      CopyFileEx(Base + 'download.h'     , InstallDir + '\download.h'     , False);
 104:      CopyFileEx(Base + 'stpl.htm'       , InstallDir + '\stpl.htm'       , False);
 105:      CopyFileEx(Base + 'autostpl.rx'    , InstallDir + '\autostpl.rx'    , False);
 106:      CopyFileEx(Base + 'stpl.ico'       , InstallDir + '\stpl.ico'       , False);
 107:      CopyFileEx(Base + 'stplBrowser.ico', InstallDir + '\stplBrowser.ico', False);
 108:      CopyFileEx(Base + 'stpl.txt'       , InstallDir + '\stpl.txt'       , False);
 109:      CopyFileEx(Base + 'stplBrowser.txt', InstallDir + '\stplBrowser.txt', False);
 110:    end;
 111:
 112://ファイルコピー失敗時、インストール不成功のログを保存し、設定保存ボタンを無効に
 113:    if Failed then begin
 114:      Log.Add('RESULT: FAILED');
 115:      Log.SaveToFile(Base + 'setup.log');
 116:      cmdOK.Enabled:=False;
 117:      ShowMessage('- 『スタパライフ』セットアップ -'#13#10'インストールに失敗しました.');
 118:    end else begin
 119://インストール成功のログを保存
 120:      Log.Add('NAME: 『スタパライフ』Agent for airWeb');
 121:      Log.Add('VERSION: 1.20');
 122:      Log.Add('DIRECTORY: ' + InstallDir);
 123:      Log.Add('RESULT: SUCCESS');
 124:      Log.SaveToFile(Base + 'setup.log');
 125:      Log.Free;
 126:    end;
 127:  end;
 128:
 129://初期値の設定
 130:  txtURL.Text:='http://www.alt-r.com/di/toc5-0.html';
 131:  lblLocalLogFileName.Caption:=DataDir +'\'+ 'stpl\stpl.mbx';
 132:  cmbBrowser.Text:='stpl\stplBrowser.pas';
 133:  chkAutoBrowserOpen.Checked:=True;
 134:  chkCollectionImage.Checked:=True;
 135:
 136://キャビネットにアイテムがあり、レジストリィが存在する場合は設定値の読み込み
 137:  if Assigned(CabinetManager.Find('diary$stpl')) then
 138:  begin
 139:    userfile := DataDir + '\stpl\user.dat';
 140:    if FileExists(userfile) then
 141:    begin
 142:      cmdOK.Caption:='設定を保存する';
 143:      Leg:=TLegistry.Create(userfile,lmOpenRead,1024,1024,nil);
 144:      txtURL.Text:=Leg.ReadStringDef('/common/url','');
 145:      lblLocalLogFileName.Caption:=DataDir +'\'+Leg.ReadStringDef('/common/mbox','');
 146:      cmbBrowser.Text:=Leg.ReadStringDef('/common/Browser','stpl\stplBrowser.pas');
 147:      chkAutoBrowserOpen.Checked:=Leg.ReadBoolDef('/common/autobrowseropen',0);
 148:      chkCollectionImage.Checked:=Leg.ReadBoolDef('/common/CollectionImage',0);
 149:      Leg.Free;
 150:
 151:      if Auto then begin
 152:        ShowMessage('『スタパライフ』Agentの新バージョンがダウンロードされました!'#13#10'『設定を保存する』ボタンを押せばセットアップ完了です');
 153:      end;
 154:    end else begin
 155:      if Auto then begin
 156:        ShowMessage('『スタパライフ』Agentがダウンロードされました!'#13#10'『キャビネットへ登録する』ボタンを押せばセットアップ完了です');
 157://        setup.UnLoad;
 158:      end;
 159:    end;
 160:  end else begin
 161:    if Auto then begin
 162:      ShowMessage('『スタパライフ』Agentがダウンロードされました!'#13#10'『キャビネットへ登録する』ボタンを押せばセットアップ完了です');
 163://      setup.Close;
 164:    end;
 165:  end;
 166:
 167:end;
 168:
 169:procedure Tsetup.cmdJumpClick(Sender: TObject);
 170:begin
 171:  OpenBrowser(lblDownloadURL.caption);
 172:  close;
 173:end;
 174:
 175:procedure Tsetup.cmdExitClick(Sender: TObject);
 176:begin
 177:  close;
 178:end;
 179:
 180:procedure Tsetup.cmdOKClick(Sender: TObject);
 181:begin
 182:  SaveSettings;
 183:  Close;
 184:end;
 185:
 186:procedure Tsetup.SaveSettings();
 187:var
 188:  Item:TCabinetItem;
 189:  Folder:TCabinetItem;
 190:  FFolderCreated:Boolean;
 191:
 192:  userfile:string;
 193:  ItemCreated:Boolean;
 194:  Leg: TLegistry;
 195:begin
 196://データ保存用ディレクトリィの作成
 197:  if not DirectoryExists(DataDir) then begin
 198:    if not ForceDirectories(DataDir) then begin
 199:      ShowMessage('ログフォルダ "'+DataDir+'" が作成できませんでした');
 200:    end;
 201:  end;
 202:  CreateDir(DataDir + '\stpl');
 203:
 204://レジストリィファイルの作成
 205:  userfile := DataDir + '\stpl\user.dat';
 206:  if FileExists(userfile) then
 207:    Leg:=TLegistry.Create(userfile,lmOpenReadWrite,1024,1024,nil)
 208:  else
 209:    Leg:=TLegistry.Create(userfile,lmCreate,1024,1024,nil);
 210:
 211://レジストリィへの設定値の保存
 212:  Leg.Signature:='STPL_INFO';
 213:  Leg.CreateKey('/common');
 214:  Leg.WriteString('/common/url',txtURL.text);
 215:  Leg.WriteString('/common/mbox','stpl\stpl.mbx');
 216:  Leg.WriteString('/common/Browser',cmbBrowser.text);
 217:  Leg.WriteBool('/common/autobrowseropen',chkAutoBrowserOpen.Checked);
 218:  Leg.WriteBool('/common/CollectionImage',chkCollectionImage.Checked);
 219:  Leg.Free;
 220:
 221://キャビネットにフォルダが無い場合は追加
 222:  Folder:=CabinetManager.Find('diary');
 223:  if not Assigned(Folder) then begin
 224:    Folder:=TCabinetItem.Create(CabinetManager);
 225:    Folder.ItemType:=ctFolder;
 226:    Folder.Name:='diary';
 227:    Folder.Caption:='日記';
 228:    CabinetManager.Add(nil,Folder);
 229:    FFolderCreated:=True;
 230:  end else FFolderCreated:=False;
 231://キャビネット上のアイテムの存在チェック
 232:  if not Assigned(CabinetManager.Find('diary$stpl')) then
 233:  begin
 234://キャビネットにアイテムが無い場合は追加
 235:    Item:=TCabinetItem.Create(CabinetManager);
 236:    Item.ItemType:=ctPlugin;
 237:    Item.Name := 'diary$stpl';
 238:    Item.Caption:='スタパライフ(スタパ斎藤)';
 239:    Item.PluginExecFileName:=cmbBrowser.text;
 240:    Item.PluginExecArg:='-H '+ txtURL.text +' -T スタパライフ stpl\stpl.mbx';
 241:    Item.PluginAutoFileName:='stpl\autostpl.rx';
 242:    Item.PluginAutoArg:='';
 243:    Item.PluginSetupFileName:='stpl\setup.pas';
 244:    Item.PluginSetupArg:='';
 245:    CabinetManager.AddChild(Folder,Item);
 246:    Item.Free;
 247:  end else begin
 248://キャビネットにアイテムが有る場合はエージェント呼び出し用プロパティの更新
 249:    Item:=CabinetManager.Find('diary$stpl');
 250:    Item.PluginExecFileName:=cmbBrowser.text;
 251:    Item.PluginExecArg:='-H '+ txtURL.text +' -T スタパライフ stpl\stpl.mbx';
 252:    Item.PluginAutoFileName:='stpl\autostpl.rx';
 253:    Item.PluginAutoArg:='';
 254:    Item.PluginSetupFileName:='stpl\setup.pas';
 255:    Item.PluginSetupArg:='';
 256:  end;
 257:  if FFolderCreated then Folder.Free;
 258:  CabinetManager.Commit;
 259:  Close;
 260:end;
 261:
 262:end.