Added fixes for v.0.7.20311
authorpkanavos <pkanavos@gmail.com>
Fri, 16 Mar 2012 12:33:41 +0000 (14:33 +0200)
committerpkanavos <pkanavos@gmail.com>
Fri, 16 Mar 2012 12:33:41 +0000 (14:33 +0200)
Changes to logo
Renamed "Pithos" logo to "Pithos+"
Fixes to login URL

19 files changed:
trunk/Pithos.Client.WPF/App.xaml.cs
trunk/Pithos.Client.WPF/Configuration/PithosSettings.cs
trunk/Pithos.Client.WPF/Images/logo.png
trunk/Pithos.Client.WPF/Preferences/AddAccountViewModel.cs
trunk/Pithos.Client.WPF/Preferences/PreferencesViewModel.cs
trunk/Pithos.Client.WPF/Properties/AssemblyInfo.cs
trunk/Pithos.Client.WPF/Properties/Settings.Designer.cs
trunk/Pithos.Client.WPF/Properties/Settings.settings
trunk/Pithos.Client.WPF/Shell/ShellView.xaml
trunk/Pithos.Client.WPF/Shell/ShellViewModel.cs
trunk/Pithos.Client.WPF/app.config
trunk/Pithos.Core/Agents/BlockUpdater.cs
trunk/Pithos.Core/Agents/FileAgent.cs
trunk/Pithos.Core/Agents/NetworkAgent.cs
trunk/Pithos.Core/Agents/PollAgent.cs
trunk/Pithos.Core/Agents/StatusAgent.cs
trunk/Pithos.Installer/rnotes.0.7.20311.html [new file with mode: 0644]
trunk/Pithos.Installer/versioninfo.xml
trunk/Pithos.Interfaces/ObjectInfo.cs

index 9461263..6fb9e80 100644 (file)
@@ -112,6 +112,7 @@ namespace Pithos.Client.WPF
 
                 var appenders = loggerRepository.GetAppenders();
                 
+
                 var lossyAppender = appenders.OfType<BufferingForwardingAppender>()
                     .FirstOrDefault(appender => appender.Name == "LossyFileAppender");
                 if (lossyAppender!=null)
@@ -183,8 +184,10 @@ namespace Pithos.Client.WPF
         }
 
         private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
