ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Helper/LevelDB.pas
(Generate patch)

Comparing oup/current/Helper/LevelDB.pas (file contents):
Revision 111 by alloc, Wed Feb 21 03:12:33 2007 UTC vs.
Revision 112 by alloc, Thu Feb 22 00:37:39 2007 UTC

# Line 1 | Line 1
1 < unit Helper_LevelDB;
1 > unit LevelDB;
2  
3   interface
4  
# Line 15 | Line 15 | type
15      lbl_estimation: TLabel;
16      procedure btn_abortokClick(Sender: TObject);
17    private
18 <    procedure HandleFile(ext: String; fileid: Integer; dir_dat2db: Boolean);
19 <    procedure stop_convert;
18 >    procedure HandleFile(Ext: String; FileID: Integer);
19 >    procedure StopConvert;
20    public
21      procedure CreateDatabase(Source, Target: String);
22      procedure CreateLevel(Source, Target: String);
# Line 30 | Line 30 | implementation
30  
31   {$R *.dfm}
32  
33 < uses ABSMain, ABSDecUtil, Main, Functions, Data, OniImgClass, DataStructures, ConnectionManager;
33 > uses ABSMain, ABSDecUtil, Main,
34 >    ConnectionManager, TypeDefs, DataAccess, OniImgClass;
35  
36   type
37 <  THandler = procedure(fileid: LongWord; dir_dat2db: Boolean);
38 <
38 <  TConvertHandlers = record
37 >  THandler = procedure(FileID: Integer);
38 >  TConvertHandler = record
39      Ext:     String[4];
40    needed:  Boolean;
40      Handler: THandler;
41    end;
42  
43   var
44 <  ConvertHandlers: array of TConvertHandlers;
45 <  loaded_filename: String;
46 <  converting: Boolean = False;
47 <  abort:     Boolean = False;
49 <  DataBase:  TABSDatabase;
50 <  Query:     TABSQuery;
51 <  MimeCoder: TStringFormat_MIME64;
52 <
53 < var
54 <  DatHeader:   THeader;
55 <  FilesHeader: TFilesMap;
56 <  NamedFilesHeader: TNamedFilesMap;
57 <  ExtensionsHeader: TExtensionsMap;
58 <  Stream_Body, Stream_Names: TMemoryStream;
59 <  Stream_Dat, Stream_Raw, Stream_Sep: TFileStream;
60 <  OniDataConnection: TOniData;
44 >  ConvertHandlers: array of TConvertHandler;
45 > //  loaded_filename: String;
46 >  Converting:  Boolean = False;
47 >  Abort:       Boolean = False;
48  
49  
50 + function GetOpenMsg(msg: TStatusMessages): String;
51 + begin
52 +  case msg of
53 +    SM_AlreadyOpened:    Result := 'File already opened.';
54 +    SM_FileNotFound:     Result := 'File not found.';
55 +    SM_UnknownExtension: Result := 'Unknown extension.';
56 +    SM_IncompatibleFile: Result := 'Incompatible file format.';
57 +    SM_UnknownError:     Result := 'Unknown error.';
58 +  end;
59 + end;
60  
61  
62 < procedure TForm_LevelDB.CreateLevel(Source, target: String);
62 > procedure TForm_LevelDB.CreateLevel(Source, Target: String);
63   var
64 <  files: LongWord;
65 <
66 <  i, j:     LongWord;
67 <  temps, temps2: String;
71 <  Data, rawdata: Tdata;
72 <  absolutebegintime, begintime: Double;
73 <  step:     Byte;
74 <  rawlist:  TRawList;
75 <  extlist:  TExtensionsMap;
76 <  fileinfo: TFileInfo;
77 <  datlinks: TDatLinks;
78 <  OniImage: TOniImage;
79 <  levelid:  LongWord;
80 <  timeformat: TFormatSettings;
64 >  DatHeader:        THeader;
65 >  FilesHeader:      TFilesMap;
66 >  NamedFilesHeader: TNamedFilesMap;
67 >  ExtensionsHeader: TExtensionsMap;
68  
69 <  conIndex: Integer;
70 <  connection: TOniData;
84 < const
85 <  steps: Byte = 3;
69 >  Stream_Body, Stream_Names:          TMemoryStream;
70 >  Stream_Dat, Stream_Raw, Stream_Sep: TFileStream;
71  
72 + //  FileCount: Integer;
73 + //  temps, temps2: String;
74 + //  Data, rawdata: Tdata;
75 +  BeginTime, FileTime: Double;
76 +  Step:     Integer;
77 + //  rawlist:  TRawDataList;
78 + //  extlist:  TExtensionsMap;
79 + //  fileinfo: TFileInfo;
80 + //  datlinks: TDatLinks;
81 +  OniImage:   TOniImage;
82 +  LevelID:    Integer;
83 +  TimeFormat: TFormatSettings;
84 +
85 +  ConID:      Integer;
86 +  Connection: TDataAccess;
87 +  ConRepMsg:  TStatusMessages;
88  
89 +  Strings:    TStrings;
90 +  i, j:       Integer;
91 + const
92 +  Steps: Byte = 3;
93  
94  
95 <  procedure DoStep(stepname: String);
95 >  procedure DoStep(StepName: String);
96    begin
97 <    Inc(step);
98 <    if stepname <> 'FIN' then
97 >    Inc(Step);
98 >    if StepName <> 'FIN' then
99        group_progress.Caption :=
100 <        'Creating Dat (Step ' + IntToStr(step) + '/' + IntToStr(steps) + ': ' + stepname + ')'
100 >        'Creating Dat (Step ' + IntToStr(Step) + '/' + IntToStr(Steps) + ': ' + StepName + ')'
101      else
102        group_progress.Caption := 'Creating Dat (FINISHED)';
103    end;
# Line 103 | Line 108 | begin
108    // FILE EXISTS CHECK FÜR DAT/RAW/SEP!!!
109    //
110  
111 <  timeformat.ShortTimeFormat := 'hh:nn:ss';
112 <  timeformat.LongTimeFormat := 'hh:nn:ss';
113 <  timeformat.TimeSeparator := ':';
111 >  TimeFormat.ShortTimeFormat := 'hh:nn:ss';
112 >  TimeFormat.LongTimeFormat  := 'hh:nn:ss';
113 >  TimeFormat.TimeSeparator   := ':';
114  
115 <  connection := ConnectionExists(target);
116 <  if connection <> nil then
115 >  ConID := ConManager.OpenConnection(Source, ConRepMsg);
116 >  if not (ConRepMsg in [SM_OK, SM_AlreadyOpened]) then
117    begin
118 <    ShowMessage('Destination-file is opened, close it in order to proceed conversion?');
118 >    ShowMessage('Source-file couldn''t be opened! Aborting' + CrLf + GetOpenMsg(ConRepMsg));
119      Exit;
120 <  end;
120 >  end else
121 >    Connection := ConManager.Connection[ConID];
122  
123 <  connection := ConnectionExists(source);
124 <  if connection <> nil then
123 >  ConID := ConManager.FileOpened(Target);
124 >  if ConID >= 0 then
125    begin
126 <    ShowMessage('Source-file is opened, close it in order to proceed conversion?');
127 <    Exit;
126 >    if MessageBox(Self.Handle, PChar('Destination-file is opened, close it in ' +
127 >          'order to proceed conversion?'), PChar('Destination-file opened'),
128 >          MB_YESNO + MB_ICONQUESTION) = ID_YES then
129 >    begin
130 >      if Form_Main.CheckConnectionCloseable(ConID) then
131 >        if not ConManager.CloseConnection(ConID, ConRepMsg) then
132 >        begin
133 >          ShowMessage('Couldn''t close destination-file. Aborting');
134 >          Exit;
135 >        end;
136 >    end else begin
137 >      ShowMessage('Aborting');
138 >      Exit;
139 >    end;
140    end;
141  
142 <
125 <  if CreateDataConnection(Source, ODB_ADB) = nil then
142 >  if FileExists(Target) then
143    begin
144 <    ShowMessage('Could not connect to .oldb-file');
145 <    Exit;
144 >    if MessageBox(Self.Handle, PChar('Destination-file exists. ' +
145 >          'Overwrite it?'), PChar('Destination-file exists'),
146 >          MB_YESNO + MB_ICONWARNING) = ID_YES then
147 >    begin
148 >      if not DeleteFile(Target) then
149 >      begin
150 >        ShowMessage('Couldn''t delete file. Aborting');
151 >        Exit;
152 >      end else if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.raw')) then
153 >      begin
154 >        ShowMessage('Couldn''t delete file. Aborting');
155 >        Exit;
156 >      end else if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.sep')) then
157 >      begin
158 >        ShowMessage('Couldn''t delete file. Aborting');
159 >        Exit;
160 >      end;
161 >    end else begin
162 >      ShowMessage('Aborting');
163 >      Exit;
164 >    end;
165    end;
130  levelid  := OniDataConnection.LevelInfo.LevelNumber;
131  levelid  := (levelid * 2) * 256 * 256 * 256 + $01;
132  OniImage := TOniImage.Create;
166  
167 <  absolutebegintime := Time;
167 >  LevelID  := Connection.LevelNumber;
168 >  LevelID  := (LevelID * 2) * 256 * 256 * 256 + $01;
169 >  OniImage := TOniImage.Create;
170  
171    Self.Visible := True;
172    Form_Main.Visible := False;
173 <  step  := 0;
174 <  converting := True;
175 <  abort := False;
173 >  Step := 0;
174 >  Converting := True;
175 >  Abort := False;
176    btn_abortok.Caption := '&Abort...';
177    btn_abortok.Default := False;
178 <  absolutebegintime := Time;
178 >  BeginTime := Time;
179  
180    Stream_Body  := TMemoryStream.Create;
181    Stream_Names := TMemoryStream.Create;
182 <  Stream_Dat   := TFileStream.Create(target, fmCreate);
183 <  Stream_Raw   := TFileStream.Create(AnsiReplaceStr(target, '.dat', '.raw'), fmCreate);
184 <  if OniDataConnection.OSisMac then
185 <    Stream_Sep := TFileStream.Create(AnsiReplaceStr(target, '.dat', '.sep'), fmCreate);
182 >  Stream_Dat   := TFileStream.Create(Target, fmCreate);
183 >  Stream_Raw   := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.raw'), fmCreate);
184 >  if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then
185 >    Stream_Sep := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.sep'), fmCreate);
186  
187    DoStep('Creating header');
188    progress.Position      := 0;
# Line 155 | Line 190 | begin
190    lbl_estimation.Caption := 'Estimated finishing time: unknown';
191    Application.ProcessMessages;
192  
193 <  NamedFilesHeader := TOniDataADB(OniDataConnection).GetNamedFilesMap;
193 >  SetLength(NamedFilesHeader, 0);
194 >  Strings := TStringList.Create;
195 >  Strings := Connection.GetFilesList('', '', False, ST_ExtNameAsc);
196 >  for i := 0 to Strings.Count - 1 do
197 >  begin
198 >    if MidStr(Strings.Strings[i],
199 >          Pos('-', Strings.Strings[i]) + 1,
200 >          Length(Strings.Strings[i]) -
201 >            Pos('.', ReverseString(Strings.Strings[i])) -
202 >            Pos('-', Strings.Strings[i])
203 >        ) <> '' then
204 >    begin
205 >      SetLength(NamedFilesHeader, Length(NamedFilesHeader) + 1);
206 >      NamedFilesHeader[High(NamedFilesHeader)].FileNumber := StrToInt(MidStr(Strings.Strings[i], 1, 5));
207 >      NamedFilesHeader[High(NamedFilesHeader)].blubb := 0;
208 >    end;
209 >  end;
210 >
211 >  
212    extlist := OniDataConnection.GetExtendedExtensionsList;
213    for i := 0 to High(DatHeader.Ident) do
214      DatHeader.Ident[i] := OniDataConnection.LevelInfo.Ident[i];
# Line 171 | Line 224 | begin
224    SetLength(FilesHeader, DatHeader.Files);
225    SetLength(ExtensionsHeader, DatHeader.Extensions);
226  
227 +
228    DoStep('Writing extensions-header');
229    progress.Max := Length(OniDataConnection.GetExtensionsList);
230    Application.ProcessMessages;
# Line 190 | Line 244 | begin
244      Application.ProcessMessages;
245    end;
246  
247 +
248    DoStep('Storing files-data');
249    progress.Position := 0;
250    progress.Max      := DatHeader.Files;
# Line 353 | Line 408 | end;
408  
409   procedure TForm_LevelDB.CreateDatabase(Source, target: String);
410   var
411 +  DataBase:    TABSDatabase;
412 +  Query:       TABSQuery;
413 +  MimeCoder:   TStringFormat_MIME64;
414 +
415    i, j:     LongWord;
416    temps, temps2: String;
417    Data:     Tdata;

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)