safari-workspaces/trash/add.js

179 lines
4.1 KiB
JavaScript

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()