source: trunk/CrypPlugins/P2PEditor/GUI/Controls/JobDisplay.xaml.cs @ 1701

Last change on this file since 1701 was 1701, checked in by Paul Lelgemann, 12 years ago

o P2PEditor fixes

File size: 5.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Timers;
5using System.Windows;
6using System.Windows.Input;
7using System.Windows.Threading;
8using Cryptool.P2P;
9using Cryptool.P2PEditor.Distributed;
10using Cryptool.P2PEditor.Worker;
11using Cryptool.PluginBase;
12
13namespace Cryptool.P2PEditor.GUI.Controls
14{
15    /// <summary>
16    /// Interaction logic for JobDisplay.xaml
17    /// </summary>
18    public partial class JobDisplay
19    {
20        public static DependencyProperty JobsProperty = DependencyProperty.Register("Jobs",
21                                                                                    typeof (List<DistributedJob>),
22                                                                                    typeof (JobDisplay));
23
24        private Timer _refreshListTimer;
25
26        public JobDisplay()
27        {
28            InitializeComponent();
29            UpdateRefreshTimerSettings(P2PManager.IsConnected);
30
31            P2PManager.ConnectionManager.OnP2PConnectionStateChangeOccurred += P2PManager_OnP2PConnectionStateChangeOccurred;
32        }
33
34        void P2PManager_OnP2PConnectionStateChangeOccurred(object sender, bool newState)
35        {
36            UpdateRefreshTimerSettings(newState);
37        }
38
39        private void UpdateRefreshTimerSettings(bool isConnected)
40        {
41            if (P2PSettings.Default.DistributedJobListRefreshInterval == 0)
42            {
43                return;
44            }
45
46            if (_refreshListTimer == null)
47            {
48                _refreshListTimer = new Timer(P2PSettings.Default.DistributedJobListRefreshInterval * 1000);
49                _refreshListTimer.Elapsed += RefreshListTimerElapsed;
50            }
51
52            if (isConnected)
53            {
54                _refreshListTimer.Start();
55            }
56            else 
57            {
58                _refreshListTimer.Stop();
59            }
60        }
61
62        void RefreshListTimerElapsed(object sender, ElapsedEventArgs e)
63        {
64            if (!IsVisible)
65            {
66                return;
67            }
68
69            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateJobList));
70        }
71
72        public List<DistributedJob> Jobs
73        {
74            get { return (List<DistributedJob>) GetValue(JobsProperty); }
75            set { SetValue(JobsProperty, value); }
76        }
77
78        private void RefreshButton_Click(object sender, RoutedEventArgs e)
79        {
80            UpdateJobList();
81        }
82
83        public void UpdateJobList()
84        {
85            if (!P2PManager.IsConnected)
86            {
87                return;
88            }
89
90            P2PEditor.GuiLogMessage("Requesting new job list...", NotificationLevel.Debug);
91            var updateWorker = new JobListUpdateWorker(JobListManager);
92            updateWorker.RunWorkerCompleted += HandleRefreshedJobList;
93            updateWorker.RunWorkerAsync();
94        }
95
96        void HandleRefreshedJobList(object sender, RunWorkerCompletedEventArgs e)
97        {
98            var updateWorker = sender as JobListUpdateWorker;
99            if (updateWorker == null)
100            {
101                return;
102            }
103
104            P2PEditor.GuiLogMessage("Received new job list...", NotificationLevel.Debug);
105            Jobs = updateWorker.RefreshedJobList;
106
107            if (Jobs != null)
108                Jobs.Reverse();
109        }
110
111        private void ParticipateButton_Click(object sender, RoutedEventArgs e)
112        {
113            ParticipateInSelectedJob();
114        }
115
116        private void ParticipateItemHandler(object sender, MouseButtonEventArgs e)
117        {
118            ParticipateInSelectedJob();
119        }
120
121        private void ParticipateInSelectedJob()
122        {
123            var jobToParticipateIn = (DistributedJob) JobListBox.SelectedItem;
124
125            if (jobToParticipateIn == null)
126            {
127                return;
128            }
129
130            P2PEditor.GuiLogMessage(
131                string.Format("Participating in job {0} ({1}).", jobToParticipateIn.JobName, jobToParticipateIn.JobGuid),
132                NotificationLevel.Info);
133            new JobParticipationWorker(P2PEditor, JobListManager, jobToParticipateIn, Dispatcher).RunWorkerAsync();
134        }
135
136        private void DeleteButton_Click(object sender, RoutedEventArgs e)
137        {
138            DeleteSelectedJob();
139        }
140
141        private void JobListBox_KeyUp(object sender, KeyEventArgs e)
142        {
143            switch (e.Key)
144            {
145                case Key.Enter:
146                    ParticipateInSelectedJob();
147                    break;
148                case Key.Delete:
149                    DeleteSelectedJob();
150                    break;
151            }
152           
153        }
154
155        private void DeleteSelectedJob()
156        {
157            var jobToDelete = (DistributedJob)JobListBox.SelectedItem;
158
159            if (jobToDelete == null || jobToDelete.JobOwner != P2PSettings.Default.PeerName)
160            {
161                return;
162            }
163
164            P2PEditor.GuiLogMessage(
165                string.Format("Deleting job {0} ({1}).", jobToDelete.JobName, jobToDelete.JobGuid),
166                NotificationLevel.Info);
167
168            var backgroundCreationWorker = new JobDeletionWorker(JobListManager, jobToDelete);
169            backgroundCreationWorker.RunWorkerCompleted += BackgroundDeletionWorkerCompleted;
170            backgroundCreationWorker.RunWorkerAsync();
171        }
172
173        private void BackgroundDeletionWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
174        {
175            P2PEditorPresentation.ShowActiveJobs();
176        }
177    }
178}
Note: See TracBrowser for help on using the repository browser.