321 lines
7.5 KiB
JavaScript
321 lines
7.5 KiB
JavaScript
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))
|