Example #1
0
 private void ClientCreate()
 {
     if (Util.SqliteHelper.Select(e.LocalPath) != null)
     {
         return;
     }
     if (!Directory.Exists(e.LocalPath) && !File.Exists(e.LocalPath))
     {
         return;
     }
     Models.Metadata createResult;
     if (!File.Exists(e.LocalPath))
     {
         createResult = NetworkManager.CreateFolder(e.CloudPath);
     }
     else
     {
         while ((createResult = NetworkManager.Upload(e.CloudPath)) == null)
         {
             Thread.Sleep(5000);
         }
     }
     Models.SQLDataType sdt = new Models.SQLDataType(e.LocalPath,
                                                     createResult.ModifiedTime,
                                                     createResult.Rev,
                                                     createResult.Modifier.Email,
                                                     createResult.isShared ? "true" : "false");
     Util.SqliteHelper.Insert(sdt);
 }
Example #2
0
 private void ClientChange()
 {
     if (!Directory.Exists(e.LocalPath) && !File.Exists(e.LocalPath))
     {
         return;
     }
     Models.SQLDataType sdt = Util.SqliteHelper.Select(e.LocalPath);
     if (sdt != null && sdt.getModifiedTime() == File.GetLastWriteTimeUtc(e.LocalPath))
     {
         return;
     }
     if (sdt == null)
     {
         ClientCreate();
     }
     else
     {
         if (Directory.Exists(e.LocalPath))
         {
             return;
         }
         Models.Metadata uploadResult;
         while ((uploadResult = NetworkManager.Upload(e.CloudPath)) == null)
         {
             Thread.Sleep(5000);
         }
         Models.SQLDataType sdt2 = new Models.SQLDataType(e.LocalPath,
                                                          uploadResult.ModifiedTime,
                                                          uploadResult.Rev,
                                                          uploadResult.Modifier.Email,
                                                          uploadResult.isShared ? "true" : "false");
         Util.SqliteHelper.Update(sdt2);
     }
 }
Example #3
0
 private void ClientRename()
 {
     if (!Directory.Exists(e.LocalPath) && !File.Exists(e.LocalPath))
     {
         return;
     }
     Models.SQLDataType sdt = Util.SqliteHelper.Select(e.OldLocalPath);
     sdt.Path = e.LocalPath;
     Util.SqliteHelper.Delete(e.OldLocalPath);
     Util.SqliteHelper.Insert(sdt);
     Models.Metadata renameResult = NetworkManager.Rename(e.CloudPath, e.OldCloudPath);
 }
 public static void Update(Models.SQLDataType sdt)
 {
     lock (conn)
     {
         string sql = "update files set ModifiedTime = \'" + sdt.ModifiedTime
                      + "\', Version = \'" + sdt.Version
                      + "\', Modifier = \'" + sdt.Modifier
                      + "\', IsShared = \'" + sdt.IsShared
                      + "\' where Path = \'" + sdt.Path + "\'";
         SQLiteCommand cmd = new SQLiteCommand(sql, conn);
         cmd.ExecuteNonQuery();
     }
 }
Example #5
0
 private void ServerChange()
 {
     Models.Metadata metadata = NetworkManager.GetMetadata(e.CloudPath);
     if (metadata.Tag.Equals("File"))
     {
         while (!NetworkManager.Download(e.CloudPath))
         {
             Thread.Sleep(5000);
         }
         metadata = NetworkManager.GetMetadata(e.CloudPath);
         File.SetLastWriteTimeUtc(e.LocalPath, metadata.ModifiedTime);
         Models.SQLDataType sdt = new Models.SQLDataType(e.LocalPath,
                                                         metadata.ModifiedTime,
                                                         metadata.Rev,
                                                         metadata.Modifier.Email,
                                                         metadata.isShared ? "true" : "false");
         Util.SqliteHelper.Update(sdt);
     }
 }
 public static void Insert(Models.SQLDataType sdt)
 {
     lock (conn)
     {
         if (Select(sdt.Path) != null)
         {
             Update(sdt);
         }
         else
         {
             string sql = "insert into files (Path, ModifiedTime, Version, Modifier, IsShared) values + (\'"
                          + sdt.Path + "\', \'"
                          + sdt.ModifiedTime + "\', \'"
                          + sdt.Version + "\', \'"
                          + sdt.Modifier + "\', \'"
                          + sdt.IsShared + "\')";
             SQLiteCommand cmd = new SQLiteCommand(sql, conn);
             cmd.ExecuteNonQuery();
         }
     }
 }
