示例#1
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);
     }
 }
示例#2
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);
                            }
                        }
                    }
                }
            }
        }