Jelajahi Sumber

screen capture fix

cocktailpeanut 1 Minggu lalu
induk
melakukan
95e3df0f80
2 mengubah file dengan 37 tambahan dan 36 penghapusan
  1. 34 33
      full.js
  2. 3 3
      package.json

+ 34 - 33
full.js

@@ -88,6 +88,26 @@ const attach = (event, webContents) => {
     }
   })
 
+  webContents.session.setPermissionCheckHandler((webContents, permission) => {
+    console.log(`[PERMISSION DEBUG] Permission check for: "${permission}"`)
+    return permission === 'media' || permission === 'display-capture' || permission === 'desktopCapture'
+  })
+
+  webContents.session.setDisplayMediaRequestHandler((request, callback) => {
+    console.log('[DISPLAY MEDIA DEBUG] Display media request received')
+    desktopCapturer.getSources({ types: ['screen', 'window'] }).then((sources) => {
+      console.log('[DISPLAY MEDIA DEBUG] Available sources:', sources.length)
+      if (sources.length > 0) {
+        callback({ video: sources[0], audio: 'loopback' })
+      } else {
+        callback({})
+      }
+    }).catch(err => {
+      console.error('[DISPLAY MEDIA DEBUG] Error getting sources:', err)
+      callback({})
+    })
+  })
+
   webContents.on('will-navigate', (event, url) => {
     if (!webContents.opened) {
       // The first time this view is being used, set the "opened" to true, and don't do anything
@@ -555,6 +575,7 @@ if (!gotTheLock) {
   app.commandLine.appendSwitch('enable-features', 'GetDisplayMediaSet,GetDisplayMediaSetAutoSelectAllScreens');
   
   app.whenReady().then(async () => {
+    app.userAgentFallback = "Pinokio"
 
     // PROMPT
     let promptResponse
@@ -636,9 +657,20 @@ document.querySelector("form").addEventListener("submit", (e) => {
       },
       browser: {
         clearCache: async () => {
-          console.log('clear cache', session.defaultSession)
+          console.log('clear cache from all sessions')
+          
+          // Clear default session
           await session.defaultSession.clearStorageData()
-          console.log("cleared")
+          
+          // Clear all custom sessions from active windows
+          const windows = BrowserWindow.getAllWindows()
+          for (const window of windows) {
+            if (window.webContents && window.webContents.session) {
+              await window.webContents.session.clearStorageData()
+            }
+          }
+          
+          console.log("cleared all sessions")
         }
       }
     })
@@ -647,39 +679,8 @@ document.querySelector("form").addEventListener("submit", (e) => {
     theme = pinokiod.theme
     colors = pinokiod.colors
 
-    // Set global permission handler for screen capture
-    session.defaultSession.setPermissionRequestHandler((webContents, permission, callback) => {
-      console.log(`[PERMISSION DEBUG] Global session permission requested: "${permission}"`)
-      if (permission === 'media' || permission === 'display-capture' || permission === 'desktopCapture') {
-        console.log(`[PERMISSION DEBUG] Global session granting permission: "${permission}"`)
-        callback(true)
-      } else {
-        console.log(`[PERMISSION DEBUG] Global session denying permission: "${permission}"`)
-        callback(false)
-      }
-    })
     
-    // Enable desktop capture
-    session.defaultSession.setPermissionCheckHandler((webContents, permission) => {
-      console.log(`[PERMISSION DEBUG] Permission check for: "${permission}"`)
-      return permission === 'media' || permission === 'display-capture' || permission === 'desktopCapture'
-    })
     
-    // Handle getDisplayMedia requests to make web API work
-    session.defaultSession.setDisplayMediaRequestHandler((request, callback) => {
-      console.log('[DISPLAY MEDIA DEBUG] Display media request received')
-      desktopCapturer.getSources({ types: ['screen', 'window'] }).then((sources) => {
-        console.log('[DISPLAY MEDIA DEBUG] Available sources:', sources.length)
-        if (sources.length > 0) {
-          callback({ video: sources[0], audio: 'loopback' })
-        } else {
-          callback({})
-        }
-      }).catch(err => {
-        console.error('[DISPLAY MEDIA DEBUG] Error getting sources:', err)
-        callback({})
-      })
-    })
 
     app.on('web-contents-created', attach)
     app.on('activate', function () {

+ 3 - 3
package.json

@@ -1,14 +1,14 @@
 {
   "name": "Pinokio",
   "private": true,
-  "version": "3.52.0",
+  "version": "3.79.0",
   "homepage": "https://pinokio.co",
   "description": "pinokio",
   "main": "main.js",
   "email": "cocktailpeanuts@proton.me",
   "author": "https://twitter.com/cocktailpeanut",
   "scripts": {
-    "start": "electron .",
+    "start": "./node_modules/.bin/electron .",
     "pack": "./node_modules/.bin/electron-builder --dir",
     "eject": "hdiutil info | grep '/dev/disk' | awk '{print $1}' | xargs -I {} hdiutil detach {}",
     "l": "docker run --rm -ti -v $PWD:/project -w /project -e SNAPCRAFT_BUILD_ENVIRONMENT=host -e SNAP_DESTRUCTIVE_MODE=true electronuserland/builder bash -lc 'rm -rf node_modules && npm install && npm run monkeypatch && ./node_modules/.bin/electron-builder install-app-deps && ./node_modules/.bin/electron-builder -l'",
@@ -119,7 +119,7 @@
     "electron-store": "^8.1.0",
     "electron-updater": "^6.6.2",
     "electron-window-state": "^5.0.3",
-    "pinokiod": "^3.52.0"
+    "pinokiod": "^3.79.0"
   },
   "devDependencies": {
     "@electron/rebuild": "3.2.10",