From 8dc542e9e83f94cc926913ac3ee3521390c584cd Mon Sep 17 00:00:00 2001 From: Raymond Date: Wed, 10 Nov 2010 20:05:39 +0100 Subject: [PATCH] Updatesszzzz --- Projects/ScriptManager/scriptmanager.lfm | 1 - Projects/ScriptManager/scriptmanager.pas | 140 +++++++++++++++++++++-- 2 files changed, 129 insertions(+), 12 deletions(-) diff --git a/Projects/ScriptManager/scriptmanager.lfm b/Projects/ScriptManager/scriptmanager.lfm index 19a390a..609523d 100644 --- a/Projects/ScriptManager/scriptmanager.lfm +++ b/Projects/ScriptManager/scriptmanager.lfm @@ -21,7 +21,6 @@ object Form1: TForm1 Width = 414 end> IconOptions.Arrangement = iaLeft - ItemIndex = -1 LargeImages = ImageList1 ScrollBars = ssAutoBoth SmallImages = ImageList1 diff --git a/Projects/ScriptManager/scriptmanager.pas b/Projects/ScriptManager/scriptmanager.pas index 44fb12d..ec9e97c 100644 --- a/Projects/ScriptManager/scriptmanager.pas +++ b/Projects/ScriptManager/scriptmanager.pas @@ -21,6 +21,12 @@ Script Manager for the Simba project. } +{ +Raymond`, 11-9-2010 20:26:27: +ScriptManager/General/Settings.xml (Lijst van alle geinstaleerde scripts) +ScriptManager/General//Info.xml (Informatie over het script) +ScriptManager// (Alle files die het script nodig heeft) +} unit scriptmanager; {$mode objfpc}{$H+} @@ -77,25 +83,34 @@ type TLSimbaScript = class(TSimbaScript) //Installed Script (Local Simba Script) public + AutoCheckUpdates : boolean; + OnlineScript : TSimbaScript; procedure LoadFromFile(const filename : string); + function LoadFromName(const ScriptName,maindir : string) : boolean; //Maindir = maindir of ScriptManager procedure SaveToFile(const FileName : string); procedure Save(const MainDir : string); //MainDir = maindir of ScriptManager + constructor create; end; { TScriptManager } TScriptManager = class (TObject) private + FMaindir: string; FScripts : TList; //Array of the online scripts FLScripts: TList; //Array of the local scripts FVersion : String; FUpdating : boolean; function GetLScriptCount: integer; + function GetMainDir: string; function GetScriptCount: integer; public - MainDir : string; - procedure Update; //Gets the new online scripts + property MainDir : string read GetMainDir write FMaindir; + procedure Update; //Gets the online scripts procedure LUpdate; //Loads the local scripts, uses MainDir + function NewVersion(Script : integer) : boolean; //Checks for updates for Script + procedure InstallNewScript(Script : integer); //Installs Script (Online -> Local) + procedure UpdateScript(Script : integer); //Updates all the info/files of local script procedure LSave; //Saves the local scripts, uses MainDir property LScriptCount : integer read GetLScriptCount; //LScript = Local Script = Installed Script property ScriptCount : integer read GetScriptCount; //Online script @@ -272,6 +287,11 @@ begin result := FLScripts.Count; end; +function TScriptManager.GetMainDir: string; +begin + result := IncludeTrailingPathDelimiter(FMainDir); +end; + function TScriptManager.GetScriptCount: integer; begin result := FScripts.Count; @@ -285,7 +305,7 @@ var Node,Script : TDOMNode; Subs : TStringList; Down : TDownloadThread; - SimbaScript : TLSimbaScript; + SimbaScript : TSimbaScript; begin if FUpdating then exit; @@ -309,29 +329,104 @@ begin script := Node.FirstChild; while Script <> nil do begin - SimbaScript := TLSimbaScript.Create; + SimbaScript := TSimbaScript.Create; SimbaScript.LoadFromNode(Script); - FLScripts.Add(SimbaScript); + FScripts.Add(SimbaScript); SimbaScript.Dbg; Script := Script.NextSibling; end; end; - SimbaScript.SaveToFile('c:\testme.xml'); XMLDoc.Free; FUpdating := false; end; procedure TScriptManager.LUpdate; +var + XMLDoc : TXMLDocument; + Node,Script : TDOMNode; + Subs : TStringList; + Down : TDownloadThread; + SimbaScript : TLSimbaScript; begin if DirectoryExists(MainDir) = false then exit; - if FileExists( IncludeTrailingPathDelimiter(maindir) + 'General' + DirectorySeparator+ - 'scripts.xml') then + if FileExists(maindir + 'General' + DirectorySeparator+ 'scripts.xml') then begin - + ReadXMLFile(XMLDoc,maindir + 'General' + DirectorySeparator+ 'scripts.xml'); + Node := XMLDoc.FirstChild.FindNode('Scripts'); + if node <> nil then + begin + script := Node.FirstChild; + while Script <> nil do + begin + SimbaScript := TLSimbaScript.Create; + SimbaScript.LoadFromName(Node.TextContent,maindir); + FLScripts.Add(SimbaScript); + SimbaScript.Dbg; + Script := Script.NextSibling; + end; + end; + XMLDoc.Free; end; end; +function TScriptManager.NewVersion(Script: integer): boolean; +var + Scrpt : TLSimbaScript; + I : integer; +begin + Scrpt := TLSimbaScript(FLScripts[Script]); + if Scrpt.OnlineScript = nil then + for i := 0 to ScriptCount-1 do + if TSimbaScript(FScripts[i]).Name = Scrpt.Name then + begin + Scrpt.OnlineScript = TSimbaScript(FScripts[i]); + Break; + end; + result := Scrpt.OnlineScript.Version <> Scrpt.Version; +end; + +procedure TScriptManager.InstallNewScript(Script: integer); +var + Scrpt : TSimbaScript; + LScrpt: TLSimbaScript; + Dir : string; +begin + Scrpt := TSimbaScript(FScripts[Script]); + LScrpt := TLSimbaScript.create; + FLScripts.Add(LScrpt); + LScrpt.Name:= Scrpt.Name; + LScrpt.OnlineScript := Scrpt; + Dir := MainDir + LScrpt.Name + DirectorySeparator; + if DirectoryExists(dir) then + Writeln('Directory already exists, yet continue?'); + if not CreateDir(Dir) then + Writeln('Failed to create dir..'); + UpdateScript(FLScripts.Count - 1); +end; + +procedure TScriptManager.UpdateScript(Script: integer); +var + LScript : TLSimbaScript; + Scrpt : TSimbaScript; +begin + LScript := TLSimbaScript(FLScripts[Script]); + if not NewVersion(Script) then + Exit; + Scrpt := LScript.OnlineScript; + with LScrpt do + begin + Version:= Scrpt.Version; + Name:= Scrpt.Name; + Author := Scrpt.Author; + Description:= Scrpt.Version; + Tags.Assign(Scrpt.Tags); + Files.Assign(Scrpt.Files); + end; + LScrpt.Save(MainDir); //Saves the setting file, now we only need to update the files + //Download files & write to folder +end; + procedure TScriptManager.LSave; var XMLDoc : TXMLDocument; @@ -354,8 +449,7 @@ begin XMLDoc.AppendChild(node); for i := 0 to FLScripts.Count - 1 do AddTextElement(node,'Script', TLSimbaScript(FLScripts[i]).Name); - WriteXMLFile(XMLDoc,IncludeTrailingPathDelimiter(maindir) + 'General' + DirectorySeparator+ - 'scripts.xml'); + WriteXMLFile(XMLDoc,maindir + 'General' + DirectorySeparator+ 'scripts.xml'); XMLDoc.Free; end; @@ -391,6 +485,20 @@ var begin ReadXMLFile(XMLDoc,filename); Self.LoadFromNode(XMLDoc.FirstChild); + XMLDoc.Free; +end; + +function TLSimbaScript.LoadFromName(const ScriptName,MainDir : string) : boolean; +begin + Result := false; + if FileExists(MainDir + 'General' + DirectorySeparator + ScriptName + + 'info.xml') then + begin + Result := true; + LoadFromFile(MainDir + 'General' + DirectorySeparator + ScriptName + + 'info.xml'); + + end; end; procedure TLSimbaScript.SaveToFile(const FileName: string); @@ -416,6 +524,7 @@ begin AddTextElement(node,'Author',Author); AddTextElement(node,'Version',Version); AddTextElement(node,'Description',description); + AddTextElement(node,'AutoCheckUpdates', BoolToStr(AutoCheckUpdates,true)); SubNode := XMLDoc.CreateElement('Tags'); Node.AppendChild(SubNode); for i := 0 to Tags.Count - 1 do @@ -430,7 +539,16 @@ end; procedure TLSimbaScript.Save(const MainDir: string); begin + if not DirectoryExists(MainDir + 'General' + DirectorySeparator + Name) then + CreateDir(MainDir + 'General' + DirectorySeparator + Name); + SaveToFile(MainDir + 'General' + DirectorySeparator + Name + DirectorySeparator + + 'info.xml'); +end; +constructor TLSimbaScript.create; +begin + inherited; + AutoCheckUpdates:= true; end; end.