Added a DeletedIconOverlay.cs
[pithos-ms-client] / trunk / Pithos.Core / Agents / StatusAgent.cs
index f630587..89cce58 100644 (file)
@@ -6,6 +6,7 @@ using System.Diagnostics;
 using System.Diagnostics.Contracts;
 using System.IO;
 using System.Linq;
+using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
 using Castle.ActiveRecord;
@@ -40,8 +41,30 @@ namespace Pithos.Core.Agents
 
             if (!File.Exists(Path.Combine(_pithosDataPath ,"pithos.db")))
                 ActiveRecordStarter.CreateSchema();
-        }        
 
+            CreateTrigger();
+            
+        }
+
+        private void CreateTrigger()
+        {
+            using (var connection = GetConnection())
+            using (var triggerCommand = connection.CreateCommand())
+            {
+                var cmdText = new StringBuilder()
+                    .AppendLine("CREATE TRIGGER IF NOT EXISTS update_last_modified UPDATE ON FileState FOR EACH ROW")
+                    .AppendLine("BEGIN")
+                    .AppendLine("UPDATE FileState SET Modified=datetime('now')  WHERE Id=old.Id;")
+                    .AppendLine("END;")
+                    .AppendLine("CREATE TRIGGER IF NOT EXISTS insert_last_modified INSERT ON FileState FOR EACH ROW")
+                    .AppendLine("BEGIN")
+                    .AppendLine("UPDATE FileState SET Modified=datetime('now')  WHERE Id=new.Id;")
+                    .AppendLine("END;")
+                    .ToString();
+                triggerCommand.CommandText = cmdText;                
+                triggerCommand.ExecuteNonQuery();
+            }
+        }
 
 
         private static InPlaceConfigurationSource GetConfiguration(string pithosDbPath)
@@ -592,8 +615,10 @@ namespace Pithos.Core.Agents
                 var command = new SQLiteCommand("select FileStatus from FileState where FilePath=:path  COLLATE NOCASE", connection);
                 command.Parameters.AddWithValue("path", path);
                 
-                var s = command.ExecuteScalar();
-                return (FileStatus)Convert.ToInt32(s);
+                var statusValue = command.ExecuteScalar();
+                if (statusValue==null)
+                    return FileStatus.Missing;
+                return (FileStatus)Convert.ToInt32(statusValue);
             }
         }