Browse Source

Task #1232 项目管理文件取消加密

MaiXinRong 9 years ago
parent
commit
6e1a0cff58
4 changed files with 65 additions and 11 deletions
  1. 7 3
      DataModules/ProjectManagerDm.pas
  2. 1 1
      Frames/ZJJLFme.pas
  3. 50 7
      Units/Connections.pas
  4. 7 0
      Units/UpdateDataBase.pas

+ 7 - 3
DataModules/ProjectManagerDm.pas

@@ -25,7 +25,7 @@ type
     procedure sdvProjectsInfoBeforeDeleteRecord(ARecord: TsdDataRecord;
       var Allow: Boolean);
   private
-    FConnection: TEncryptConnection;
+    FConnection: TCommonConnection;
     FProjectsTree: TsdIDTree;
     FBackupManager: TBackupManager;
 
@@ -79,7 +79,7 @@ uses
 constructor TProjectManagerData.Create;
 begin
   inherited Create(nil);
-  FConnection := TEncryptConnection.Create;
+  FConnection := TCommonConnection.Create;
   FProjectsTree := TsdIDTree.Create;
   FProjectsTree.KeyFieldName := 'ID';
   FProjectsTree.ParentFieldName := 'ParentID';
@@ -276,9 +276,13 @@ end;
 
 procedure TProjectManagerData.Open;
 var
+  sFileName: string;
   FQuery: TADOQuery;
 begin
-  FConnection.Open(GetAppFilePath + 'Data\ProjectManager.dat');
+  sFileName := GetAppFilePath + 'Data\ProjectManager.dat';
+  if FileEncrypted(sFileName) then
+    SimpleDecrypt(sFileName, sFileName);
+  FConnection.Open(sFileName);
 
   UpdateManagerDataBase;
   sdpProjectsInfo.Connection := FConnection.Connection;

+ 1 - 1
Frames/ZJJLFme.pas

@@ -127,7 +127,7 @@ procedure TZJJLFrame.zgZJJLMouseDown(Sender: TObject; Button: TMouseButton;
 begin
   if Button = mbRight then
     dxpmZJJL.PopupFromCursorPos
-  else if (ssDouble in Shift) and (zgZJJL.CurCol = 3) then
+  else if (ssDouble in Shift) and (zgZJJL.CurCol = 1) then
   begin
     if FZJJLData.cdsZJJLView.RecordCount > 0 then
       FZJJLData.LocateBills;

+ 50 - 7
Units/Connections.pas

@@ -21,7 +21,7 @@ type
     function GetConnection: TADOConnection; virtual; abstract;
   public
     procedure Open(const AFileName: string); virtual; abstract;
-    procedure Save; virtual;
+    procedure Save; virtual; abstract;
     procedure Close;
     function HasOpened: Boolean; virtual; abstract;
 
@@ -81,6 +81,7 @@ type
     destructor Destroy; override;
     procedure Open(const AFileName: string); override;
     procedure Save; override;
+    procedure UnEncryptSave;
 
     procedure UpdateFileVersion;
     procedure SaveDebugFile(const AFileName: string);
@@ -90,6 +91,7 @@ type
   end;
 
   procedure SimpleDecrypt(const ASourceFile, AResultFile: string);
+  function FileEncrypted(const AFileName: string): Boolean;
 
 implementation
 
@@ -128,6 +130,31 @@ procedure SimpleDecrypt(const ASourceFile, AResultFile: string);
     end;
   end;
 
+  procedure RecoverFileHead(const AFileName: string);
+  var
+    sTempFile: string;
+    FileStream: TFileStream;
+  begin
+    sTempFile := ExtractFilePath(AFileName) + ExtractSimpleFileName(AFileName) + '.tmp';
+    CopyFile(PChar(AFileName), PChar(sTempFile), False);
+    try
+      if FileExists(sTempFile) then
+      begin
+        FileStream := TFileStream.Create(sTempFile, fmOpenWrite);
+        try
+          FileStream.Seek($00, soFromBeginning);
+          FileStream.Write(MDBOrgHead, SizeOf(MDBOrgHead));
+        finally
+          FileStream.Free;
+        end;
+        CopyFile(PChar(sTempFile), PChar(AFileName), False);
+        DeleteFile(PChar(sTempFile));
+      end;
+    except
+      DeleteFile(PChar(sTempFile));
+    end;
+  end;
+
 var
   sTempFile: string;
 begin
@@ -137,11 +164,26 @@ begin
     CopyFile(PChar(ASourceFile), PChar(sTempFile), False);
     RemoveHead(sTempFile);
     AutoDecryptFile(sTempFile, AResultFile);
+    RecoverFileHead(AResultFile);
   finally
     DeleteFile(PChar(sTempFile));
   end;
 end;
 
+function FileEncrypted(const AFileName: string): Boolean;
+var
+  FileHead: TDrawingFileHead;
+  FileStream: TFileStream;
+begin
+  FileStream := TFileStream.Create(AFileName, fmOpenRead);
+  try
+    FileStream.ReadBuffer(FileHead, SizeOf(TDrawingFileHead));
+    Result := FileHead.ProductName = ProductName;
+  finally
+    FileStream.Free;
+  end;
+end;
+
 procedure EncryptFile(const AFileName: string);
 var
   fileStream: TFileStream;
@@ -451,6 +493,12 @@ begin
   end;
 end;
 
+procedure TEncryptConnection.UnEncryptSave;
+begin
+  RecoverFileHead(FFileName);
+  
+end;
+
 { TConnection }
 
 procedure TConnection.Close;
@@ -458,11 +506,6 @@ begin
   Connection.Close;
 end;
 
-procedure TConnection.Save;
-begin
-
-end;
-
 { TCommonConnection }
 
 constructor TCommonConnection.Create;
@@ -493,7 +536,7 @@ begin
   Close;
   if FileExists(AFileName) then
   begin
-    DecryptFile(AFileName);
+    //DecryptFile(AFileName);
     InnerOpen(AFileName);
   end
   else

+ 7 - 0
Units/UpdateDataBase.pas

@@ -18,6 +18,8 @@ type
   TUpdateManagerDB = class(TUpdateDB)
   private
     Procedure UpdateAllTables(AConnection: TADOConnection); override;
+  public
+    procedure Update(AConnection: TConnection); overload;
   end;
 
   TUpdateProjectDB = class(TUpdateDB)
@@ -178,6 +180,11 @@ end;
 
 { TUpdateManagerDB }
 
+procedure TUpdateManagerDB.Update(AConnection: TConnection);
+begin
+  UpdateAllTables(AConnection.Connection);
+end;
+
 procedure TUpdateManagerDB.UpdateAllTables(AConnection: TADOConnection);
 var
   Updater: TScUpdater;