From 280479c0c64a35b0129d567da5249cabf462c246 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Wed, 1 May 2024 14:07:35 +0100 Subject: [PATCH] chore: Clarify usage of window fields in IPC.js Resolves these eslint errors: /puter/src/IPC.js 53:69 error 'appCallbackFunctions' is not defined no-undef 55:9 error 'appCallbackFunctions' is not defined no-undef 57:16 error 'appCallbackFunctions' is not defined no-undef 81:33 error 'window_for_app_instance' is not defined no-undef 84:27 error 'iframe_for_app_instance' is not defined no-undef 105:48 error Empty block statement no-empty 180:18 error 'api_origin' is not defined no-undef 190:44 error 'auth_token' is not defined no-undef 194:21 error 'logout' is not defined no-undef 207:18 error 'api_origin' is not defined no-undef 216:44 error 'auth_token' is not defined no-undef 220:21 error 'logout' is not defined no-undef 239:18 error 'api_origin' is not defined no-undef 248:44 error 'auth_token' is not defined no-undef 252:21 error 'logout' is not defined no-undef 268:13 error 'is_auth' is not defined no-undef 309:13 error 'is_auth' is not defined no-undef 348:27 error 'window_for_app_instance' is not defined no-undef 360:27 error 'window_for_app_instance' is not defined no-undef 576:35 error 'uuidv4' is not defined no-undef 582:9 error 'launch_app' is not defined no-undef 597:37 error 'appdata_path' is not defined no-undef 629:12 error 'appdata_signatures' is not defined no-undef 633:23 error 'appdata_signatures' is not defined no-undef 638:30 error 'appdata_path' is not defined no-undef 647:25 error 'appdata_signatures' is not defined no-undef 664:29 error 'appdata_signatures' is not defined no-undef 682:13 error 'is_auth' is not defined no-undef 717:13 error 'is_auth' is not defined no-undef 745:13 error 'is_auth' is not defined no-undef 773:13 error 'is_auth' is not defined no-undef 783:22 error 'api_origin' is not defined no-undef 793:48 error 'auth_token' is not defined no-undef 797:25 error 'logout' is not defined no-undef 825:13 error 'is_auth' is not defined no-undef 857:36 error 'operation_id' is not defined no-undef 872:41 error 'auth_token' is not defined no-undef 873:41 error 'api_origin' is not defined no-undef 939:45 error 'item_icon' is not defined no-undef 951:33 error 'sort_items' is not defined no-undef 954:29 error 'show_save_account_notice_if_needed' is not defined no-undef 998:38 error 'busy_indicator_hide_delay' is not defined no-undef 1004:33 error 'busy_indicator_hide_delay' is not defined no-undef 1018:37 error 'pictures_path' is not defined no-undef 1020:37 error 'desktop_path' is not defined no-undef 1022:37 error 'documents_path' is not defined no-undef 1024:37 error 'videos_path' is not defined no-undef 1026:37 error 'audio_path' is not defined no-undef 1028:37 error 'appdata_path' is not defined no-undef 1032:13 error 'is_auth' is not defined no-undef 1044:28 error 'operation_id' is not defined no-undef 1059:33 error 'auth_token' is not defined no-undef 1060:33 error 'api_origin' is not defined no-undef 1145:31 error 'iframe_for_app_instance' is not defined no-undef 1163:31 error 'window_for_app_instance' is not defined no-undef 1178:36 error 'get_apps' is not defined no-undef 1199:11 error 'window_for_app_instance' is not defined no-undef --- src/IPC.js | 113 +++++++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/src/IPC.js b/src/IPC.js index ed96c175..a566ed51 100644 --- a/src/IPC.js +++ b/src/IPC.js @@ -50,11 +50,11 @@ window.addEventListener('message', async (event) => { // -------------------------------------------------------- // A response to a GUI message received from the app. // -------------------------------------------------------- - if (typeof event.data.original_msg_id !== "undefined" && typeof appCallbackFunctions[event.data.original_msg_id] !== "undefined") { + if (typeof event.data.original_msg_id !== "undefined" && typeof window.appCallbackFunctions[event.data.original_msg_id] !== "undefined") { // Execute callback - appCallbackFunctions[event.data.original_msg_id](event.data); + window.appCallbackFunctions[event.data.original_msg_id](event.data); // Remove this callback function since it won't be needed again - delete appCallbackFunctions[event.data.original_msg_id]; + delete window.appCallbackFunctions[event.data.original_msg_id]; // Done return; @@ -78,10 +78,10 @@ window.addEventListener('message', async (event) => { return; } - const $el_parent_window = $(window_for_app_instance(event.data.appInstanceID)); + const $el_parent_window = $(window.window_for_app_instance(event.data.appInstanceID)); const parent_window_id = $el_parent_window.attr('data-id'); const $el_parent_disable_mask = $el_parent_window.find('.window-disable-mask'); - const target_iframe = iframe_for_app_instance(event.data.appInstanceID); + const target_iframe = window.iframe_for_app_instance(event.data.appInstanceID); const msg_id = event.data.uuid; const app_name = $(target_iframe).attr('data-app'); const app_uuid = $el_parent_window.attr('data-app_uuid'); @@ -103,6 +103,7 @@ window.addEventListener('message', async (event) => { // windowFocused //------------------------------------------------- else if(event.data.msg === 'windowFocused'){ + // TODO: Respond to this } //-------------------------------------------------------- // ALERT @@ -177,7 +178,7 @@ window.addEventListener('message', async (event) => { else if(event.data.msg === 'setItem' && event.data.key && event.data.value){ // todo: validate key and value to avoid unnecessary api calls return await $.ajax({ - url: api_origin + "/setItem", + url: window.api_origin + "/setItem", type: 'POST', data: JSON.stringify({ app: app_uuid, @@ -187,11 +188,11 @@ window.addEventListener('message', async (event) => { async: true, contentType: "application/json", headers: { - "Authorization": "Bearer "+auth_token + "Authorization": "Bearer "+window.auth_token }, statusCode: { 401: function () { - logout(); + window.logout(); }, }, success: function (fsentry){ @@ -204,7 +205,7 @@ window.addEventListener('message', async (event) => { else if(event.data.msg === 'getItem' && event.data.key){ // todo: validate key to avoid unnecessary api calls $.ajax({ - url: api_origin + "/getItem", + url: window.api_origin + "/getItem", type: 'POST', data: JSON.stringify({ key: event.data.key, @@ -213,11 +214,11 @@ window.addEventListener('message', async (event) => { async: true, contentType: "application/json", headers: { - "Authorization": "Bearer "+auth_token + "Authorization": "Bearer "+window.auth_token }, statusCode: { 401: function () { - logout(); + window.logout(); }, }, success: function (result){ @@ -236,7 +237,7 @@ window.addEventListener('message', async (event) => { else if(event.data.msg === 'removeItem' && event.data.key){ // todo: validate key to avoid unnecessary api calls $.ajax({ - url: api_origin + "/removeItem", + url: window.api_origin + "/removeItem", type: 'POST', data: JSON.stringify({ key: event.data.key, @@ -245,11 +246,11 @@ window.addEventListener('message', async (event) => { async: true, contentType: "application/json", headers: { - "Authorization": "Bearer "+auth_token + "Authorization": "Bearer "+window.auth_token }, statusCode: { 401: function () { - logout(); + window.logout(); }, }, success: function (result){ @@ -265,7 +266,7 @@ window.addEventListener('message', async (event) => { //-------------------------------------------------------- else if(event.data.msg === 'showOpenFilePicker'){ // Auth - if(!is_auth() && !(await UIWindowSignup({referrer: app_name}))) + if(!window.is_auth() && !(await UIWindowSignup({referrer: app_name}))) return; // Disable parent window @@ -306,7 +307,7 @@ window.addEventListener('message', async (event) => { //-------------------------------------------------------- else if(event.data.msg === 'showDirectoryPicker'){ // Auth - if(!is_auth() && !(await UIWindowSignup({referrer: app_name}))) + if(!window.is_auth() && !(await UIWindowSignup({referrer: app_name}))) return; // Disable parent window @@ -345,7 +346,7 @@ window.addEventListener('message', async (event) => { // setWindowTitle //-------------------------------------------------------- else if(event.data.msg === 'setWindowTitle' && event.data.new_title !== undefined){ - const el_window = window_for_app_instance(event.data.appInstanceID); + const el_window = window.window_for_app_instance(event.data.appInstanceID); // set window title $(el_window).find(`.window-head-title`).html(html_encode(event.data.new_title)); // send confirmation to requester window @@ -357,7 +358,7 @@ window.addEventListener('message', async (event) => { // setMenubar //-------------------------------------------------------- else if(event.data.msg === 'setMenubar') { - const el_window = window_for_app_instance(event.data.appInstanceID); + const el_window = window.window_for_app_instance(event.data.appInstanceID); console.error(`EXPERIMENTAL: setMenubar is a work-in-progress`); const hydrator = puter.util.rpc.getHydrator({ @@ -573,13 +574,13 @@ window.addEventListener('message', async (event) => { else if(event.data.msg === 'launchApp'){ // TODO: Determine if the app is allowed to launch child apps? We may want to limit this to prevent abuse. // remember app for launch callback later - const child_instance_id = uuidv4(); + const child_instance_id = window.uuidv4(); window.child_launch_callbacks[child_instance_id] = { parent_instance_id: event.data.appInstanceID, launch_msg_id: msg_id, }; // launch child app - launch_app({ + window.launch_app({ name: event.data.app_name ?? app_name, args: event.data.args ?? {}, parent_instance_id: event.data.appInstanceID, @@ -594,7 +595,7 @@ window.addEventListener('message', async (event) => { event.data.path = path.resolve(event.data.path); // join with appdata dir - const file_path = path.join(appdata_path, app_uuid, event.data.path); + const file_path = path.join(window.appdata_path, app_uuid, event.data.path); puter.fs.sign(app_uuid, { path: file_path, @@ -626,16 +627,16 @@ window.addEventListener('message', async (event) => { //-------------------------------------------------------- // todo appdata should be provided from the /open_item api call else if(event.data.msg === 'getAppData'){ - if(appdata_signatures[app_uuid]){ + if(window.appdata_signatures[app_uuid]){ target_iframe.contentWindow.postMessage({ msg: "getAppDataSucceeded", original_msg_id: msg_id, - item: appdata_signatures[app_uuid], + item: window.appdata_signatures[app_uuid], }, '*'); } // make app directory if it doesn't exist puter.fs.mkdir({ - path: path.join( appdata_path, app_uuid), + path: path.join( window.appdata_path, app_uuid), rename: false, overwrite: false, success: function(dir){ @@ -644,7 +645,7 @@ window.addEventListener('message', async (event) => { action: 'write', success: function(signature){ signature = signature.items; - appdata_signatures[app_uuid] = signature; + window.appdata_signatures[app_uuid] = signature; // send confirmation to requester window target_iframe.contentWindow.postMessage({ msg: "getAppDataSucceeded", @@ -661,7 +662,7 @@ window.addEventListener('message', async (event) => { action: 'write', success: function(signature){ signature = signature.items; - appdata_signatures[app_uuid] = signature; + window.appdata_signatures[app_uuid] = signature; // send confirmation to requester window target_iframe.contentWindow.postMessage({ msg: "getAppDataSucceeded", @@ -679,7 +680,7 @@ window.addEventListener('message', async (event) => { //-------------------------------------------------------- else if(event.data.msg === 'requestPermission'){ // auth - if(!is_auth() && !(await UIWindowSignup({referrer: app_name}))) + if(!window.is_auth() && !(await UIWindowSignup({referrer: app_name}))) return; // options must be an object @@ -714,7 +715,7 @@ window.addEventListener('message', async (event) => { //-------------------------------------------------------- else if(event.data.msg === 'showFontPicker'){ // auth - if(!is_auth() && !(await UIWindowSignup({referrer: app_name}))) + if(!window.is_auth() && !(await UIWindowSignup({referrer: app_name}))) return; // set options @@ -742,7 +743,7 @@ window.addEventListener('message', async (event) => { //-------------------------------------------------------- else if(event.data.msg === 'showColorPicker'){ // Auth - if(!is_auth() && !(await UIWindowSignup({referrer: app_name}))) + if(!window.is_auth() && !(await UIWindowSignup({referrer: app_name}))) return; // set options @@ -770,7 +771,7 @@ window.addEventListener('message', async (event) => { //-------------------------------------------------------- else if(event.data.msg === 'setWallpaper'){ // Auth - if(!is_auth() && !(await UIWindowSignup({referrer: app_name}))) + if(!window.is_auth() && !(await UIWindowSignup({referrer: app_name}))) return; // No options? @@ -780,7 +781,7 @@ window.addEventListener('message', async (event) => { // /set-desktop-bg try{ await $.ajax({ - url: api_origin + "/set-desktop-bg", + url: window.api_origin + "/set-desktop-bg", type: 'POST', data: JSON.stringify({ url: event.data.readURL, @@ -790,11 +791,11 @@ window.addEventListener('message', async (event) => { async: true, contentType: "application/json", headers: { - "Authorization": "Bearer "+auth_token + "Authorization": "Bearer "+window.auth_token }, statusCode: { 401: function () { - logout(); + window.logout(); }, }, }); @@ -822,7 +823,7 @@ window.addEventListener('message', async (event) => { //-------------------------------------------------------- else if(event.data.msg === 'showSaveFilePicker'){ //auth - if(!is_auth() && !(await UIWindowSignup({referrer: app_name}))) + if(!window.is_auth() && !(await UIWindowSignup({referrer: app_name}))) return; //disable parent window @@ -854,7 +855,7 @@ window.addEventListener('message', async (event) => { // ------------------------------------- if(event.data.url){ // download progress tracker - let dl_op_id = operation_id++; + let dl_op_id = window.operation_id++; // upload progress tracker defaults window.progress_tracker[dl_op_id] = []; @@ -869,8 +870,8 @@ window.addEventListener('message', async (event) => { url: event.data.url, name: path.basename(target_path), dest_path: path.dirname(target_path), - auth_token: auth_token, - api_origin: api_origin, + auth_token: window.auth_token, + api_origin: window.api_origin, dedupe_name: false, overwrite: false, operation_id: dl_op_id, @@ -936,7 +937,7 @@ window.addEventListener('message', async (event) => { immutable: res.immutable, associated_app_name: res.associated_app?.name, path: target_path, - icon: await item_icon(res), + icon: await window.item_icon(res), name: path.basename(target_path), uid: res.uid, size: res.size, @@ -948,10 +949,10 @@ window.addEventListener('message', async (event) => { }); // sort each window $(`.item-container[data-path="${html_encode(path.dirname(target_path))}" i]`).each(function(){ - sort_items(this, $(this).attr('data-sort_by'), $(this).attr('data-sort_order')) + window.sort_items(this, $(this).attr('data-sort_by'), $(this).attr('data-sort_order')) }); $(el_filedialog_window).close(); - show_save_account_notice_if_needed(); + window.show_save_account_notice_if_needed(); } catch(err){ // item with same name exists @@ -995,13 +996,13 @@ window.addEventListener('message', async (event) => { // done let busy_duration = (Date.now() - busy_init_ts); - if( busy_duration >= busy_indicator_hide_delay){ + if( busy_duration >= window.busy_indicator_hide_delay){ $(el_filedialog_window).close(); }else{ setTimeout(() => { // close this dialog $(el_filedialog_window).close(); - }, Math.abs(busy_indicator_hide_delay - busy_duration)); + }, Math.abs(window.busy_indicator_hide_delay - busy_duration)); } } }); @@ -1015,21 +1016,21 @@ window.addEventListener('message', async (event) => { let create_missing_ancestors = false; if(event.data.msg === 'saveToPictures') - target_path = path.join(pictures_path, event.data.filename); + target_path = path.join(window.pictures_path, event.data.filename); else if(event.data.msg === 'saveToDesktop') - target_path = path.join(desktop_path, event.data.filename); + target_path = path.join(window.desktop_path, event.data.filename); else if(event.data.msg === 'saveToDocuments') - target_path = path.join(documents_path, event.data.filename); + target_path = path.join(window.documents_path, event.data.filename); else if(event.data.msg === 'saveToVideos') - target_path = path.join(videos_path, event.data.filename); + target_path = path.join(window.videos_path, event.data.filename); else if(event.data.msg === 'saveToAudio') - target_path = path.join(audio_path, event.data.filename); + target_path = path.join(window.audio_path, event.data.filename); else if(event.data.msg === 'saveToAppData'){ - target_path = path.join(appdata_path, app_uuid, event.data.filename); + target_path = path.join(window.appdata_path, app_uuid, event.data.filename); create_missing_ancestors = true; } //auth - if(!is_auth() && !(await UIWindowSignup({referrer: app_name}))) + if(!window.is_auth() && !(await UIWindowSignup({referrer: app_name}))) return; let item_with_same_name_already_exists = true; @@ -1041,7 +1042,7 @@ window.addEventListener('message', async (event) => { if(event.data.url){ let overwrite = false; // download progress tracker - let dl_op_id = operation_id++; + let dl_op_id = window.operation_id++; // upload progress tracker defaults window.progress_tracker[dl_op_id] = []; @@ -1056,8 +1057,8 @@ window.addEventListener('message', async (event) => { url: event.data.url, name: path.basename(target_path), dest_path: path.dirname(target_path), - auth_token: auth_token, - api_origin: api_origin, + auth_token: window.auth_token, + api_origin: window.api_origin, dedupe_name: true, overwrite: false, operation_id: dl_op_id, @@ -1142,7 +1143,7 @@ window.addEventListener('message', async (event) => { // TODO: Track message traffic between apps // pass on the message - const target_iframe = iframe_for_app_instance(targetAppInstanceID); + const target_iframe = window.iframe_for_app_instance(targetAppInstanceID); if (!target_iframe) { console.error('Failed to send message to non-existent app', event); return; @@ -1160,7 +1161,7 @@ window.addEventListener('message', async (event) => { else if (event.data.msg === 'closeApp') { const { appInstanceID, targetAppInstanceID } = event.data; - const target_window = window_for_app_instance(targetAppInstanceID); + const target_window = window.window_for_app_instance(targetAppInstanceID); if (!target_window) { console.warn(`Failed to close non-existent app ${targetAppInstanceID}`); return; @@ -1175,7 +1176,7 @@ window.addEventListener('message', async (event) => { } // God-mode apps can close anything - const app_info = await get_apps(app_name); + const app_info = await window.get_apps(app_name); if (app_info.godmode === 1) { console.log(`⚠️ Allowing GODMODE app ${appInstanceID} to close app ${targetAppInstanceID}`); return true; @@ -1196,6 +1197,6 @@ window.addEventListener('message', async (event) => { // exit //-------------------------------------------------------- else if(event.data.msg === 'exit'){ - $(window_for_app_instance(event.data.appInstanceID)).close({bypass_iframe_messaging: true}); + $(window.window_for_app_instance(event.data.appInstanceID)).close({bypass_iframe_messaging: true}); } }); \ No newline at end of file