Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="path">start with root dir</param>
        /// <param name="category"></param>
        /// <returns>null if already exist</returns>
        internal MyFile AddFile(string path, Category category, Managers.Synchronization syncer)
        {
            FileInfo file = new FileInfo(path);

            string HFOPath   = String.Format("\\FileInfo\\{0}\\File", Id);
            string filePath  = path.Remove(0, file.Directory.Root.Name.Length - 1);
            var    foundfile = files.Find(i => { return(i.FilePath == filePath); });

            if (foundfile != null)
            {
                return(null);
            }
            MyFile f = new MyFile(category.GetMyFileInfoForFile(Id));

            f.Category = category;
            f.FilePath = filePath;
            if (files.Count > 0)
            {
                f.Folder = files[0].Folder;
            }
            else
            {
                f.Folder = new MyRootFolder("", this, null);
            }

            InfoChangeEvents eventBase = new InfoChangeEvents(DateTime.Now, f.GetPath());
            //set system variables
            var it = f.MyInfoFile.GetItem("system\\name");

            if (it != null)
            {
                it.SetValue(file.Name);
                syncer.AddGeneratedSyncEvent(new InfoChangeValueEv(it.GetChangeInfoSyncString(), it.GetGroupPath(), eventBase));
            }
            it = f.MyInfoFile.GetItem("system\\size");
            if (it != null)
            {
                it.SetValue(file.Length.ToString());
                syncer.AddGeneratedSyncEvent(new InfoChangeValueEv(it.GetChangeInfoSyncString(), it.GetGroupPath(), eventBase));
            }
            it = f.MyInfoFile.GetItem("system\\last change");
            if (it != null)
            {
                it.SetValue(file.LastWriteTime.ToString(System.Globalization.CultureInfo.InvariantCulture));
                syncer.AddGeneratedSyncEvent(new InfoChangeValueEv(it.GetChangeInfoSyncString(), it.GetGroupPath(), eventBase));
            }
            it = f.MyInfoFile.GetItem("system\\creation");
            if (it != null)
            {
                it.SetValue(file.CreationTime.ToString(System.Globalization.CultureInfo.InvariantCulture));
                syncer.AddGeneratedSyncEvent(new InfoChangeValueEv(it.GetChangeInfoSyncString(), it.GetGroupPath(), eventBase));
            }

            FileInfo infoFile = Managers.FileManager.CreateNewFile(new DirectoryInfo(Managers.FileManager.PathToHFOFolder + HFOPath), ".xml");

            f.InfoFilePath = String.Format("{0}\\{1}", HFOPath, infoFile.Name);
            StreamWriter w = new StreamWriter(new FileStream(infoFile.FullName, FileMode.Create));

            try
            {
                f.MyInfoFile.RewriteFile(w);
            }
            finally
            {
                w.Dispose();
            }
            files.Add(f);
            return(f);
        }
Exemplo n.º 2
0
        /// <summary>
        /// read events from sync file
        /// </summary>
        /// <param name="fileFullLocalPath"></param>
        /// <returns>key value pair ther key is version of sync file and value is list of events</returns>
        public static async Task <KeyValuePair <string, List <Events> > > readSyncFile(System.IO.TextReader fileFullLocalPath)
        {
            XmlReader reader = XmlTextReader.Create(fileFullLocalPath, new XmlReaderSettings()
            {
                Async = true
            });

            try
            {
                string            version      = "";
                List <Events>     list         = new List <Events>();
                FilesEvents       fileEvent    = null;
                ConfirmEvents     confirmEvent = null;
                InfoChangeEvents  infoEvent    = null;
                InfoChangeValueEv cve          = null;
                while (await reader.ReadAsync())
                {
                    switch (reader.NodeType)
                    {
                    case XmlNodeType.Element:
                        switch (reader.Name)
                        {
                        case "versionStamp":
                            version = reader.GetAttribute("id");
                            break;

                        case FilesEvents.Xml:
                            fileEvent = new FilesEvents(reader);
                            break;

                        //file commands start
                        case FileAddEv.Xml:
                            list.Add(new FileAddEv(fileEvent, reader));
                            break;

                        case FileMoveEv.Xml:
                            list.Add(new FileMoveEv(fileEvent, reader));
                            break;

                        case FileRemoveEvent.Xml:
                            list.Add(new FileRemoveEvent(fileEvent, reader));
                            break;

                        case FileDeleteEv.Xml:
                            list.Add(new FileDeleteEv(fileEvent, reader));
                            break;
                        //file commands end

                        case ConfirmEvents.Xml:
                            confirmEvent = new ConfirmEvents(reader);
                            break;

                        //confirm command start
                        case FileMovedEv.Xml:
                            list.Add(new FileMovedEv(confirmEvent, reader));
                            break;
                        //confirm command end

                        case InfoChangeEvents.Xml:
                            infoEvent = new InfoChangeEvents(reader);
                            break;

                        //info changes start
                        case InfoChangeValueEv.Xml:
                            cve = new InfoChangeValueEv("", reader, infoEvent);
                            break;
                        //info changes end

                        case DeviceAddEv.Xml:
                            list.Add(new DeviceAddEv(reader));
                            break;

                        case DiskAddEv.Xml:
                            list.Add(new DiskAddEv(reader));
                            break;
                        }
                        break;

                    case XmlNodeType.EndElement:
                        switch (reader.Name)
                        {
                        case FilesEvents.Xml:
                            fileEvent = null;
                            break;

                        case ConfirmEvents.Xml:
                            confirmEvent = null;
                            break;

                        case InfoChangeEvents.Xml:
                            infoEvent = null;
                            break;

                        case InfoChangeValueEv.Xml:
                            cve = null;
                            break;
                        }
                        break;

                    case XmlNodeType.CDATA:
                        if (cve != null)
                        {
                            list.Add(new InfoChangeValueEv(reader.Value, cve));
                        }
                        break;
                    }
                }
                return(new KeyValuePair <string, List <Events> >(version, list));
            }
            finally { reader.Dispose(); }
        }