Example #7
0
 private void ServerRename()
 {
     Models.Metadata metadata = NetworkManager.GetMetadata(e.CloudPath);
     if (metadata.Tag.Equals("File"))
     {
         bool retry = true;
         while (retry)
         {
             try
             {
                 new FileInfo(e.OldLocalPath).MoveTo(e.LocalPath);
                 retry = false;
             }
             catch (IOException)
             {
                 Thread.Sleep(5000);
             }
         }
     }
     else
     {
         bool retry = true;
         while (retry)
         {
             try
             {
                 new DirectoryInfo(e.OldLocalPath).MoveTo(e.LocalPath);
                 retry = false;
             }
             catch (IOException)
             {
                 Thread.Sleep(5000);
             }
         }
     }
     Models.SQLDataType sdt = Util.SqliteHelper.Select(e.OldLocalPath);
     sdt.Path = e.LocalPath;
     Util.SqliteHelper.Delete(e.OldLocalPath);
     Util.SqliteHelper.Insert(sdt);
 }
 public static Models.SQLDataType Select(string path)
 {
     lock (conn)
     {
         string           sql    = "select * from files where Path = \'" + path + "\'";
         SQLiteCommand    cmd    = new SQLiteCommand(sql, conn);
         SQLiteDataReader reader = cmd.ExecuteReader();
         if (reader.Read())
         {
             Models.SQLDataType result = new Models.SQLDataType(
                 reader["Path"].ToString(),
                 reader["ModifiedTime"].ToString(),
                 reader["Version"].ToString(),
                 reader["Modifier"].ToString(),
                 reader["IsShared"].ToString());
             return(result);
         }
         else
         {
             return(null);
         }
     }
 }
Example #9
0
        public static void CheckConsistency(string folder)
        {
            string[] dirs  = Directory.GetDirectories(folder);
            string[] files = Directory.GetFiles(folder);
            List <Models.Metadata> cloudEntries = BackgroundWorks.NetworkManager.ListFolder(LocalPathtoCloudPath(folder));
            List <Models.Metadata> cloudDirs    = new List <Models.Metadata>();
            List <Models.Metadata> cloudFiles   = new List <Models.Metadata>();

            foreach (Models.Metadata metadata in cloudEntries)
            {
                if (metadata.Tag.Equals("Folder"))
                {
                    cloudDirs.Add(metadata);
                }
                else
                {
                    cloudFiles.Add(metadata);
                }
            }
            foreach (Models.Metadata metadata in cloudDirs)
            {
                string LocalPath = CloudPathtoLocalPath(metadata.FullPath);
                if (!dirs.Contains(LocalPath))
                {
                    if (metadata.Modifier.Equal(Util.Global.user))
                    {
                        Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientDelete, LocalPath);
                        Util.Global.FileUpdateQueue.Add(fce);
                    }
                    else
                    {
                        DownloadFolder(LocalPath);
                    }
                }
            }
            foreach (string dir in dirs)
            {
                if (cloudDirs.Find((d) =>
                {
                    return(LocalPathtoCloudPath(dir).Equals(d.FullPath));
                }) == null)
                {
                    if (SqliteHelper.Select(dir) == null)
                    {
                        UploadFolder(dir);
                    }
                    else
                    {
                        DeleteFolder(dir);
                    }
                }
                else
                {
                    CheckConsistency(dir);
                }
            }
            foreach (Models.Metadata metadata in cloudFiles)
            {
                string LocalPath = CloudPathtoLocalPath(metadata.FullPath);
                if (!files.Contains(LocalPath))
                {
                    if (metadata.Modifier.Equal(Util.Global.user))
                    {
                        Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientDelete, LocalPath);
                        Util.Global.FileUpdateQueue.Add(fce);
                    }
                    else
                    {
                        Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ServerCreate, LocalPath);
                        Util.Global.FileUpdateQueue.Add(fce);
                    }
                }
            }
            foreach (string file in files)
            {
                Models.Metadata metadata;
                if ((metadata = cloudFiles.Find((d) =>
                {
                    return(LocalPathtoCloudPath(file).Equals(d.FullPath));
                })) == null)
                {
                    if (SqliteHelper.Select(file) == null)
                    {
                        Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientCreate, file);
                        Util.Global.FileUpdateQueue.Add(fce);
                    }
                    else
                    {
                        Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ServerDelete, file);
                        Util.Global.FileUpdateQueue.Add(fce);
                    }
                }
                else
                {
                    DateTime           LocalTime = new FileInfo(file).LastWriteTimeUtc;
                    DateTime           CloudTime = metadata.ModifiedTime;
                    Models.SQLDataType sqlData   = SqliteHelper.Select(file);
                    if (sqlData == null)
                    {
                        Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientCreate, file);
                        Util.Global.FileUpdateQueue.Add(fce);
                    }
                    else
                    {
                        DateTime LastCloudTime = sqlData.getModifiedTime();
                        if (LocalTime > LastCloudTime)
                        {
                            Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ClientChange, file);
                            Util.Global.FileUpdateQueue.Add(fce);
                        }
                        else
                        {
                            if (CloudTime > LastCloudTime)
                            {
                                Models.FileChangeEvent fce = new Models.FileChangeEvent(Models.FileChangeEvent.FileChangeType.ServerChange, file);
                                Util.Global.FileUpdateQueue.Add(fce);
                            }
                        }
                    }
                }
            }
        }