source: oup/current/Unit11_extractor.pas @ 10

Last change on this file since 10 was 10, checked in by alloc, 17 years ago
  • Property svn:executable set to *
File size: 8.0 KB
Line 
1UNIT Unit11_extractor;
2INTERFACE
3USES
4  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
5  Dialogs, StdCtrls, ExtCtrls, StrUtils, ComCtrls;
6TYPE
7  TForm11 = Class(TForm)
8    group_select: TGroupBox;
9    group_extract: TGroupBox;
10    group_singlefiles: TGroupBox;
11    btn_sel_dat: TButton;
12    btn_sel_datraw: TButton;
13    btn_sel_datraw_convert: TButton;
14    btn_all_dat: TButton;
15    btn_all_datraw: TButton;
16    btn_all_datraw_convert: TButton;
17    group_onefile: TGroupBox;
18    btn_sel_files_toone: TButton;
19    btn_all_files_toone: TButton;
20    group_progress: TGroupBox;
21    progress: TProgressBar;
22    lbl_progress: TLabel;
23    lbl_estimated: TLabel;
24    btn_abort: TButton;
25    saved: TSaveDialog;
26    panel_extension: TPanel;
27    lbl_filter: TLabel;
28    combo_extension: TComboBox;
29    check_zerobyte: TCheckBox;
30    edit_filtername: TEdit;
31    check_filtername: TCheckBox;
32    list: TListBox;
33    PROCEDURE LoadFileNames;
34    PROCEDURE check_filternameClick(Sender: TObject);
35    PROCEDURE check_zerobyteClick(Sender: TObject);
36    PROCEDURE combo_extensionClick(Sender: TObject);
37    PROCEDURE panel_extensionResize(Sender: TObject);
38    PROCEDURE Recreatelist;
39
40    PROCEDURE FormCreate(Sender: TObject);
41    PROCEDURE FormClose(Sender: TObject; var Action: TCloseAction);
42    PROCEDURE FormResize(Sender: TObject);
43    PROCEDURE Extract(Sender: TObject);
44  PRIVATE
45  PUBLIC
46  END;
47
48VAR
49  Form11: TForm11;
50
51IMPLEMENTATION
52{$R *.dfm}
53USES Unit1_main, Unit2_functions, Unit3_data, Unit15_Classes;
54
55
56PROCEDURE TForm11.Recreatelist;
57  VAR
58    i:LongWord;
59    exts:TStringArray;
60  BEGIN
61    combo_extension.Items.Clear;
62    combo_extension.Items.Add('_All files_ ('+IntToStr(OniDataConnection.GetFilesCount)+')');
63    exts:=OniDataConnection.GetExtensionsList;
64    FOR i:=0 TO High(exts) DO
65      combo_extension.Items.Add(exts[i]);
66    combo_extension.ItemIndex:=0;
67    combo_extensionClick(Self);
68  END;
69
70PROCEDURE TForm11.LoadFileNames;
71  VAR
72    Extension:String[4];
73    no_zero_bytes:Boolean;
74    pattern:String;
75    files:TStringArray;
76    i:LongWord;
77  BEGIN
78    Extension:=MidStr(combo_extension.Items.Strings[combo_extension.ItemIndex],1,4);
79    no_zero_bytes:=NOT check_zerobyte.Checked;
80    pattern:='';
81    IF check_filtername.Checked THEN pattern:=edit_filtername.Text;
82    IF Extension='_All' THEN Extension:='';
83
84    files:=OniDataConnection.GetFilesList(extension,pattern,no_zero_bytes);
85    list.Items.Clear;
86    IF Length(files)>0 THEN
87      FOR i:=0 TO High(files) DO
88        list.Items.Add(files[i]);
89  END;
90
91PROCEDURE TForm11.panel_extensionResize(Sender: TObject);
92  BEGIN
93    combo_extension.Width:=panel_extension.Width-5;
94    edit_filtername.Width:=panel_extension.Width-5;
95  END;
96
97PROCEDURE TForm11.combo_extensionClick(Sender: TObject);
98  BEGIN
99    LoadFileNames;
100  END;
101
102PROCEDURE TForm11.check_zerobyteClick(Sender: TObject);
103  VAR
104    i:Byte;
105  BEGIN
106    LoadFileNames;
107  END;
108
109PROCEDURE TForm11.check_filternameClick(Sender: TObject);
110  BEGIN
111    edit_filtername.Enabled:=NOT check_filtername.Checked;
112    LoadFileNames;
113  END;
114
115
116
117PROCEDURE TForm11.FormResize(Sender: TObject);
118  BEGIN
119    IF Self.Width>=450 THEN BEGIN
120    END ELSE Self.Width:=450;
121    IF Self.Height>=400 THEN BEGIN
122      group_progress.Height:=group_extract.Height-293;
123    END ELSE Self.Height:=400;
124  END;
125
126PROCEDURE TForm11.FormClose(Sender: TObject; var Action: TCloseAction);
127  BEGIN
128    Action:=caFree;
129  END;
130
131PROCEDURE TForm11.FormCreate(Sender: TObject);
132  BEGIN
133    btn_sel_dat.Caption:=           'Selected files'+CrLf+'(dat contents only)';
134    btn_sel_datraw.Caption:=        'Selected files'+CrLf+'(dat+raw contents)';
135    btn_sel_datraw_convert.Caption:='Selected files'+CrLf+'(dat+raw contents)'+CrLf+'(with convert if possible)';
136    btn_all_dat.Caption:=           'All files in list'+CrLf+'(dat contents only)';
137    btn_all_datraw.Caption:=        'All files in list'+CrLf+'(dat+raw contents)';
138    btn_all_datraw_convert.Caption:='All files in list'+CrLf+'(dat+raw contents)'+CrLf+'(with convert if possible)';
139    btn_sel_files_toone.Caption:=   'Selected files'+CrLf+'(dat contents only)';
140    btn_all_files_toone.Caption:=   'All files in list'+CrLf+'(dat contents only)';
141  END;
142
143PROCEDURE TForm11.Extract(Sender: TObject);
144  VAR
145    sel_only:Boolean;
146    dat_only:Boolean;
147    convert:Boolean;
148    one_file:Boolean;
149    settings:TExportSet;
150    files:LongWord;
151    i,done:LongWord;
152    begintime:Double;
153  BEGIN
154    sel_only:=Pos('sel',TButton(Sender).Name)>0;
155    dat_only:=NOT (Pos('datraw',TButton(Sender).Name)>0);
156    convert:=Pos('convert',TButton(Sender).Name)>0;
157    one_file:=Pos('toone',TButton(Sender).Name)>0;
158    IF dat_only THEN settings:=[DO_dat]
159    ELSE settings:=[DO_dat,DO_raw];
160    IF convert THEN settings:=settings+[DO_convert];
161    IF one_file THEN settings:=settings+[DO_toone];
162    progress.Position:=0;
163
164    IF saved.Execute THEN BEGIN
165      begintime:=Time;
166      group_progress.Visible:=True;
167      group_select.Enabled:=False;
168      group_singlefiles.Enabled:=False;
169      group_onefile.Enabled:=False;
170      lbl_estimated.Caption:='Estimated finishing time: unknown';
171      IF one_file THEN BEGIN
172        IF FileExists(saved.FileName) THEN BEGIN
173          IF MessageBox(Self.Handle,PChar('File already exists. Do you want to overwrite it?'),PChar('Warning!'),MB_YESNO)=ID_YES THEN BEGIN
174            DeleteFile(saved.FileName);
175          END ELSE BEGIN
176            group_progress.Visible:=False;
177            group_select.Enabled:=True;
178            group_singlefiles.Enabled:=True;
179            group_onefile.Enabled:=True;
180            Exit;
181          END;
182        END;
183        i:=FileCreate(saved.FileName);
184        FileClose(i);
185        i:=0;
186      END;
187      IF sel_only THEN BEGIN
188        files:=list.SelCount;
189        lbl_progress.Caption:='Files done: 0/'+IntToStr(files);
190        progress.Max:=files;
191        done:=0;
192        FOR i:=0 TO list.Count-1 DO BEGIN
193          IF list.Selected[i] THEN BEGIN
194            IF one_file THEN BEGIN
195              ExportFile(OniDataConnection.ExtractFileID(list.Items.Strings[list.ItemIndex]),ExtractFileName(saved.FileName),settings,ExtractFileDir(saved.FileName));
196            END ELSE BEGIN
197              ExportFile(OniDataConnection.ExtractFileID(list.Items.Strings[list.ItemIndex]),list.Items.Strings[i],settings,'D:');
198            END;
199            Inc(done);
200          END;
201          IF ((done MOD 10)=0) AND (done>=50) THEN
202            lbl_estimated.Caption:='Estimated finishing time: '+TimeToStr((Time-begintime)/done*files+begintime);
203          IF (i MOD 10)=0 THEN BEGIN
204            progress.Position:=done;
205            lbl_progress.Caption:='Files done: '+IntToStr(done)+'/'+IntToStr(files);
206            Application.ProcessMessages;
207          END;
208        END;
209      END ELSE BEGIN
210        files:=list.Count;
211        lbl_progress.Caption:='Files done: 0/'+IntToStr(files);
212        progress.Max:=files;
213        FOR i:=0 TO list.Count-1 DO BEGIN
214          IF one_file THEN BEGIN
215            ExportFile(OniDataConnection.ExtractFileID(list.Items.Strings[list.ItemIndex]),ExtractFileName(saved.FileName),settings,ExtractFileDir(saved.FileName));
216          END ELSE BEGIN
217            ExportFile(OniDataConnection.ExtractFileID(list.Items.Strings[list.ItemIndex]),list.Items.Strings[i],settings,'D:');
218          END;
219          IF ((i MOD 10)=0) AND (i>=50) THEN
220            lbl_estimated.Caption:='Estimated finishing time: '+TimeToStr((Time-begintime)/i*files+begintime);
221          IF (i MOD 5)=0 THEN BEGIN
222            progress.Position:=i;
223            lbl_progress.Caption:='Files done: '+IntToStr(i)+'/'+IntToStr(files);
224            Application.ProcessMessages;
225          END;
226        END;
227      END;
228      group_progress.Visible:=False;
229      group_select.Enabled:=True;
230      group_singlefiles.Enabled:=True;
231      group_onefile.Enabled:=True;
232    END;
233  END;
234
235END.
Note: See TracBrowser for help on using the repository browser.