TreeTabsMigration/scripts/backup.js

266 lines
9.5 KiB
JavaScript

// Copyright (c) 2017 kroppy. All rights reserved.
// Use of this source code is governed by a Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0) license
// that can be found at https://creativecommons.org/licenses/by-nc-nd/4.0/
function ExportGroup(filename) {
let GroupToSave = [0,[]];
GroupToSave[0] = bggroups[active_group];
let lastId = parseInt($("#"+active_group+" .tab").last()[0].id);
$("#"+active_group+" .tab").each(function() {
chrome.tabs.get(parseInt(this.id), function(tab) {
GroupToSave[1].push([tab.id, ($("#"+tab.id).parent(".group")[0] ? $("#"+tab.id).parent()[0].id : $("#"+tab.id).parent().parent(".tab")[0].id), $("#"+tab.id).index(), ($("#"+tab.id).is(".n") ? "n" : ($("#"+tab.id).is(".c") ? "c" : "o")), tab.url]);
if (tab.id == lastId) {
SaveFile(filename, GroupToSave);
}
});
})
}
function ImportGroup() {
let file = document.getElementById("file_import_group");
let fr = new FileReader();
if (file.files[0] == undefined) return;
fr.readAsText(file.files[0]);
fr.onload = function() {
let data = fr.result;
file.remove();
let LoadedGroup = JSON.parse(data);
let RefsTabs = {};
let newTabs = {};
let lastId = LoadedGroup[1][LoadedGroup[1].length-1][0];
let NewGroupId = AddNewGroup({name: LoadedGroup[0].name, font: LoadedGroup[0].font});
SetActiveGroup(NewGroupId, false, false);
LoadedGroup[1].forEach(function(LTab){
chrome.tabs.create({url: LTab[4]}, function(tab) {
RefsTabs[LTab[0]] = tab.id;
newTabs[tab.id] = {i: LTab[2]};
if (LTab[0] == lastId) {
setTimeout(function() {
LoadedGroup[1].forEach(function(LTab){
$("#"+NewGroupId).append($("#"+LTab[0]));
});
}, 2000);
setTimeout(function() {
LoadedGroup[1].forEach(function(LTab){
if ($("#"+RefsTabs[LTab[1]])[0] && $("#"+LTab[0])[0]) {
$("#ch"+RefsTabs[LTab[1]]).append($("#"+LTab[0]));
}
});
LoadedGroup[1].forEach(function(LTab){
$("#"+LTab[0]).addClass(LTab[3]);
});
chrome.tabs.query({currentWindow: true}, function(tabs) {
RearrangeTreeTabs(tabs, newTabs, true);
RefreshExpandStates();
RefreshGUI();
});
}, 4000);
}
LTab[0] = tab.id;
});
});
}
}
function ExportTabs(filename) {
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
chrome.runtime.sendMessage({command: "get_browser_tabs"}, function(response) {
let tabs = Object.assign({}, response);
chrome.runtime.sendMessage({command: "get_windows"}, function(response) {
let windows = Object.assign({}, response);
let WindowsToSave = [];
w.forEach(function(CWin){
if (windows[CWin.id] != undefined && windows[CWin.id].group_bar != undefined && windows[CWin.id].active_shelf != undefined && windows[CWin.id].active_group != undefined && windows[CWin.id].groups != undefined && windows[CWin.id].folders != undefined) {
WindowsToSave.push([[], CWin.id, CWin.tabs[0].url, CWin.tabs[CWin.tabs.length-1].url, windows[CWin.id].group_bar, windows[CWin.id].group_bar, windows[CWin.id].active_shelf, windows[CWin.id].active_group, windows[CWin.id].groups, windows[CWin.id].folders, 0]);
}
CWin.tabs.forEach(function(CTab){
if (tabs[CTab.id] != undefined && tabs[CTab.id].parent != undefined && tabs[CTab.id].index != undefined && tabs[CTab.id].expand != undefined) {
WindowsToSave[WindowsToSave.length-1][0].push([CTab.id, CTab.url, tabs[CTab.id].parent, tabs[CTab.id].index, tabs[CTab.id].expand]);
}
});
});
SaveFile(filename, WindowsToSave);
});
});
});
}
function ImportTabs() {
let file = document.getElementById("file_import_backup");
let fr = new FileReader();
if (file.files[0] == undefined) return;
fr.readAsText(file.files[file.files.length-1]);
fr.onload = function() {
let data = fr.result;
file.remove();
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
//make global variables
LoadedWindows = JSON.parse(data);
RefsTabs = {};
TotalTabsCount = 0;
LoadedWindows.forEach(function(LWin){
TotalTabsCount += LWin[0].length;
});
LoadedWindows.forEach(function(LWin){
chrome.windows.create({}, function(new_window) {
LWin[1] = new_window.id;
LWin[2] = "";
LWin[3] = "";
setTimeout(function() {
chrome.runtime.sendMessage({command: "save_groups", groups: LWin[8], windowId: new_window.id});
}, 1000);
LWin[0].forEach(function(LTab){
chrome.tabs.create({url: LTab[1], pinned: (LTab[2] == "pin_list" ? true : false), windowId: new_window.id}, function(tab) {
RefsTabs[LTab[0]] = tab.id;
LTab[0] = tab.id;
LTab[1] = "";
TotalTabsCount--;
if (TotalTabsCount < 2) {
setTimeout(function() {
chrome.runtime.sendMessage({command: "get_windows"}, function(response) {
let windows = Object.assign({}, response);
LoadedWindows.forEach(function(LWin){
LWin[0].forEach(function(LTab){
schedule_update_data -= 2;
chrome.runtime.sendMessage({command: "update_tab", tabId: LTab[0], tab: {parent: (RefsTabs[LTab[2]] ? RefsTabs[LTab[2]] : LTab[2]), index: LTab[3], expand: LTab[4]}});
});
});
setTimeout(function() {
chrome.runtime.sendMessage({command: "reload_sidebar"});
location.reload();
}, 3000);
});
chrome.tabs.remove(new_window.tabs[0].id, null);
}, 1000);
}
});
});
});
});
});
}
}
function ImportMergeTabs() {
let file = document.getElementById("file_import_merge_backup");
let fr = new FileReader();
if (file.files[0] == undefined) return;
fr.readAsText(file.files[0]);
fr.onload = function() {
let data = fr.result;
file.remove();
//make global variables
LoadedWindows = JSON.parse(data);
RefsTabs = {};
RefsWins = {};
TotalTabsCount = 0;
LoadedWindows.forEach(function(LWin){
TotalTabsCount += LWin[0].length;
});
chrome.windows.getAll({windowTypes: ['normal'], populate: true}, function(w) {
w.forEach(function(CWin){ // loop Current Windows (CWin)
LoadedWindows.forEach(function(LWin){ // loop Loaded Windows (LWin)
CWin.tabs.forEach(function(CTab){ // loop Tabs of each Current Window
schedule_update_data -= 2;
for (let LWinTabInd = 0; LWinTabInd < LWin[0].length; LWinTabInd++) { // loop Tabs of each Loaded Window
if (CTab.url == LWin[0][LWinTabInd][1]) {
// TabsMatched++;
RefsTabs[LWin[0][LWinTabInd][0]] = CTab.id;
LWin[0][LWinTabInd][0] = CTab.id;
LWin[0][LWinTabInd][1] = "";
LWin[10]++;
TotalTabsCount--;
break;
}
}
});
if (CWin.tabs[0].url == LWin[2] && CWin.tabs[CWin.tabs.length-1].url == LWin[3] && LWin[10] > LWin[0].length*0.5) {
RefsWins[LWin[1]] = CWin.id;
LWin[1] = CWin.id;
LWin[2] = "";
LWin[3] = "";
}
});
});
LoadedWindows.forEach(function(LWin){
if (LWin[2] != "" && LWin[3] != "") { // missing window, lets make one
chrome.windows.create({}, function(new_window) {
RefsWins[LWin[1]] = new_window.id;
LWin[1] = new_window.id;
LWin[2] = "";
LWin[3] = "";
LWin[0].forEach(function(LTab){
if (LTab[1] != "") { // missing tab of missing window, lets make one
chrome.tabs.create({url: LTab[1], windowId: new_window.id}, function(tab) {
// chrome.tabs.executeScript(tab.id, {code: "setTimeout(function() { window.stop(); }, 5000);", runAt: "document_start"}, function(){});
RefsTabs[LTab[0]] = tab.id;
LTab[0] = tab.id;
LTab[1] = "";
TotalTabsCount--;
});
}
});
chrome.tabs.remove(new_window.tabs[0].id, null);
});
} else {
LWin[0].forEach(function(LTab){
if (LTab[1] != "") { // missing tab, lets make one
chrome.tabs.create({url: LTab[1], windowId: LWin[1]}, function(tab) {
RefsTabs[LTab[0]] = tab.id;
LTab[0] = tab.id;
LTab[1] = "";
TotalTabsCount--;
if (TotalTabsCount < 2) {
setTimeout(function() {
chrome.runtime.sendMessage({command: "get_windows"}, function(response) {
let windows = Object.assign({}, response);
LoadedWindows.forEach(function(LWin){
for (let lGroup in LWin[8]) {
if (windows[LWin[1]] && windows[LWin[1]].groups[lGroup] == undefined) {
windows[LWin[1]].groups[lGroup] = Object.assign({}, LWin[8][lGroup]);
chrome.runtime.sendMessage({command: "save_groups", groups: windows[LWin[1]].groups, windowId: LWin[1]});
}
}
LWin[0].forEach(function(LTab){
schedule_update_data -= 2;
chrome.runtime.sendMessage({command: "update_tab", tabId: LTab[0], tab: {parent: (RefsTabs[LTab[2]] ? RefsTabs[LTab[2]] : LTab[2]), index: LTab[3], expand: LTab[4]}});
});
});
setTimeout(function() {
chrome.runtime.sendMessage({command: "reload_sidebar"});
location.reload();
}, 1000);
});
}, 1000);
}
});
}
});
}
});
});
}
}