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

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

o CrypP2P: Code cleanup
o P2PEditor: job list will be reloaded in a BackgroundWorker

File size: 5.5 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            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(UpdateJobList));
65        }
66
67        public List<DistributedJob> Jobs
68        {
69            get { return (List<DistributedJob>) GetValue(JobsProperty); }
70            set { SetValue(JobsProperty, value); }
71        }
72
73        private void RefreshButton_Click(object sender, RoutedEventArgs e)
74        {
75            UpdateJobList();
76        }
77
78        public void UpdateJobList()
79        {
80            if (!P2PManager.IsConnected)
81            {
82                return;
83            }
84
85            P2PEditor.GuiLogMessage("Requesting new job list...", NotificationLevel.Debug);
86            var updateWorker = new JobListUpdateWorker(JobListManager);
87            updateWorker.RunWorkerCompleted += HandleRefreshedJobList;
88            updateWorker.RunWorkerAsync();
89        }
90
91        void HandleRefreshedJobList(object sender, RunWorkerCompletedEventArgs e)
92        {
93            var updateWorker = sender as JobListUpdateWorker;
94            if (updateWorker == null)
95            {
96                return;
97            }
98
99            P2PEditor.GuiLogMessage("Received new job list...", NotificationLevel.Debug);
100            Jobs = updateWorker.RefreshedJobList;
101            Jobs.Reverse();
102        }
103
104        private void ParticipateButton_Click(object sender, RoutedEventArgs e)
105        {
106            ParticipateInSelectedJob();
107        }
108
109        private void ParticipateItemHandler(object sender, MouseButtonEventArgs e)
110        {
111            ParticipateInSelectedJob();
112        }
113
114        private void ParticipateInSelectedJob()
115        {
116            var jobToParticipateIn = (DistributedJob) JobListBox.SelectedItem;
117
118            if (jobToParticipateIn == null)
119            {
120                return;
121            }
122
123            P2PEditor.GuiLogMessage(
124                string.Format("Participating in job {0} ({1}).", jobToParticipateIn.JobName, jobToParticipateIn.JobGuid),
125                NotificationLevel.Info);
126            new JobParticipationWorker(P2PEditor, JobListManager, jobToParticipateIn, Dispatcher).RunWorkerAsync();
127        }
128
129        private void DeleteButton_Click(object sender, RoutedEventArgs e)
130        {
131            DeleteSelectedJob();
132        }
133
134        private void JobListBox_KeyUp(object sender, KeyEventArgs e)
135        {
136            switch (e.Key)
137            {
138                case Key.Enter:
139                    ParticipateInSelectedJob();
140                    break;
141                case Key.Delete:
142                    DeleteSelectedJob();
143                    break;
144            }
145           
146        }
147
148        private void DeleteSelectedJob()
149        {
150            var jobToDelete = (DistributedJob)JobListBox.SelectedItem;
151
152            if (jobToDelete == null || jobToDelete.JobOwner != P2PSettings.Default.PeerName)
153            {
154                return;
155            }
156
157            P2PEditor.GuiLogMessage(
158                string.Format("Deleting job {0} ({1}).", jobToDelete.JobName, jobToDelete.JobGuid),
159                NotificationLevel.Info);
160
161            var backgroundCreationWorker = new JobDeletionWorker(JobListManager, jobToDelete);
162            backgroundCreationWorker.RunWorkerCompleted += BackgroundDeletionWorkerCompleted;
163            backgroundCreationWorker.RunWorkerAsync();
164        }
165
166        private void BackgroundDeletionWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
167        {
168            P2PEditorPresentation.ShowActiveJobs();
169        }
170    }
171}
Note: See TracBrowser for help on using the repository browser.