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

Comparing:
oup/rewrite/DataAccess/Access_OUP_ADB.pas (file contents), Revision 105 by alloc, Wed Feb 21 00:29:27 2007 UTC vs.
oup/current/DataAccess/Access_OUP_ADB.pas (file contents), Revision 155 by alloc, Sun Apr 1 21:14:29 2007 UTC

# Line 17 | Line 17 | type
17  
18      procedure UpdateListCache;
19  
20 +    function GetLinksToFile(FileID: Integer): TLinks;
21 +
22      function GetFileInfo(FileID: Integer): TFileInfo; override;
23      function GetFilesList(Ext: String; Pattern: String;
24        NoEmptyFiles: Boolean; SortType: TSortType): TStrings; override;
# Line 28 | Line 30 | type
30      procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TStream); overload; override;
31      procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TStream); overload; override;
32  
33 +    function GetDatLinks(FileID: Integer): TDatLinkList; override;
34 +    function GetDatLink(FileID, DatOffset: Integer): TDatLink; override;
35      function GetRawList(FileID: Integer): TRawDataList; override;
36      function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; override;
37  
# Line 42 | Line 46 | type
46   implementation
47  
48   uses
49 <  SysUtils, Data, Functions, ABSDecUtil, DB;
49 >  SysUtils, Data, Functions, ABSDecUtil, DB, DatLinks;
50  
51  
52   (*
# Line 52 | Line 56 | uses
56  
57  
58   constructor TAccess_OUP_ADB.Create(DBFilename: String; ConnectionID: Integer; var Msg: TStatusMessages);
55 var
56  i: Integer;
59   begin
60    Msg := SM_UnknownError;
61    if not FileExists(DBFilename) then
# Line 64 | Line 66 | begin
66    FFileName := DBFilename;
67  
68    FDatabase := TABSDatabase.Create(nil);
69 +  FDatabase.Exclusive := True;
70 +  FDatabase.MultiUser := False;
71    FDatabase.DatabaseName := 'OLDBcon' + IntToStr(ConnectionID);
72    FDatabase.DatabaseFileName := DBFilename;
73    FDatabase.Open;
74    FQuery := TABSQuery.Create(FDatabase);
75 +  FQuery.DisableControls;
76 +  FQuery.RequestLive := False;
77    FQuery.DatabaseName := 'OLDBcon' + IntToStr(ConnectionID);
78    FQuery.SQL.Text := 'SELECT [name],[value] FROM globals ORDER BY [name] ASC';
79    FQuery.Open;
# Line 138 | Line 144 | begin
144        Fdat_files[i].Name := FQuery.FieldByName('name').AsString;
145        Fdat_files[i].Extension := FQuery.FieldByName('extension').AsString;
146        Fdat_files[i].Size := FQuery.FieldByName('size').AsInteger;
147 <      Fdat_files[i].FileType := HexToLong(FQuery.FieldByName('contenttype').AsString);
147 >      Fdat_files[i].FileType := StrToInt('$'+FQuery.FieldByName('contenttype').AsString);
148        Fdat_files[i].DatAddr := 0;
149        Inc(i);
150        FQuery.Next;
# Line 168 | Line 174 | begin
174   end;
175  
176  
177 +
178 + function TAccess_OUP_ADB.GetLinksToFile(FileID: Integer): TLinks;
179 + var
180 +  i: Integer;
181 + begin
182 +  SetLength(Result.ByName, 0);
183 +  FQuery.SQL.Text := 'SELECT src_link_offset, src_id FROM linkmap WHERE target_id = ' + IntToStr(FileID) + ' ORDER BY src_id ASC;';
184 +  FQuery.Open;
185 +  SetLength(Result.ByID, FQuery.RecordCount);
186 +  if FQuery.RecordCount > 0 then
187 +  begin
188 +    i := 0;
189 +    repeat
190 +      Result.ByID[i].SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger;
191 +      Result.ByID[i].Destination := FQuery.FieldByName('src_id').AsInteger;
192 +      Inc(i);
193 +      FQuery.Next;
194 +    until FQuery.EOF;
195 +  end;
196 +  FQuery.Close;
197 + end;
198 +
199 +
200 +
201   function TAccess_OUP_ADB.GetFileInfo(fileid: Integer): TFileInfo;
202   begin
203    if fileid = -1 then
# Line 213 | Line 243 | var
243        name := fields.Strings[2];
244        extension := fields.Strings[0];
245      end;
246 +    if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then
247 +    begin
248 +      id := fields.Strings[2];
249 +      name := fields.Strings[1];
250 +      extension := fields.Strings[0];
251 +    end;
252    end;
253  
254   begin
255    list := TStringList.Create;
256 +  list.CaseSensitive := True;
257    list.Sorted := True;
258    for i := 0 to GetFileCount - 1 do
259    begin
# Line 226 | Line 263 | begin
263      begin
264        if (NoEmptyFiles = False) or ((Fdat_files[i].FileType and $02) = 0) then
265        begin
266 <        if AppSettings.FilenumbersAsHex then
230 <          id := IntToHex(Fdat_files[i].ID, 4)
231 <        else
232 <          id := FormatNumber(Fdat_files[i].ID, 5, '0');
266 >        id := FormatNumber(Fdat_files[i].ID, 5, '0');
267          name := Fdat_files[i].Name;
268          extension := Fdat_files[i].Extension;
269  
# Line 237 | Line 271 | begin
271            ST_IDAsc, ST_IDDesc:     list.Add(id + ';' + name + ';' + extension);
272            ST_NameAsc, ST_NameDesc: list.Add(name + ';' + id + ';' + extension);
273            ST_ExtAsc, ST_ExtDesc:   list.Add(extension + ';' + id + ';' + name);
274 +          ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id);
275          end;
276        end;
277      end;
278    end;
279 <  Result := TStringList.Create;
279 >  if not Assigned(Result) then
280 >    Result := TStringList.Create;
281    if list.Count > 0 then
282    begin
283      fields := TStringList.Create;
284 <    if SortType in [ST_IDAsc, ST_NameAsc, ST_ExtAsc] then
284 >    if SortType in [ST_IDAsc, ST_NameAsc, ST_ExtAsc, ST_ExtNameAsc] then
285        for i := 0 to list.Count - 1 do
286        begin
287          getfields;
# Line 275 | Line 311 | function TAccess_OUP_ADB.GetExtensionsLi
311   var
312    i: Integer;
313   begin
314 <  Result := TStringList.Create;
314 >  if not Assigned(Result) then
315 >    Result := TStringList.Create;
316 >  if Result is TStringList then
317 >    TStringList(Result).Sorted := True;
318    for i := 0 to Length(Fdat_extensionsmap) - 1 do
319    begin
320      with Fdat_extensionsmap[i] do
# Line 388 | Line 427 | begin
427    end;
428   end;
429  
430 +
431 +
432 + function TAccess_OUP_ADB.GetDatLink(FileID, DatOffset: Integer): TDatLink;
433 + begin
434 +  Result := DatLinksManager.GetDatLink(FConnectionID, FileID, DatOffset);
435 +  FQuery.SQL.Text := 'SELECT target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' and src_link_offset = ' + IntToStr(DatOffset) + ';';
436 +  FQuery.Open;
437 +  if FQuery.RecordCount > 0 then
438 +    Result.DestID := FQuery.FieldByName('target_id').AsInteger;
439 +  FQuery.Close;
440 + end;
441 +
442 +
443 + function TAccess_OUP_ADB.GetDatLinks(FileID: Integer): TDatLinkList;
444 + var
445 +  i: Integer;
446 +  SrcOffset, DestID: Integer;
447 + begin
448 +  Result := DatLinksManager.GetDatLinks(FConnectionID, FileID);
449 +  if Length(Result) > 0 then
450 +  begin
451 +    FQuery.SQL.Text := 'SELECT src_link_offset, target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' ORDER BY src_link_offset ASC;';
452 +    FQuery.Open;
453 +    if FQuery.RecordCount > 0 then
454 +    begin
455 +      repeat
456 +        SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger;
457 +        DestID := FQuery.FieldByName('target_id').AsInteger;
458 +        for i := 0 to High(Result) do
459 +          if Result[i].SrcOffset = SrcOffset then
460 +            Break;
461 +        if i < Length(Result) then
462 +          Result[i].DestID := DestID
463 +        else
464 +          Result[i].DestID := -1;
465 +        FQuery.Next;
466 +      until FQuery.EOF;
467 +    end;
468 +    FQuery.Close;
469 +  end;
470 + end;
471 +
472  
473   function TAccess_OUP_ADB.GetRawList(FileID: Integer): TRawDataList;
474   var

Diff Legend

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