179 lines
4.1 KiB
JavaScript
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()
|
|
|