-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.js
More file actions
1 lines (1 loc) · 5.65 KB
/
Copy pathbackground.js
File metadata and controls
1 lines (1 loc) · 5.65 KB
1
import{l as e}from"./chunks/extension-settings-fQcMQRZb.js";new class{constructor(){this.init()}init(){chrome.runtime.onInstalled.addListener(e=>{this.createContextMenus(),this.handleInstallation(e)}),chrome.runtime.onStartup.addListener(()=>{this.createContextMenus()}),chrome.contextMenus.onClicked.addListener((e,t)=>{this.handleContextMenuClick(e,t)}),chrome.runtime.onMessage.addListener((e,t,o)=>(this.handleMessage(e,o),!0)),chrome.commands.onCommand.addListener(e=>{this.handleCommand(e)}),chrome.action.onClicked.addListener(e=>{this.openExtension(e)})}handleInstallation(e){"install"===e.reason&&(chrome.notifications.create({type:"basic",iconUrl:"icons/icon-48.png",title:"Welcome to SolanaM Image Studio!",message:"Right-click any image to start editing. Access settings for advanced features."}),setTimeout(()=>{chrome.runtime.openOptionsPage()},2e3))}createContextMenus(){chrome.contextMenus.removeAll(()=>{chrome.contextMenus.create({id:"solanam-main",title:"SolanaM Image Studio",contexts:["image"],documentUrlPatterns:["http://*/*","https://*/*"]}),chrome.contextMenus.create({id:"solanam-import",parentId:"solanam-main",title:"Import to Studio",contexts:["image"]}),chrome.contextMenus.create({id:"solanam-export",parentId:"solanam-main",title:"📤 Quick Save As",contexts:["image"]});[{id:"export-jpeg",title:"📸 Export as JPEG"},{id:"export-png",title:"🖼️ Export as PNG"},{id:"export-webp",title:"🌐 Export as WebP"}].forEach(e=>{chrome.contextMenus.create({id:e.id,parentId:"solanam-export",title:e.title,contexts:["image"]})}),chrome.contextMenus.create({id:"separator-1",parentId:"solanam-main",type:"separator",contexts:["image"]}),chrome.contextMenus.create({id:"solanam-settings",parentId:"solanam-main",title:"⚙️ Extension Settings",contexts:["image"]})})}async handleContextMenuClick(e,t){try{switch(e.menuItemId){case"solanam-import":await this.importImage(e,t);break;case"solanam-settings":chrome.runtime.openOptionsPage();break;default:if("string"==typeof e.menuItemId&&e.menuItemId.startsWith("export-")){const o=e.menuItemId.replace("export-","");await this.exportImage(e,t,o)}}}catch(o){console.error("Context menu error:",o),this.showErrorNotification("An error occurred. Please try again.")}}isRestrictedTab(e){return!e?.url||!e.url.startsWith("http://")&&!e.url.startsWith("https://")}isConnectionError(e){const t=e instanceof Error?e.message:String(e);return t.includes("Receiving end does not exist")||t.includes("Could not establish connection")}async sendMessageToTab(e,t,o){const a=void 0!==o&&0!==o?{frameId:o}:void 0;try{return await chrome.tabs.sendMessage(e,t,a)}catch(n){if(!this.isConnectionError(n))throw n;const i={tabId:e};return void 0!==o&&0!==o&&(i.frameIds=[o]),await chrome.scripting.executeScript({target:i,files:["content.js"]}),await chrome.tabs.sendMessage(e,t,a)}}async importImage(t,o){if(o?.id)if(this.isRestrictedTab(o))this.showErrorNotification("Import is not available on this page. Open an http(s) website.");else try{const a=await this.sendMessageToTab(o.id,{action:"processImageFromContext",imageUrl:t.srcUrl},t.frameId);if(a?.success){await chrome.storage.local.set({contextImage:a.imageData,contextImageTimestamp:Date.now(),contextImageAction:null});const t=await e();t.showNotifications&&chrome.notifications.create({type:"basic",iconUrl:"icons/icon-48.png",title:"SolanaM Image Studio",message:t.autoImport?"Image imported! Opening the editor...":"Image imported successfully! Click the extension to start editing."}),t.autoImport&&this.openEditor()}}catch(a){console.error("Import error:",a),this.showErrorNotification("Failed to import image. Please try again.")}}async exportImage(e,t,o){if(t?.id)if(this.isRestrictedTab(t))this.showErrorNotification("Export is not available on this page. Open an http(s) website.");else try{const a=await this.sendMessageToTab(t.id,{action:"exportImageDirect",imageUrl:e.srcUrl,format:o},e.frameId);a?.success&&chrome.notifications.create({type:"basic",iconUrl:"icons/icon-48.png",title:"Export Successful",message:`Image exported as ${o.toUpperCase()} successfully!`})}catch(a){console.error("Export error:",a),this.showErrorNotification("Export failed. Please try again.")}}showErrorNotification(e){chrome.notifications.create({type:"basic",iconUrl:"icons/icon-48.png",title:"SolanaM Image Studio",message:e})}async handleCommand(e){if("open-extension"===e){const e=await chrome.tabs.query({active:!0,currentWindow:!0});return void(e[0]&&this.openExtension(e[0]))}"open-editor"===e&&this.openEditor()}openExtension(e){chrome.action.openPopup()}openEditor(){chrome.tabs.create({url:chrome.runtime.getURL("editor.html")})}handleMessage(e,t){if("GET_PENDING_IMAGE"!==e.type)switch(e.action){case"getContextImage":this.getContextImage(t);break;case"openSettings":chrome.runtime.openOptionsPage(),t({success:!0});break;default:t({success:!1,error:"Unknown action"})}else this.getPendingImage(t)}async getPendingImage(e){try{const t=await chrome.storage.local.get(["contextImage","contextImageTimestamp","contextImageAction"]),o=Date.now(),a=t.contextImageTimestamp||0;if(!t.contextImage||o-a>=3e5)return void e({image:null,action:null});const n=t.contextImage;e({image:n.dataUrl||n.src||null,action:t.contextImageAction??null}),await chrome.storage.local.remove(["contextImage","contextImageTimestamp","contextImageAction"])}catch(t){e({image:null,action:null,error:t instanceof Error?t.message:"Unknown error"})}}async getContextImage(e){try{const t=await chrome.storage.local.get(["contextImage","contextImageTimestamp"]),o=Date.now(),a=t.contextImageTimestamp||0;t.contextImage&&o-a<3e5?e({success:!0,imageData:t.contextImage}):e({success:!1,error:"No recent context image"})}catch(t){e({success:!1,error:t instanceof Error?t.message:"Unknown error"})}}};