diff -Nru timeshift-17.1~425~ubuntu15.04.1/debian/bzr-builder.manifest timeshift-17.2~429~ubuntu15.04.1/debian/bzr-builder.manifest --- timeshift-17.1~425~ubuntu15.04.1/debian/bzr-builder.manifest 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/debian/bzr-builder.manifest 2017-01-26 08:34:02.000000000 +0000 @@ -1,2 +1,2 @@ -# bzr-builder format 0.3 deb-version {debupstream}~425 -lp:timeshift revid:tony.george.kol@gmail.com-20170115105634-j3z2a3uujmecux2i +# bzr-builder format 0.3 deb-version {debupstream}~429 +lp:timeshift revid:tony.george.kol@gmail.com-20170126082638-gehmfh9pgukvvnre diff -Nru timeshift-17.1~425~ubuntu15.04.1/debian/changelog timeshift-17.2~429~ubuntu15.04.1/debian/changelog --- timeshift-17.1~425~ubuntu15.04.1/debian/changelog 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/debian/changelog 2017-01-26 08:34:02.000000000 +0000 @@ -1,8 +1,19 @@ -timeshift (17.1~425~ubuntu15.04.1) vivid; urgency=low +timeshift (17.2~429~ubuntu15.04.1) vivid; urgency=low * Auto build. - -- Tony George Sun, 15 Jan 2017 11:01:43 +0000 + -- Tony George Thu, 26 Jan 2017 08:34:02 +0000 + +timeshift (17.2) trusty; urgency=medium + + * Use StackWidget for Settings window + + * Fixed: Hourly task was not created correctly + + * Settings: Updated messages in Schedule tab to avoid confusion + + -- Tony George Thu, 26 Jan 2016 10:00:00 +0530 + timeshift (17.1) trusty; urgency=medium diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Console/AppConsole.vala timeshift-17.2~429~ubuntu15.04.1/src/Console/AppConsole.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Console/AppConsole.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Console/AppConsole.vala 2017-01-26 08:34:02.000000000 +0000 @@ -38,7 +38,7 @@ public Main App; public const string AppName = "Timeshift"; public const string AppShortName = "timeshift"; -public const string AppVersion = "17.1"; +public const string AppVersion = "17.2"; public const string AppAuthor = "Tony George"; public const string AppAuthorEmail = "teejeetech@gmail.com"; diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Core/CryptTabEntry.vala timeshift-17.2~429~ubuntu15.04.1/src/Core/CryptTabEntry.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Core/CryptTabEntry.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Core/CryptTabEntry.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -using TeeJee.Logging; -using TeeJee.FileSystem; -using TeeJee.JsonHelper; -using TeeJee.ProcessHelper; -using TeeJee.GtkHelper; -using TeeJee.System; -using TeeJee.Misc; - -public class CryptTabEntry : GLib.Object{ - public bool is_comment = false; - public bool is_empty_line = false; - - // fields - public string mapped_name = ""; - public string device_string = ""; - public string keyfile = "none"; - public string options = "luks,nofail"; - public string line = ""; - - public string device_uuid { - owned get{ - if (device_string.down().has_prefix("uuid=")){ - return device_string.replace("\"","").replace("'","").split("=")[1]; - } - else{ - return ""; - } - } - set { - device_string = "UUID=%s".printf(value); - } - } - - public static Gee.ArrayList read_file(string file_path){ - var list = new Gee.ArrayList(); - - if (!file_exists(file_path)){ return list; } - - string text = file_read(file_path); - string[] lines = text.split("\n"); - foreach(string line in lines){ - var entry = new CryptTabEntry(); - list.add(entry); - - entry.is_comment = line.strip().has_prefix("#"); - entry.is_empty_line = (line.strip().length == 0); - - if (entry.is_comment){ - entry.line = line; - } - else if (entry.is_empty_line){ - entry.line = ""; - } - else{ - entry.line = line; - - string[] parts = line.replace("\t"," ").split(" "); - int part_num = -1; - foreach(string part in parts){ - if (part.strip().length == 0) { continue; } - switch (++part_num){ - case 0: - entry.mapped_name = part.strip(); - break; - case 1: - entry.device_string = part.strip(); - break; - case 2: - entry.keyfile = part.strip(); - break; - case 3: - entry.options = part.strip(); - break; - } - } - } - } - - return list; - } - - public static string write_file( - Gee.ArrayList entries, string file_path, - bool keep_comments_and_empty_lines = true){ - - string text = ""; - foreach(var entry in entries){ - if (entry.is_comment || entry.is_empty_line){ - if (keep_comments_and_empty_lines){ - text += "%s\n".printf(entry.line); - } - } - else { - text += "%s\t%s\t%s\t%s\n".printf( - entry.mapped_name, entry.device_string, - entry.keyfile, entry.options); - } - } - - if (file_exists(file_path)){ - file_delete(file_path); - } - - file_write(file_path, text); - - return text; - } - - public void append_option(string option){ - - if (!options.contains(option)){ - options += ",%s".printf(option); - } - - if(options.has_prefix(",")){ - options = options[1:options.length]; - } - - options = options.strip(); - } - - public void remove_option(string option){ - - options = options.replace(option,"").strip(); - - if(options.has_prefix(",")){ - options = options[1:options.length]; - } - - if (options.has_suffix(",")){ - options = options[0:options.length - 1]; - } - - options = options.strip(); - } - - public static CryptTabEntry? find_entry_by_uuid( - Gee.ArrayList entries, string uuid){ - - foreach(var entry in entries){ - if (entry.device_uuid == uuid){ - return entry; - } - } - - return null; - } -} diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Core/FsTabEntry.vala timeshift-17.2~429~ubuntu15.04.1/src/Core/FsTabEntry.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Core/FsTabEntry.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Core/FsTabEntry.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -using TeeJee.Logging; -using TeeJee.FileSystem; -using TeeJee.JsonHelper; -using TeeJee.ProcessHelper; -using TeeJee.GtkHelper; -using TeeJee.System; -using TeeJee.Misc; - -public class FsTabEntry : GLib.Object{ - public bool is_comment = false; - public bool is_empty_line = false; - - public string device_string = ""; - public string mount_point = ""; - public string type = ""; - public string options = "defaults"; - public string dump = "0"; - public string pass = "0"; - public string line = ""; - - public string device_uuid { - owned get{ - if (device_string.down().has_prefix("uuid=")){ - return device_string.replace("\"","").replace("'","").split("=")[1]; - } - else{ - return ""; - } - } - set { - device_string = "UUID=%s".printf(value); - } - } - - public static Gee.ArrayList read_file(string file_path){ - var list = new Gee.ArrayList(); - - if (!file_exists(file_path)){ return list; } - - string text = file_read(file_path); - string[] lines = text.split("\n"); - foreach(string line in lines){ - var entry = new FsTabEntry(); - list.add(entry); - - entry.is_comment = line.strip().has_prefix("#"); - entry.is_empty_line = (line.strip().length == 0); - - if (entry.is_comment){ - entry.line = line; - } - else if (entry.is_empty_line){ - entry.line = ""; - } - else{ - entry.line = line; - - string[] parts = line.replace("\t"," ").split(" "); - int part_num = -1; - foreach(string part in parts){ - if (part.strip().length == 0) { continue; } - switch (++part_num){ - case 0: - entry.device_string = part.strip(); - break; - case 1: - entry.mount_point = part.strip(); - break; - case 2: - entry.type = part.strip(); - break; - case 3: - entry.options = part.strip(); - break; - case 4: - entry.dump = part.strip(); - break; - case 5: - entry.pass = part.strip(); - break; - } - } - } - } - - return list; - } - - public static string write_file( - Gee.ArrayList entries, string file_path, - bool keep_comments_and_empty_lines = false){ - - string text = ""; - - if (!keep_comments_and_empty_lines){ - text += "# \n\n"; - } - - foreach(var entry in entries){ - if (entry.is_comment || entry.is_empty_line){ - if (keep_comments_and_empty_lines){ - text += "%s\n".printf(entry.line); - } - } - else { - text += "%s\t%s\t%s\t%s\t%s\t%s\n".printf( - entry.device_string, entry.mount_point, entry.type, - entry.options, entry.dump, entry.pass); - } - } - - // sort the entries based on mount path - // this is required to ensure that base paths are mounted before child paths - - entries.sort((a, b)=>{ - return strcmp(a.mount_point, b.mount_point); - }); - - if (file_exists(file_path)){ - file_delete(file_path); - } - - file_write(file_path, text); - - return text; - } - - public string subvolume_name(){ - if (options.contains("subvol=")){ - return options.split("subvol=")[1].split(",")[0].strip(); - } - else{ - return ""; - } - } - - public bool is_for_system_directory(){ - - if (mount_point.has_prefix("/mnt") - || mount_point.has_prefix("/mount") - || mount_point.has_prefix("/sdcard") - || mount_point.has_prefix("/cdrom") - || mount_point.has_prefix("/media") - || (mount_point == "none") - || !mount_point.has_prefix("/") - || (!device_string.has_prefix("/dev/") && !device_string.down().has_prefix("uuid="))){ - - return false; - } - else{ - return true; - } - } - - public static FsTabEntry? find_entry_by_mount_point( - Gee.ArrayList entries, string mount_path){ - - foreach(var entry in entries){ - if (entry.mount_point == mount_path){ - return entry; - } - } - return null; - } - - - public Device? resolve_device(Gee.ArrayList crypttab, Gtk.Window? parent_window){ - Device dev_fstab = null; - if (device_uuid.length > 0){ - dev_fstab = Device.get_device_by_uuid(device_uuid); - } - else{ - dev_fstab = Device.get_device_by_name(device_string); - } - - if (dev_fstab == null){ - - /* - Check if the device mentioned in fstab entry is a mapped device. - If it is, then try finding the parent device which may be available on the current system. - Prompt user to unlock it if found. - - Note: - Mapped name may be different on running system, or it may be same. - Since it is not reliable, we will try to identify the parent intead of the mapped device. - */ - - if (device_string.has_prefix("/dev/mapper/")){ - - string mapped_name = device_string.replace("/dev/mapper/",""); - - foreach(var item in crypttab){ - - if (item.mapped_name == mapped_name){ - - // we found the entry for the mapped device - device_string = item.device_string; - - if (device_uuid.length > 0){ - - // we have the parent's uuid. get the luks device and prompt user to unlock it. - var dev_luks = Device.get_device_by_uuid(device_uuid); - - if (dev_luks != null){ - - string msg_out, msg_err; - var dev_unlocked = Device.luks_unlock( - dev_luks, "", "", parent_window, out msg_out, out msg_err); - - if (dev_unlocked != null){ - dev_fstab = dev_unlocked; - } - else{ - dev_fstab = dev_luks; // map to parent - } - } - } - else{ - // nothing to do: we don't have the parent's uuid - } - - break; - } - } - } - } - - return dev_fstab; - } - - - public void append_option(string option){ - - if (!options.contains(option)){ - options += ",%s".printf(option); - } - - if(options.has_prefix(",")){ - options = options[1:options.length]; - } - - options = options.strip(); - } - - public void remove_option(string option){ - - options = options.replace(option,"").strip(); - - if(options.has_prefix(",")){ - options = options[1:options.length]; - } - - if (options.has_suffix(",")){ - options = options[0:options.length - 1]; - } - - options = options.strip(); - } -} diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Core/Main.vala timeshift-17.2~429~ubuntu15.04.1/src/Core/Main.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Core/Main.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Core/Main.vala 2017-01-26 08:34:02.000000000 +0000 @@ -966,12 +966,14 @@ log_msg(string.nfill(78, '-')); + repo.load_snapshots(); // reload list for new snapshot + if (app_mode.length != 0){ repo.auto_remove(); + repo.load_snapshots(); } if (update_symlinks){ - repo.load_snapshots(); repo.create_symlinks(); } @@ -1076,9 +1078,6 @@ message = _("Tagged snapshot") + " '%s': %s".printf(new_snapshot.name, tag); log_msg(message); } - - repo.load_snapshots(); - } catch(Error e){ log_error (e.message); @@ -3806,6 +3805,8 @@ if (live_system()) { return; } + // remove entries created by previous versions ----------- + string entry = "timeshift --backup"; int count = 0; @@ -3826,8 +3827,15 @@ } } + CronTab.remove_script_file("timeshift-hourly", "hourly"); + + // start update --------------------------- + if (scheduled){ - CronTab.add_script_file("timeshift-hourly", "hourly", "timeshift --check", stop_cron_emails); + //hourly + CronTab.add_script_file("timeshift-hourly", "d", "0 * * * * root timeshift --check", stop_cron_emails); + + //boot if (schedule_boot){ CronTab.add_script_file("timeshift-boot", "d", "@reboot root sleep 10m && timeshift --create --tags B", stop_cron_emails); } @@ -3836,7 +3844,7 @@ } } else{ - CronTab.remove_script_file("timeshift-hourly", "hourly"); + CronTab.remove_script_file("timeshift-hourly", "d"); CronTab.remove_script_file("timeshift-boot", "d"); } } diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Core/MountEntry.vala timeshift-17.2~429~ubuntu15.04.1/src/Core/MountEntry.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Core/MountEntry.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Core/MountEntry.vala 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -using TeeJee.Logging; -using TeeJee.FileSystem; -using TeeJee.JsonHelper; -using TeeJee.ProcessHelper; -using TeeJee.GtkHelper; -using TeeJee.System; -using TeeJee.Misc; -using Json; - -public class MountEntry : GLib.Object{ - public Device device = null; - public string mount_point = ""; - public string mount_options = ""; - - public MountEntry(Device? device, string mount_point, string mount_options){ - this.device = device; - this.mount_point = mount_point; - this.mount_options = mount_options; - } - - public string subvolume_name(){ - if (mount_options.contains("subvol=")){ - return mount_options.split("subvol=")[1].split(",")[0].strip(); - } - else{ - return ""; - } - } - - public string lvm_name(){ - if ((device != null) && (device.type == "lvm") && (device.mapped_name.length > 0)){ - return device.mapped_name.strip(); - } - else{ - return ""; - } - } - - public static MountEntry? find_entry_by_mount_point( - Gee.ArrayList entries, string mount_path){ - - foreach(var entry in entries){ - if (entry.mount_point == mount_path){ - return entry; - } - } - return null; - } -} diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Core/Snapshot.vala timeshift-17.2~429~ubuntu15.04.1/src/Core/Snapshot.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Core/Snapshot.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Core/Snapshot.vala 2017-01-26 08:34:02.000000000 +0000 @@ -443,6 +443,8 @@ foreach(var subvol in subvolumes.values){ bool ok = subvol.remove(); if (!ok) { + log_error(_("Failed to remove snapshot") + ": %s".printf(name)); + log_msg(string.nfill(78, '-')); return false; } } @@ -452,12 +454,19 @@ foreach(var subvol in subvolumes.values){ bool ok = dir_delete(paths[subvol.name], true); if (!ok) { + log_error(_("Failed to remove snapshot") + ": %s".printf(name)); + log_msg(string.nfill(78, '-')); return false; } } - log_msg(_("Removed snapshot") + ": %s".printf(name)); + if (!dir_delete(path, true)){ + log_error(_("Failed to remove snapshot") + ": %s".printf(name)); + log_msg(string.nfill(78, '-')); + return false; + } + log_msg(_("Removed snapshot") + ": %s".printf(name)); log_msg(string.nfill(78, '-')); return true; diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Gtk/AppGtk.vala timeshift-17.2~429~ubuntu15.04.1/src/Gtk/AppGtk.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Gtk/AppGtk.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Gtk/AppGtk.vala 2017-01-26 08:34:02.000000000 +0000 @@ -38,7 +38,7 @@ public Main App; public const string AppName = "Timeshift"; public const string AppShortName = "timeshift"; -public const string AppVersion = "17.1"; +public const string AppVersion = "17.2"; public const string AppAuthor = "Tony George"; public const string AppAuthorEmail = "teejeetech@gmail.com"; diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Gtk/IncludeBox.vala timeshift-17.2~429~ubuntu15.04.1/src/Gtk/IncludeBox.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Gtk/IncludeBox.vala 1970-01-01 00:00:00.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Gtk/IncludeBox.vala 2017-01-26 08:34:02.000000000 +0000 @@ -0,0 +1,32 @@ +/* + * EstimateBox.vala + * + * Copyright 2016 Tony George + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * + */ + +using Gtk; +using Gee; + +class IncludeBox : ExcludeBox{ + + public IncludeBox (Gtk.Window _parent_window) { + base(_parent_window, true); + } +} diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Gtk/ScheduleBox.vala timeshift-17.2~429~ubuntu15.04.1/src/Gtk/ScheduleBox.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Gtk/ScheduleBox.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Gtk/ScheduleBox.vala 2017-01-26 08:34:02.000000000 +0000 @@ -36,6 +36,9 @@ private Gtk.Image img_shield; private Gtk.Label lbl_shield; private Gtk.Label lbl_shield_subnote; + private Gtk.SizeGroup sg_title; + private Gtk.SizeGroup sg_subtitle; + private Gtk.SizeGroup sg_count; private Gtk.Window parent_window; @@ -50,17 +53,18 @@ add_label_header(this, _("Select Snapshot Levels"), true); - Gtk.CheckButton chk_m, chk_w, chk_d, chk_h, chk_b; + Gtk.CheckButton chk_m, chk_w, chk_d, chk_h, chk_b, chk_cron = null; Gtk.SpinButton spin_m, spin_w, spin_d, spin_h, spin_b; // monthly - add_schedule_option(this, _("Monthly"), _("Create one per month"), out chk_m, out spin_m); + add_schedule_option(this, _("Monthly") + " *", _("Create one per month"), out chk_m, out spin_m); chk_m.active = App.schedule_monthly; chk_m.toggled.connect(()=>{ App.schedule_monthly = chk_m.active; spin_m.sensitive = chk_m.active; + chk_cron.sensitive = App.scheduled; update_statusbar(); }); @@ -72,12 +76,13 @@ // weekly - add_schedule_option(this, _("Weekly"), _("Create one per week"), out chk_w, out spin_w); + add_schedule_option(this, _("Weekly") + " *", _("Create one per week"), out chk_w, out spin_w); chk_w.active = App.schedule_weekly; chk_w.toggled.connect(()=>{ App.schedule_weekly = chk_w.active; spin_w.sensitive = chk_w.active; + chk_cron.sensitive = App.scheduled; update_statusbar(); }); @@ -89,12 +94,13 @@ // daily - add_schedule_option(this, _("Daily"), _("Create one per day"), out chk_d, out spin_d); + add_schedule_option(this, _("Daily") + " *", _("Create one per day"), out chk_d, out spin_d); chk_d.active = App.schedule_daily; chk_d.toggled.connect(()=>{ App.schedule_daily = chk_d.active; spin_d.sensitive = chk_d.active; + chk_cron.sensitive = App.scheduled; update_statusbar(); }); @@ -106,12 +112,13 @@ // hourly - add_schedule_option(this, _("Hourly"), _("Create one per hour"), out chk_h, out spin_h); + add_schedule_option(this, _("Hourly") + " *", _("Create one per hour"), out chk_h, out spin_h); chk_h.active = App.schedule_hourly; chk_h.toggled.connect(()=>{ App.schedule_hourly = chk_h.active; spin_h.sensitive = chk_h.active; + chk_cron.sensitive = App.scheduled; update_statusbar(); }); @@ -129,6 +136,7 @@ chk_b.toggled.connect(()=>{ App.schedule_boot = chk_b.active; spin_b.sensitive = chk_b.active; + chk_cron.sensitive = App.scheduled; update_statusbar(); }); @@ -138,16 +146,23 @@ App.count_boot = (int) spin_b.get_value(); }); + var label = new Gtk.Label("* " + _("Scheduled task runs once every hour") + ""); + label.xalign = (float) 0.0; + label.margin_top = 6; + label.margin_left = 12; + label.set_use_markup(true); + add(label); + // buffer - var label = new Gtk.Label(""); + label = new Gtk.Label(""); label.vexpand = true; add(label); - // crontab - - var chk_cron = add_checkbox(this, "Stop cron service from sending emails for scheduled jobs"); + // cron emails + chk_cron = add_checkbox(this, _("Stop cron emails for scheduled tasks")); + //chk_cron.hexpand = true; chk_cron.set_tooltip_text(_("The cron service sends the output of scheduled tasks as an email to the current user. Select this option to suppress the emails for cron tasks created by Timeshift.")); - //chk_cron.margin_bottom = 12; + //chk_cron.margin_bottom = 12; chk_cron.active = App.stop_cron_emails; chk_cron.toggled.connect(()=>{ @@ -227,20 +242,31 @@ out Gtk.CheckButton chk, out Gtk.SpinButton spin){ var hbox = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 6); + hbox.margin_left = 6; box.add(hbox); + + if (sg_title == null){ + sg_title = new Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL); + sg_subtitle = new Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL); + sg_count = new Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL); + } - var txt = "%s - %s".printf(period, period_desc); + var txt = "%s".printf(period); chk = add_checkbox(hbox, txt); - - var label = add_label(hbox, ""); - label.hexpand = true; + sg_title.add_widget(chk); + + //var label = add_label(hbox, " - %s".printf(period_desc)); + //label.hexpand = true; + //sg_subtitle.add_widget(label); var tt = _("Number of snapshots to keep.\nOlder snapshots will be removed once this limit is exceeded."); - label = add_label(hbox, _("Keep")); + var label = add_label(hbox, _("Keep")); + label.margin_left = 24; label.set_tooltip_text(tt); - + var spin2 = add_spin(hbox, 1, 999, 10); spin2.set_tooltip_text(tt); + sg_count.add_widget(spin2); spin2.notify["sensitive"].connect(()=>{ label.sensitive = spin2.sensitive; diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Gtk/SettingsWindow.vala timeshift-17.2~429~ubuntu15.04.1/src/Gtk/SettingsWindow.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Gtk/SettingsWindow.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Gtk/SettingsWindow.vala 2017-01-26 08:34:02.000000000 +0000 @@ -34,13 +34,13 @@ class SettingsWindow : Gtk.Window{ private Gtk.Box vbox_main; - private Gtk.Notebook notebook; - + private Gtk.StackSwitcher switcher; + private Gtk.Stack stack; + private SnapshotBackendBox backend_box; private BackupDeviceBox backup_dev_box; private ScheduleBox schedule_box; private ExcludeBox exclude_box; - //private FinishBox notes_box; private uint tmr_init; private int def_width = 550; @@ -57,33 +57,38 @@ this.icon = get_app_icon(16); this.delete_event.connect(on_delete_event); - - vbox_main = new Box (Orientation.VERTICAL, 6); - vbox_main.margin = 12; + + vbox_main = new Box (Orientation.VERTICAL, 0); + //vbox_main.margin = 6; add(vbox_main); - // add notebook - notebook = add_notebook(vbox_main, true, true); + var hbox = new Gtk.ButtonBox (Gtk.Orientation.HORIZONTAL); + hbox.set_layout (Gtk.ButtonBoxStyle.CENTER); + hbox.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR); + vbox_main.add(hbox); + + switcher = new Gtk.StackSwitcher(); + switcher.margin = 6; + hbox.add (switcher); + + stack = new Gtk.Stack(); + stack.set_transition_duration (200); + stack.set_transition_type (Gtk.StackTransitionType.SLIDE_LEFT_RIGHT); + vbox_main.add(stack); - var label = new Gtk.Label(_("Type")); + switcher.set_stack(stack); + backend_box = new SnapshotBackendBox(this); - notebook.append_page (backend_box, label); + stack.add_titled (backend_box, _("Type"), _("Type")); - label = new Gtk.Label(_("Location")); backup_dev_box = new BackupDeviceBox(this); - notebook.append_page (backup_dev_box, label); + stack.add_titled (backup_dev_box, _("Location"), _("Location")); - label = new Gtk.Label(_("Schedule")); schedule_box = new ScheduleBox(this); - notebook.append_page (schedule_box, label); + stack.add_titled (schedule_box, _("Schedule"), _("Schedule")); - label = new Gtk.Label(_("Filters")); exclude_box = new ExcludeBox(this, false); - notebook.append_page (exclude_box, label); - - //label = new Gtk.Label(_("Notes")); - //notes_box = new FinishBox(this, true); - //notebook.append_page (notes_box, label); + stack.add_titled (exclude_box, _("Filters"), _("Filters")); backend_box.type_changed.connect(()=>{ exclude_box.visible = !App.btrfs_mode; @@ -130,8 +135,8 @@ private void create_actions(){ var hbox = new Gtk.ButtonBox (Gtk.Orientation.HORIZONTAL); - hbox.margin = 0; - hbox.margin_top = 6; + hbox.margin = 6; + hbox.margin_top = 0; vbox_main.add(hbox); Gtk.SizeGroup size_group = null; @@ -147,7 +152,7 @@ this.destroy(); }); } - + public enum Tabs{ BACKUP_TYPE = 0, BACKUP_DEVICE = 1, diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Gtk/SnapshotBackendBox.vala timeshift-17.2~429~ubuntu15.04.1/src/Gtk/SnapshotBackendBox.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Gtk/SnapshotBackendBox.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Gtk/SnapshotBackendBox.vala 2017-01-26 08:34:02.000000000 +0000 @@ -156,7 +156,7 @@ string bullet = "▰ "; if (opt_btrfs.active){ - string txt = "BTRFS Snapshots\n\n"; + string txt = "" + _("BTRFS Snapshots") + "\n\n"; txt += bullet + _("Snapshots are created using the built-in features of the BTRFS file system.") + "\n\n"; @@ -175,7 +175,7 @@ lbl_description.label = txt; } else{ - string txt = "RSYNC Snapshots\n\n"; + string txt = "" + _("RSYNC Snapshots") + "\n\n"; txt += bullet + _("Snapshots are created by creating copies of system files using rsync, and hard-linking unchanged files from previous snapshot.") + "\n\n"; diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Utility/CronTab.vala timeshift-17.2~429~ubuntu15.04.1/src/Utility/CronTab.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Utility/CronTab.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Utility/CronTab.vala 2017-01-26 08:34:02.000000000 +0000 @@ -268,6 +268,13 @@ } public static bool add_script_file(string file_name, string cron_dir_type, string text, bool stop_cron_emails){ + + /* Note: + * cron.d and cron.hourly are managed by cron so it expects entries in crontab format + * minute hour day_of_month month day_of_week user command + * + * cron.{daily|weekly|monthly} are read by anacron. scripts placed here should have commands only. + * */ switch (cron_dir_type){ case "d": @@ -286,7 +293,7 @@ string file_path = "/etc/cron.%s/%s".printf(cron_dir_type, file_name.replace(".","-")); // dot is not allowed in file name string sh = ""; - sh += "SHELL=/bin/sh" + "\n"; + sh += "SHELL=/bin/bash" + "\n"; sh += "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" + "\n"; if (stop_cron_emails){ sh += "MAILTO=\"\"" + "\n"; diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Utility/CryptTabEntry.vala timeshift-17.2~429~ubuntu15.04.1/src/Utility/CryptTabEntry.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Utility/CryptTabEntry.vala 1970-01-01 00:00:00.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Utility/CryptTabEntry.vala 2017-01-26 08:34:02.000000000 +0000 @@ -0,0 +1,172 @@ +/* + * CryptTabEntry.vala + * + * Copyright 2016 Tony George + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * + */ + + +using TeeJee.Logging; +using TeeJee.FileSystem; +using TeeJee.JsonHelper; +using TeeJee.ProcessHelper; +using TeeJee.GtkHelper; +using TeeJee.System; +using TeeJee.Misc; + +public class CryptTabEntry : GLib.Object{ + public bool is_comment = false; + public bool is_empty_line = false; + + // fields + public string mapped_name = ""; + public string device_string = ""; + public string keyfile = "none"; + public string options = "luks,nofail"; + public string line = ""; + + public string device_uuid { + owned get{ + if (device_string.down().has_prefix("uuid=")){ + return device_string.replace("\"","").replace("'","").split("=")[1]; + } + else{ + return ""; + } + } + set { + device_string = "UUID=%s".printf(value); + } + } + + public static Gee.ArrayList read_file(string file_path){ + var list = new Gee.ArrayList(); + + if (!file_exists(file_path)){ return list; } + + string text = file_read(file_path); + string[] lines = text.split("\n"); + foreach(string line in lines){ + var entry = new CryptTabEntry(); + list.add(entry); + + entry.is_comment = line.strip().has_prefix("#"); + entry.is_empty_line = (line.strip().length == 0); + + if (entry.is_comment){ + entry.line = line; + } + else if (entry.is_empty_line){ + entry.line = ""; + } + else{ + entry.line = line; + + string[] parts = line.replace("\t"," ").split(" "); + int part_num = -1; + foreach(string part in parts){ + if (part.strip().length == 0) { continue; } + switch (++part_num){ + case 0: + entry.mapped_name = part.strip(); + break; + case 1: + entry.device_string = part.strip(); + break; + case 2: + entry.keyfile = part.strip(); + break; + case 3: + entry.options = part.strip(); + break; + } + } + } + } + + return list; + } + + public static string write_file( + Gee.ArrayList entries, string file_path, + bool keep_comments_and_empty_lines = true){ + + string text = ""; + foreach(var entry in entries){ + if (entry.is_comment || entry.is_empty_line){ + if (keep_comments_and_empty_lines){ + text += "%s\n".printf(entry.line); + } + } + else { + text += "%s\t%s\t%s\t%s\n".printf( + entry.mapped_name, entry.device_string, + entry.keyfile, entry.options); + } + } + + if (file_exists(file_path)){ + file_delete(file_path); + } + + file_write(file_path, text); + + return text; + } + + public void append_option(string option){ + + if (!options.contains(option)){ + options += ",%s".printf(option); + } + + if(options.has_prefix(",")){ + options = options[1:options.length]; + } + + options = options.strip(); + } + + public void remove_option(string option){ + + options = options.replace(option,"").strip(); + + if(options.has_prefix(",")){ + options = options[1:options.length]; + } + + if (options.has_suffix(",")){ + options = options[0:options.length - 1]; + } + + options = options.strip(); + } + + public static CryptTabEntry? find_entry_by_uuid( + Gee.ArrayList entries, string uuid){ + + foreach(var entry in entries){ + if (entry.device_uuid == uuid){ + return entry; + } + } + + return null; + } +} diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Utility/FsTabEntry.vala timeshift-17.2~429~ubuntu15.04.1/src/Utility/FsTabEntry.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Utility/FsTabEntry.vala 1970-01-01 00:00:00.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Utility/FsTabEntry.vala 2017-01-26 08:34:02.000000000 +0000 @@ -0,0 +1,281 @@ +/* + * FsTabEntry.vala + * + * Copyright 2016 Tony George + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * + */ + +using TeeJee.Logging; +using TeeJee.FileSystem; +using TeeJee.JsonHelper; +using TeeJee.ProcessHelper; +using TeeJee.GtkHelper; +using TeeJee.System; +using TeeJee.Misc; + +public class FsTabEntry : GLib.Object{ + public bool is_comment = false; + public bool is_empty_line = false; + + public string device_string = ""; + public string mount_point = ""; + public string type = ""; + public string options = "defaults"; + public string dump = "0"; + public string pass = "0"; + public string line = ""; + + public string device_uuid { + owned get{ + if (device_string.down().has_prefix("uuid=")){ + return device_string.replace("\"","").replace("'","").split("=")[1]; + } + else{ + return ""; + } + } + set { + device_string = "UUID=%s".printf(value); + } + } + + public static Gee.ArrayList read_file(string file_path){ + var list = new Gee.ArrayList(); + + if (!file_exists(file_path)){ return list; } + + string text = file_read(file_path); + string[] lines = text.split("\n"); + foreach(string line in lines){ + var entry = new FsTabEntry(); + list.add(entry); + + entry.is_comment = line.strip().has_prefix("#"); + entry.is_empty_line = (line.strip().length == 0); + + if (entry.is_comment){ + entry.line = line; + } + else if (entry.is_empty_line){ + entry.line = ""; + } + else{ + entry.line = line; + + string[] parts = line.replace("\t"," ").split(" "); + int part_num = -1; + foreach(string part in parts){ + if (part.strip().length == 0) { continue; } + switch (++part_num){ + case 0: + entry.device_string = part.strip(); + break; + case 1: + entry.mount_point = part.strip(); + break; + case 2: + entry.type = part.strip(); + break; + case 3: + entry.options = part.strip(); + break; + case 4: + entry.dump = part.strip(); + break; + case 5: + entry.pass = part.strip(); + break; + } + } + } + } + + return list; + } + + public static string write_file( + Gee.ArrayList entries, string file_path, + bool keep_comments_and_empty_lines = false){ + + string text = ""; + + if (!keep_comments_and_empty_lines){ + text += "# \n\n"; + } + + foreach(var entry in entries){ + if (entry.is_comment || entry.is_empty_line){ + if (keep_comments_and_empty_lines){ + text += "%s\n".printf(entry.line); + } + } + else { + text += "%s\t%s\t%s\t%s\t%s\t%s\n".printf( + entry.device_string, entry.mount_point, entry.type, + entry.options, entry.dump, entry.pass); + } + } + + // sort the entries based on mount path + // this is required to ensure that base paths are mounted before child paths + + entries.sort((a, b)=>{ + return strcmp(a.mount_point, b.mount_point); + }); + + if (file_exists(file_path)){ + file_delete(file_path); + } + + file_write(file_path, text); + + return text; + } + + public string subvolume_name(){ + if (options.contains("subvol=")){ + return options.split("subvol=")[1].split(",")[0].strip(); + } + else{ + return ""; + } + } + + public bool is_for_system_directory(){ + + if (mount_point.has_prefix("/mnt") + || mount_point.has_prefix("/mount") + || mount_point.has_prefix("/sdcard") + || mount_point.has_prefix("/cdrom") + || mount_point.has_prefix("/media") + || (mount_point == "none") + || !mount_point.has_prefix("/") + || (!device_string.has_prefix("/dev/") && !device_string.down().has_prefix("uuid="))){ + + return false; + } + else{ + return true; + } + } + + public static FsTabEntry? find_entry_by_mount_point( + Gee.ArrayList entries, string mount_path){ + + foreach(var entry in entries){ + if (entry.mount_point == mount_path){ + return entry; + } + } + return null; + } + + public Device? resolve_device(Gee.ArrayList crypttab, Gtk.Window? parent_window){ + Device dev_fstab = null; + if (device_uuid.length > 0){ + dev_fstab = Device.get_device_by_uuid(device_uuid); + } + else{ + dev_fstab = Device.get_device_by_name(device_string); + } + + if (dev_fstab == null){ + + /* + Check if the device mentioned in fstab entry is a mapped device. + If it is, then try finding the parent device which may be available on the current system. + Prompt user to unlock it if found. + + Note: + Mapped name may be different on running system, or it may be same. + Since it is not reliable, we will try to identify the parent intead of the mapped device. + */ + + if (device_string.has_prefix("/dev/mapper/")){ + + string mapped_name = device_string.replace("/dev/mapper/",""); + + foreach(var item in crypttab){ + + if (item.mapped_name == mapped_name){ + + // we found the entry for the mapped device + device_string = item.device_string; + + if (device_uuid.length > 0){ + + // we have the parent's uuid. get the luks device and prompt user to unlock it. + var dev_luks = Device.get_device_by_uuid(device_uuid); + + if (dev_luks != null){ + + string msg_out, msg_err; + var dev_unlocked = Device.luks_unlock( + dev_luks, "", "", parent_window, out msg_out, out msg_err); + + if (dev_unlocked != null){ + dev_fstab = dev_unlocked; + } + else{ + dev_fstab = dev_luks; // map to parent + } + } + } + else{ + // nothing to do: we don't have the parent's uuid + } + + break; + } + } + } + } + + return dev_fstab; + } + + + public void append_option(string option){ + + if (!options.contains(option)){ + options += ",%s".printf(option); + } + + if(options.has_prefix(",")){ + options = options[1:options.length]; + } + + options = options.strip(); + } + + public void remove_option(string option){ + + options = options.replace(option,"").strip(); + + if(options.has_prefix(",")){ + options = options[1:options.length]; + } + + if (options.has_suffix(",")){ + options = options[0:options.length - 1]; + } + + options = options.strip(); + } +} diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Utility/MountEntry.vala timeshift-17.2~429~ubuntu15.04.1/src/Utility/MountEntry.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Utility/MountEntry.vala 1970-01-01 00:00:00.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Utility/MountEntry.vala 2017-01-26 08:34:02.000000000 +0000 @@ -0,0 +1,49 @@ +using TeeJee.Logging; +using TeeJee.FileSystem; +using TeeJee.JsonHelper; +using TeeJee.ProcessHelper; +using TeeJee.GtkHelper; +using TeeJee.System; +using TeeJee.Misc; +using Json; + +public class MountEntry : GLib.Object{ + public Device device = null; + public string mount_point = ""; + public string mount_options = ""; + + public MountEntry(Device? device, string mount_point, string mount_options){ + this.device = device; + this.mount_point = mount_point; + this.mount_options = mount_options; + } + + public string subvolume_name(){ + if (mount_options.contains("subvol=")){ + return mount_options.split("subvol=")[1].split(",")[0].strip(); + } + else{ + return ""; + } + } + + public string lvm_name(){ + if ((device != null) && (device.type == "lvm") && (device.mapped_name.length > 0)){ + return device.mapped_name.strip(); + } + else{ + return ""; + } + } + + public static MountEntry? find_entry_by_mount_point( + Gee.ArrayList entries, string mount_path){ + + foreach(var entry in entries){ + if (entry.mount_point == mount_path){ + return entry; + } + } + return null; + } +} diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Utility/TeeJee.FileSystem.vala timeshift-17.2~429~ubuntu15.04.1/src/Utility/TeeJee.FileSystem.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Utility/TeeJee.FileSystem.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Utility/TeeJee.FileSystem.vala 2017-01-26 08:34:02.000000000 +0000 @@ -301,16 +301,21 @@ try{ var dir = File.parse_name (dir_path); if (dir.query_exists () == false) { - dir.make_directory_with_parents (null); + bool ok = dir.make_directory_with_parents (null); if (show_message){ - log_msg(_("Created directory") + ": %s".printf(dir_path)); + if (ok){ + log_msg(_("Created directory") + ": %s".printf(dir_path)); + } + else{ + log_error(_("Failed to create directory") + ": %s".printf(dir_path)); + } } } return true; } catch (Error e) { log_error (e.message); - log_error(_("Failed to create dir") + ": %s".printf(dir_path)); + log_error(_("Failed to create directory") + ": %s".printf(dir_path)); return false; } } @@ -324,10 +329,20 @@ } string cmd = "rm -rf '%s'".printf(escape_single_quote(dir_path)); - int status = exec_sync(cmd); + log_debug(cmd); + string std_out, std_err; + int status = exec_sync(cmd, out std_out, out std_err); if (show_message){ - log_msg(_("Deleted directory") + ": %s".printf(dir_path)); + if (status == 0){ + log_msg(_("Deleted directory") + ": %s".printf(dir_path)); + } + else{ + log_error(_("Failed to delete directory") + ": %s".printf(dir_path)); + log_error(std_out); + log_error(std_err); + } } + return (status == 0); } diff -Nru timeshift-17.1~425~ubuntu15.04.1/src/Utility/TeeJee.System.vala timeshift-17.2~429~ubuntu15.04.1/src/Utility/TeeJee.System.vala --- timeshift-17.1~425~ubuntu15.04.1/src/Utility/TeeJee.System.vala 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/src/Utility/TeeJee.System.vala 2017-01-26 08:34:02.000000000 +0000 @@ -468,7 +468,7 @@ return (ulong)((seconds * 1000 ) + (microseconds / 1000)); } - public void sleep(int milliseconds, bool do_events = false){ + public void sleep(int milliseconds){ Thread.usleep ((ulong) milliseconds * 1000); } diff -Nru timeshift-17.1~425~ubuntu15.04.1/timeshift.geany timeshift-17.2~429~ubuntu15.04.1/timeshift.geany --- timeshift-17.1~425~ubuntu15.04.1/timeshift.geany 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/timeshift.geany 2017-01-26 08:34:02.000000000 +0000 @@ -17,71 +17,74 @@ long_line_column=80 [files] -current_page=15 +current_page=28 FILE_NAME_0=932;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FArchiveFile.vala;0;4 FILE_NAME_1=3523;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FAsyncTask.vala;0;4 FILE_NAME_2=37;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FBash.vala;0;4 -FILE_NAME_3=6823;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FCronTab.vala;0;4 +FILE_NAME_3=7439;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FCronTab.vala;0;4 FILE_NAME_4=41;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FFileItem.vala;0;4 FILE_NAME_5=1504;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FLinuxDistro.vala;0;4 FILE_NAME_6=43;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FOSDNotify.vala;0;4 FILE_NAME_7=43;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FProcStats.vala;0;4 -FILE_NAME_8=19109;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTeeJee.FileSystem.vala;0;4 +FILE_NAME_8=8765;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTeeJee.FileSystem.vala;0;4 FILE_NAME_9=1687;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTeeJee.Json.vala;0;4 FILE_NAME_10=2470;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTeeJee.Logging.vala;0;4 FILE_NAME_11=45;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTeeJee.Misc.vala;0;4 FILE_NAME_12=1748;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTeeJee.Process.vala;0;4 FILE_NAME_13=10931;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTeeJee.System.vala;0;4 FILE_NAME_14=4855;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FExcludeMessageWindow.vala;0;4 -FILE_NAME_15=9124;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FMainWindow.vala;0;4 +FILE_NAME_15=3439;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FMainWindow.vala;0;4 FILE_NAME_16=9173;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreWindow.vala;0;4 -FILE_NAME_17=2600;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FSettingsWindow.vala;0;4 +FILE_NAME_17=2272;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FSettingsWindow.vala;0;4 FILE_NAME_18=4177;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FRsyncTask.vala;0;4 FILE_NAME_19=2223;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FAppExcludeEntry.vala;0;4 -FILE_NAME_20=3831;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FFsTabEntry.vala;0;4 -FILE_NAME_21=4822;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FSnapshot.vala;0;4 -FILE_NAME_22=4679;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FSnapshotRepo.vala;0;4 -FILE_NAME_23=530;Make;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2Fmakefile;0;4 -FILE_NAME_24=6321;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRsyncLogWindow.vala;0;4 -FILE_NAME_25=1669;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBackupBox.vala;0;4 -FILE_NAME_26=2509;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FEstimateBox.vala;0;4 -FILE_NAME_27=5187;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBackupDeviceBox.vala;0;4 -FILE_NAME_28=7338;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FExcludeBox.vala;0;4 -FILE_NAME_29=4242;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FScheduleBox.vala;0;4 -FILE_NAME_30=4976;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FFinishBox.vala;0;4 -FILE_NAME_31=7284;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FSetupWizardWindow.vala;0;4 -FILE_NAME_32=7225;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBackupWindow.vala;0;4 -FILE_NAME_33=2906;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FSnapshotListBox.vala;0;4 -FILE_NAME_34=997;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FDeleteWindow.vala;0;4 -FILE_NAME_35=2507;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FDeleteBox.vala;0;4 -FILE_NAME_36=2093;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FDeleteFileTask.vala;0;4 -FILE_NAME_37=6871;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreBox.vala;0;4 -FILE_NAME_38=2234;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreSummaryBox.vala;0;4 -FILE_NAME_39=13665;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreDeviceBox.vala;0;4 -FILE_NAME_40=1529;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreExcludeBox.vala;0;4 -FILE_NAME_41=2379;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FCryptTabEntry.vala;0;4 -FILE_NAME_42=1974;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreFinishBox.vala;0;4 -FILE_NAME_43=1090;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FMountEntry.vala;0;4 -FILE_NAME_44=3853;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FExcludeAppsBox.vala;0;4 -FILE_NAME_45=2143;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FExcludeListSummaryWindow.vala;0;4 -FILE_NAME_46=29169;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FDevice.vala;0;4 -FILE_NAME_47=217;Sh;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Finstaller%2Finstall.sh;0;4 -FILE_NAME_48=1592;None;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fdebian%2Fchangelog;0;4 -FILE_NAME_49=873;Conf;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fdebian%2Fcontrol;0;4 -FILE_NAME_50=905;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FAppLock.vala;0;4 -FILE_NAME_51=1575;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTimeoutCounter.vala;0;4 -FILE_NAME_52=1081;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FAppGtk.vala;0;4 -FILE_NAME_53=18144;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FConsole%2FAppConsole.vala;0;4 -FILE_NAME_54=2328;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FGtk%2FTerminalWindow.vala;0;4 -FILE_NAME_55=93208;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FMain.vala;0;4 -FILE_NAME_56=2409;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBootOptionsWindow.vala;0;4 -FILE_NAME_57=3521;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBootOptionsBox.vala;0;4 -FILE_NAME_58=3265;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FGtkHelper.vala;0;4 -FILE_NAME_59=3015;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FSubvolume.vala;0;4 -FILE_NAME_60=1713;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FDeleteFinishBox.vala;0;4 -FILE_NAME_61=2775;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FSnapshotBackendBox.vala;0;4 -FILE_NAME_62=57;Sh;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fbuild-installer.sh;0;4 -FILE_NAME_63=5;Make;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fmakefile;0;4 +FILE_NAME_20=11352;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FSnapshot.vala;0;4 +FILE_NAME_21=6998;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FSnapshotRepo.vala;0;4 +FILE_NAME_22=759;Make;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2Fmakefile;0;4 +FILE_NAME_23=6321;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRsyncLogWindow.vala;0;4 +FILE_NAME_24=1669;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBackupBox.vala;0;4 +FILE_NAME_25=2509;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FEstimateBox.vala;0;4 +FILE_NAME_26=5688;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBackupDeviceBox.vala;0;4 +FILE_NAME_27=7338;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FExcludeBox.vala;0;4 +FILE_NAME_28=4065;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FScheduleBox.vala;0;4 +FILE_NAME_29=3619;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FFinishBox.vala;0;4 +FILE_NAME_30=3682;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FSetupWizardWindow.vala;0;4 +FILE_NAME_31=7225;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBackupWindow.vala;0;4 +FILE_NAME_32=2724;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FSnapshotListBox.vala;0;4 +FILE_NAME_33=997;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FDeleteWindow.vala;0;4 +FILE_NAME_34=2507;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FDeleteBox.vala;0;4 +FILE_NAME_35=2093;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FDeleteFileTask.vala;0;4 +FILE_NAME_36=6871;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreBox.vala;0;4 +FILE_NAME_37=2234;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreSummaryBox.vala;0;4 +FILE_NAME_38=13665;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreDeviceBox.vala;0;4 +FILE_NAME_39=1529;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreExcludeBox.vala;0;4 +FILE_NAME_40=2661;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FRestoreFinishBox.vala;0;4 +FILE_NAME_41=3853;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FExcludeAppsBox.vala;0;4 +FILE_NAME_42=2143;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FExcludeListSummaryWindow.vala;0;4 +FILE_NAME_43=34111;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FDevice.vala;0;4 +FILE_NAME_44=217;Sh;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Finstaller%2Finstall.sh;0;4 +FILE_NAME_45=455;None;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fdebian%2Fchangelog;0;4 +FILE_NAME_46=171;Conf;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fdebian%2Fcontrol;0;4 +FILE_NAME_47=905;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FAppLock.vala;0;4 +FILE_NAME_48=1575;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FTimeoutCounter.vala;0;4 +FILE_NAME_49=1081;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FAppGtk.vala;0;4 +FILE_NAME_50=18114;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FConsole%2FAppConsole.vala;0;4 +FILE_NAME_51=2328;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FGtk%2FTerminalWindow.vala;0;4 +FILE_NAME_52=100562;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FMain.vala;0;4 +FILE_NAME_53=2409;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBootOptionsWindow.vala;0;4 +FILE_NAME_54=3521;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FBootOptionsBox.vala;0;4 +FILE_NAME_55=3265;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FGtkHelper.vala;0;4 +FILE_NAME_56=429;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FCore%2FSubvolume.vala;0;4 +FILE_NAME_57=1780;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FDeleteFinishBox.vala;0;4 +FILE_NAME_58=6023;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FGtk%2FSnapshotBackendBox.vala;0;4 +FILE_NAME_59=57;Sh;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fbuild-installer.sh;0;4 +FILE_NAME_60=5;Make;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fmakefile;0;4 +FILE_NAME_61=0;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FGtk%2FAboutWindow.vala;0;4 +FILE_NAME_62=1011;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FGtk%2FCustomMessageDialog.vala;0;4 +FILE_NAME_63=3143;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FGtk%2FDonationWindow.vala;0;4 +FILE_NAME_64=982;Vala;0;EUTF-8;1;1;1;%2Fmnt%2Fsdcard%2FDropbox%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FCryptTabEntry.vala;0;4 +FILE_NAME_65=647;Vala;0;EUTF-8;1;1;1;%2Fmnt%2Fsdcard%2FDropbox%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FMountEntry.vala;0;4 +FILE_NAME_66=4642;Vala;0;EUTF-8;1;1;1;%2Fhome%2Fteejee%2Fprojects%2Flinux%2Ftimeshift%2Fsrc%2FUtility%2FFsTabEntry.vala;0;4 [VTE] last_dir=/home/teejee @@ -98,10 +101,10 @@ NF_03_CM=make clean NF_03_WD=%p EX_00_LB=_Execute Debug -EX_00_CM=pkexec ./timeshift +EX_00_CM=pkexec timeshift-gtk EX_00_WD=%p/src EX_01_LB=Execute -EX_01_CM=pkexec ./timeshift +EX_01_CM=pkexec timeshift-gtk EX_01_WD=%p/src ValaFT_01_LB=_Build ValaFT_01_CM=make all diff -Nru timeshift-17.1~425~ubuntu15.04.1/timeshift.pot timeshift-17.2~429~ubuntu15.04.1/timeshift.pot --- timeshift-17.1~425~ubuntu15.04.1/timeshift.pot 2017-01-15 11:01:43.000000000 +0000 +++ timeshift-17.2~429~ubuntu15.04.1/timeshift.pot 2017-01-26 08:34:02.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: timeshift 1.6\n" "Report-Msgid-Bugs-To: teejeetech@gmail.com\n" -"POT-Creation-Date: 2017-01-15 16:11+0530\n" +"POT-Creation-Date: 2017-01-26 13:48+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -54,19 +54,19 @@ msgid "** Uninstalled Timeshift BTRFS **" msgstr "" -#: Core/Main.vala:3075 +#: Core/Main.vala:3074 msgid "/ is mapped to device" msgstr "" -#: Core/Main.vala:3097 +#: Core/Main.vala:3096 msgid "/boot is mapped to device" msgstr "" -#: Core/Main.vala:3108 +#: Core/Main.vala:3107 msgid "/boot/efi is mapped to device" msgstr "" -#: Core/Main.vala:3086 +#: Core/Main.vala:3085 msgid "/home is mapped to device" msgstr "" @@ -137,7 +137,7 @@ msgid "Add tags to snapshot (default: O)" msgstr "" -#: Utility/CronTab.vala:306 +#: Utility/CronTab.vala:313 msgid "Added cron task" msgstr "" @@ -186,11 +186,11 @@ msgid "Answer YES to all confirmation prompts" msgstr "" -#: Core/Main.vala:2933 +#: Core/Main.vala:2932 msgid "App config loaded" msgstr "" -#: Core/Main.vala:2835 +#: Core/Main.vala:2834 msgid "App config saved" msgstr "" @@ -198,7 +198,7 @@ msgid "Application needs admin access." msgstr "" -#: Core/Main.vala:3250 +#: Core/Main.vala:3249 msgid "Application will exit" msgstr "" @@ -224,11 +224,15 @@ msgid "BTRFS" msgstr "" +#: Gtk/SnapshotBackendBox.vala:159 +msgid "BTRFS Snapshots" +msgstr "" + #: Gtk/SnapshotBackendBox.vala:118 msgid "BTRFS Tools Not Found" msgstr "" -#: Core/Main.vala:1819 Core/Main.vala:1823 +#: Core/Main.vala:1818 Core/Main.vala:1822 msgid "BTRFS device is not mounted" msgstr "" @@ -252,11 +256,11 @@ msgid "Backup" msgstr "" -#: Core/Main.vala:1795 +#: Core/Main.vala:1794 msgid "Backup Device" msgstr "" -#: Core/Main.vala:1790 +#: Core/Main.vala:1789 msgid "Backup device not specified!" msgstr "" @@ -264,7 +268,7 @@ msgid "Bittorrent Clients" msgstr "" -#: Gtk/ScheduleBox.vala:126 +#: Gtk/ScheduleBox.vala:133 msgid "Boot" msgstr "" @@ -300,7 +304,7 @@ msgid "Browse selected snapshot" msgstr "" -#: Core/Main.vala:2257 +#: Core/Main.vala:2256 msgid "Building file list..." msgstr "" @@ -334,7 +338,7 @@ msgid "Changed items:" msgstr "" -#: Core/Main.vala:2478 +#: Core/Main.vala:2477 msgid "Checking file systems for errors..." msgstr "" @@ -342,7 +346,7 @@ msgid "Checksum" msgstr "" -#: Core/Main.vala:2146 +#: Core/Main.vala:2145 msgid "Cleaning up..." msgstr "" @@ -372,12 +376,12 @@ msgid "Cloning System..." msgstr "" -#: Core/Main.vala:2523 +#: Core/Main.vala:2522 msgid "Cloning system..." msgstr "" #: Utility/Gtk/AboutWindow.vala:305 Gtk/BootOptionsWindow.vala:107 -#: Gtk/DeleteWindow.vala:169 Gtk/SettingsWindow.vala:142 +#: Gtk/DeleteWindow.vala:169 Gtk/SettingsWindow.vala:147 #: Gtk/RestoreWindow.vala:179 Gtk/RsyncLogWindow.vala:248 #: Gtk/BackupWindow.vala:167 msgid "Close" @@ -428,11 +432,11 @@ msgid "Could not find snapshot" msgstr "" -#: Core/Main.vala:2709 +#: Core/Main.vala:2708 msgid "Could not find system subvolume" msgstr "" -#: Core/Main.vala:2737 +#: Core/Main.vala:2736 msgid "Could not find system subvolumes for creating pre-restore snapshot" msgstr "" @@ -444,23 +448,23 @@ msgid "Create Snapshot" msgstr "" -#: Gtk/ScheduleBox.vala:126 +#: Gtk/ScheduleBox.vala:133 msgid "Create one per boot" msgstr "" -#: Gtk/ScheduleBox.vala:92 +#: Gtk/ScheduleBox.vala:97 msgid "Create one per day" msgstr "" -#: Gtk/ScheduleBox.vala:109 +#: Gtk/ScheduleBox.vala:115 msgid "Create one per hour" msgstr "" -#: Gtk/ScheduleBox.vala:58 +#: Gtk/ScheduleBox.vala:61 msgid "Create one per month" msgstr "" -#: Gtk/ScheduleBox.vala:75 +#: Gtk/ScheduleBox.vala:79 msgid "Create one per week" msgstr "" @@ -498,15 +502,15 @@ msgid "Created control file" msgstr "" -#: Utility/TeeJee.FileSystem.vala:306 +#: Utility/TeeJee.FileSystem.vala:307 msgid "Created directory" msgstr "" -#: Core/Main.vala:2759 +#: Core/Main.vala:2758 msgid "Created pre-restore snapshot" msgstr "" -#: Core/Main.vala:1293 +#: Core/Main.vala:1292 msgid "Created subvolume snapshot" msgstr "" @@ -514,15 +518,15 @@ msgid "Creating Snapshot..." msgstr "" -#: Core/Main.vala:1252 +#: Core/Main.vala:1251 msgid "Creating new backup..." msgstr "" -#: Core/Main.vala:1100 +#: Core/Main.vala:1099 msgid "Creating new snapshot..." msgstr "" -#: Core/Main.vala:2692 +#: Core/Main.vala:2691 msgid "Creating pre-restore snapshot from system subvolumes..." msgstr "" @@ -530,7 +534,7 @@ msgid "Credits" msgstr "" -#: Core/Main.vala:3249 +#: Core/Main.vala:3248 msgid "Critical Error" msgstr "" @@ -542,11 +546,11 @@ msgid "Cron job removed" msgstr "" -#: Utility/CronTab.vala:298 +#: Utility/CronTab.vala:305 msgid "Cron task exists" msgstr "" -#: Gtk/ScheduleBox.vala:92 +#: Gtk/ScheduleBox.vala:97 msgid "Daily" msgstr "" @@ -558,7 +562,7 @@ msgid "Daily snapshots are enabled" msgstr "" -#: Core/Main.vala:1887 +#: Core/Main.vala:1886 msgid "Data will be modified on following devices:" msgstr "" @@ -587,15 +591,15 @@ msgid "Deleted" msgstr "" -#: Utility/TeeJee.FileSystem.vala:329 +#: Utility/TeeJee.FileSystem.vala:337 msgid "Deleted directory" msgstr "" -#: Core/Subvolume.vala:100 +#: Core/Subvolume.vala:102 msgid "Deleted subvolume" msgstr "" -#: Core/Main.vala:2676 +#: Core/Main.vala:2675 msgid "Deleted system subvolumes: @, @home" msgstr "" @@ -615,16 +619,16 @@ msgid "Description" msgstr "" -#: Core/Subvolume.vala:114 +#: Core/Subvolume.vala:116 msgid "Destroyed qgroup" msgstr "" -#: Core/Subvolume.vala:104 +#: Core/Subvolume.vala:106 msgid "Destroying qgroup" msgstr "" #: Console/AppConsole.vala:447 Console/AppConsole.vala:486 -#: Console/AppConsole.vala:534 Core/Main.vala:1890 Core/Main.vala:1918 +#: Console/AppConsole.vala:534 Core/Main.vala:1889 Core/Main.vala:1917 #: Core/SnapshotRepo.vala:49 Core/SnapshotRepo.vala:637 #: Core/SnapshotRepo.vala:640 Utility/Device.vala:1742 Utility/Device.vala:1752 #: Gtk/RestoreDeviceBox.vala:98 @@ -640,7 +644,7 @@ msgid "Device name is empty!" msgstr "" -#: Core/Main.vala:2967 Core/SnapshotRepo.vala:515 +#: Core/Main.vala:2966 Core/SnapshotRepo.vala:515 msgid "Device not found" msgstr "" @@ -669,7 +673,7 @@ "(teejeetech@gmail.com)" msgstr "" -#: Utility/TeeJee.FileSystem.vala:459 +#: Utility/TeeJee.FileSystem.vala:474 msgid "Dir not found" msgstr "" @@ -677,7 +681,7 @@ msgid "Directory not found" msgstr "" -#: Core/Main.vala:1975 Gtk/RestoreSummaryBox.vala:64 +#: Core/Main.vala:1974 Gtk/RestoreSummaryBox.vala:64 msgid "Disclaimer" msgstr "" @@ -723,7 +727,7 @@ msgid "Enable scheduled snapshots to protect your system" msgstr "" -#: Core/Main.vala:3740 Core/Main.vala:3773 +#: Core/Main.vala:3741 Core/Main.vala:3774 msgid "Enabled subvolume quota support" msgstr "" @@ -771,7 +775,7 @@ msgid "Estimating System Size..." msgstr "" -#: Core/Main.vala:1096 +#: Core/Main.vala:1095 msgid "Estimating system size..." msgstr "" @@ -803,7 +807,7 @@ msgid "Excluded Directories" msgstr "" -#: Core/Main.vala:1361 +#: Core/Main.vala:1360 msgid "Expected values: O, B, H, D, W, M" msgstr "" @@ -815,19 +819,19 @@ msgid "Failed to copy file" msgstr "" -#: Utility/TeeJee.FileSystem.vala:313 -msgid "Failed to create dir" +#: Utility/TeeJee.FileSystem.vala:310 Utility/TeeJee.FileSystem.vala:318 +msgid "Failed to create directory" msgstr "" -#: Core/Main.vala:1222 +#: Core/Main.vala:1221 msgid "Failed to create new snapshot" msgstr "" -#: Core/Main.vala:1069 +#: Core/Main.vala:1071 msgid "Failed to create snapshot" msgstr "" -#: Core/Main.vala:1289 +#: Core/Main.vala:1288 msgid "Failed to create subvolume snapshot" msgstr "" @@ -835,11 +839,15 @@ msgid "Failed to create symlinks" msgstr "" +#: Utility/TeeJee.FileSystem.vala:340 +msgid "Failed to delete directory" +msgstr "" + #: Utility/TeeJee.FileSystem.vala:100 msgid "Failed to delete file" msgstr "" -#: Core/Subvolume.vala:96 +#: Core/Subvolume.vala:98 msgid "Failed to delete snapshot subvolume" msgstr "" @@ -847,15 +855,15 @@ msgid "Failed to delete symlinks" msgstr "" -#: Core/Subvolume.vala:110 +#: Core/Subvolume.vala:112 msgid "Failed to destroy qgroup" msgstr "" -#: Core/Main.vala:3760 +#: Core/Main.vala:3761 msgid "Failed to enable subvolume quota" msgstr "" -#: Core/Main.vala:3464 Core/Main.vala:3470 +#: Core/Main.vala:3463 Core/Main.vala:3469 msgid "Failed to estimate system size" msgstr "" @@ -873,7 +881,7 @@ msgid "Failed to get partition list" msgstr "" -#: Core/Main.vala:3050 +#: Core/Main.vala:3049 msgid "Failed to get partition list." msgstr "" @@ -889,15 +897,15 @@ msgid "Failed to move file" msgstr "" -#: Core/Main.vala:2724 +#: Core/Main.vala:2723 msgid "Failed to move system subvolume to snapshot directory" msgstr "" -#: Core/Main.vala:3585 +#: Core/Main.vala:3586 msgid "Failed to query subvolume list" msgstr "" -#: Core/Main.vala:3665 +#: Core/Main.vala:3666 msgid "Failed to query subvolume quota" msgstr "" @@ -917,15 +925,19 @@ msgid "Failed to remove cron job" msgstr "" -#: Core/Main.vala:3793 +#: Core/Snapshot.vala:446 Core/Snapshot.vala:457 Core/Snapshot.vala:464 +msgid "Failed to remove snapshot" +msgstr "" + +#: Core/Main.vala:3794 msgid "Failed to rescan subvolume quota" msgstr "" -#: Core/Main.vala:2614 +#: Core/Main.vala:2613 msgid "Failed to restore system subvolume" msgstr "" -#: Core/Main.vala:1172 +#: Core/Main.vala:1171 msgid "Failed to save exclude list" msgstr "" @@ -938,7 +950,7 @@ msgid "Failed to unmount" msgstr "" -#: Core/Main.vala:3250 +#: Core/Main.vala:3249 msgid "Failed to unmount device!" msgstr "" @@ -954,12 +966,12 @@ msgid "File and directory counts:" msgstr "" -#: Utility/TeeJee.FileSystem.vala:612 Utility/TeeJee.FileSystem.vala:661 +#: Utility/TeeJee.FileSystem.vala:627 Utility/TeeJee.FileSystem.vala:676 msgid "File is missing" msgstr "" #: Utility/RsyncTask.vala:249 Utility/CronTab.vala:225 -#: Utility/TeeJee.FileSystem.vala:205 Utility/TeeJee.FileSystem.vala:488 +#: Utility/TeeJee.FileSystem.vala:205 Utility/TeeJee.FileSystem.vala:503 msgid "File not found" msgstr "" @@ -986,7 +998,7 @@ msgid "Filesystem" msgstr "" -#: Gtk/SettingsWindow.vala:80 +#: Gtk/SettingsWindow.vala:91 msgid "Filters" msgstr "" @@ -1007,7 +1019,7 @@ msgid "First snapshot requires:" msgstr "" -#: Core/Main.vala:2667 +#: Core/Main.vala:2666 msgid "Found existing pre-restore snapshot" msgstr "" @@ -1031,7 +1043,7 @@ msgid "GRUB will NOT be reinstalled" msgstr "" -#: Core/Main.vala:2106 +#: Core/Main.vala:2105 msgid "Generating initramfs..." msgstr "" @@ -1065,7 +1077,7 @@ msgid "Home Directory" msgstr "" -#: Gtk/ScheduleBox.vala:109 +#: Gtk/ScheduleBox.vala:115 msgid "Hourly" msgstr "" @@ -1083,7 +1095,7 @@ "install Timeshift, and try restoring another snapshot." msgstr "" -#: Core/Main.vala:1981 +#: Core/Main.vala:1980 msgid "" "If these terms are not acceptable to you, please do not proceed beyond this " "point!" @@ -1097,7 +1109,7 @@ msgid "Info" msgstr "" -#: Core/Main.vala:1804 +#: Core/Main.vala:1803 msgid "Invalid Snapshot" msgstr "" @@ -1114,7 +1126,7 @@ msgid "Items Not Selected" msgstr "" -#: Gtk/ScheduleBox.vala:239 +#: Gtk/ScheduleBox.vala:263 msgid "Keep" msgstr "" @@ -1219,7 +1231,7 @@ msgid "Latest snapshot" msgstr "" -#: Core/Main.vala:1161 +#: Core/Main.vala:1160 #, c-format msgid "Linking from snapshot" msgstr "" @@ -1240,7 +1252,7 @@ msgid "Live USB Mode (Restore Only)" msgstr "" -#: Gtk/SettingsWindow.vala:72 Gtk/SetupWizardWindow.vala:88 +#: Gtk/SettingsWindow.vala:85 Gtk/SetupWizardWindow.vala:88 #: Gtk/BackupWindow.vala:84 msgid "Location" msgstr "" @@ -1287,7 +1299,7 @@ msgid "Model" msgstr "" -#: Gtk/ScheduleBox.vala:58 +#: Gtk/ScheduleBox.vala:61 msgid "Monthly" msgstr "" @@ -1299,11 +1311,11 @@ msgid "Monthly snapshot failed!" msgstr "" -#: Core/Main.vala:1889 Core/Main.vala:1918 +#: Core/Main.vala:1888 Core/Main.vala:1917 msgid "Mount" msgstr "" -#: Core/Main.vala:2731 +#: Core/Main.vala:2730 msgid "Moved system subvolume to snapshot directory" msgstr "" @@ -1382,7 +1394,7 @@ msgid "Num" msgstr "" -#: Gtk/ScheduleBox.vala:238 +#: Gtk/ScheduleBox.vala:262 msgid "" "Number of snapshots to keep.\n" "Older snapshots will be removed once this limit is exceeded." @@ -1399,7 +1411,7 @@ "(@ and @home subvolumes). Other layouts are not supported." msgstr "" -#: Core/Main.vala:3880 +#: Core/Main.vala:3885 msgid "Older log files removed" msgstr "" @@ -1407,7 +1419,7 @@ msgid "Oldest snapshot" msgstr "" -#: Core/Main.vala:346 Core/Main.vala:3165 Gtk/RestoreDeviceBox.vala:525 +#: Core/Main.vala:346 Core/Main.vala:3164 Gtk/RestoreDeviceBox.vala:525 msgid "" "Only ubuntu-type layouts with @ and @home subvolumes are currently supported." msgstr "" @@ -1416,7 +1428,7 @@ msgid "Open Menu" msgstr "" -#: Core/Main.vala:2949 +#: Core/Main.vala:2948 msgid "" "Option --snapshot-device should not be specified for creating snapshots in " "BTRFS mode" @@ -1439,7 +1451,7 @@ msgid "Parent Device" msgstr "" -#: Core/Main.vala:1235 Core/Main.vala:2227 Core/Main.vala:2306 +#: Core/Main.vala:1234 Core/Main.vala:2226 Core/Main.vala:2305 #: Gtk/RsyncLogWindow.vala:121 msgid "Parsing log file..." msgstr "" @@ -1465,7 +1477,7 @@ msgid "Please check if you have multiple windows open." msgstr "" -#: Core/Main.vala:2013 +#: Core/Main.vala:2012 msgid "Please do not interrupt the restore process!" msgstr "" @@ -1481,7 +1493,7 @@ msgid "Please run the application as admin (using 'sudo' or 'su')" msgstr "" -#: Core/Main.vala:1963 +#: Core/Main.vala:1962 msgid "Please save your work and close all applications." msgstr "" @@ -1505,7 +1517,7 @@ msgid "Populating list..." msgstr "" -#: Core/Main.vala:1373 Gtk/RsyncLogWindow.vala:131 Gtk/BackupBox.vala:107 +#: Core/Main.vala:1372 Gtk/RsyncLogWindow.vala:131 Gtk/BackupBox.vala:107 #: Gtk/RestoreBox.vala:82 Gtk/DeleteBox.vala:65 msgid "Preparing..." msgstr "" @@ -1519,11 +1531,11 @@ msgid "Print debug information" msgstr "" -#: Core/Main.vala:3523 +#: Core/Main.vala:3524 msgid "Query completed" msgstr "" -#: Core/Main.vala:3506 +#: Core/Main.vala:3507 msgid "Querying subvolume info..." msgstr "" @@ -1531,6 +1543,10 @@ msgid "RSYNC" msgstr "" +#: Gtk/SnapshotBackendBox.vala:178 +msgid "RSYNC Snapshots" +msgstr "" + #: Gtk/BootOptionsBox.vala:138 msgid "" "Re-generates initramfs for all installed kernels. This is generally not " @@ -1542,7 +1558,7 @@ msgid "Re-install GRUB2 bootloader?" msgstr "" -#: Core/Main.vala:2065 +#: Core/Main.vala:2064 msgid "Re-installing GRUB2 bootloader..." msgstr "" @@ -1555,7 +1571,7 @@ msgid "Read %'d of %'d lines..." msgstr "" -#: Core/Main.vala:2158 +#: Core/Main.vala:2157 msgid "Rebooting system..." msgstr "" @@ -1576,22 +1592,22 @@ msgid "Remove" msgstr "" -#: Core/Main.vala:1411 Core/Main.vala:1422 Core/Snapshot.vala:426 +#: Core/Main.vala:1410 Core/Main.vala:1421 Core/Snapshot.vala:426 #: Core/SnapshotRepo.vala:929 #, c-format msgid "Removed" msgstr "" -#: Utility/CronTab.vala:335 +#: Utility/CronTab.vala:342 msgid "Removed cron task" msgstr "" -#: Core/Main.vala:3313 +#: Core/Main.vala:3312 #, c-format msgid "Removed mount directory: '%s'" msgstr "" -#: Core/Snapshot.vala:459 +#: Core/Snapshot.vala:469 msgid "Removed snapshot" msgstr "" @@ -1626,7 +1642,7 @@ msgid "Restore Snapshot" msgstr "" -#: Core/Main.vala:2548 Core/Main.vala:2626 +#: Core/Main.vala:2547 Core/Main.vala:2625 msgid "Restore completed" msgstr "" @@ -1642,7 +1658,7 @@ msgid "Restored subvolumes will become active after system is restarted." msgstr "" -#: Core/Main.vala:2621 +#: Core/Main.vala:2620 msgid "Restored system subvolume" msgstr "" @@ -1657,7 +1673,7 @@ "snapshot can be restored later to 'undo' the restore." msgstr "" -#: Core/Main.vala:2520 +#: Core/Main.vala:2519 msgid "Restoring snapshot..." msgstr "" @@ -1702,11 +1718,11 @@ "distribution by restoring a snapshot." msgstr "" -#: Core/Main.vala:1102 Core/Main.vala:1254 Core/Main.vala:1256 +#: Core/Main.vala:1101 Core/Main.vala:1253 Core/Main.vala:1255 msgid "Saving to device" msgstr "" -#: Gtk/SettingsWindow.vala:76 Gtk/SetupWizardWindow.vala:93 +#: Gtk/SettingsWindow.vala:88 Gtk/SetupWizardWindow.vala:93 msgid "Schedule" msgstr "" @@ -1714,7 +1730,7 @@ msgid "Scheduled snapshot in progress..." msgstr "" -#: Core/Main.vala:963 Gtk/ScheduleBox.vala:264 Gtk/MainWindow.vala:1109 +#: Core/Main.vala:963 Gtk/ScheduleBox.vala:290 Gtk/MainWindow.vala:1109 msgid "Scheduled snapshots are disabled" msgstr "" @@ -1722,7 +1738,7 @@ msgid "Scheduled snapshots are disabled. It's recommended to enable it." msgstr "" -#: Gtk/ScheduleBox.vala:258 +#: Gtk/ScheduleBox.vala:284 msgid "Scheduled snapshots are enabled" msgstr "" @@ -1732,6 +1748,10 @@ "selected levels." msgstr "" +#: Gtk/ScheduleBox.vala:149 +msgid "Scheduled task runs once every hour" +msgstr "" + #: Console/AppConsole.vala:845 #, c-format msgid "Select '%s' device (default = %s)" @@ -1753,7 +1773,7 @@ msgid "Select Snapshot" msgstr "" -#: Gtk/ScheduleBox.vala:51 +#: Gtk/ScheduleBox.vala:54 msgid "Select Snapshot Levels" msgstr "" @@ -1830,7 +1850,7 @@ msgid "Select the devices where files will be restored." msgstr "" -#: Gtk/ScheduleBox.vala:265 +#: Gtk/ScheduleBox.vala:291 msgid "Select the intervals for creating snapshots" msgstr "" @@ -1858,11 +1878,11 @@ msgid "Select the target devices where system will be cloned." msgstr "" -#: Core/Main.vala:2977 +#: Core/Main.vala:2976 msgid "Selected default snapshot device" msgstr "" -#: Core/Main.vala:2854 Core/Main.vala:2858 +#: Core/Main.vala:2853 Core/Main.vala:2857 msgid "Selected default snapshot type" msgstr "" @@ -1882,7 +1902,7 @@ msgid "Selected snapshot device is not a system disk" msgstr "" -#: Core/Main.vala:1805 +#: Core/Main.vala:1804 msgid "Selected snapshot is marked for deletion" msgstr "" @@ -1963,7 +1983,7 @@ msgid "Skip GRUB2 reinstall" msgstr "" -#: Core/Main.vala:1810 Core/SnapshotRepo.vala:668 Core/SnapshotRepo.vala:706 +#: Core/Main.vala:1809 Core/SnapshotRepo.vala:668 Core/SnapshotRepo.vala:706 #: Gtk/SnapshotListBox.vala:95 #, c-format msgid "Snapshot" @@ -2002,15 +2022,15 @@ msgid "Snapshot location" msgstr "" -#: Core/Main.vala:1066 +#: Core/Main.vala:1068 msgid "Snapshot saved successfully" msgstr "" -#: Core/Main.vala:1800 +#: Core/Main.vala:1799 msgid "Snapshot to restore not specified!" msgstr "" -#: Core/Main.vala:2630 +#: Core/Main.vala:2629 msgid "Snapshot will become active after system is rebooted." msgstr "" @@ -2078,7 +2098,7 @@ msgid "Snapshots will be created at selected intervals" msgstr "" -#: Gtk/ScheduleBox.vala:259 +#: Gtk/ScheduleBox.vala:285 msgid "" "Snapshots will be created at selected intervals if snapshot disk has enough " "space (> 1 GB)" @@ -2109,6 +2129,10 @@ msgid "Status" msgstr "" +#: Gtk/ScheduleBox.vala:162 +msgid "Stop cron emails for scheduled tasks" +msgstr "" + #: Utility/TeeJee.Process.vala:511 msgid "Stopped" msgstr "" @@ -2130,11 +2154,11 @@ msgid "Symlinks updated" msgstr "" -#: Core/Main.vala:2140 +#: Core/Main.vala:2139 msgid "Synching file systems..." msgstr "" -#: Core/Main.vala:1178 Core/Main.vala:2295 Core/Main.vala:2526 +#: Core/Main.vala:1177 Core/Main.vala:2294 Core/Main.vala:2525 msgid "Synching files with rsync..." msgstr "" @@ -2155,15 +2179,15 @@ msgid "System can be rolled-back to a previous date by restoring a snapshot." msgstr "" -#: Core/Main.vala:2014 +#: Core/Main.vala:2013 msgid "System will reboot after files are restored" msgstr "" -#: Core/Main.vala:1964 +#: Core/Main.vala:1963 msgid "System will reboot after files are restored." msgstr "" -#: Core/Main.vala:1035 Core/Main.vala:1076 +#: Core/Main.vala:1037 Core/Main.vala:1078 msgid "Tagged snapshot" msgstr "" @@ -2171,7 +2195,7 @@ msgid "Tags" msgstr "" -#: Core/Main.vala:1835 +#: Core/Main.vala:1834 msgid "Target device is not mounted" msgstr "" @@ -2179,7 +2203,7 @@ msgid "Target device is same as system device" msgstr "" -#: Core/Main.vala:1829 +#: Core/Main.vala:1828 msgid "Target device not specified!" msgstr "" @@ -2189,7 +2213,7 @@ "tools' package and try again." msgstr "" -#: Gtk/ScheduleBox.vala:149 +#: Gtk/ScheduleBox.vala:164 msgid "" "The cron service sends the output of scheduled tasks as an email to the " "current user. Select this option to suppress the emails for cron tasks " @@ -2200,7 +2224,7 @@ msgid "The system partition has an unsupported subvolume layout." msgstr "" -#: Core/Main.vala:3164 +#: Core/Main.vala:3163 msgid "The target partition has an unsupported subvolume layout." msgstr "" @@ -2218,7 +2242,7 @@ msgid "This device is not encrypted" msgstr "" -#: Core/Main.vala:1980 +#: Core/Main.vala:1979 msgid "" "This software comes without absolutely NO warranty and the author takes no " "responsibility for any damage arising from the use of this program." @@ -2243,7 +2267,7 @@ msgstr "" #: Console/AppConsole.vala:450 Console/AppConsole.vala:489 -#: Utility/Device.vala:1759 Gtk/SettingsWindow.vala:68 +#: Utility/Device.vala:1759 Gtk/SettingsWindow.vala:82 #: Gtk/BackupDeviceBox.vala:174 #, c-format msgid "Type" @@ -2258,11 +2282,11 @@ msgid "Unknown option" msgstr "" -#: Core/Main.vala:1017 +#: Core/Main.vala:1019 msgid "Unknown snapshot type" msgstr "" -#: Core/Main.vala:1360 +#: Core/Main.vala:1359 msgid "Unknown value specified for option --tags" msgstr "" @@ -2283,7 +2307,7 @@ msgid "Unshared" msgstr "" -#: Core/Main.vala:3168 Gtk/RestoreDeviceBox.vala:522 +#: Core/Main.vala:3167 Gtk/RestoreDeviceBox.vala:522 msgid "Unsupported Subvolume Layout" msgstr "" @@ -2295,11 +2319,11 @@ msgid "Update initramfs" msgstr "" -#: Core/Main.vala:2470 +#: Core/Main.vala:2469 msgid "Updated /etc/crypttab on target device" msgstr "" -#: Core/Main.vala:2390 +#: Core/Main.vala:2389 msgid "Updated /etc/fstab on target device" msgstr "" @@ -2309,11 +2333,11 @@ "be left selected." msgstr "" -#: Core/Main.vala:2123 +#: Core/Main.vala:2122 msgid "Updating GRUB menu..." msgstr "" -#: Core/Main.vala:2314 +#: Core/Main.vala:2313 msgid "Updating bootloader configuration..." msgstr "" @@ -2359,7 +2383,7 @@ msgid "W" msgstr "" -#: Core/Main.vala:1882 Gtk/RestoreSummaryBox.vala:53 +#: Core/Main.vala:1881 Gtk/RestoreSummaryBox.vala:53 msgid "Warning" msgstr "" @@ -2367,7 +2391,7 @@ msgid "Web Browsers" msgstr "" -#: Gtk/ScheduleBox.vala:75 +#: Gtk/ScheduleBox.vala:79 msgid "Weekly" msgstr "" @@ -2422,12 +2446,12 @@ msgid "all" msgstr "" -#: Core/Main.vala:1288 Core/Main.vala:2613 Core/Main.vala:3584 -#: Core/Main.vala:3664 Core/Main.vala:3759 Core/Main.vala:3792 +#: Core/Main.vala:1287 Core/Main.vala:2612 Core/Main.vala:3585 +#: Core/Main.vala:3665 Core/Main.vala:3760 Core/Main.vala:3793 msgid "btrfs returned an error" msgstr "" -#: Core/Main.vala:1210 Core/Snapshot.vala:417 +#: Core/Main.vala:1209 Core/Snapshot.vala:417 msgid "complete" msgstr "" @@ -2447,15 +2471,15 @@ msgid "marked for deletion" msgstr "" -#: Core/Main.vala:1102 Core/Main.vala:1254 Core/Main.vala:1256 +#: Core/Main.vala:1101 Core/Main.vala:1253 Core/Main.vala:1255 msgid "mounted at path" msgstr "" -#: Core/Main.vala:1210 Core/Snapshot.vala:418 +#: Core/Main.vala:1209 Core/Snapshot.vala:418 msgid "remaining" msgstr "" -#: Core/Main.vala:1221 +#: Core/Main.vala:1220 msgid "rsync returned an error" msgstr ""