Пример #1
0
        public Runner(RepositoryGetter getter, bool setActualDate)
        {
            logger.Info("new runner");
            var dueTime  = TimeSpan.FromSeconds(1);
            var interval = TimeSpan.FromSeconds(3600);

            if (setActualDate == true)
            {
                logger.Info("clear datagrid");
                MainWindow win = (MainWindow)Application.Current.MainWindow;
                win.dataGrid.ItemsSource = null;
            }
            //Task.Run(() => CheckingRepositoryPeriodicAsync(OnTick, dueTime, interval, cts.Token, getter).Wait());
            CheckingRepositoryPeriodicAsync(OnTick, dueTime, interval, cts.Token, getter, setActualDate); //CancellationToken.None
                                                                                                          //CheckingConnectionAsync(OnTick, dueTime, interval, CancellationToken.None);
        }
Пример #2
0
 public static void GetterInit(string url)
 {
     getter = RepositoryGetter.CreateNewRepositoryGetter(url);
     if (getter == null)
     {
     }
     else
     {
         if (runner != null)
         {
             runner.cts.Cancel();
         }
         try
         {
             runner = new Runner(getter, true);
         }
         catch (Exception ex)
         {
             ex.ToString();
         }
     }
 }
Пример #3
0
        private void button_refresh_Click(object sender, RoutedEventArgs e)
        {
            indikacenetu();
            if (lb_status_connect.Content.Equals("Online"))
            {
                if (getter == null)
                {
                    getter = RepositoryGetter.CreateNewRepositoryGetter(settingshandler.getUrlTB());
                }

                if (getter == null)
                {
                    //System.Windows.MessageBox.Show("repository not found");
                }
                else
                {
                    if (runner != null)
                    {
                        runner.cts.Cancel();
                    }

                    try
                    {
                        logger.Info("refresh_Click start");
                        lb_status.Content = "Searching...";
                        runner            = new Runner(getter, false);
                        //searchingDateTime = DateTime.Now;
                    }
                    catch (Exception ex)
                    {
                        ex.ToString();
                    }
                }
            }
            else
            {
                System.Windows.MessageBox.Show("No internet connection, please connect first");
            }
        }
