--- oup/rewrite/Helper/Helper_LevelDB.pas 2007/01/18 17:15:59 93 +++ oup/current/Helper/LevelDB.pas 2007/02/22 00:37:39 112 @@ -1,4 +1,4 @@ -unit Helper_LevelDB; +unit LevelDB; interface @@ -15,11 +15,11 @@ type lbl_estimation: TLabel; procedure btn_abortokClick(Sender: TObject); private - procedure HandleFile(ext: String; fileid: LongWord; dir_dat2db: Boolean); - procedure stop_convert; + procedure HandleFile(Ext: String; FileID: Integer); + procedure StopConvert; public - procedure CreateDatabase(Source, target: String); - procedure CreateLevel(Source, target: String); + procedure CreateDatabase(Source, Target: String); + procedure CreateLevel(Source, Target: String); end; @@ -30,70 +30,74 @@ implementation {$R *.dfm} -uses ABSMain, ABSDecUtil, Main, Functions, Data, - OniImgClass, DataStructures, OniDataClass; +uses ABSMain, ABSDecUtil, Main, + ConnectionManager, TypeDefs, DataAccess, OniImgClass; type - THandler = procedure(fileid: LongWord; dir_dat2db: Boolean); - - TConvertHandlers = record + THandler = procedure(FileID: Integer); + TConvertHandler = record Ext: String[4]; - needed: Boolean; Handler: THandler; end; var - ConvertHandlers: array of TConvertHandlers; - loaded_filename: String; - converting: Boolean = False; - abort: Boolean = False; - DataBase: TABSDatabase; - Query: TABSQuery; - MimeCoder: TStringFormat_MIME64; - -var - DatHeader: THeader; - FilesHeader: TFilesMap; - NamedFilesHeader: TNamedFilesMap; - ExtensionsHeader: TExtensionsMap; - Stream_Body, Stream_Names: TMemoryStream; - Stream_Dat, Stream_Raw, Stream_Sep: TFileStream; - OniDataConnection: TOniData; + ConvertHandlers: array of TConvertHandler; +// loaded_filename: String; + Converting: Boolean = False; + Abort: Boolean = False; +function GetOpenMsg(msg: TStatusMessages): String; +begin + case msg of + SM_AlreadyOpened: Result := 'File already opened.'; + SM_FileNotFound: Result := 'File not found.'; + SM_UnknownExtension: Result := 'Unknown extension.'; + SM_IncompatibleFile: Result := 'Incompatible file format.'; + SM_UnknownError: Result := 'Unknown error.'; + end; +end; -procedure TForm_LevelDB.CreateLevel(Source, target: String); +procedure TForm_LevelDB.CreateLevel(Source, Target: String); var - files: LongWord; - - i, j: LongWord; - temps, temps2: String; - Data, rawdata: Tdata; - absolutebegintime, begintime: Double; - step: Byte; - rawlist: TRawList; - extlist: TExtensionsMap; - fileinfo: TFileInfo; - datlinks: TDatLinks; - OniImage: TOniImage; - levelid: LongWord; - timeformat: TFormatSettings; + DatHeader: THeader; + FilesHeader: TFilesMap; + NamedFilesHeader: TNamedFilesMap; + ExtensionsHeader: TExtensionsMap; - conIndex: Integer; - connection: TOniData; -const - steps: Byte = 3; + Stream_Body, Stream_Names: TMemoryStream; + Stream_Dat, Stream_Raw, Stream_Sep: TFileStream; +// FileCount: Integer; +// temps, temps2: String; +// Data, rawdata: Tdata; + BeginTime, FileTime: Double; + Step: Integer; +// rawlist: TRawDataList; +// extlist: TExtensionsMap; +// fileinfo: TFileInfo; +// datlinks: TDatLinks; + OniImage: TOniImage; + LevelID: Integer; + TimeFormat: TFormatSettings; + + ConID: Integer; + Connection: TDataAccess; + ConRepMsg: TStatusMessages; + Strings: TStrings; + i, j: Integer; +const + Steps: Byte = 3; - procedure DoStep(stepname: String); + procedure DoStep(StepName: String); begin - Inc(step); - if stepname <> 'FIN' then + Inc(Step); + if StepName <> 'FIN' then group_progress.Caption := - 'Creating Dat (Step ' + IntToStr(step) + '/' + IntToStr(steps) + ': ' + stepname + ')' + 'Creating Dat (Step ' + IntToStr(Step) + '/' + IntToStr(Steps) + ': ' + StepName + ')' else group_progress.Caption := 'Creating Dat (FINISHED)'; end; @@ -104,51 +108,81 @@ begin // FILE EXISTS CHECK FÜR DAT/RAW/SEP!!! // - timeformat.ShortTimeFormat := 'hh:nn:ss'; - timeformat.LongTimeFormat := 'hh:nn:ss'; - timeformat.TimeSeparator := ':'; + TimeFormat.ShortTimeFormat := 'hh:nn:ss'; + TimeFormat.LongTimeFormat := 'hh:nn:ss'; + TimeFormat.TimeSeparator := ':'; - connection := ConnectionExists(target); - if connection <> nil then + ConID := ConManager.OpenConnection(Source, ConRepMsg); + if not (ConRepMsg in [SM_OK, SM_AlreadyOpened]) then begin - ShowMessage('Destination-file is opened, close it in order to proceed conversion?'); + ShowMessage('Source-file couldn''t be opened! Aborting' + CrLf + GetOpenMsg(ConRepMsg)); Exit; - end; + end else + Connection := ConManager.Connection[ConID]; - connection := ConnectionExists(source); - if connection <> nil then + ConID := ConManager.FileOpened(Target); + if ConID >= 0 then begin - ShowMessage('Source-file is opened, close it in order to proceed conversion?'); - Exit; + if MessageBox(Self.Handle, PChar('Destination-file is opened, close it in ' + + 'order to proceed conversion?'), PChar('Destination-file opened'), + MB_YESNO + MB_ICONQUESTION) = ID_YES then + begin + if Form_Main.CheckConnectionCloseable(ConID) then + if not ConManager.CloseConnection(ConID, ConRepMsg) then + begin + ShowMessage('Couldn''t close destination-file. Aborting'); + Exit; + end; + end else begin + ShowMessage('Aborting'); + Exit; + end; end; - - if CreateDataConnection(Source, ODB_ADB) = nil then + if FileExists(Target) then begin - ShowMessage('Could not connect to .oldb-file'); - Exit; + if MessageBox(Self.Handle, PChar('Destination-file exists. ' + + 'Overwrite it?'), PChar('Destination-file exists'), + MB_YESNO + MB_ICONWARNING) = ID_YES then + begin + if not DeleteFile(Target) then + begin + ShowMessage('Couldn''t delete file. Aborting'); + Exit; + end else if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.raw')) then + begin + ShowMessage('Couldn''t delete file. Aborting'); + Exit; + end else if not DeleteFile(AnsiReplaceStr(Target, '.dat', '.sep')) then + begin + ShowMessage('Couldn''t delete file. Aborting'); + Exit; + end; + end else begin + ShowMessage('Aborting'); + Exit; + end; end; - levelid := OniDataConnection.LevelInfo.LevelNumber; - levelid := (levelid * 2) * 256 * 256 * 256 + $01; - OniImage := TOniImage.Create; - absolutebegintime := Time; + LevelID := Connection.LevelNumber; + LevelID := (LevelID * 2) * 256 * 256 * 256 + $01; + OniImage := TOniImage.Create; Self.Visible := True; Form_Main.Visible := False; - step := 0; - converting := True; - abort := False; + Step := 0; + Converting := True; + Abort := False; btn_abortok.Caption := '&Abort...'; btn_abortok.Default := False; - absolutebegintime := Time; + BeginTime := Time; Stream_Body := TMemoryStream.Create; Stream_Names := TMemoryStream.Create; - Stream_Dat := TFileStream.Create(target, fmCreate); - Stream_Raw := TFileStream.Create(AnsiReplaceStr(target, '.dat', '.raw'), fmCreate); - if OniDataConnection.OSisMac then - Stream_Sep := TFileStream.Create(AnsiReplaceStr(target, '.dat', '.sep'), fmCreate); + Stream_Dat := TFileStream.Create(Target, fmCreate); + Stream_Raw := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.raw'), fmCreate); + if Connection.DataOS in [DOS_WINDEMO, DOS_MAC, DOS_MACBETA] then + Stream_Sep := TFileStream.Create(AnsiReplaceStr(Target, '.dat', '.sep'), fmCreate); DoStep('Creating header'); progress.Position := 0; @@ -156,7 +190,25 @@ begin lbl_estimation.Caption := 'Estimated finishing time: unknown'; Application.ProcessMessages; - NamedFilesHeader := TOniDataADB(OniDataConnection).GetNamedFilesMap; + SetLength(NamedFilesHeader, 0); + Strings := TStringList.Create; + Strings := Connection.GetFilesList('', '', False, ST_ExtNameAsc); + for i := 0 to Strings.Count - 1 do + begin + if MidStr(Strings.Strings[i], + Pos('-', Strings.Strings[i]) + 1, + Length(Strings.Strings[i]) - + Pos('.', ReverseString(Strings.Strings[i])) - + Pos('-', Strings.Strings[i]) + ) <> '' then + begin + SetLength(NamedFilesHeader, Length(NamedFilesHeader) + 1); + NamedFilesHeader[High(NamedFilesHeader)].FileNumber := StrToInt(MidStr(Strings.Strings[i], 1, 5)); + NamedFilesHeader[High(NamedFilesHeader)].blubb := 0; + end; + end; + + extlist := OniDataConnection.GetExtendedExtensionsList; for i := 0 to High(DatHeader.Ident) do DatHeader.Ident[i] := OniDataConnection.LevelInfo.Ident[i]; @@ -172,6 +224,7 @@ begin SetLength(FilesHeader, DatHeader.Files); SetLength(ExtensionsHeader, DatHeader.Extensions); + DoStep('Writing extensions-header'); progress.Max := Length(OniDataConnection.GetExtensionsList); Application.ProcessMessages; @@ -191,6 +244,7 @@ begin Application.ProcessMessages; end; + DoStep('Storing files-data'); progress.Position := 0; progress.Max := DatHeader.Files; @@ -354,6 +408,10 @@ end; procedure TForm_LevelDB.CreateDatabase(Source, target: String); var + DataBase: TABSDatabase; + Query: TABSQuery; + MimeCoder: TStringFormat_MIME64; + i, j: LongWord; temps, temps2: String; Data: Tdata;