-        {            
-            var messages=new List<UserMessage>();
+        {
+            Log.Error("Unobserved Task Exception", e.Exception); 
+            
+            var messages = new List<UserMessage>();
             e.Exception.Handle(exc=>{
                 messages.Add(new UserMessage
                 {
@@ -195,9 +198,8 @@ namespace Pithos.Client.WPF
                 return true;
             });
 
-            Log.Error("Unobserved Task Exception",e.Exception);
-            
-            var message = String.Format(@"{0}\r\n{1}\r\n\r\n{2}", 
+
+            var message = String.Format(@"{0}<LineBreak/>{1}<LineBreak/><LineBreak/>{2}", 
                 WPF.Properties.Resources.Unexpected_Error,
                 WPF.Properties.Resources.We_Apologize, 
                 WPF.Properties.Resources.Please_Submit_Error);
index bcf1f25..01866a4 100644 (file)
@@ -95,10 +95,6 @@ namespace Pithos.Client.WPF.Configuration
             get { return _settings.PithosSite; }
         }*/
 
-        public string PithosLoginUrl
-        {
-            get { return _settings.PithosLoginUrl; }
-        }
 
         public string IconsPath
         {
index 58ac3ea..f340ad0 100644 (file)
Binary files a/trunk/Pithos.Client.WPF/Images/logo.png and b/trunk/Pithos.Client.WPF/Images/logo.png differ
index ddbf4b5..4ae2a98 100644 (file)
@@ -206,7 +206,8 @@ namespace Pithos.Client.WPF.Preferences
 
             try
             {
-                var credentials = PithosAccount.RetrieveCredentials(Settings.Default.PithosLoginUrl);
+                var loginUri=new Uri(new Uri(CurrentServer) , "login");
+                var credentials = PithosAccount.RetrieveCredentials(loginUri.ToString());
                 if (credentials == null)
                     return;
                 AccountName = credentials.UserName;
index ae41433..a6a3790 100644 (file)
@@ -230,12 +230,15 @@ namespace Pithos.Client.WPF.Preferences
         public void RefreshApiKey()
         {
             //_events.Publish(new Notification { Title = "Authorization failed", Message = "Your API Key has probably expired. You will be directed to a page where you can renew it", Level = TraceLevel.Error });
-
+            if (CurrentAccount == null)
+                return;
             try
             {
 
-                var name = CurrentAccount != null ? CurrentAccount.AccountName : null;
-                var credentials = PithosAccount.RetrieveCredentials(Settings.PithosLoginUrl,name);
+                var name = CurrentAccount.AccountName;
+
+                var loginUri = new Uri(new Uri(CurrentAccount.ServerUrl), "login");
+                var credentials = PithosAccount.RetrieveCredentials(loginUri.ToString(),name);
                 if (credentials==null)
                     return;
                 //The server will return credentials for a different account, not just the current account
@@ -397,9 +400,10 @@ namespace Pithos.Client.WPF.Preferences
             
        }
 
+/*
         public void AddPithosAccount()
        {
-            var credentials=PithosAccount.RetrieveCredentials(Settings.PithosLoginUrl);
+            var credentials=PithosAccount.RetrieveCredentials(null);
             if (credentials == null)
                 return;
             var account = Settings.Accounts.FirstOrDefault(act => act.AccountName == credentials.UserName);
@@ -423,6 +427,7 @@ namespace Pithos.Client.WPF.Preferences
             NotifyOfPropertyChange(() => Accounts);
             NotifyOfPropertyChange(()=>Settings);                       
        }
+*/
 
 
         readonly List<AccountSettings> _accountsToRemove = new List<AccountSettings>();
@@ -572,6 +577,7 @@ namespace Pithos.Client.WPF.Preferences
                                                                             SearchOption.AllDirectories))
                         File.Copy(newFilePath, newFilePath.Replace(oldPath, newPath));
 
+                    Log.InfoFormat("Deleting account folder {0}",oldPath);
                     Directory.Delete(oldPath, true);
 
                     //We also need to change the path of the existing file states
index db3175d..a61db5a 100644 (file)
@@ -93,5 +93,5 @@ using System.Windows;
 // You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.7.20310.0")]
-[assembly: AssemblyFileVersionAttribute("0.7.20310.0")]
+[assembly: AssemblyVersion("0.7.20311.0")]
+[assembly: AssemblyFileVersionAttribute("0.7.20311.0")]
index 9e37a00..e4fc7b8 100644 (file)
@@ -214,15 +214,6 @@ namespace Pithos.Client.WPF.Properties {
         
         [global::System.Configuration.ApplicationScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("https://pithos.dev.grnet.gr/login")]
-        public string PithosLoginUrl {
-            get {
-                return ((string)(this["PithosLoginUrl"]));
-            }
-        }
-        
-        [global::System.Configuration.ApplicationScopedSettingAttribute()]
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.Configuration.DefaultSettingValueAttribute("https://pithos.dev.grnet.gr/im/feedback")]
         public string FeedbackUri {
             get {
index 62ecfbf..2f011dc 100644 (file)
@@ -50,9 +50,6 @@
     <Setting Name="CloudfilesAuthenticationUrl" Type="System.String" Scope="Application">
       <Value Profile="(Default)">https://auth.api.rackspacecloud.com</Value>
     </Setting>
-    <Setting Name="PithosLoginUrl" Type="System.String" Scope="Application">
-      <Value Profile="(Default)">https://pithos.dev.grnet.gr/login</Value>
-    </Setting>
     <Setting Name="FeedbackUri" Type="System.String" Scope="Application">
       <Value Profile="(Default)">https://pithos.dev.grnet.gr/im/feedback</Value>
     </Setting>
index 2efd24d..4fab0c5 100644 (file)
@@ -83,7 +83,7 @@
                         </MenuItem.ItemTemplate>
                     </MenuItem>
                     <Separator  />
-                    <MenuItem  x:Name="StatusMessage" Header="{Binding Path=StatusMessage, Converter={StaticResource SingleConverter}}" MaxWidth="200" />
+                    <MenuItem  x:Name="StatusMessage" Header="{Binding Path=StatusMessage, Converter={StaticResource SingleConverter}}" MaxWidth="200" cal:Message.Attach="OnStatusAction" ToolTip="{Binding TooltipMessage}"/>
                     <Separator  Visibility="{Binding Path=HasAccounts, Converter={StaticResource BooleanToVisible}}"/>
                     <MenuItem  Header="{Binding PauseSyncCaption}" x:Name="ToggleSynching" cal:Message.Attach="ToggleSynching"  Visibility="{Binding Path=HasAccounts, Converter={StaticResource BooleanToVisible}}"/>
                     <Separator  />
index f44b57d..ce2eb94 100644 (file)
@@ -169,7 +169,7 @@ namespace Pithos.Client.WPF {
                                Proxy.SetFromSettings(settings);
 
                 StatusMessage = Settings.Accounts.Count==0 
-                    ? "No Accounts added. Please add an account" 
+                    ? "No Accounts added\r\nPlease add an account" 
                     : "Starting";
 
                                _accounts.CollectionChanged += (sender, e) =>
@@ -178,10 +178,7 @@ namespace Pithos.Client.WPF {
                                                                                                           NotifyOfPropertyChange(() => HasAccounts);
                                                                                                   };
 
-                Assembly assembly = Assembly.GetExecutingAssembly();
-                var fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location);
-                VersionMessage = String.Format("Pithos+ {0}", fileVersion.FileVersion);
-
+                SetVersionMessage();
                        }
                        catch (Exception exc)
                        {
@@ -191,16 +188,27 @@ namespace Pithos.Client.WPF {
 
                }
 
+           private void SetVersionMessage()
+           {
+               Assembly assembly = Assembly.GetExecutingAssembly();
+               var fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location);
+               VersionMessage = String.Format("Pithos+ {0}", fileVersion.FileVersion);
+           }
 
-               protected override void OnActivate()
+        public void OnStatusAction()
+        {
+            if (Accounts.Count==0)
+            {
+                ShowPreferences("AccountTab");
+            }
+        }
+           protected override void OnActivate()
                {
                        base.OnActivate();
 
-            _sparkle = new Sparkle(Settings.UpdateUrl);
-            _sparkle.updateDetected += OnUpgradeDetected;
-            _sparkle.ShowDiagnosticWindow = Settings.UpdateDiagnostics;
+            InitializeSparkle();
 
-            //Must delay opening the upgrade window
+               //Must delay opening the upgrade window
             //to avoid Windows Messages sent by the TaskbarIcon
             TaskEx.Delay(5000).ContinueWith(_=>
                 Execute.OnUIThread(()=> _sparkle.StartLoop(true,Settings.UpdateForceCheck,Settings.UpdateCheckInterval)));
@@ -209,20 +217,48 @@ namespace Pithos.Client.WPF {
                        StartMonitoring();                    
                }
 
-           private void OnUpgradeDetected(object sender, UpdateDetectedEventArgs e)
+
+           private void OnCheckFinished(object sender, bool updaterequired)
            {
+            
+            Log.InfoFormat("Upgrade check finished. Need Upgrade: {0}", updaterequired);
+            if (_manualUpgradeCheck)
+            {
+                _manualUpgradeCheck = false;
+                if (!updaterequired)
+                    //Sparkle raises events on a background thread
+                    Execute.OnUIThread(()=>
+                        ShowBalloonFor(new Notification{Title="Pithos+ is up to date",Message="You have the latest Pitsos+ version. No update is required"}));
+            }
+           }
+
+           private void OnUpgradeDetected(object sender, UpdateDetectedEventArgs e)
+           {            
                Log.InfoFormat("Update detected {0}",e.LatestVersion);
            }
 
         public void CheckForUpgrade()
         {
+            ShowBalloonFor(new Notification{Title="Checking for upgrades",Message="Contacting the server to retrieve the latest Pithos+ version."});
             Log.Error("Test Error message");
             _sparkle.StopLoop();
+            _sparkle.updateDetected -= OnUpgradeDetected;
+            _sparkle.checkLoopFinished -= OnCheckFinished;
             _sparkle.Dispose();
-            _sparkle=new Sparkle(Settings.UpdateUrl);
+
+            _manualUpgradeCheck = true;
+            InitializeSparkle();
             _sparkle.StartLoop(true,true,Settings.UpdateCheckInterval);
         }
 
+        private void InitializeSparkle()
+        {
+            _sparkle = new Sparkle(Settings.UpdateUrl);
+            _sparkle.updateDetected += OnUpgradeDetected;
+            _sparkle.checkLoopFinished += OnCheckFinished;
+            _sparkle.ShowDiagnosticWindow = Settings.UpdateDiagnostics;
+        }
+
            private async void StartMonitoring()
                {
                        try
@@ -905,6 +941,7 @@ namespace Pithos.Client.WPF {
 
                private bool _pollStarted;
            private Sparkle _sparkle;
+           private bool _manualUpgradeCheck;
 
            //SMELL: Doing so much work for notifications in the shell is wrong
                //The notifications should be moved to their own view/viewmodel pair
@@ -961,7 +998,8 @@ namespace Pithos.Client.WPF {
                        if (String.IsNullOrWhiteSpace(notification.Message) && String.IsNullOrWhiteSpace(notification.Title))
                                return;
 
-                       ShowBalloonFor(notification);
+            if (notification.Level <= TraceLevel.Warning)
+                           ShowBalloonFor(notification);
                }
 
            private void ShowBalloonFor(Notification notification)
@@ -974,9 +1012,11 @@ namespace Pithos.Client.WPF {
             BalloonIcon icon;
                switch (notification.Level)
                {
-                   case TraceLevel.Info:
-                   case TraceLevel.Verbose:
+                case TraceLevel.Verbose:
                        return;
+                   case TraceLevel.Info:                   
+                       icon = BalloonIcon.Info;
+                       break;
                 case TraceLevel.Error:
                     icon = BalloonIcon.Error;
                     break;
index 4ef8b54..d47391e 100644 (file)
    <setting name="CloudfilesAuthenticationUrl" serializeAs="String">
     <value>https://auth.api.rackspacecloud.com</value>
    </setting>
-   <setting name="PithosLoginUrl" serializeAs="String">
-    <value>https://pithos.dev.grnet.gr/login</value>
-   </setting>
    <setting name="FeedbackUri" serializeAs="String">
     <value>https://pithos.dev.grnet.gr/im/feedback</value>
    </setting>
                </appender>
 
                <appender name="DumpFileAppender" type="log4net.Appender.RollingFileAppender">
-                       <file value="log.txt" />
+                       <file value="errorlog.xml" />
                        <appendToFile value="false" />
                        <rollingStyle value="Size" />
                        <maxSizeRollBackups value="10" />
                        <appender-ref ref="DumpFileAppender" />
                </appender>
                
+<!--
                <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender" >
                        
                        <threshold value="All" />
                </appender>
+-->
 <!--
                <appender name="LossySmtpAppender" type="log4net.Appender.SmtpAppender">
                        <to value="pkanavos@gmail.com" />
                </appender>
 -->
 
-               <logger name="NHibernate" additivity="false">
+               <logger name="NHibernate" additivity="true">
                        <level value="WARN"/>
                        <appender-ref ref="TraceAppender"/>
                </logger>
                        <appender-ref ref="TraceAppender"/>
                </logger>
 
-               <logger name="Pithos" additivity="false">
+               <logger name="Pithos" additivity="true">
                        <level value="ALL"/>
                        <appender-ref ref="TraceAppender"/>
                </logger>
index 3edc216..3aac381 100644 (file)
@@ -45,6 +45,7 @@ using System.Collections.Generic;
 using System.Diagnostics.Contracts;
 using System.IO;
 using System.Linq;
+using System.Reflection;
 using System.Security.Cryptography;
 using System.Text;
 using System.Threading.Tasks;
@@ -54,6 +55,8 @@ namespace Pithos.Core.Agents
 {
     class BlockUpdater
     {
+        private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
         public string FilePath { get; private set; }
         public string RelativePath { get; private set; }
 
@@ -217,6 +220,8 @@ namespace Pithos.Core.Agents
 
         private void ClearBlocks()
         {
+            if (Log.IsDebugEnabled)
+                Log.DebugFormat("Clearing blocks for {0}",this.FilePath);
             //Get all the the block paths, orphan or not
             var paths= _blocks.Select(pair => pair.Value)
                           .Union(_orphanBlocks.Select(pair => pair.Value));
index 0ffe721..a79ccdf 100644 (file)
@@ -555,6 +555,8 @@ namespace Pithos.Core.Agents
         public void Delete(string relativePath)
         {
             var absolutePath = Path.Combine(RootPath, relativePath).ToLower();
+            if (Log.IsDebugEnabled)
+                Log.DebugFormat("Deleting {0}", absolutePath);
             if (File.Exists(absolutePath))
             {    
                 try
index 9596516..e6be6f9 100644 (file)
@@ -509,7 +509,7 @@ namespace Pithos.Core.Agents
                     var account = cloudFile.Account;
                     var container = cloudFile.Container;
 
-                    if (cloudFile.Content_Type == @"application/directory")
+                    if (cloudFile.IsDirectory)
                     {
                         if (!Directory.Exists(localPath))
                             try
@@ -600,6 +600,8 @@ namespace Pithos.Core.Agents
                 throw new ArgumentNullException("filePath");
             if (!Path.IsPathRooted(filePath))
                 throw new ArgumentException("The localPath must be rooted", "filePath");
+            if (cloudFile.IsDirectory)
+                throw new ArgumentException("cloudFile is a directory, not a file","cloudFile");
             Contract.EndContractBlock();
 
             var localPath = Pithos.Interfaces.FileInfoExtensions.GetProperFilePathCapitalization(filePath);
@@ -633,6 +635,7 @@ namespace Pithos.Core.Agents
                     var fileInfo = new FileInfo(localFolder);
                     if (fileInfo.Exists && fileInfo.Length == 0)
                     {
+                        Log.WarnFormat("Malformed directory object detected for [{0}]", localFolder);
                         fileInfo.Delete();
                         Directory.CreateDirectory(localFolder);
                     }
@@ -665,6 +668,8 @@ namespace Pithos.Core.Agents
                 throw new ArgumentException("The filePath must be rooted", "filePath");
             if (serverHash == null)
                 throw new ArgumentNullException("serverHash");
+            if (cloudFile.IsDirectory)
+                throw new ArgumentException("cloudFile is a directory, not a file", "cloudFile");
             Contract.EndContractBlock();
             
            var fileAgent = GetFileAgent(accountInfo);
index 06d5663..25474b1 100644 (file)
@@ -404,10 +404,12 @@ namespace Pithos.Core.Agents
                 var deletedFiles = new List<FileSystemInfo>();\r
                 foreach (var objectInfo in cloudFiles)\r
                 {\r
-                    Log.DebugFormat("Handle deleted [{0}]",objectInfo.Uri);\r
+                    if (Log.IsDebugEnabled)\r
+                        Log.DebugFormat("Handle deleted [{0}]",objectInfo.Uri);\r
                     var relativePath = objectInfo.RelativeUrlToFilePath(accountInfo.UserName);\r
                     var item = FileAgent.GetFileAgent(accountInfo).GetFileSystemInfo(relativePath);\r
-                    Log.DebugFormat("Will delete [{0}] for [{1}]", item.FullName,objectInfo.Uri);\r
+                    if (Log.IsDebugEnabled)\r
+                        Log.DebugFormat("Will delete [{0}] for [{1}]", item.FullName,objectInfo.Uri);\r
                     if (item.Exists)\r
                     {\r
                         if ((item.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)\r
@@ -415,6 +417,10 @@ namespace Pithos.Core.Agents
                             item.Attributes = item.Attributes & ~FileAttributes.ReadOnly;\r
 \r
                         }\r
+                        \r
+                        \r
+                        Log.DebugFormat("Deleting {0}", item.FullName);\r
+\r
                         var directory = item as DirectoryInfo;\r
                         if (directory!=null)\r
                             directory.Delete(true);\r
index 1e98a36..299b41f 100644 (file)
@@ -110,12 +110,18 @@ namespace Pithos.Core.Agents
             Contract.Requires(!String.IsNullOrWhiteSpace(dbPath));
             Contract.Requires(!String.IsNullOrWhiteSpace(appDataPath));
 
+
             var oldDbPath = Path.Combine(appDataPath, "Pithos", "pithos.db");
             var oldDbInfo = new FileInfo(oldDbPath);
             if (oldDbInfo.Exists && !File.Exists(dbPath))
             {
+                Log.InfoFormat("Moving database from {0} to {1}",oldDbInfo.FullName,dbPath);
                 var oldDirectory = oldDbInfo.Directory;
-                oldDbInfo.MoveTo(dbPath);                
+                oldDbInfo.MoveTo(dbPath);
+                
+                if (Log.IsDebugEnabled)
+                    Log.DebugFormat("Deleting {0}",oldDirectory.FullName);
+                
                 oldDirectory.Delete(true);
             }
         }
diff --git a/trunk/Pithos.Installer/rnotes.0.7.20311.html b/trunk/Pithos.Installer/rnotes.0.7.20311.html
new file mode 100644 (file)
index 0000000..28c2db8
--- /dev/null
@@ -0,0 +1,14 @@
+<html>
+<body>
+<h2>Pithos MS Client v. 0.7.20311</h2>
+Release Date: March 16, 2012, 15:00
+<br/>
+Includes:
+<br/>
+<ul>
+<li> Fixed the production login URL</li>
+<li> When the user clics on "Check for upgrades", a notification is shown if no upgrades are available</li>
+<li> Fix in black-box logging</li>
+</ul>
+</body>
+</html>
\ No newline at end of file
index 211b20e..f4261a1 100644 (file)
@@ -7,6 +7,28 @@
                <description></description>      \r
                <language>en</language>                 \r
                <item>            \r
+                       <title>Version 0.7.20311</title>\r
+                       <sparkle:releaseNotesLink>https://code.grnet.gr/projects/pithos-ms-client/repository/revisions/master/raw/trunk/Pithos.Installer/rnotes.0.7.20311.html</sparkle:releaseNotesLink>\r
+                       <pubDate>Tue, 16 Mar 2012 15:00:00 +0200</pubDate>\r
+                       <enclosure \r
+                               url="https://code.grnet.gr/attachments/download/1017/PithosPlus_Setupv0.7.20311.0.exe"\r
+                               length="4336044" \r
+                               type="application/octet-stream"\r
+                               sparkle:version="0.7.20311" \r
+                       />\r
+               </item>\r
+               <item>            \r
+                       <title>Version 0.7.20310</title>\r
+                       <sparkle:releaseNotesLink>https://code.grnet.gr/projects/pithos-ms-client/repository/revisions/master/raw/trunk/Pithos.Installer/rnotes.0.7.20310.html</sparkle:releaseNotesLink>\r
+                       <pubDate>Tue, 15 Mar 2012 21:00:00 +0200</pubDate>\r
+                       <enclosure \r
+                               url="https://code.grnet.gr/attachments/download/1015/PithosPlus_Setupv0.7.20310.0.exe"\r
+                               length="4344290" \r
+                               type="application/octet-stream"\r
+                               sparkle:version="0.7.20310" \r
+                       />\r
+               </item>\r
+               <item>            \r
                        <title>Version 0.7.20310</title>\r
                        <sparkle:releaseNotesLink>https://code.grnet.gr/projects/pithos-ms-client/repository/revisions/master/raw/trunk/Pithos.Installer/rnotes.0.7.20310.html</sparkle:releaseNotesLink>\r
                        <pubDate>Tue, 15 Mar 2012 21:00:00 +0200</pubDate>\r
index fb11d4c..fa97feb 100644 (file)
@@ -341,6 +341,14 @@ namespace Pithos.Interfaces
 
         public ObjectInfo Previous { get; private set; }
 
+        public bool IsDirectory
+        {
+            get
+            {
+                return String.Equals(Content_Type, @"application/directory",StringComparison.InvariantCultureIgnoreCase);
+            }
+        }
+
         public ObjectInfo SetPrevious(ObjectInfo previous)
         {            
             Previous = previous;