mirror of
https://github.com/transatoshi-mw/grin-web-wallet.git
synced 2025-10-07 00:02:47 +00:00
contents of zip
This commit is contained in:
434
scripts/camera.js
Executable file
434
scripts/camera.js
Executable file
@@ -0,0 +1,434 @@
|
||||
// Use strict
|
||||
"use strict";
|
||||
|
||||
|
||||
// Classes
|
||||
|
||||
// Camera class
|
||||
class Camera {
|
||||
|
||||
// Public
|
||||
|
||||
// Initialize
|
||||
static initialize() {
|
||||
|
||||
// Initialize request index
|
||||
Camera.requestIndex = 0;
|
||||
|
||||
// Create worker
|
||||
Camera.worker = new Worker(Camera.WORKER_FILE_LOCATION);
|
||||
|
||||
// Window before unload event
|
||||
$(window).on("beforeunload", function() {
|
||||
|
||||
// Get current request index
|
||||
var currentRequestIndex = Camera.requestIndex++;
|
||||
|
||||
// Check if current request index is at the max safe integer
|
||||
if(currentRequestIndex === Number.MAX_SAFE_INTEGER)
|
||||
|
||||
// Reset request index
|
||||
Camera.requestIndex = 0;
|
||||
|
||||
// Send worker an uninitialize request
|
||||
Camera.worker.postMessage([
|
||||
|
||||
// Request index
|
||||
currentRequestIndex,
|
||||
|
||||
// Type
|
||||
Camera.UNINITIALIZE_REQUEST_TYPE
|
||||
]);
|
||||
|
||||
// Terminate worker
|
||||
Camera.worker.terminate();
|
||||
});
|
||||
|
||||
// Return promise
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Worker on error
|
||||
Camera.worker["onerror"] = function() {
|
||||
|
||||
// Reject error
|
||||
reject("Failed to create camera worker.");
|
||||
};
|
||||
|
||||
// Worker on message
|
||||
Camera.worker["onmessage"] = function(event) {
|
||||
|
||||
// Get message
|
||||
var message = event["data"];
|
||||
|
||||
// Get message's request index
|
||||
var requestIndex = message[Camera.MESSAGE_REQUEST_INDEX_OFFSET];
|
||||
|
||||
// Check message's type
|
||||
switch(message[Camera.MESSAGE_TYPE_OFFSET]) {
|
||||
|
||||
// Initialize request type
|
||||
case Camera.INITIALIZE_REQUEST_TYPE:
|
||||
|
||||
// Get message's status
|
||||
var status = message[Camera.MESSAGE_STATUS_OFFSET];
|
||||
|
||||
// Check if worker initialized successfully
|
||||
if(status === Camera.STATUS_SUCCESS_VALUE)
|
||||
|
||||
// Resolve
|
||||
resolve();
|
||||
|
||||
// Otherwise
|
||||
else
|
||||
|
||||
// Reject error
|
||||
reject("Failed to initialize camera worker.");
|
||||
|
||||
// Break
|
||||
break;
|
||||
|
||||
// Default
|
||||
default:
|
||||
|
||||
// Get message's response
|
||||
var response = message[Camera.MESSAGE_RESPONSE_OFFSET];
|
||||
|
||||
// Trigger response request index event
|
||||
$(document).trigger(Camera.RESPONSE_EVENT + requestIndex.toFixed(), [
|
||||
|
||||
// Response
|
||||
response
|
||||
]);
|
||||
|
||||
// Break
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// Get current request index
|
||||
var currentRequestIndex = Camera.requestIndex++;
|
||||
|
||||
// Check if current request index is at the max safe integer
|
||||
if(currentRequestIndex === Number.MAX_SAFE_INTEGER)
|
||||
|
||||
// Reset request index
|
||||
Camera.requestIndex = 0;
|
||||
|
||||
// Send worker an initialize request
|
||||
Camera.worker.postMessage([
|
||||
|
||||
// Request index
|
||||
currentRequestIndex,
|
||||
|
||||
// Type
|
||||
Camera.INITIALIZE_REQUEST_TYPE,
|
||||
|
||||
// URL query string
|
||||
Common.URL_QUERY_STRING_SEPARATOR + encodeURIComponent(Consensus.OVERRIDE_WALLET_TYPE_URL_PARAMETER_NAME).replace(/%20/ug, "+") + Common.URL_QUERY_STRING_PARAMETER_VALUE_SEPARATOR + encodeURIComponent(Consensus.walletTypeToText(Consensus.getWalletType())).replace(/%20/ug, "+") + Common.URL_QUERY_STRING_PARAMETER_SEPARATOR + encodeURIComponent(Consensus.OVERRIDE_NETWORK_TYPE_URL_PARAMETER_NAME).replace(/%20/ug, "+") + Common.URL_QUERY_STRING_PARAMETER_VALUE_SEPARATOR + encodeURIComponent(Consensus.networkTypeToText(Consensus.getNetworkType())).replace(/%20/ug, "+")
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
// Get value
|
||||
static getValue(image, width, height) {
|
||||
|
||||
// Create canvas
|
||||
var canvas = document.createElement("canvas");
|
||||
|
||||
// Set canvas's dimensions
|
||||
canvas["width"] = width;
|
||||
canvas["height"] = height;
|
||||
|
||||
// Draw image on canvas
|
||||
var context = canvas.getContext("2d");
|
||||
context.drawImage(image, 0, 0, width, height);
|
||||
|
||||
// Get image's data from the canvas
|
||||
var imageData = context.getImageData(0, 0, width, height)["data"]["buffer"];
|
||||
|
||||
// Return promise
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Return sending decode request
|
||||
return Camera.sendRequest([
|
||||
|
||||
// Type
|
||||
Camera.DECODE_REQUEST_TYPE,
|
||||
|
||||
// Width
|
||||
width,
|
||||
|
||||
// Height
|
||||
height,
|
||||
|
||||
// Image data
|
||||
imageData
|
||||
], [
|
||||
|
||||
// Image data
|
||||
imageData
|
||||
|
||||
]).then(function(response) {
|
||||
|
||||
// Check if response is no value
|
||||
if(response === Camera.NO_VALUE)
|
||||
|
||||
// Resolve no value
|
||||
resolve(Camera.NO_VALUE);
|
||||
|
||||
// Otherwise
|
||||
else {
|
||||
|
||||
// Get data from response
|
||||
var data = response[Camera.RESPONSE_DATA_INDEX];
|
||||
|
||||
// Get top left corner X from response
|
||||
var topLeftCornerX = response[Camera.RESPONSE_TOP_LEFT_CORNER_X_INDEX];
|
||||
|
||||
// Get top left corner Y from response
|
||||
var topLeftCornerY = response[Camera.RESPONSE_TOP_LEFT_CORNER_Y_INDEX];
|
||||
|
||||
// Get top right corner X from response
|
||||
var topRightCornerX = response[Camera.RESPONSE_TOP_RIGHT_CORNER_X_INDEX];
|
||||
|
||||
// Get top right corner Y from response
|
||||
var topRightCornerY = response[Camera.RESPONSE_TOP_RIGHT_CORNER_Y_INDEX];
|
||||
|
||||
// Get bottom left corner X from response
|
||||
var bottomLeftCornerX = response[Camera.RESPONSE_BOTTOM_LEFT_CORNER_X_INDEX];
|
||||
|
||||
// Get bottom left corner Y from response
|
||||
var bottomLeftCornerY = response[Camera.RESPONSE_BOTTOM_LEFT_CORNER_Y_INDEX];
|
||||
|
||||
// Get bottom right corner X from response
|
||||
var bottomRightCornerX = response[Camera.RESPONSE_BOTTOM_RIGHT_CORNER_X_INDEX];
|
||||
|
||||
// Get bottom right corner Y from response
|
||||
var bottomRightCornerY = response[Camera.RESPONSE_BOTTOM_RIGHT_CORNER_Y_INDEX];
|
||||
|
||||
// Resolve data
|
||||
resolve(data);
|
||||
}
|
||||
|
||||
// Catch errors
|
||||
}).catch(function(error) {
|
||||
|
||||
// Reject error
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Initialize request type
|
||||
static get INITIALIZE_REQUEST_TYPE() {
|
||||
|
||||
// Return initialize request type
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Uninitialize request type
|
||||
static get UNINITIALIZE_REQUEST_TYPE() {
|
||||
|
||||
// Return uninitialize request type
|
||||
return Camera.INITIALIZE_REQUEST_TYPE + 1;
|
||||
}
|
||||
|
||||
// Decode request type
|
||||
static get DECODE_REQUEST_TYPE() {
|
||||
|
||||
// Return decode request type
|
||||
return Camera.UNINITIALIZE_REQUEST_TYPE + 1;
|
||||
}
|
||||
|
||||
// Message request index offset
|
||||
static get MESSAGE_REQUEST_INDEX_OFFSET() {
|
||||
|
||||
// Return message request index offset
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Message type offset
|
||||
static get MESSAGE_TYPE_OFFSET() {
|
||||
|
||||
// Return message type offset
|
||||
return Camera.MESSAGE_REQUEST_INDEX_OFFSET + 1;
|
||||
}
|
||||
|
||||
// Message initialize URL query string offset
|
||||
static get MESSAGE_INITIALIZE_URL_QUERY_STRING_OFFSET() {
|
||||
|
||||
// Return message initialize URL query string offset
|
||||
return Camera.MESSAGE_TYPE_OFFSET + 1;
|
||||
}
|
||||
|
||||
// Message width offset
|
||||
static get MESSAGE_WIDTH_OFFSET() {
|
||||
|
||||
// Return message width offset
|
||||
return Camera.MESSAGE_TYPE_OFFSET + 1;
|
||||
}
|
||||
|
||||
// Message height offset
|
||||
static get MESSAGE_HEIGHT_OFFSET() {
|
||||
|
||||
// Return message height offset
|
||||
return Camera.MESSAGE_WIDTH_OFFSET + 1;
|
||||
}
|
||||
|
||||
// Message image data offset
|
||||
static get MESSAGE_IMAGE_DATA_OFFSET() {
|
||||
|
||||
// Return message image data offset
|
||||
return Camera.MESSAGE_HEIGHT_OFFSET + 1;
|
||||
}
|
||||
|
||||
// Status success value
|
||||
static get STATUS_SUCCESS_VALUE() {
|
||||
|
||||
// Return status success value
|
||||
return true;
|
||||
}
|
||||
|
||||
// Status failed value
|
||||
static get STATUS_FAILED_VALUE() {
|
||||
|
||||
// Return status failed value
|
||||
return false;
|
||||
}
|
||||
|
||||
// No value
|
||||
static get NO_VALUE() {
|
||||
|
||||
// Return no value
|
||||
return null;
|
||||
}
|
||||
|
||||
// Private
|
||||
|
||||
// Send request
|
||||
static sendRequest(request, transfer) {
|
||||
|
||||
// Get current request index
|
||||
var currentRequestIndex = Camera.requestIndex++;
|
||||
|
||||
// Check if current request index is at the max safe integer
|
||||
if(currentRequestIndex === Number.MAX_SAFE_INTEGER)
|
||||
|
||||
// Reset request index
|
||||
Camera.requestIndex = 0;
|
||||
|
||||
// Add current request index to request
|
||||
request.unshift(currentRequestIndex);
|
||||
|
||||
// Return promise
|
||||
return new Promise(function(resolve, reject) {
|
||||
|
||||
// Response current request index event
|
||||
$(document).one(Camera.RESPONSE_EVENT + currentRequestIndex.toFixed(), function(event, response) {
|
||||
|
||||
// Resolve response
|
||||
resolve(response);
|
||||
});
|
||||
|
||||
// Send worker the request
|
||||
Camera.worker.postMessage(request, transfer);
|
||||
});
|
||||
}
|
||||
|
||||
// Message status offset
|
||||
static get MESSAGE_STATUS_OFFSET() {
|
||||
|
||||
// Return message status offset
|
||||
return Camera.MESSAGE_TYPE_OFFSET + 1;
|
||||
}
|
||||
|
||||
// Message response offset
|
||||
static get MESSAGE_RESPONSE_OFFSET() {
|
||||
|
||||
// Return message response offset
|
||||
return Camera.MESSAGE_TYPE_OFFSET + 1;
|
||||
}
|
||||
|
||||
// Response event
|
||||
static get RESPONSE_EVENT() {
|
||||
|
||||
// Return response event
|
||||
return "CameraResponseEvent";
|
||||
}
|
||||
|
||||
// Response data index
|
||||
static get RESPONSE_DATA_INDEX() {
|
||||
|
||||
// Return response data index
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Response top left corner X index
|
||||
static get RESPONSE_TOP_LEFT_CORNER_X_INDEX() {
|
||||
|
||||
// Return response top left corner X index
|
||||
return Camera.RESPONSE_DATA_INDEX + 1;
|
||||
}
|
||||
|
||||
// Response top left corner Y index
|
||||
static get RESPONSE_TOP_LEFT_CORNER_Y_INDEX() {
|
||||
|
||||
// Return response top left corner Y index
|
||||
return Camera.RESPONSE_TOP_LEFT_CORNER_X_INDEX + 1;
|
||||
}
|
||||
|
||||
// Response top right corner X index
|
||||
static get RESPONSE_TOP_RIGHT_CORNER_X_INDEX() {
|
||||
|
||||
// Return response top right corner X index
|
||||
return Camera.RESPONSE_TOP_LEFT_CORNER_Y_INDEX + 1;
|
||||
}
|
||||
|
||||
// Response top right corner Y index
|
||||
static get RESPONSE_TOP_RIGHT_CORNER_Y_INDEX() {
|
||||
|
||||
// Return response top right corner Y index
|
||||
return Camera.RESPONSE_TOP_RIGHT_CORNER_X_INDEX + 1;
|
||||
}
|
||||
|
||||
// Response bottom left corner X index
|
||||
static get RESPONSE_BOTTOM_LEFT_CORNER_X_INDEX() {
|
||||
|
||||
// Return response bottom left corner X index
|
||||
return Camera.RESPONSE_TOP_RIGHT_CORNER_Y_INDEX + 1;
|
||||
}
|
||||
|
||||
// Response bottom left corner Y index
|
||||
static get RESPONSE_BOTTOM_LEFT_CORNER_Y_INDEX() {
|
||||
|
||||
// Return response bottom left corner Y index
|
||||
return Camera.RESPONSE_BOTTOM_LEFT_CORNER_X_INDEX + 1;
|
||||
}
|
||||
|
||||
// Response bottom right corner X index
|
||||
static get RESPONSE_BOTTOM_RIGHT_CORNER_X_INDEX() {
|
||||
|
||||
// Return response bottom right corner X index
|
||||
return Camera.RESPONSE_BOTTOM_LEFT_CORNER_Y_INDEX + 1;
|
||||
}
|
||||
|
||||
// Response bottom right corner Y index
|
||||
static get RESPONSE_BOTTOM_RIGHT_CORNER_Y_INDEX() {
|
||||
|
||||
// Return response bottom right corner Y index
|
||||
return Camera.RESPONSE_BOTTOM_RIGHT_CORNER_X_INDEX + 1;
|
||||
}
|
||||
|
||||
// Worker file location
|
||||
static get WORKER_FILE_LOCATION() {
|
||||
|
||||
// Return worker file location
|
||||
return "." + getResource("./scripts/camera_worker.js");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Main function
|
||||
|
||||
// Set global object's camera
|
||||
globalThis["Camera"] = Camera;
|
Reference in New Issue
Block a user