Ver código fonte

[ADD] print socket handler

Gogs 6 anos atrás
pai
commit
2eba43ef2a
5 arquivos alterados com 53 adições e 22 exclusões
  1. 3 2
      package.json
  2. 5 4
      src/app/app.vue
  3. 37 2
      src/print.js
  4. 4 14
      src/server.js
  5. 4 0
      yarn.lock

+ 3 - 2
package.json

@@ -2,7 +2,7 @@
   "name": "printers-tray",
   "productName": "printers-tray",
   "version": "1.0.0",
-  "description": "My Electron application description",
+  "description": "Printers Tray",
   "main": "src/index.js",
   "scripts": {
     "start": "electron-forge start",
@@ -12,7 +12,7 @@
     "lint": "echo \"No linting configured\""
   },
   "keywords": [],
-  "author": "robert",
+  "author": "Robert Gauto",
   "license": "MIT",
   "config": {
     "forge": {
@@ -55,6 +55,7 @@
     "ini": "^1.3.5",
     "material-icons": "^0.2.3",
     "morgan": "^1.9.0",
+    "printer": "^0.2.2",
     "socket.io": "^2.1.1",
     "typeface-roboto": "^0.0.54",
     "vue": "^2.5.16",

+ 5 - 4
src/app/app.vue

@@ -100,15 +100,16 @@
         flex-direction: column;
         justify-content: center;
         align-items: center;
+        overflow: hidden;
     }
 
     .app span {
-        width: 64px;
-        height: 64px;
+        width: 100px;
+        height: 100px;
         color: #fff;
         text-align: center;
-        font-size: 48pt;
-        margin-bottom: 48px;
+        font-size: 72pt;
+        margin-bottom: 72px;
     }
 
     .app .form-item {

+ 37 - 2
src/print.js

@@ -1,5 +1,40 @@
+import { printDirect, getDefaultPrinterName, getJob } from 'printer'
 
+const requestPrint = ({data}) => {
+    data = data.replace(/(data:[a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+.*,)/, '')
 
-export const printHandler = () => {
-    console.log('printing')
+    const buffer = Buffer.from(data, 'base64')
+    const asciiData = buffer.toString('ascii')
+
+    console.log(asciiData)
+
+    const defaultPrinter = getDefaultPrinterName()
+
+    printDirect({
+        data: asciiData,
+        printer: defaultPrinter,
+        type: 'PDF',
+        success: jobId => {
+            const job = getJob(defaultPrinter, jobId)
+            
+            if (job.status.includes('PRINTING')) {
+                console.log('imprimiendo')
+                return
+            }
+
+            if (job.status.includes('PRINTED')) {
+                console.log('impreso')
+                return
+            }
+
+            console.log(job)
+        },
+        error: e => {
+            console.log(e)
+        }
+    })
+}
+
+export const printHandler = socket => {
+    socket.on('request-print', requestPrint)
 }

+ 4 - 14
src/server.js

@@ -14,30 +14,20 @@ const io = SocketIO(httpServer, {
     path: '/printers-tray'
 })
 
-/**
- * 
- */
-const connectionHandler = socket => {
-    socket.emit('ok')
-    socket.on('print', printHandler)
-}
-
 /**
  * 
  */
 export const createServer = async () => {
-    io.on('connection', connectionHandler)
+    io.on('connection', socket => printHandler(socket))
+    
     const { server } = readSettings()
-    return await httpServer.listen(server.port, server.host, () => {
-        console.log('server is running')
-    })
+    return await httpServer.listen(server.port, server.host)
 }
 
-
 /**
  * 
  */
 export const restartServer = async () => {
     await httpServer.close()
     return await createServer()
-}
+}

+ 4 - 0
yarn.lock

@@ -4331,6 +4331,10 @@ pretty-bytes@^1.0.2:
     get-stdin "^4.0.1"
     meow "^3.1.0"
 
+printer@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/printer/-/printer-0.2.2.tgz#830b8f5c97b97fd9b464d4f4e105d43337792296"
+
 private@^0.1.6, private@^0.1.8:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"