var systemEvents = Application("System Events"); var workspacesDir = "/Users/stef/dbox/src/safari-workspace/workspaces" 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() delay(1) return newWindowID(-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 setWorkspaceProperties(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) // add tab // selectedWorkspaceProps["Safari"][0]["tabs"].push("http://example.com") } function saveWorkspaceWindows() { var app = Application("Safari") // var windows = [] for(var i = 0; i < app.windows().length; i++){ for (var j = 0; j < selectedWorkspaceProps["Safari"].length; j++) { var workspaceWinID = selectedWorkspaceProps["Safari"][j].id console.log(workspaceWinID, app.windows.at(i).id()) // if(workspaceWinID == app.windows.at(i).id()){ // } } // windows.push(app.windows.at(i).id()) } } // var selectedWorkspaceName = chooseWorkspaceFromList() var selectedWorkspaceName = "needle" var selectedWorkspaceProps = getWorkspaceProperties(selectedWorkspaceName) newWorkspaceWindow(selectedWorkspaceProps) setWorkspaceProperties(selectedWorkspaceName, selectedWorkspaceProps) saveWorkspaceWindows() // console.log(JSON.stringify(selectedWorkspaceProps, null, 2)) // console.log()