OSDN Git Service

update the bytom.transfer
[bytom/Byone.git] / src / background.js
1 import { LocalStream } from 'extension-streams'
2 import InternalMessage from '@/messages/internal'
3 import * as MsgTypes from './messages/types'
4
5 import accountAction from "@/models/account";
6 import bytom from "@/models/bytom";
7
8 export default class Background {
9   constructor() {
10     this.setupInternalMessaging()
11     this.setupBytom()
12     window.bytomAPI = bytom
13   }
14
15   setupBytom(){
16     const network = localStorage.bytomNet||'mainnet'
17     bytom.setupNet(network)
18
19     window.addEventListener('storage', storageEventHandler, false);
20     function storageEventHandler(evt){
21       if(evt.key === 'bytomNet'){
22         bytom.setupNet( evt.newValue )
23       }
24     }
25   }
26
27   setupInternalMessaging() {
28     LocalStream.watch((request, sendResponse) => {
29       console.log(request)
30       const message = InternalMessage.fromJson(request)
31       this.dispatchMessage(sendResponse, message)
32     })
33   }
34
35   dispatchMessage(sendResponse, message) {
36     switch (message.type) {
37       case MsgTypes.TRANSFER:
38         this.transfer(sendResponse, message.payload)
39         break
40       case MsgTypes.ADVTRANSFER:
41         this.advancedTransfer(sendResponse, message.payload)
42         break
43       case MsgTypes.SEND:
44         this.send(sendResponse, message.payload)
45         break
46     }
47   }
48
49   transfer(sendResponse, payload) {
50     var promptURL = chrome.extension.getURL('pages/prompt.html')
51     var requestBody = payload
52     requestBody.type = "popup"
53     var queryString = new URLSearchParams(requestBody).toString()
54     console.log(promptURL, queryString)
55     chrome.windows.create(
56       {
57         url: `${promptURL}#transfer?${queryString}`,
58         type: 'popup',
59         width: 360,
60         height: 623,
61         top: 0,
62         left: 0
63       },
64       (window) => {
65         chrome.runtime.onMessage.addListener(function(request, sender) {
66           if(sender.tab.windowId === window.id){
67             switch (request.method){
68               case 'transfer':
69                 sendResponse(request);
70                 break
71             }
72           }
73         });
74         console.log(window)
75       }
76     )
77   }
78
79   advancedTransfer(sendResponse, payload) {
80     var promptURL = chrome.extension.getURL('pages/prompt.html')
81     var queryString = 'object='+JSON.stringify(payload)
82     console.log(promptURL, queryString)
83     chrome.windows.create(
84       {
85         url: `${promptURL}#advancedTransfer?${queryString}`,
86         type: 'popup',
87         width: 360,
88         height: 623,
89         top: 0,
90         left: 0
91       },
92       (window) => {
93         chrome.runtime.onMessage.addListener(function(request, sender) {
94           if(sender.tab.windowId === window.id){
95             switch (request.method){
96               case 'advanced-transfer':
97                 sendResponse(request);
98                 break
99             }
100           }
101         });
102       }
103     )
104   }
105
106   send(sendResponse, payload) {
107     const action = payload.action
108     const body = payload.body
109     if(action){
110       let promise
111       switch (action){
112         case 'balance':
113           const id = body.id
114           const guid = body.guid
115           promise = accountAction.balance(guid, id)
116           break
117         case 'currentAccount':
118           const account = JSON.parse(localStorage.currentAccount)
119           sendResponse(account)
120           break
121         case 'currentNetwork':
122           const network = JSON.parse(localStorage.bytomNet)
123           sendResponse(network)
124           break
125         case 'listAllAccount':
126           promise = accountAction.list()
127           break
128       }
129       if(promise){
130         promise.then(resp =>
131         {
132           sendResponse(resp)
133         })
134       }
135     }
136   }
137 }
138
139 new Background()