Beispiel #1
0
        private async Task RunAsSingleInstanceCoreAsync(IProgramArgs args)
        {
            var tuple = await hubConnection.InvokeAsync <Tuple <bool, HubClientIdentifierMtbl> >(
                tryRegisterSingleInstanceMethodName);

            hubClientIdentifier = tuple.Item2;

            if (tuple.Item1)
            {
                RunCore(args);
            }
            else
            {
                bool singleInstanceAlreadyRegistered = await WaitForClientPingResponse();

                if (!singleInstanceAlreadyRegistered)
                {
                    RunCore(args);
                }
                else
                {
                    await UnregisterSingleInstanceAsync();
                }
            }
        }
Beispiel #2
0
        private void RunCore(IProgramArgs args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.ApplicationExit += Application_ApplicationExit;
            Application.Run(new MainForm());
        }
Beispiel #3
0
 public void Run(IProgramArgs args)
 {
     if (args.IsSingleInstance)
     {
         RunAsSingleInstanceAsync(args).Wait();
     }
     else
     {
         RunCore(args);
     }
 }
Beispiel #4
0
        private async Task RunAsSingleInstanceAsync(IProgramArgs args)
        {
            string url = string.Join('/',
                                     Settings.Default.BackgroundAspNetCoreAppBaseUri,
                                     HubsH.MAIN_HUB_ADDRESS);

            hubConnection = new HubConnectionBuilder()
                            .WithUrl(url)
                            .Build();

            InitHubConnection(hubConnection);
            await RunAsSingleInstanceCoreAsync(args);

            await UnregisterSingleInstanceAsync();
        }
Beispiel #5
0
        public MainForm()
        {
            InitializeComponent();

            if (!ServiceProviderContainer.Instance.Value.IsDesignMode)
            {
                programArgs    = ServiceProviderContainer.Instance.Value.Services.GetRequiredService <IProgramArgs>();
                initialDirPath = programArgs.InitialDirPath;

                viewModel = ServiceProviderContainer.Instance.Value.Services.GetRequiredService <MainFormViewModel>();

                viewModel.OnFsExplorerTabAdded       += ViewModel_OnFsExplorerTabAdded;
                viewModel.OnFsExplorerTabRemoved     += ViewModel_OnFsExplorerTabRemoved;
                viewModel.OnFsExplorerTabPageChanged += ViewModel_OnFsExplorerTabPageChanged;

                eventsViewModel = ServiceProviderContainer.Instance.Value.Services.GetRequiredService <MainFormEventsViewModel>();
                eventsViewModel.UILogMessageAdded += ViewModel_UILogMessageAdded;

                eventsViewModel.StatusStripTextChanged += ViewModel_StatusStripTextChanged;
                eventsViewModel.UpdateStatusStripText(string.Empty);
            }
        }
Beispiel #6
0
        private void CopyDirectory(DirectoryInfo pDi, DirectoryInfo sDir, DirectoryInfo[] sDis, DirectoryNumbers dirNums, IProgramArgs progArgs)
        {
            if (_excludeDirectoriesStartingWith.Any(e => pDi.Name.StartsWith(e, StringComparison.InvariantCultureIgnoreCase)))
            {
                return;
            }

            //Log.Info($"{MethodBase.GetCurrentMethod().Name}: Primary: \"{pDi.FullName}\".\tSecondary: \"{sDir.FullName}\"");
            var sDi = sDis.FirstOrDefault(s => string.Compare(s.Name, pDi.Name, StringComparison.InvariantCultureIgnoreCase) == 0);

            if (sDi == null)
            {
                //_log.Log<Sync>(LogLevel.Info, $"[PD]\t{pDi.FullName}");
                string destination = Path.Combine(sDir.FullName, Path.GetFileName(pDi.FullName));
                if (_isCopy)
                {
                    var sw = new Stopwatch();
                    sw.Start();
                    _fs.CopyDirectory(pDi.FullName, destination);
                    ++_copyDirCount;
                    sw.Stop();
                    Log.Info($"[PD]\t\"{pDi.FullName}\"\t{sw.Elapsed.TotalSeconds} [sec], ({dirNums.NestingLevel}/{dirNums.DirectoryCount}/{dirNums.TotalDirectoryCount})");
                }
                else
                {
                    Log.Info($"[PD]\t\"{pDi.FullName}\"\t(Report only), ({dirNums.NestingLevel}/{dirNums.DirectoryCount}/{dirNums.TotalDirectoryCount})");
                }
            }
            else
            {
                SyncDirectory(pDi, sDi, dirNums, progArgs);
            }
        }
Beispiel #7
0
        private void UnsafeSyncDirectory(DirectoryInfo pDir, DirectoryInfo sDir, DirectoryNumbers dirNums, IProgramArgs progArgs)
        {
            if (progArgs.IsSkipFileCopy(pDir))
            {
                Log.Info($"({_dirCount:#,##0}).  Skipping \"{pDir.FullName}\"");
            }
            else
            {
                if (_isCopy)
                {
                    var sw = new Stopwatch();
                    CopyFiles(pDir, sDir);
                    sw.Stop();
                    Log.Info($"({_copyFileCount:#,##0}/{_copyDirCount:#,##0}/{_dirCount:#,##0}).  P-Dir: \"{pDir.FullName}\"\tS-Dir: \"{sDir.FullName}\"\t{sw.Elapsed.TotalSeconds} [sec].  ({dirNums.NestingLevel}/{dirNums.DirectoryCount}/{dirNums.TotalDirectoryCount})");
                }
                else
                {
                    Log.Info($"({_dirCount:#,##0}, {dirNums.NestingLevel}/{dirNums.DirectoryCount}/{dirNums.TotalDirectoryCount}).  P-Dir: \"{pDir.FullName}\"\tS-Dir: \"{sDir.FullName}\"");
                }

                CopyFiles(pDir, sDir);
            }

            // Directories
            DirectoryInfo[] pDis = pDir.GetDirectories();
            DirectoryInfo[] sDis = sDir.GetDirectories();
            Array.Sort(pDis, (e1, e2) => string.Compare(e1.Name, e2.Name, StringComparison.OrdinalIgnoreCase));
            Array.Sort(sDis, (e1, e2) => string.Compare(e1.Name, e2.Name, StringComparison.OrdinalIgnoreCase));

            int dirCnt    = 0;
            int totDirCnt = pDis.Length;

            foreach (var pDi in pDis)
            {
                CopyDirectory(pDi, sDir, sDis, dirNums.NextNumbers(++dirCnt, totDirCnt), progArgs);
            }
        }
Beispiel #8
0
 public void SyncDirectory(DirectoryInfo pDir, DirectoryInfo sDir, DirectoryNumbers dirNums, IProgramArgs progArgs)
 {
     try
     {
         ++_dirCount;
         if (progArgs.IsSkipDirCopy(pDir))
         {
             Log.Info($"Skip \"{pDir.FullName}\" and all its subdirectories");
             return;
         }
         UnsafeSyncDirectory(pDir, sDir, dirNums, progArgs);
     }
     catch (Exception ex)
     {
         //_log.Log<Sync>(LogLevel.Error, $"Error while Syncing directories:  {ex.Message}", ex);
         Log.Error($"Error while Syncing directories:  {ex.Message}", ex);
     }
 }
Beispiel #9
0
 public ProgramArgsMtbl(IProgramArgs src)
 {
     InitialDirPath   = src.InitialDirPath;
     IsSingleInstance = src.IsSingleInstance;
 }