Initial import
This commit is contained in:
parent
b10456a264
commit
c1b1da1639
|
@ -0,0 +1,211 @@
|
||||||
|
Unit mUtil_NodeList;
|
||||||
|
|
||||||
|
{$I M_OPS.PAS}
|
||||||
|
|
||||||
|
Interface
|
||||||
|
|
||||||
|
Procedure uMergeNodeList;
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
|
||||||
|
Uses
|
||||||
|
DOS,
|
||||||
|
m_FileIO,
|
||||||
|
m_Strings,
|
||||||
|
m_DateTime,
|
||||||
|
BBS_DataBase,
|
||||||
|
mUtil_Common,
|
||||||
|
mUtil_Status;
|
||||||
|
|
||||||
|
Procedure ExtractNodeLists (BaseFile: String);
|
||||||
|
Var
|
||||||
|
DirInfo : SearchRec;
|
||||||
|
FileChar : Char;
|
||||||
|
FileNum : LongInt;
|
||||||
|
ArcType : String;
|
||||||
|
Begin
|
||||||
|
DirClean (TempPath, '');
|
||||||
|
|
||||||
|
FindFirst (BaseFile + '.*', AnyFile, DirInfo);
|
||||||
|
|
||||||
|
While DosError = 0 Do Begin
|
||||||
|
If DirInfo.Attr And Directory <> 0 Then Begin
|
||||||
|
FindNext (DirInfo);
|
||||||
|
|
||||||
|
Continue;
|
||||||
|
End;
|
||||||
|
|
||||||
|
FileChar := UpCase(JustFileExt(DirInfo.Name)[1]);
|
||||||
|
FileNum := strS2I(Copy(JustFileExt(DirInfo.Name), 2, 255));
|
||||||
|
|
||||||
|
If (FileChar in ['A','L','R','Z']) and (FileNum > 0) Then Begin
|
||||||
|
Case FileChar of
|
||||||
|
'A' : ArcType := 'ARJ';
|
||||||
|
'L' : ArcType := 'LZH';
|
||||||
|
'R' : ArcType := 'RAR';
|
||||||
|
'Z' : ArcType := 'ZIP';
|
||||||
|
End;
|
||||||
|
|
||||||
|
ProcessStatus ('Extracting ' + JustFile(DirInfo.Name), False);
|
||||||
|
ExecuteArchive (TempPath, JustPath(BaseFile) + DirInfo.Name, ArcType, '*', 2);
|
||||||
|
End;
|
||||||
|
|
||||||
|
FindNext(DirInfo);
|
||||||
|
End;
|
||||||
|
|
||||||
|
FindClose(DirInfo);
|
||||||
|
End;
|
||||||
|
|
||||||
|
Function CompareFileInfo (F1: SearchRec; F2: SearchRec; Var Winner: Byte) : SearchRec;
|
||||||
|
Var
|
||||||
|
DT1 : DateTime;
|
||||||
|
DT2 : DateTime;
|
||||||
|
Begin
|
||||||
|
Winner := 0;
|
||||||
|
|
||||||
|
UnpackTime (F1.Time, DT1);
|
||||||
|
UnpackTime (F2.Time, DT2);
|
||||||
|
|
||||||
|
Log (3, '+', ' Compare ' + F1.Name + ' ' + FormatDate(DT1, 'YYYY') + ' / ' + F2.Name + ' ' + FormatDate(DT2, 'YYYY'));
|
||||||
|
|
||||||
|
If strS2I(JustFileExt(F1.Name)) >= strS2I(JustFileExt(F2.Name)) Then
|
||||||
|
If DT1.Year >= DT2.Year Then Begin
|
||||||
|
Result := F1;
|
||||||
|
Winner := 1;
|
||||||
|
End Else Begin
|
||||||
|
Result := F2;
|
||||||
|
Winner := 2;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If strS2I(JustFileExt(F2.Name)) >= strS2I(JustFileExt(F1.Name)) Then
|
||||||
|
If DT2.Year >= DT1.Year Then Begin
|
||||||
|
Result := F2;
|
||||||
|
Winner := 2;
|
||||||
|
End Else Begin
|
||||||
|
Result := F1;
|
||||||
|
Winner := 1;
|
||||||
|
End;
|
||||||
|
|
||||||
|
Log (3, '+', ' Result ' + strI2S(Winner));
|
||||||
|
End;
|
||||||
|
|
||||||
|
Function FindNodeListFile (Var Res: SearchRec; BaseFile: String) : Boolean;
|
||||||
|
Var
|
||||||
|
DirInfo : SearchRec;
|
||||||
|
Temp : Byte;
|
||||||
|
Begin
|
||||||
|
Result := False;
|
||||||
|
|
||||||
|
FillChar (Res, SizeOf(Res), 0);
|
||||||
|
|
||||||
|
FindFirst (BaseFile + '.*', AnyFile, DirInfo);
|
||||||
|
|
||||||
|
While DosError = 0 Do Begin
|
||||||
|
If DirInfo.Attr And Directory <> 0 Then Begin
|
||||||
|
FindNext (DirInfo);
|
||||||
|
|
||||||
|
Continue;
|
||||||
|
End;
|
||||||
|
|
||||||
|
If strS2I(JustFileExt(DirInfo.Name)) > 0 Then Begin
|
||||||
|
Result := True;
|
||||||
|
Res := CompareFileInfo(DirInfo, Res, Temp);
|
||||||
|
End;
|
||||||
|
|
||||||
|
FindNext (DirInfo);
|
||||||
|
End;
|
||||||
|
|
||||||
|
FindClose (DirInfo);
|
||||||
|
End;
|
||||||
|
|
||||||
|
Procedure ProcessNodeList (BaseFile: String);
|
||||||
|
Var
|
||||||
|
Winner : Byte;
|
||||||
|
Dir1 : SearchRec;
|
||||||
|
Dir2 : SearchRec;
|
||||||
|
Res : SearchRec;
|
||||||
|
ResPath : String;
|
||||||
|
Got1 : Boolean;
|
||||||
|
Got2 : Boolean;
|
||||||
|
NotFound : Boolean;
|
||||||
|
Begin
|
||||||
|
ExtractNodeLists (BaseFile);
|
||||||
|
|
||||||
|
Got1 := FindNodeListFile (Dir1, BaseFile);
|
||||||
|
Got2 := FindNodeListFile (Dir2, TempPath + JustFile(BaseFile));
|
||||||
|
|
||||||
|
NotFound := False;
|
||||||
|
|
||||||
|
If Got1 And Got2 Then Begin
|
||||||
|
Res := CompareFileInfo(Dir1, Dir2, Winner);
|
||||||
|
|
||||||
|
If Winner = 1 Then
|
||||||
|
ResPath := JustPath(BaseFile)
|
||||||
|
Else
|
||||||
|
ResPath := TempPath;
|
||||||
|
End Else
|
||||||
|
If Got1 Then Begin
|
||||||
|
Res := Dir1;
|
||||||
|
ResPath := JustPath(BaseFile);
|
||||||
|
End Else
|
||||||
|
If Got2 Then Begin
|
||||||
|
Res := Dir2;
|
||||||
|
ResPath := TempPath;
|
||||||
|
End Else
|
||||||
|
NotFound := True;
|
||||||
|
|
||||||
|
If Not NotFound Then Begin
|
||||||
|
ProcessStatus ('Merging ' + ResPath + Res.Name, False);
|
||||||
|
FileAppend (ResPath + Res.Name, bbsCfg.DataPath + 'nodelist.txt');
|
||||||
|
End;
|
||||||
|
|
||||||
|
DirClean(TempPath, '');
|
||||||
|
End;
|
||||||
|
|
||||||
|
Procedure uMergeNodeList;
|
||||||
|
Var
|
||||||
|
Done : LongInt = 0;
|
||||||
|
Total : LongInt = 0;
|
||||||
|
List : String;
|
||||||
|
Begin
|
||||||
|
ProcessName ('Merging Nodelists', True);
|
||||||
|
ProcessResult (rWORKING, False);
|
||||||
|
|
||||||
|
FileErase (bbsCfg.DataPath + 'nodelist.$$$');
|
||||||
|
FileReName (bbsCfg.DataPath + 'nodelist.txt', bbsCfg.DataPath + 'nodelist.$$$');
|
||||||
|
|
||||||
|
Ini.SetSequential(True);
|
||||||
|
|
||||||
|
Repeat
|
||||||
|
List := INI.ReadString(Header_NODELIST, 'nodefile', '');
|
||||||
|
|
||||||
|
If List = '' Then Break;
|
||||||
|
|
||||||
|
Inc (Total);
|
||||||
|
Until False;
|
||||||
|
|
||||||
|
Ini.SetSequential(True);
|
||||||
|
|
||||||
|
Repeat
|
||||||
|
List := INI.ReadString(Header_NODELIST, 'nodefile', '');
|
||||||
|
|
||||||
|
If List = '' Then Break;
|
||||||
|
|
||||||
|
Inc (Done);
|
||||||
|
|
||||||
|
ProcessStatus ('Merging ' + JustFile(List), False);
|
||||||
|
BarOne.Update (Done, Total);
|
||||||
|
|
||||||
|
ProcessNodeList(List);
|
||||||
|
Until False;
|
||||||
|
|
||||||
|
If FileExist (bbsCfg.DataPath + 'nodelist.txt') Then
|
||||||
|
FileErase (bbsCfg.DataPath + 'nodelist.$$$')
|
||||||
|
Else
|
||||||
|
FileReName (bbsCfg.DataPath + 'nodelist.$$$', bbsCfg.DataPath + 'nodelist.txt');
|
||||||
|
|
||||||
|
ProcessStatus ('Merged |15' + strI2S(Done) + ' |07of |15' + strI2S(Total) + ' |07nodelist(s)', True);
|
||||||
|
ProcessResult (rDONE, True);
|
||||||
|
End;
|
||||||
|
|
||||||
|
End.
|
Loading…
Reference in New Issue