safari-workspaces/trash/save.js

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