Пример #4
0
        private void OnTick(RepositoryGetter getter, DateTime currentDateTime)
        {
            //Task.Run(() => CheckingRepositoryPeriodicAsync(OnTick, dueTime, interval, cts.Token, getter).Wait());
            //CancellationToken.None
            //CheckingConnectionAsync(OnTick, dueTime, interval, CancellationToken.None);



            var k = "";

            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                MainWindow win = (MainWindow)Application.Current.MainWindow;
                win.lb_status_connect.Content    = (Connection.CheckConnection()) ? "Online" : "Offline";
                win.lb_status_connect.Foreground = win.lb_status_connect.Content.Equals("Online") ? Brushes.Green : Brushes.Red;
                if (win.lb_status_connect.Content.ToString() == "Offline")
                {
                    //Task.Run(() => CheckingRepositoryPeriodicAsync(OnTick, dueTime, interval, cts.Token, getter).Wait());
                    k = "Offline";
                    win.lb_status.Content    = "Failed";                                                                                           //CheckingConnectionAsync(OnTick, dueTime, interval, CancellationToken.None);
                    win.lb_status.Foreground = Brushes.Red;
                }
                else
                {
                    k = "Online";

                    win.lb_status.Content = "Searching...";
                }
            }));

            // load backup from file
            if (k == "Online")
            {
                if (getter.FilesChanges.Count() == 0)
                {
                    logger.Info("load backup from file");
                    getter.loadNewFilesChangesFromListString(Save.LoadBackupContentFromFile(getter.UserName + "_" + getter.RepoName + ".txt"));
                }
                Application.Current.Dispatcher.Invoke(new Action(() =>
                {
                    MainWindow win = (MainWindow)Application.Current.MainWindow;
                    win.lb_status_connect.Content    = (Connection.CheckConnection()) ? "Online" : "Offline";
                    win.lb_status_connect.Foreground = win.lb_status_connect.Content.Equals("Online") ? Brushes.Green : Brushes.Red;
                    if (win.lb_status_connect.Content.ToString() == "Offline")
                    {
                        k = "Offline";
                        win.lb_status.Content    = "Failed";
                        win.lb_status.Foreground = Brushes.Red;
                    }

                    else
                    {
                        k = "Online";

                        win.lb_status.Content = "Searching...";
                    }
                }));
                if (k == "Online")
                {
                    logger.Info("searching files");
                    IDictionary <string, List <string[]> > filesExtensions = new Dictionary <string, List <string[]> >();
                    try
                    {
                        filesExtensions = getter.ChangedFiles(new DateTime(currentDateTime.Year, currentDateTime.Month,
                                                                           currentDateTime.Day, currentDateTime.Hour, currentDateTime.Minute, currentDateTime.Second)).Result;
                    }
                    catch (Exception ex)
                    {
                        Application.Current.Dispatcher.Invoke(new Action(() =>
                        {
                            MainWindow win                = (MainWindow)Application.Current.MainWindow;
                            win.lb_status.Content         = "Failed";
                            win.lb_status_connect.Content = (Connection.CheckConnection()) ? "Online" : "Offline";
                        }));
                    }


                    //var filesExtensions = getter.ChangedFiles(new DateTime(2016, 4, 19, 20, 22, 12)).Result;
                    //currentDateTime = new DateTime(2016, 4, 19, 20, 22, 12);

                    Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        MainWindow win = (MainWindow)Application.Current.MainWindow;
                        if (win.lb_status.Content != "Failed")
                        {
                            //win.dataGrid.ItemsSource = GitFile.convertor(filesExtensions);
                            win.dataGrid.ItemsSource = GitFile.convertorToList(filesExtensions).OrderByDescending(x => x.datetime);

                            foreach (GitFile item in win.dataGrid.ItemsSource)
                            {
                                var row = win.dataGrid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
                                if (row == null)
                                {
                                    win.dataGrid.UpdateLayout();
                                    row = win.dataGrid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
                                }
                                DateTime myDate = DateTime.ParseExact(item.datetime, "dd.MM.yyyy HH:mm:ss",
                                                                      System.Globalization.CultureInfo.InvariantCulture);
                                if (myDate >= currentDateTime)
                                {
                                    try
                                    {
                                        row.Background = Brushes.GreenYellow;
                                    }
                                    catch
                                    {
                                        //nevim proc je row nekdy null
                                    }
                                }
                            }

                            //save to file
                            logger.Info("save changes to file ");
                            Save.SaveDatagridContent(getter.UserName + "_" + getter.RepoName + ".txt", getter.FilesChanges);
                            win.lb_status.Content    = "Finished";
                            win.lb_status.Foreground = Brushes.Green;
                        }
                    }));
                }
            }
        }
Пример #5
0
        // The `onTick` method will be called periodically unless cancelled.
        private static async Task CheckingRepositoryPeriodicAsync(Action <RepositoryGetter, DateTime> onTick, TimeSpan dueTime, TimeSpan interval, CancellationToken token, RepositoryGetter getter, bool setActualDate)
        {
            // Initial wait time before we begin the periodic loop.
            if (dueTime > TimeSpan.Zero)
            {
                await Task.Delay(dueTime, token).ConfigureAwait(false);
            }

            if (currentDateTime.ToString("dd.MM.yyyy HH:mm:ss").Equals("01.01.0001 00:00:00") || setActualDate == true)
            {
                logger.Info("set actual date time");
                currentDateTime = DateTime.Now;
            }



            // Repeat this loop until cancelled.
            while (!token.IsCancellationRequested)
            {
                // Call our onTick function.
                //onTick?.Invoke(getter, currentDateTime);

                Task task = Task.Factory.StartNew(() => onTick(getter, currentDateTime));
                //task.Wait(TimeSpan.FromMinutes(1));
                //if (!task.IsCompleted)
                //{
                //    Application.Current.Dispatcher.Invoke(new Action(() =>
                //    {
                //        MainWindow win = (MainWindow)Application.Current.MainWindow;
                //        win.lb_status.Content = "failed";
                //        win.lb_status_connect.Content = (Connection.CheckConnection()) ? "Online" : "Offline";
                //    }));
                //}

                currentDateTime = DateTime.Now;

                // Wait to repeat again.
                if (interval > TimeSpan.Zero)
                {
                    await Task.Delay(interval, token).ConfigureAwait(false);
                }
            }
        }