From 46c0d73ee640481b3bc07b643855f53d880de5b9 Mon Sep 17 00:00:00 2001 From: Lluis Sanchez Date: Wed, 25 Jul 2007 14:06:00 +0000 Subject: * Mono.Addins/AddinSessionService.cs, Mono.Addins.Description/AddinDescription.cs, Mono.Addins.Database/AddinScanner.cs: When loading an add-in root check if the add-in has changed. If it changed, update the add-in database to make sure the correct info is loaded. svn path=/trunk/mono-addins/; revision=82663 --- .../Mono.Addins.Description/AddinDescription.cs | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) (limited to 'Mono.Addins/Mono.Addins.Description/AddinDescription.cs') diff --git a/Mono.Addins/Mono.Addins.Description/AddinDescription.cs b/Mono.Addins/Mono.Addins.Description/AddinDescription.cs index a4e0493..bab72d0 100644 --- a/Mono.Addins/Mono.Addins.Description/AddinDescription.cs +++ b/Mono.Addins/Mono.Addins.Description/AddinDescription.cs @@ -68,6 +68,7 @@ namespace Mono.Addins.Description ExtensionNodeSetCollection nodeSets; ConditionTypeDescriptionCollection conditionTypes; ExtensionPointCollection extensionPoints; + object[] fileInfo; internal static BinaryXmlTypeMap typeMap; @@ -86,6 +87,7 @@ namespace Mono.Addins.Description typeMap.RegisterType (typeof(AddinDependency), "AddinDependency"); typeMap.RegisterType (typeof(AssemblyDependency), "AssemblyDependency"); typeMap.RegisterType (typeof(NodeTypeAttribute), "NodeTypeAttribute"); + typeMap.RegisterType (typeof(AddinFileInfo), "FileInfo"); } internal AddinDatabase OwnerDatabase { @@ -331,6 +333,36 @@ namespace Mono.Addins.Description set { configFile = value; } } + internal void StoreFileInfo () + { + ArrayList list = new ArrayList (); + foreach (string f in AllFiles) { + string file = Path.Combine (this.BasePath, f); + AddinFileInfo fi = new AddinFileInfo (); + fi.FileName = f; + fi.Timestamp = File.GetLastWriteTime (file); + list.Add (fi); + } + fileInfo = list.ToArray (); + } + + internal bool FilesChanged () + { + // Checks if the files of the add-in have changed. + if (fileInfo == null) + return true; + + foreach (AddinFileInfo f in fileInfo) { + string file = Path.Combine (this.BasePath, f.FileName); + if (!File.Exists (file)) + return true; + if (f.Timestamp != File.GetLastWriteTime (file)) + return true; + } + + return false; + } + public void Save (string fileName) { configFile = fileName; @@ -637,6 +669,7 @@ namespace Mono.Addins.Description writer.WriteValue ("NodeSets", ExtensionNodeSets); writer.WriteValue ("ExtensionPoints", ExtensionPoints); writer.WriteValue ("ConditionTypes", ConditionTypes); + writer.WriteValue ("FilesInfo", fileInfo); } void IBinaryXmlElement.Read (BinaryXmlReader reader) @@ -661,9 +694,47 @@ namespace Mono.Addins.Description nodeSets = (ExtensionNodeSetCollection) reader.ReadValue ("NodeSets", new ExtensionNodeSetCollection (this)); extensionPoints = (ExtensionPointCollection) reader.ReadValue ("ExtensionPoints", new ExtensionPointCollection (this)); conditionTypes = (ConditionTypeDescriptionCollection) reader.ReadValue ("ConditionTypes", new ConditionTypeDescriptionCollection (this)); + fileInfo = (object[]) reader.ReadValue ("FilesInfo", null); if (mainModule != null) mainModule.SetParent (this); } } + + class AddinFileInfo: IBinaryXmlElement + { + string fileName; + DateTime timestamp; + + public string FileName { + get { + return fileName; + } + set { + fileName = value; + } + } + + public System.DateTime Timestamp { + get { + return timestamp; + } + set { + timestamp = value; + } + } + + public void Read (BinaryXmlReader reader) + { + fileName = reader.ReadStringValue ("fileName"); + timestamp = reader.ReadDateTimeValue ("timestamp"); + } + + public void Write (BinaryXmlWriter writer) + { + writer.WriteValue ("fileName", fileName); + writer.WriteValue ("timestamp", timestamp); + } + + } } -- cgit v1.2.3