var systemEvents = Application("System Events"); var workspace = Library("workspace") // return var workspacesDir = "/Users/stef/dbox/src/safari-workspace/workspaces" var app = Application("Safari") // var selectedWorkspaceName = "needle" // var selectedWorkspaceName = chooseWorkspaceFromList() // var selectedWorkspaceProps = getWorkspaceProperties(selectedWorkspaceName) // console.log(JSON.stringify(selectedWorkspaceProps, null, 2)) // New Workspace... // New Workspace Window... // Open Workspace... // Close Workspace... // Save Workspace... // workspace.js // system.js // close.js // save.js // open.js // new.js // window.js function getWorkspaceNames() { var items = systemEvents.aliases.byName(path).diskItems; var selectedItems = []; for (var i = 0; i < items.length; i++) { var item = items[i]; if (item.class() != "folder" && item.visible()) { selectedItems.push(item.name().substring(0, item.name().length - 5)); } } return selectedItems; } function chooseWorkspaceFromList() { var app = Application.currentApplication() app.includeStandardAdditions = true var choices = getWorkspaceNames() var choice = app.chooseFromList(choices, { withPrompt: "Workspace wählen:", defaultItems: [0] }) return choice } function allWindows(){ var app = Application("Safari") var windows = [] for(var i = 0; i < app.windows().length; i++){ windows.push(app.windows.at(i).id()) } // return windows return windows.sort(function(a, b){return a-b}) } function newWindow(){ var app = Application("Safari") app.activate() app.Document().make() console.log(app.windows().length) // delay(1) // console.log(app.windows().length) var windows = allWindows() return windows[windows.length - 1] } function newWindowID(index){ var app = Application("Safari") var windows = allWindows() if(index < 0){ index = windows.length + index } return app.windows.byId(windows[index]).id() } function readJson(path) { var data = readFile(path) if(!data[0]){ return [false, "file error"] } try{ var obj = JSON.parse(data[1]) }catch(err){ return [false, "JSON error"] } return [true, obj] } function readFile(file) { var app = Application.currentApplication() app.includeStandardAdditions = true // Convert the file to a string var fileString = file.toString() try{ var p = Path(fileString) }catch(err){ return [false, err] } try{ var str = app.read(p) }catch(err){ return [false, err] } // Read the file and return its contents return [true, str] } function writeFile(pPathStr, pOutputStr) { var nsStr = $.NSString.alloc.initWithUTF8String(pOutputStr) var nsPath = $(pPathStr).stringByStandardizingPath var successBool = nsStr.writeToFileAtomicallyEncodingError(nsPath, false, $.NSUTF8StringEncoding, null) if (!successBool) { throw new Error("function writeFile ERROR:\nWrite to File FAILED for:\n" + pPathStr) } return successBool } function writeJson(path, obj) { try{ var str = JSON.stringify(obj, null, 2) }catch(err){ return [false, "JSON error"]} try{ writeFile(path, str) }catch(err){ return [false, "file error"] } return [true, obj] } function saveWorkspaceProperties(workspaceName, workspaceProps) { var path = workspacesDir + "/" + workspaceName + ".json" var result = writeJson(path, selectedWorkspaceProps) var success = result[0] return success } function getWorkspaceProperties(workspaceName) { var result = readJson(workspacesDir + "/" + workspaceName + ".json") if(result[0]){ return result[1] } return {error: "workspace not found"} } function newWorkspaceWindow(workspaceProps) { var winID = newWindow() var win = {id: winID, tabs: []} workspaceProps["Safari"].push(win) } function tabsInWindowWithId(id){ var urls = [] if(!sys.windowExistWithId("Safari", id)){ return urls } var win = app.windows.byId(id) for (var i = 0; i < win.tabs.length; i++) { var url = win.tabs.at(i).url() var name = win.tabs.at(i).name() urls.push({name:name, url:url}) } return urls } function saveWorkspaceWindows() { var app = Application("Safari") for(var i = 0; i < app.windows().length; i++){ var openWindow = app.windows.at(i) // console.log("Safari window", openWindow.id()) for (var j = 0; j < selectedWorkspaceProps["Safari"].length; j++) { var workspaceWindow = selectedWorkspaceProps["Safari"][j] // console.log("workspaceWindow.id", workspaceWindow.id) if(openWindow.id() == workspaceWindow.id){ workspaceWindow.tabs = [] for (var k = 0; k < app.windows.at(i).tabs.length; k++) { var url = openWindow.tabs.at(k).url() if(url){ workspaceWindow.tabs.push(url) } } } } } saveWorkspaceProperties(selectedWorkspaceName, selectedWorkspaceProps) } function closeWorkspaceWindows() { saveWorkspaceWindows() var app = Application("Safari") for (var i = 0; i < selectedWorkspaceProps["Safari"].length; i++) { var workspaceWindow = selectedWorkspaceProps["Safari"][i] for(var j = 0; j < app.windows().length; j++){ var openWindow = app.windows.at(j) if(openWindow.id() == workspaceWindow.id){ app.close(app.windows.byId(openWindow.id())) } } } // for(var i = 0; i < app.windows().length; i++){ // var openWindow = app.windows.at(i) // console.log("Safari window", openWindow.id()) // for (var j = 0; j < selectedWorkspaceProps["Safari"].length; j++) { // var workspaceWindow = selectedWorkspaceProps["Safari"][j] // console.log("workspaceWindow.id", workspaceWindow.id) // if(openWindow.id() == workspaceWindow.id){ // app.close(app.windows.byId(openWindow.id())) // } // } // } } function addTab(id, url){ var app = Application("Safari") var tab = app.Tab() tab.url = url var win = app.windows.byId(id) win.tabs.push(tab) } function openWorkspaceWindows() { var app = Application("Safari") for (var i = 0; i < selectedWorkspaceProps["Safari"].length; i++) { var workspaceWindow = selectedWorkspaceProps["Safari"][i] var windowExists = false for(var j = 0; j < app.windows().length; j++){ var openWindow = app.windows.at(j) if(openWindow.id() == workspaceWindow.id){ windowExists = true } } if(!windowExists){ var newWindowID = newWindow() // console.log("new window created", newWindowID) workspaceWindow.id = newWindowID for (var k = 0; k < workspaceWindow.tabs.length; k++) { // console.log(workspaceWindow.tabs[k]) addTab(newWindowID, workspaceWindow.tabs[k]) } }else{ console.log("window exists", workspaceWindow.id) } saveWorkspaceProperties(selectedWorkspaceName, selectedWorkspaceProps) } } // console.log(allWindows()) // newWorkspaceWindow(selectedWorkspaceProps) // setWorkspaceProperties(selectedWorkspaceName, selectedWorkspaceProps) // console.log(allWindows()) // openWorkspaceWindows() // closeWorkspaceWindows() // console.log(app.windows().length) // saveWorkspaceWindows() var selectedWorkspaceName = workspace.chooseFromList() // workspace.openWindows(selectedWorkspaceName) workspace.closeWindows(selectedWorkspaceName) // console.log(JSON.stringify(selectedWorkspaceProps, null, 2))