Merge lp:~elementary-pantheon/switchboard-plug-security-privacy/clear-usage-popover into lp:~elementary-apps/switchboard-plug-security-privacy/trunk

Proposed by Danielle Foré
Status: Merged
Approved by: Danielle Foré
Approved revision: 294
Merged at revision: 294
Proposed branch: lp:~elementary-pantheon/switchboard-plug-security-privacy/clear-usage-popover
Merge into: lp:~elementary-apps/switchboard-plug-security-privacy/trunk
Diff against target: 426 lines (+195/-165)
3 files modified
src/CMakeLists.txt (+1/-0)
src/Views/TrackPanel.vala (+2/-165)
src/Widgets/ClearUsagePopover.vala (+192/-0)
To merge this branch: bzr merge lp:~elementary-pantheon/switchboard-plug-security-privacy/clear-usage-popover
Reviewer Review Type Date Requested Status
David Hewitt code, function Approve
Review via email: mp+318318@code.launchpad.net

Commit message

Move the ClearUsagePopover to its own class

To post a comment you must log in.
Revision history for this message
David Hewitt (davidmhewitt) wrote :

Cleans up TrackPanel.vala nicely and still works as intended.

review: Approve (code, function)
Revision history for this message
RabbitBot (rabbitbot-a) wrote :

Attempt to merge into lp:switchboard-plug-security-privacy failed due to conflicts:

text conflict in src/CMakeLists.txt

294. By Danielle Foré

resolve merge conflicts

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/CMakeLists.txt'
--- src/CMakeLists.txt 2017-02-22 17:18:21 +0000
+++ src/CMakeLists.txt 2017-02-26 17:34:41 +0000
@@ -24,6 +24,7 @@
2424
25 Widgets/AppChooser.vala25 Widgets/AppChooser.vala
26 Widgets/AppRow.vala26 Widgets/AppRow.vala
27 Widgets/ClearUsagePopover.vala
2728
28 ${CMAKE_CURRENT_BINARY_DIR}/config.vala29 ${CMAKE_CURRENT_BINARY_DIR}/config.vala
29PACKAGES30PACKAGES
3031
=== modified file 'src/Views/TrackPanel.vala'
--- src/Views/TrackPanel.vala 2017-02-19 21:27:25 +0000
+++ src/Views/TrackPanel.vala 2017-02-26 17:34:41 +0000
@@ -21,11 +21,7 @@
21 */21 */
2222
23public class SecurityPrivacy.TrackPanel : Gtk.Grid {23public class SecurityPrivacy.TrackPanel : Gtk.Grid {
2424 private Widgets.ClearUsagePopover remove_popover;
25 private Gtk.RecentManager recent;
26 private List<Gtk.RecentInfo> items;
27
28 private Gtk.Popover remove_popover;
29 private Dialogs.AppChooser app_chooser;25 private Dialogs.AppChooser app_chooser;
30 private ApplicationBlacklist app_blacklist;26 private ApplicationBlacklist app_blacklist;
31 private PathBlacklist path_blacklist;27 private PathBlacklist path_blacklist;
@@ -34,13 +30,6 @@
34 private Gtk.Container description_frame;30 private Gtk.Container description_frame;
35 private Gtk.Grid exclude_grid;31 private Gtk.Grid exclude_grid;
3632
37 private Granite.Widgets.DatePicker to_datepicker;
38 private Granite.Widgets.DatePicker from_datepicker;
39 private Gtk.RadioButton all_time_radio;
40 private Gtk.RadioButton from_radio;
41 private Gtk.RadioButton past_hour_radio;
42 private Gtk.RadioButton past_day_radio;
43 private Gtk.RadioButton past_week_radio;
44 private Gtk.Switch record_switch;33 private Gtk.Switch record_switch;
4534
46 private enum Columns {35 private enum Columns {
@@ -63,7 +52,6 @@
63 app_blacklist = new ApplicationBlacklist (blacklist);52 app_blacklist = new ApplicationBlacklist (blacklist);
64 path_blacklist = new PathBlacklist (blacklist);53 path_blacklist = new PathBlacklist (blacklist);
65 filetype_blacklist = new FileTypeBlacklist (blacklist);54 filetype_blacklist = new FileTypeBlacklist (blacklist);
66 recent = new Gtk.RecentManager ();
6755
68 var privacy_settings = new GLib.Settings ("org.gnome.desktop.privacy");56 var privacy_settings = new GLib.Settings ("org.gnome.desktop.privacy");
6957
@@ -96,8 +84,6 @@
96 record_grid.add (record_switch);84 record_grid.add (record_switch);
97 record_grid.add (info_button);85 record_grid.add (info_button);
9886
99 /* Remove Popover */
100
101 var clear_data = new Gtk.ToggleButton.with_label (_("Clear Usage Data…"));87 var clear_data = new Gtk.ToggleButton.with_label (_("Clear Usage Data…"));
102 clear_data.halign = Gtk.Align.END;88 clear_data.halign = Gtk.Align.END;
103 clear_data.notify["active"].connect (() => {89 clear_data.notify["active"].connect (() => {
@@ -108,44 +94,7 @@
108 }94 }
109 });95 });
11096
111 var clear_label = new Gtk.Label (_("Remove system-collected file and application usage data from:"));97 remove_popover = new Widgets.ClearUsagePopover (clear_data);
112 clear_label.halign = Gtk.Align.START;
113
114 past_hour_radio = new Gtk.RadioButton.with_label (null, _("The past hour"));
115 past_day_radio = new Gtk.RadioButton.with_label_from_widget (past_hour_radio, _("The past day"));
116 past_week_radio = new Gtk.RadioButton.with_label_from_widget (past_hour_radio, _("The past week"));
117 from_radio = new Gtk.RadioButton.with_label_from_widget (past_hour_radio, _("From:"));
118 all_time_radio = new Gtk.RadioButton.with_label_from_widget (past_hour_radio, _("All time"));
119
120 from_datepicker = new Granite.Widgets.DatePicker ();
121 var to_label = new Gtk.Label (_("To:"));
122 to_datepicker = new Granite.Widgets.DatePicker ();
123
124 var clear_button = new Gtk.Button.with_label (_("Clear Data"));
125 clear_button.halign = Gtk.Align.END;
126 clear_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION);
127 clear_button.clicked.connect (() => {
128 on_clear_data ();
129 });
130
131 var remove_popover_grid = new Gtk.Grid ();
132 remove_popover_grid.margin = 12;
133 remove_popover_grid.column_spacing = 12;
134 remove_popover_grid.row_spacing = 6;
135
136 remove_popover_grid.attach (clear_label, 0, 0, 4, 1);
137 remove_popover_grid.attach (past_hour_radio, 0, 1, 4, 1);
138 remove_popover_grid.attach (past_day_radio, 0, 2, 4, 1);
139 remove_popover_grid.attach (past_week_radio, 0, 3, 4, 1);
140 remove_popover_grid.attach (from_radio, 0, 4, 1, 1);
141 remove_popover_grid.attach (from_datepicker, 1, 4, 1, 1);
142 remove_popover_grid.attach (to_label, 2, 4, 1, 1);
143 remove_popover_grid.attach (to_datepicker, 3, 4, 1, 1);
144 remove_popover_grid.attach (all_time_radio, 0, 5, 4, 1);
145 remove_popover_grid.attach (clear_button, 0, 6, 4, 1);
146
147 remove_popover = new Gtk.Popover (clear_data);
148 remove_popover.add (remove_popover_grid);
149 remove_popover.closed.connect (() => {98 remove_popover.closed.connect (() => {
150 clear_data.active = false;99 clear_data.active = false;
151 });100 });
@@ -167,20 +116,6 @@
167 record_switch.grab_focus ();116 record_switch.grab_focus ();
168 }117 }
169118
170 private async void delete_history (Zeitgeist.TimeRange tr) {
171 var events = new GenericArray<Zeitgeist.Event> ();
172 events.add (new Zeitgeist.Event ());
173 var zg_log = new Zeitgeist.Log ();
174 try {
175 uint32[] ids = yield zg_log.find_event_ids (tr, events, Zeitgeist.StorageState.ANY, 0, 0, null);
176 Array<uint32> del_ids = new Array<uint32> ();
177 del_ids.append_vals (ids, ids.length);
178 yield zg_log.delete_events (del_ids, null);
179 } catch (Error e) {
180 critical (e.message);
181 }
182 }
183
184 private string get_operating_system_name () {119 private string get_operating_system_name () {
185 string system = _("Your system");120 string system = _("Your system");
186 try {121 try {
@@ -426,102 +361,4 @@
426 NotColumns.IS_APP, false);361 NotColumns.IS_APP, false);
427 });362 });
428 }363 }
429
430 private void on_clear_data () {
431 Zeitgeist.TimeRange tr;
432
433 if (past_hour_radio.active == true) {
434 int range = 360000;//60*60*1000;
435 int64 end = Zeitgeist.Timestamp.from_now ();
436 int64 start = end - range;
437 tr = new Zeitgeist.TimeRange (start, end);
438 delete_history.begin (tr);
439
440 // Deletes files added in the last hour
441 if (recent.size > 0) {
442 items = recent.get_items ();
443
444 try {
445 foreach (var item in items) {
446 if (item.get_added () >= start/1000)
447 recent.remove_item (item.get_uri ());
448 }
449 } catch (Error err) {
450 critical (err.message);
451 }
452 }
453 } else if (past_day_radio.active == true) {
454 int range = 8640000;//24*60*60*1000;
455 int64 end = Zeitgeist.Timestamp.from_now ();
456 int64 start = end - range;
457 tr = new Zeitgeist.TimeRange (start, end);
458 delete_history.begin (tr);
459
460 // Deletes files added in the last day
461 if (recent.size > 0) {
462 items = recent.get_items ();
463
464 try {
465 foreach (var item in items) {
466 if (item.get_age () <= 1)
467 recent.remove_item (item.get_uri ());
468 }
469 } catch (Error err) {
470 critical (err.message);
471 }
472 }
473 } else if (past_week_radio.active == true) {
474 int range = 60480000;//7*24*60*60*1000;
475 int64 end = Zeitgeist.Timestamp.from_now ();
476 int64 start = end - range;
477 tr = new Zeitgeist.TimeRange (start, end);
478 delete_history.begin (tr);
479
480 // Deletes files added in the last week
481 if (recent.size > 0) {
482 items = recent.get_items ();
483
484 try {
485 foreach (var item in items) {
486 if (item.get_age () <= 7)
487 recent.remove_item (item.get_uri ());
488 }
489 } catch (Error err) {
490 critical (err.message);
491 }
492 }
493 } else if (from_radio.active == true) {
494 int64 start = from_datepicker.date.to_unix ()*1000;
495 int64 end = to_datepicker.date.to_unix ()*1000;
496 tr = new Zeitgeist.TimeRange (start, end);
497 delete_history.begin (tr);
498
499 // Deletes files added during the given period
500 if (recent.size > 0) {
501 items = recent.get_items ();
502
503 try {
504 foreach (var item in items) {
505 if (item.get_added () >= start/1000 && item.get_added () <= end/1000)
506 recent.remove_item (item.get_uri ());
507 }
508 } catch (Error err) {
509 critical (err.message);
510 }
511 }
512 } else if (all_time_radio.active == true) {
513 tr = new Zeitgeist.TimeRange.anytime ();
514 delete_history.begin (tr);
515
516 // Deletes all recent files
517 if (recent.size > 0) {
518 try {
519 recent.purge_items ();
520 } catch (Error err) {
521 critical (err.message);
522 }
523 }
524 }
525 remove_popover.hide ();
526 }
527}364}
528365
=== added file 'src/Widgets/ClearUsagePopover.vala'
--- src/Widgets/ClearUsagePopover.vala 1970-01-01 00:00:00 +0000
+++ src/Widgets/ClearUsagePopover.vala 2017-02-26 17:34:41 +0000
@@ -0,0 +1,192 @@
1/*-
2 * Copyright (c) 2014-2017 elementary LLC. (http://launchpad.net/switchboard-plug-security-privacy)
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 3 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 *
19 * Authored by: Corentin Noël <corentin@elementaryos.org>
20 */
21
22public class SecurityPrivacy.Widgets.ClearUsagePopover : Gtk.Popover {
23 private Granite.Widgets.DatePicker to_datepicker;
24 private Granite.Widgets.DatePicker from_datepicker;
25 private Gtk.RadioButton all_time_radio;
26 private Gtk.RadioButton from_radio;
27 private Gtk.RadioButton past_hour_radio;
28 private Gtk.RadioButton past_day_radio;
29 private Gtk.RadioButton past_week_radio;
30 private Gtk.RecentManager recent;
31
32 private List<Gtk.RecentInfo> items;
33
34 public ClearUsagePopover (Gtk.Widget? relative_to) {
35 Object (relative_to: relative_to);
36 }
37
38 construct {
39 recent = new Gtk.RecentManager ();
40
41 var clear_label = new Gtk.Label (_("Remove system-collected file and application usage data from:"));
42 clear_label.halign = Gtk.Align.START;
43
44 past_hour_radio = new Gtk.RadioButton.with_label (null, _("The past hour"));
45 past_day_radio = new Gtk.RadioButton.with_label_from_widget (past_hour_radio, _("The past day"));
46 past_week_radio = new Gtk.RadioButton.with_label_from_widget (past_hour_radio, _("The past week"));
47 from_radio = new Gtk.RadioButton.with_label_from_widget (past_hour_radio, _("From:"));
48 all_time_radio = new Gtk.RadioButton.with_label_from_widget (past_hour_radio, _("All time"));
49
50 from_datepicker = new Granite.Widgets.DatePicker ();
51 var to_label = new Gtk.Label (_("To:"));
52 to_datepicker = new Granite.Widgets.DatePicker ();
53
54 var clear_button = new Gtk.Button.with_label (_("Clear Data"));
55 clear_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION);
56 clear_button.halign = Gtk.Align.END;
57
58 var grid = new Gtk.Grid ();
59 grid.margin = 12;
60 grid.column_spacing = 12;
61 grid.row_spacing = 6;
62 grid.attach (clear_label, 0, 0, 4, 1);
63 grid.attach (past_hour_radio, 0, 1, 4, 1);
64 grid.attach (past_day_radio, 0, 2, 4, 1);
65 grid.attach (past_week_radio, 0, 3, 4, 1);
66 grid.attach (from_radio, 0, 4, 1, 1);
67 grid.attach (from_datepicker, 1, 4, 1, 1);
68 grid.attach (to_label, 2, 4, 1, 1);
69 grid.attach (to_datepicker, 3, 4, 1, 1);
70 grid.attach (all_time_radio, 0, 5, 4, 1);
71 grid.attach (clear_button, 0, 6, 4, 1);
72
73 add (grid);
74
75 clear_button.clicked.connect (() => {
76 on_clear_data ();
77 });
78 }
79
80 private async void delete_history (Zeitgeist.TimeRange tr) {
81 var events = new GenericArray<Zeitgeist.Event> ();
82 events.add (new Zeitgeist.Event ());
83 var zg_log = new Zeitgeist.Log ();
84 try {
85 uint32[] ids = yield zg_log.find_event_ids (tr, events, Zeitgeist.StorageState.ANY, 0, 0, null);
86 Array<uint32> del_ids = new Array<uint32> ();
87 del_ids.append_vals (ids, ids.length);
88 yield zg_log.delete_events (del_ids, null);
89 } catch (Error e) {
90 critical (e.message);
91 }
92 }
93
94 private void on_clear_data () {
95 Zeitgeist.TimeRange tr;
96
97 if (past_hour_radio.active == true) {
98 int range = 360000;//60*60*1000;
99 int64 end = Zeitgeist.Timestamp.from_now ();
100 int64 start = end - range;
101 tr = new Zeitgeist.TimeRange (start, end);
102 delete_history.begin (tr);
103
104 // Deletes files added in the last hour
105 if (recent.size > 0) {
106 items = recent.get_items ();
107
108 try {
109 foreach (var item in items) {
110 if (item.get_added () >= start/1000)
111 recent.remove_item (item.get_uri ());
112 }
113 } catch (Error err) {
114 critical (err.message);
115 }
116 }
117 } else if (past_day_radio.active == true) {
118 int range = 8640000;//24*60*60*1000;
119 int64 end = Zeitgeist.Timestamp.from_now ();
120 int64 start = end - range;
121 tr = new Zeitgeist.TimeRange (start, end);
122 delete_history.begin (tr);
123
124 // Deletes files added in the last day
125 if (recent.size > 0) {
126 items = recent.get_items ();
127
128 try {
129 foreach (var item in items) {
130 if (item.get_age () <= 1)
131 recent.remove_item (item.get_uri ());
132 }
133 } catch (Error err) {
134 critical (err.message);
135 }
136 }
137 } else if (past_week_radio.active == true) {
138 int range = 60480000;//7*24*60*60*1000;
139 int64 end = Zeitgeist.Timestamp.from_now ();
140 int64 start = end - range;
141 tr = new Zeitgeist.TimeRange (start, end);
142 delete_history.begin (tr);
143
144 // Deletes files added in the last week
145 if (recent.size > 0) {
146 items = recent.get_items ();
147
148 try {
149 foreach (var item in items) {
150 if (item.get_age () <= 7)
151 recent.remove_item (item.get_uri ());
152 }
153 } catch (Error err) {
154 critical (err.message);
155 }
156 }
157 } else if (from_radio.active == true) {
158 int64 start = from_datepicker.date.to_unix ()*1000;
159 int64 end = to_datepicker.date.to_unix ()*1000;
160 tr = new Zeitgeist.TimeRange (start, end);
161 delete_history.begin (tr);
162
163 // Deletes files added during the given period
164 if (recent.size > 0) {
165 items = recent.get_items ();
166
167 try {
168 foreach (var item in items) {
169 if (item.get_added () >= start/1000 && item.get_added () <= end/1000)
170 recent.remove_item (item.get_uri ());
171 }
172 } catch (Error err) {
173 critical (err.message);
174 }
175 }
176 } else if (all_time_radio.active == true) {
177 tr = new Zeitgeist.TimeRange.anytime ();
178 delete_history.begin (tr);
179
180 // Deletes all recent files
181 if (recent.size > 0) {
182 try {
183 recent.purge_items ();
184 } catch (Error err) {
185 critical (err.message);
186 }
187 }
188 }
189
190 hide ();
191 }
192}

Subscribers

People subscribed via source and target branches