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

Comparing oup/current/DataAccess/Access_OUP_ADB.pas (file contents):
Revision 113 by alloc, Sun Feb 25 17:20:22 2007 UTC vs.
Revision 156 by alloc, Sun Apr 1 22:49:17 2007 UTC

# Line 18 | Line 18 | type
18      procedure UpdateListCache;
19  
20      function GetLinksToFile(FileID: Integer): TLinks;
21    function GetLinksFromFile(FileID: Integer): TLinks;
21  
22      function GetFileInfo(FileID: Integer): TFileInfo; override;
23      function GetFilesList(Ext: String; Pattern: String;
# Line 32 | Line 31 | type
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 46 | Line 46 | type
46   implementation
47  
48   uses
49 <  SysUtils, Data, Functions, ABSDecUtil, DB;
49 >  SysUtils, Data, Functions, ABSDecUtil, DB, DatLinks, StrUtils;
50  
51  
52   (*
# Line 66 | 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 192 | Line 196 | begin
196    FQuery.Close;
197   end;
198  
195 function TAccess_OUP_ADB.GetLinksFromFile(FileID: Integer): TLinks;
196 var
197  i: Integer;
198 begin
199  SetLength(Result.ByName, 0);
200  FQuery.SQL.Text := 'SELECT src_link_offset, target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' ORDER BY target_id ASC;';
201  FQuery.Open;
202  SetLength(Result.ByID, FQuery.RecordCount);
203  if FQuery.RecordCount > 0 then
204  begin
205    i := 0;
206    repeat
207      Result.ByID[i].SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger;
208      Result.ByID[i].Destination := FQuery.FieldByName('target_id').AsInteger;
209      Inc(i);
210      FQuery.Next;
211    until FQuery.EOF;
212  end;
213  FQuery.Close;
214 end;
215
199  
200  
201   function TAccess_OUP_ADB.GetFileInfo(fileid: Integer): TFileInfo;
# Line 230 | Line 213 | end;
213  
214  
215  
216 +  function CompareItems(List: TStringList; I1, I2: Integer): Integer;
217 +  var
218 +    fin: Boolean;
219 +    pos: Integer;
220 +    s1, s2: String;
221 +  begin
222 +    fin := False;
223 +    s1 := MidStr(List[I1], 1, PosEx(';', List[I1], 6) - 1);
224 +    s2 := MidStr(List[I2], 1, PosEx(';', List[I2], 6) - 1);
225 +    pos := 1;
226 +    Result := 0;
227 +    repeat
228 +      if Ord(s1[pos]) < Ord(s2[pos]) then
229 +      begin
230 +        Result := -1;
231 +        fin := True;
232 +      end
233 +      else if Ord(s1[pos]) > Ord(s2[pos]) then
234 +      begin
235 +        Result := 1;
236 +        fin := True;
237 +      end;
238 +      Inc(pos);
239 +    until fin or (pos > Length(s1)) or (pos > Length(s2));
240 +
241 +    if not fin then
242 +    begin
243 +      if pos > Length(s1) then
244 +        Result := -1
245 +      else
246 +        Result := 1;
247 +    end;
248 +  end;
249  
250   function TAccess_OUP_ADB.GetFilesList(ext: String; pattern: String;
251    NoEmptyFiles: Boolean; SortType: TSortType): TStrings;
# Line 270 | Line 286 | var
286  
287   begin
288    list := TStringList.Create;
289 <  list.Sorted := True;
289 >  if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then
290 >    list.Sorted := False
291 >  else
292 >    list.Sorted := True;
293    for i := 0 to GetFileCount - 1 do
294    begin
295      if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and
# Line 287 | Line 306 | begin
306            ST_IDAsc, ST_IDDesc:     list.Add(id + ';' + name + ';' + extension);
307            ST_NameAsc, ST_NameDesc: list.Add(name + ';' + id + ';' + extension);
308            ST_ExtAsc, ST_ExtDesc:   list.Add(extension + ';' + id + ';' + name);
309 <          ST_ExtNameAsc, ST_ExtNameDesc: list.Add(name + ';' + extension + ';' + id);
309 >          ST_ExtNameAsc, ST_ExtNameDesc: list.Add(extension + ';' + name + ';' + id);
310          end;
311        end;
312      end;
313    end;
314 +  if SortType in [ST_ExtNameAsc, ST_ExtNameDesc] then
315 +    list.CustomSort(CompareItems);
316    if not Assigned(Result) then
317      Result := TStringList.Create;
318    if list.Count > 0 then
# Line 443 | Line 464 | begin
464    end;
465   end;
466  
467 +
468 +
469 + function TAccess_OUP_ADB.GetDatLink(FileID, DatOffset: Integer): TDatLink;
470 + begin
471 +  Result := DatLinksManager.GetDatLink(FConnectionID, FileID, DatOffset);
472 +  FQuery.SQL.Text := 'SELECT target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' and src_link_offset = ' + IntToStr(DatOffset) + ';';
473 +  FQuery.Open;
474 +  if FQuery.RecordCount > 0 then
475 +    Result.DestID := FQuery.FieldByName('target_id').AsInteger;
476 +  FQuery.Close;
477 + end;
478 +
479 +
480 + function TAccess_OUP_ADB.GetDatLinks(FileID: Integer): TDatLinkList;
481 + var
482 +  i: Integer;
483 +  SrcOffset, DestID: Integer;
484 + begin
485 +  Result := DatLinksManager.GetDatLinks(FConnectionID, FileID);
486 +  if Length(Result) > 0 then
487 +  begin
488 +    FQuery.SQL.Text := 'SELECT src_link_offset, target_id FROM linkmap WHERE src_id = ' + IntToStr(FileID) + ' ORDER BY src_link_offset ASC;';
489 +    FQuery.Open;
490 +    if FQuery.RecordCount > 0 then
491 +    begin
492 +      repeat
493 +        SrcOffset := FQuery.FieldByName('src_link_offset').AsInteger;
494 +        DestID := FQuery.FieldByName('target_id').AsInteger;
495 +        for i := 0 to High(Result) do
496 +          if Result[i].SrcOffset = SrcOffset then
497 +            Break;
498 +        if i < Length(Result) then
499 +          Result[i].DestID := DestID
500 +        else
501 +          Result[i].DestID := -1;
502 +        FQuery.Next;
503 +      until FQuery.EOF;
504 +    end;
505 +    FQuery.Close;
506 +  end;
507 + end;
508 +
509  
510   function TAccess_OUP_ADB.GetRawList(FileID: Integer): TRawDataList;
511   var

Diff Legend

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