コード例 #1
0
ファイル: DataManager.cs プロジェクト: tranquvis/WinSync
        /// <summary>
        /// add Link and update file
        /// </summary>
        /// <param name="link"></param>
        public static void AddLink(Link link)
        {
            if (LinkExists(link.Title))
                throw BadInputException.LinkAlreadyExists;

            SyncLink sl = new SyncLink(link);
            Links.Add(sl);
            LinkChanged(0, sl);

            SaveLinksToFile();
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: tranquvis/WinSync
        /// <summary>
        /// start synchronisation of link and update button
        /// </summary>
        /// <param name="l"></param>
        void StartSync(SyncLink l)
        {
            label_p.Visible = true;
            label_p.Text = @"0";
            progressBar_total.Visible = true;
            progressBar_total.Value = 0;

            l.Sync(null);

            StartUpdatingSyncInfo();
            if (_selectedLink == l)
                StartUpdatingSelectedSyncLinkInfo();
        }
コード例 #3
0
ファイル: LinkRow.cs プロジェクト: tranquvis/WinSync
        /// <summary>
        /// create a LinkRow that displays information and controls for a Link and its synchronisation
        /// </summary>
        public LinkRow(SyncLink link)
        {
            InitializeComponent();

            Link = link;
            UpdateData();

            //add on-click-listener to inner panel and its children
            inner.MouseClick += OnInnerClick;
            foreach (Control c in inner.Controls)
            {
                c.MouseClick += OnInnerClick;
            }
        }
コード例 #4
0
        /// <summary>
        /// create SyncDetailInfoForm2 that displays all details of a synchronisation process
        /// </summary>
        /// <param name="l">link that contains the synchronisation information</param>
        public SyncDetailInfoForm2(SyncLink l)
        {
            _l = l;

            InitializeComponent();

            statusProgressBar1.StatusTitles = SyncStatus.GetGroupedTitles();
            statusProgressBar1.ActivateStatus("fetching files/dirs");

            SyncStatusFormHelper.Init(this);

            tabControl_left1.SelectedIndex = 1;
            label_title.Text = _l.Title;
            label_link_folder1.Text = _l.Path1;
            label_link_folder2.Text = _l.Path2;
            label_link_direction.Text = _l.Direction.ToString();

            if (SI != null)
            {
                //build tree (pause sync while building)
                bool running = _l.IsRunning;
                if (running) _l.PauseSync();
                int ct = 0;
                int i = 0;
                while (_l.SyncTask != null && _l.SyncTask.TasksRunning() > 0 && i < 5)
                {
                    if (ct == _l.SyncTask.TasksRunning())
                        i++;
                    else
                    {
                        ct = _l.SyncTask.TasksRunning();
                        i = 0;
                    }
                    Thread.Sleep(300);
                }
                if (_l.SyncTask != null)
                {
                    BuildTreeBase(_l.SyncInfo.DirTree);
                    SI.SetListener(this);
                    if (running) _l.ResumeSync();
                }
            }

            Load += delegate { StartUpdateRoutine(); };
        }
コード例 #5
0
ファイル: SyncInfo.cs プロジェクト: tranquvis/WinSync
        /// <summary>
        /// create SyncInfo
        /// </summary>
        /// <param name="link">link data (will be copied not referenced)</param>
        public SyncInfo(SyncLink link)
        {
            Link = link;
            Time = new TimeMeasurement(this);
            Files = new FilesInfo(this);
            Dirs = new DirsInfo(this);

            Paused = false;
            SyncDirExecutionInfos = new List<SyncDirExecutionInfo>();
            SyncFileExecutionInfos = new List<SyncFileExecutionInfo>();
            ConflictInfos = new List<ElementConflictInfo>();
            LogStack = new Stack<LogMessage>();

            MyDirInfo rootDir = new MyDirInfo("\\", "");
            SyncDirInfo sdi = new SyncDirInfo(this, rootDir, false);
            DirTree = new DirTree(rootDir, null, null);

            Status = SyncStatus.DetectingChanges;
        }
コード例 #6
0
ファイル: SyncInfo.cs プロジェクト: tranquvis/WinSync
        /// <summary>
        /// create SyncInfo
        /// </summary>
        /// <param name="link">link data (will be copied not referenced)</param>
        public SyncInfo(SyncLink link)
        {
            Link  = link;
            Time  = new TimeMeasurement(this);
            Files = new FilesInfo(this);
            Dirs  = new DirsInfo(this);

            Paused = false;
            SyncDirExecutionInfos  = new List <SyncDirExecutionInfo>();
            SyncFileExecutionInfos = new List <SyncFileExecutionInfo>();
            ConflictInfos          = new List <ElementConflictInfo>();
            LogStack = new Stack <LogMessage>();

            MyDirInfo   rootDir = new MyDirInfo("\\", "");
            SyncDirInfo sdi     = new SyncDirInfo(this, rootDir, false);

            DirTree = new DirTree(rootDir, null, null);

            Status = SyncStatus.DetectingChanges;
        }
コード例 #7
0
        /// <summary>
        /// create SyncDetailInfoForm1 that displays all details of a synchronisation process
        /// </summary>
        /// <param name="l">link that contains the synchronisation information</param>
        public SyncDetailInfoForm1(SyncLink l, MainForm mainForm)
        {
            _l = l;
            _mainForm = mainForm;
            InitializeComponent();

            label_title.Text = _l.Title;
            label_folder1.Text = _l.Path1;
            label_folder2.Text = _l.Path2;
            label_direction.Text = _l.Direction.ToString();

            if (_l.SyncInfo != null)
            {
                //build tree (pause sync while building)
                bool running = _l.IsRunning;
                if (running) _l.PauseSync();
                int ct = 0;
                int i = 0;
                while (_l.SyncTask != null && _l.SyncTask.TasksRunning() > 0 && i < 5)
                {
                    if (ct == _l.SyncTask.TasksRunning())
                        i++;
                    else
                    {
                        ct = _l.SyncTask.TasksRunning();
                        i = 0;
                    }
                    Thread.Sleep(300);
                }
                if(_l.SyncTask != null)
                {
                    BuildTreeRecursively(treeView1.Nodes, _l.SyncInfo.DirTree);
                    _l.SyncInfo.SetListener(this);
                    if (running) _l.ResumeSync();
                }
            }
            StartUpdateRoutine();
            
        }
コード例 #8
0
ファイル: MainForm.cs プロジェクト: tranquvis/WinSync
 /// <summary>
 /// cancel synchronisation of link
 /// </summary>
 /// <param name="l"></param>
 void CancelSync(SyncLink l)
 {
     l.CancelSync();
 }
コード例 #9
0
ファイル: MainForm.cs プロジェクト: tranquvis/WinSync
 private void OnLinkDataChanged(int changeType, SyncLink l)
 {
     switch (changeType)
     {
         case 0:
             //Link added
             AddLinkRow(l);
             break;
         case 1:
             //Link changed
             GetLinkRow(l).UpdateData();
             break;
         case 2:
             //Link removed
             RemoveLinkRow(l);
             break;
     }
 }
コード例 #10
0
ファイル: MainForm.cs プロジェクト: tranquvis/WinSync
        /// <summary>
        /// select LinkRow and unselect others
        /// start updating detail stats afterwards
        /// </summary>
        /// <param name="l">associated SyncLink</param>
        void SelectLinkRow(SyncLink l)
        {
            //deselect others
            foreach (LinkRow lr in _linkRows.Where(x => x.Link != l))
                lr.Selected = false;

            _selectedLink = l;

            StartUpdatingSelectedSyncLinkInfo();
        }
コード例 #11
0
ファイル: MainForm.cs プロジェクト: tranquvis/WinSync
 void RemoveLinkRow(SyncLink link)
 {
     for (int i = 0; i < _linkRows.Count; i++)
     {
         if (_linkRows[i].Link == link)
         {
             _linkRows.RemoveAt(i);
             dataTable.Controls.RemoveAt(i);
             break;
         }
     }
 }
コード例 #12
0
ファイル: MainForm.cs プロジェクト: tranquvis/WinSync
        void AddLinkRow(SyncLink link)
        {
            LinkRow ll = new LinkRow(link);
            ll.LinkDeletionRequested += delegate { DataManager.RemoveLink(link.Title); };
            ll.EditLinkRequested += delegate { new LinkDataForm(link).ShowDialog(); };
            ll.LinkRowSelected += delegate { SelectLinkRow(link); };
            ll.SyncStartRequested += delegate { StartSync(link); };
            ll.SyncCancellationRequested += delegate { CancelSync(link); };

            ll.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
            ll.Width = dataTable.Width;

            _linkRows.Add(ll);
            dataTable.Controls.Add(ll, 0, _linkRows.Count);
        }
コード例 #13
0
ファイル: MainForm.cs プロジェクト: tranquvis/WinSync
 LinkRow GetLinkRow(SyncLink l)
 {
     return _linkRows.FirstOrDefault(x => x.Link == l);
 }
コード例 #14
0
ファイル: DataManager.cs プロジェクト: tranquvis/WinSync
        /// <summary>
        /// load list of links from file
        /// </summary>
        /// <returns></returns>
        public static void LoadLinks()
        {
            if(AnySyncRunning)
                throw new ApplicationException("Cannot load Links while any sync is running!");

            _links = new List<SyncLink>();

            if (CreateDataFileIfNotExist())
                return;

            List<string> lines = new List<string>(File.ReadAllLines(LinksDataFilePath));
            List<int> errorLines = new List<int>();
            bool linkSec = false;

            int i = 0;
            foreach (string line in lines)
            {
                if (line.Trim().Equals("<links>"))
                    linkSec = true;
                else if (line.Trim().Equals("</links>"))
                    break;
                else if (linkSec)
                {
                    if (string.IsNullOrWhiteSpace(line))
                        continue;

                    Link l = Link.CreateFromLine(line);
                    if (l != null)
                    {
                        SyncLink sl = new SyncLink(l);
                        _links.Add(sl);
                        LinkChanged(0, sl);
                    }
                    else
                    {
                        errorLines.Add(i);
                    }
                }

                i++;
            }
            if (errorLines.Count > 0)
                MessageBox.Show($"Please check links.dat. \nBad format detected in lines: {string.Join(", ", errorLines)}",
                    @"Bad Format in Data-File", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }