Merge lp:~xnox/deja-dup/drop-u1 into lp:deja-dup/30

Proposed by Dimitri John Ledkov
Status: Rejected
Rejected by: Michael Terry
Proposed branch: lp:~xnox/deja-dup/drop-u1
Merge into: lp:deja-dup/30
Diff against target: 574 lines (+3/-399)
10 files modified
data/org.gnome.DejaDup.gschema.xml.in (+0/-9)
deja-dup/deja-dup.appdata.xml.in (+1/-1)
deja-dup/widgets/CMakeLists.txt (+0/-1)
deja-dup/widgets/ConfigLabelLocation.vala (+0/-2)
deja-dup/widgets/ConfigLocation.vala (+0/-16)
deja-dup/widgets/ConfigLocationU1.vala (+0/-38)
libdeja/Backend.vala (+0/-3)
libdeja/BackendAuto.vala (+2/-11)
libdeja/BackendU1.vala (+0/-317)
libdeja/CMakeLists.txt (+0/-1)
To merge this branch: bzr merge lp:~xnox/deja-dup/drop-u1
Reviewer Review Type Date Requested Status
Michael Terry Disapprove
Review via email: mp+213866@code.launchpad.net

Commit message

Drop U1 backend.

Description of the change

Drop U1 backend.

To post a comment you must log in.
Revision history for this message
Michael Terry (mterry) wrote :

Mostly good. But rather than deleting the settings and widgets for U1, I'd like to keep them intact but as skeletons of their former selves, just there to show error messages or some such about U1 being removed.

With this branch as is, a user upgrading will automatically have their settings changed for them. That's a bad experience.

I'm working on the changes necessary.

review: Needs Fixing
Revision history for this message
Michael Terry (mterry) wrote :

OK, I'm going to reject this in favor of lp:~mterry/deja-dup/drop-u1 which incorporates this and adds an error message for the user. Thanks for the patch!

review: Disapprove

Unmerged revisions

1532. By Dimitri John Ledkov

Drop U1 backend.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'data/org.gnome.DejaDup.gschema.xml.in'
2--- data/org.gnome.DejaDup.gschema.xml.in 2013-10-15 04:36:06 +0000
3+++ data/org.gnome.DejaDup.gschema.xml.in 2014-04-02 15:03:23 +0000
4@@ -67,7 +67,6 @@
5 <choice value='file'/>
6 <choice value='rackspace'/>
7 <choice value='s3'/>
8- <choice value='u1'/>
9 </choices>
10 <default>'auto'</default>
11 <_summary>Type of location to store backup</_summary>
12@@ -75,7 +74,6 @@
13 </key>
14 <child name="rackspace" schema="org.gnome.DejaDup.Rackspace"/>
15 <child name="s3" schema="org.gnome.DejaDup.S3"/>
16- <child name="u1" schema="org.gnome.DejaDup.U1"/>
17 <child name="file" schema="org.gnome.DejaDup.File"/>
18 </schema>
19 <schema id="org.gnome.DejaDup.S3" path="/org/gnome/deja-dup/s3/">
20@@ -107,13 +105,6 @@
21 <_description>This is your username for the Rackspace Cloud Files service.</_description>
22 </key>
23 </schema>
24- <schema id="org.gnome.DejaDup.U1" path="/org/gnome/deja-dup/u1/">
25- <key name="folder" type="s">
26- <default>'/deja-dup/$HOSTNAME'</default>
27- <_summary>The Ubuntu One folder</_summary>
28- <_description>The folder name to store files in. If ‘$HOSTNAME’, it will default to a folder based on the name of the computer.</_description>
29- </key>
30- </schema>
31 <schema id="org.gnome.DejaDup.File" path="/org/gnome/deja-dup/file/">
32 <key name="path" type="s">
33 <default>''</default>
34
35=== modified file 'deja-dup/deja-dup.appdata.xml.in'
36--- deja-dup/deja-dup.appdata.xml.in 2013-11-08 03:25:36 +0000
37+++ deja-dup/deja-dup.appdata.xml.in 2014-04-02 15:03:23 +0000
38@@ -7,7 +7,7 @@
39 <description>
40 <_p>Déjà Dup is a simple backup tool. It hides the complexity of backing up the Right Way (encrypted, off-site, and regular) and uses duplicity as the backend.</_p>
41 <ul>
42- <_li>Support for local, remote, or cloud backup locations, such as Amazon S3, Rackspace Cloud Files, and Ubuntu One</_li>
43+ <_li>Support for local, remote, or cloud backup locations, such as Amazon S3 and Rackspace Cloud Files</_li>
44 <_li>Securely encrypts and compresses your data</_li>
45 <_li>Incrementally backs up, letting you restore from any particular backup</_li>
46 <_li>Schedules regular backups</_li>
47
48=== modified file 'deja-dup/widgets/CMakeLists.txt'
49--- deja-dup/widgets/CMakeLists.txt 2014-01-31 08:44:39 +0000
50+++ deja-dup/widgets/CMakeLists.txt 2014-04-02 15:03:23 +0000
51@@ -36,7 +36,6 @@
52 ConfigLocationSSH.vala
53 ConfigLocationSMB.vala
54 ConfigLocationTable.vala
55- ConfigLocationU1.vala
56 ConfigLocationVolume.vala
57 ConfigPeriod.vala
58 ConfigRelPath.vala
59
60=== modified file 'deja-dup/widgets/ConfigLabelLocation.vala'
61--- deja-dup/widgets/ConfigLabelLocation.vala 2013-01-27 20:30:52 +0000
62+++ deja-dup/widgets/ConfigLabelLocation.vala 2014-04-02 15:03:23 +0000
63@@ -26,7 +26,6 @@
64 Gtk.Image img;
65 FilteredSettings file_root;
66 FilteredSettings s3_root;
67- FilteredSettings u1_root;
68 FilteredSettings rackspace_root;
69
70 public ConfigLabelLocation()
71@@ -40,7 +39,6 @@
72 watch_key(BACKEND_KEY);
73 watch_key(null, (file_root = DejaDup.get_settings(FILE_ROOT)));
74 watch_key(null, (s3_root = DejaDup.get_settings(S3_ROOT)));
75- watch_key(null, (u1_root = DejaDup.get_settings(U1_ROOT)));
76 watch_key(null, (rackspace_root = DejaDup.get_settings(RACKSPACE_ROOT)));
77 set_from_config.begin();
78 }
79
80=== modified file 'deja-dup/widgets/ConfigLocation.vala'
81--- deja-dup/widgets/ConfigLocation.vala 2013-10-19 17:43:57 +0000
82+++ deja-dup/widgets/ConfigLocation.vala 2014-04-02 15:03:23 +0000
83@@ -62,7 +62,6 @@
84 int index_dav;
85 int index_s3 = -2;
86 int index_rackspace = -2;
87- int index_u1 = -2;
88 int index_cloud_sep = -2;
89 int index_ssh;
90 int index_smb;
91@@ -109,7 +108,6 @@
92 extras.show();
93
94 // Insert cloud providers
95- insert_u1();
96 insert_s3();
97 insert_rackspace();
98
99@@ -178,16 +176,6 @@
100 ref index_s3, insert_s3);
101 }
102
103- void insert_u1() {
104- insert_cloud_if_available("u1", BackendU1.get_checker(),
105- new ThemedIcon.from_names({"ubuntuone",
106- "ubuntuone-installer",
107- "deja-dup-cloud"}),
108- _("Ubuntu One"),
109- new ConfigLocationU1(label_sizes),
110- ref index_u1, insert_u1);
111- }
112-
113 void insert_rackspace() {
114 insert_cloud_if_available("rackspace", BackendRackspace.get_checker(),
115 new ThemedIcon("deja-dup-cloud"),
116@@ -414,8 +402,6 @@
117 index = index_s3;
118 else if (backend == "rackspace")
119 index = index_rackspace;
120- else if (backend == "u1")
121- index = index_u1;
122 else if (backend == "file") {
123 var fsettings = DejaDup.get_settings(FILE_ROOT);
124
125@@ -504,8 +490,6 @@
126 settings.set_string(BACKEND_KEY, "s3");
127 else if (index == index_rackspace)
128 settings.set_string(BACKEND_KEY, "rackspace");
129- else if (index == index_u1)
130- settings.set_string(BACKEND_KEY, "u1");
131 else if (index == index_ssh)
132 yield set_remote_info("sftp");
133 else if (index == index_ftp)
134
135=== removed file 'deja-dup/widgets/ConfigLocationU1.vala'
136--- deja-dup/widgets/ConfigLocationU1.vala 2012-03-17 04:02:46 +0000
137+++ deja-dup/widgets/ConfigLocationU1.vala 1970-01-01 00:00:00 +0000
138@@ -1,38 +0,0 @@
139-/* -*- Mode: Vala; indent-tabs-mode: nil; tab-width: 2 -*- */
140-/*
141- This file is part of Déjà Dup.
142- For copyright information, see AUTHORS.
143-
144- Déjà Dup is free software: you can redistribute it and/or modify
145- it under the terms of the GNU General Public License as published by
146- the Free Software Foundation, either version 3 of the License, or
147- (at your option) any later version.
148-
149- Déjà Dup is distributed in the hope that it will be useful,
150- but WITHOUT ANY WARRANTY; without even the implied warranty of
151- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
152- GNU General Public License for more details.
153-
154- You should have received a copy of the GNU General Public License
155- along with Déjà Dup. If not, see <http://www.gnu.org/licenses/>.
156-*/
157-
158-using GLib;
159-
160-namespace DejaDup {
161-
162-public class ConfigLocationU1 : ConfigLocationTable
163-{
164- public ConfigLocationU1(Gtk.SizeGroup sg) {
165- Object(label_sizes: sg);
166- }
167-
168- construct {
169- var entry = new ConfigFolder(DejaDup.U1_FOLDER_KEY, DejaDup.U1_ROOT);
170- entry.set_accessible_name("U1Folder");
171- add_widget(_("_Folder"), entry);
172- }
173-}
174-
175-}
176-
177
178=== modified file 'libdeja/Backend.vala'
179--- libdeja/Backend.vala 2012-04-30 00:18:18 +0000
180+++ libdeja/Backend.vala 2014-04-02 15:03:23 +0000
181@@ -58,7 +58,6 @@
182 if (backend != "auto" &&
183 backend != "s3" &&
184 backend != "rackspace" &&
185- backend != "u1" &&
186 backend != "file")
187 backend = "auto"; // default to auto if string is not known
188
189@@ -70,8 +69,6 @@
190 var backend_name = get_default_type();
191 if (backend_name == "s3")
192 return new BackendS3();
193- else if (backend_name == "u1")
194- return new BackendU1();
195 else if (backend_name == "rackspace")
196 return new BackendRackspace();
197 else if (backend_name == "file")
198
199=== modified file 'libdeja/BackendAuto.vala'
200--- libdeja/BackendAuto.vala 2012-03-21 03:01:36 +0000
201+++ libdeja/BackendAuto.vala 2014-04-02 15:03:23 +0000
202@@ -50,7 +50,6 @@
203
204 static bool started = false;
205 static bool done = false;
206- Checker u1checker;
207 Checker s3checker;
208 construct {
209 if (!started) {
210@@ -59,10 +58,7 @@
211 started = true;
212 ref(); // Give us time to finish
213
214- // List is (in order): u1, s3, file
215- u1checker = BackendU1.get_checker();
216- u1checker.notify["complete"].connect(examine_checkers);
217-
218+ // List is (in order): s3, file
219 s3checker = BackendS3.get_checker();
220 s3checker.notify["complete"].connect(examine_checkers);
221
222@@ -75,17 +71,12 @@
223 if (done)
224 return;
225
226- if (u1checker.complete) {
227- if (u1checker.available) {
228- finish("u1");
229- }
230- else if (s3checker.complete) {
231+ if (s3checker.complete) {
232 if (s3checker.available)
233 finish("s3");
234 else
235 finish("file");
236 }
237- }
238 }
239
240 void finish(string mode)
241
242=== removed file 'libdeja/BackendU1.vala'
243--- libdeja/BackendU1.vala 2012-11-05 15:17:28 +0000
244+++ libdeja/BackendU1.vala 1970-01-01 00:00:00 +0000
245@@ -1,317 +0,0 @@
246-/* -*- Mode: Vala; indent-tabs-mode: nil; tab-width: 2 -*- */
247-/*
248- This file is part of Déjà Dup.
249- For copyright information, see AUTHORS.
250-
251- Déjà Dup is free software: you can redistribute it and/or modify
252- it under the terms of the GNU General Public License as published by
253- the Free Software Foundation, either version 3 of the License, or
254- (at your option) any later version.
255-
256- Déjà Dup is distributed in the hope that it will be useful,
257- but WITHOUT ANY WARRANTY; without even the implied warranty of
258- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
259- GNU General Public License for more details.
260-
261- You should have received a copy of the GNU General Public License
262- along with Déjà Dup. If not, see <http://www.gnu.org/licenses/>.
263-*/
264-
265-using GLib;
266-
267-namespace DejaDup {
268-
269-public const string U1_ROOT = "U1";
270-public const string U1_FOLDER_KEY = "folder";
271-
272-class Listener : Object
273-{
274- public delegate void Handler(string name, Variant args);
275- public DBusProxy proxy {get; construct;}
276- public string method {get; construct;}
277- public Variant args {get; construct;}
278- public unowned Handler handler {get; set;}
279-
280- public Listener(DBusProxy proxy, string method, Variant? args, Handler handler)
281- {
282- Object(proxy: proxy, method: method, args: args);
283- this.handler = handler;
284- }
285-
286- MainLoop loop;
287- construct {
288- loop = new MainLoop(null, false);
289- }
290-
291- public void run()
292- {
293- Idle.add(() => {
294- call_but_quit_on_fail.begin();
295- return false;
296- });
297- proxy.g_signal.connect(handle_dbus_signal);
298- loop.run();
299- proxy.g_signal.disconnect(handle_dbus_signal);
300- }
301-
302- async void call_but_quit_on_fail()
303- {
304- try {
305- yield proxy.call(method, args, DBusCallFlags.NONE, -1, null);
306- }
307- catch (Error e) {
308- warning("%s\n", e.message);
309- loop.quit();
310- }
311- }
312-
313- void handle_dbus_signal(DBusProxy obj, string? sender, string name, Variant args)
314- {
315- // Stop on first signal
316- handler(name, args);
317- loop.quit();
318- }
319-}
320-
321-class U1Checker : Checker
322-{
323- PythonChecker pyu1;
324- construct {
325- try {
326- var proxy = BackendU1.get_creds_proxy();
327- if (proxy.get_name_owner() == null) {
328- available = false;
329- complete = true;
330- }
331- }
332- catch (Error e) {
333- warning("%s\n", e.message);
334- available = false;
335- complete = true;
336- }
337-
338- if (!complete) {
339- // A bit of abstraction leakage here; we have to keep these imports in
340- // line with what duplicity uses. Maybe we should add to duplicity a way
341- // to ask 'can I use this backend?'
342- pyu1 = PythonChecker.get_checker("oauthlib, httplib2");
343- if (pyu1.complete) {
344- available = pyu1.available;
345- complete = pyu1.complete;
346- }
347- else {
348- pyu1.notify["complete"].connect(() => {
349- available = pyu1.available;
350- complete = pyu1.complete;
351- pyu1 = null;
352- });
353- }
354- }
355- }
356-}
357-
358-public class BackendU1 : Backend
359-{
360- ulong button_handler = 0;
361-
362- static Checker checker_instance = null;
363- public static Checker get_checker()
364- {
365- if (checker_instance == null)
366- checker_instance = new U1Checker();
367- return checker_instance;
368- }
369-
370- public override Backend clone() {
371- return new BackendU1();
372- }
373-
374- ~BackendU1()
375- {
376- if (button_handler > 0) {
377- mount_op.disconnect(button_handler);
378- button_handler = 0;
379- }
380- }
381-
382- public override bool is_native() {
383- return false;
384- }
385-
386- public override bool space_can_be_infinite() {
387- return false;
388- }
389-
390- public override Icon? get_icon() {
391- return new ThemedIcon.from_names({"ubuntuone", "ubuntuone-installer", "deja-dup-cloud"});
392- }
393-
394- public override async bool is_ready(out string when) {
395- when = _("Backup will begin when a network connection becomes available.");
396- return yield Network.get().can_reach ("https://one.ubuntu.com/");
397- }
398-
399- public override string get_location(ref bool as_root)
400- {
401- // The UI backend for duplicity needs to talk to our session dbus, but it
402- // can't as root.
403- as_root = false;
404-
405- var settings = get_settings(U1_ROOT);
406- var folder = get_folder_key(settings, U1_FOLDER_KEY);
407- return "u1+http://%s".printf(folder);
408- }
409-
410- public override string get_location_pretty()
411- {
412- var settings = get_settings(U1_ROOT);
413- var folder = get_folder_key(settings, U1_FOLDER_KEY);
414- if (folder == "")
415- return _("Ubuntu One");
416- else
417- // Translators: %s is a folder.
418- return _("%s on Ubuntu One").printf(folder);
419- }
420-
421- public override async uint64 get_space(bool free = true)
422- {
423- DBusProxy obj = null;
424- try {
425- obj = get_prefs_proxy();
426- }
427- catch (Error e) {
428- warning("%s\n", e.message);
429- return INFINITE_SPACE;
430- }
431-
432- if (obj.get_name_owner() == null)
433- return INFINITE_SPACE;
434-
435- uint64 total = INFINITE_SPACE;
436- uint64 used = 0;
437- var listener = new Listener(obj, "account_info", null, (name, args) => {
438- if (name == "AccountInfoReady") {
439- VariantIter iter;
440- args.get("(a{ss})", out iter);
441- string key, val;
442- while (iter.next("{ss}", out key, out val)) {
443- if (key == "quota_total")
444- total = uint64.parse(val);
445- else if (key == "quota_used")
446- used = uint64.parse(val);
447- }
448- }
449- });
450- listener.run();
451-
452- if (free)
453- return (total > used) ? (total - used) : 0;
454- else
455- return total;
456- }
457-
458- public override async void get_envp() throws Error
459- {
460- var obj = get_creds_proxy();
461- if (obj.get_name_owner() == null) {
462- ask_password();
463- return;
464- }
465-
466- var found = false;
467- var envp = new List<string>();
468- var listener = new Listener(obj, "find_credentials", null, (name, args) => {
469- if (name == "CredentialsFound") {
470- VariantIter iter;
471- args.get("(a{ss})", out iter);
472- string key, val;
473- string consumer_key = null, consumer_secret = null, token = null, token_secret = null;
474- while (iter.next("{ss}", out key, out val)) {
475- if (key == "consumer_key")
476- consumer_key = val;
477- else if (key == "consumer_secret")
478- consumer_secret = val;
479- else if (key == "token")
480- token = val;
481- else if (key == "token_secret")
482- token_secret = val;
483- }
484- if (consumer_key != null && consumer_secret != null && token != null && token_secret != null) {
485- envp.append("FTP_PASSWORD=%s:%s:%s:%s".printf(consumer_key, consumer_secret, token, token_secret));
486- found = true;
487- }
488- }
489- });
490- listener.run();
491-
492- if (found)
493- envp_ready(true, envp);
494- else
495- ask_password();
496- }
497-
498- void button_clicked()
499- {
500- sign_in.begin();
501- }
502-
503- void ask_password() {
504- mount_op.set("label_title", _("Connect to Ubuntu One"));
505- mount_op.set("label_button", _("Sign into Ubuntu One…"));
506- if (button_handler == 0)
507- button_handler = Signal.connect_swapped(mount_op, "button-clicked",
508- (Callback)button_clicked, this);
509- mount_op.ask_password("", "", "", 0);
510- }
511-
512- async void sign_in()
513- {
514- try {
515- var obj = get_creds_proxy();
516- if (obj.get_name_owner() == null) {
517- envp_ready(false, null);
518- return;
519- }
520-
521- var listener = new Listener(obj, "login", new Variant("(a{ss})", null),
522- (name, args) => {
523- if (name == "CredentialsFound") {
524- mount_op.set("go_forward", true);
525- envp_ready(true, null);
526- }
527- });
528- listener.run();
529- }
530- catch (Error e) {
531- warning("%s\n", e.message);
532- envp_ready(false, null);
533- }
534- }
535-
536- public static DBusProxy get_creds_proxy() throws Error
537- {
538- DBusProxy creds_proxy;
539- creds_proxy = new DBusProxy.for_bus_sync(BusType.SESSION,
540- DBusProxyFlags.NONE, null,
541- "com.ubuntuone.Credentials",
542- "/credentials",
543- "com.ubuntuone.CredentialsManagement",
544- null);
545- return creds_proxy;
546- }
547-
548- public static DBusProxy get_prefs_proxy() throws Error
549- {
550- DBusProxy prefs_proxy;
551- prefs_proxy = new DBusProxy.for_bus_sync(BusType.SESSION,
552- DBusProxyFlags.NONE, null,
553- "com.ubuntuone.controlpanel",
554- "/preferences",
555- "com.ubuntuone.controlpanel.Preferences",
556- null);
557- return prefs_proxy;
558- }
559-}
560-
561-} // end namespace
562-
563
564=== modified file 'libdeja/CMakeLists.txt'
565--- libdeja/CMakeLists.txt 2013-10-14 22:22:07 +0000
566+++ libdeja/CMakeLists.txt 2014-04-02 15:03:23 +0000
567@@ -22,7 +22,6 @@
568 BackendFile.vala
569 BackendRackspace.vala
570 BackendS3.vala
571- BackendU1.vala
572 Checker.vala
573 CommonUtils.vala
574 DirHandling.vala

Subscribers

People subscribed via source and target branches