153 lines
3.3 KiB
JavaScript
153 lines
3.3 KiB
JavaScript
// pages/frame/frame.js
|
|
const { get_phone_model } = require("../../utils");
|
|
const { data_url_from_frame } = require("../../precheck");
|
|
|
|
Page({
|
|
|
|
/**
|
|
* Page initial data
|
|
*/
|
|
data: {
|
|
uploaded: 0,
|
|
failed: 0,
|
|
session_id: Date.now(),
|
|
frame_id: 0,
|
|
next_upload_time: 0,
|
|
uploading: false,
|
|
},
|
|
|
|
/**
|
|
* Lifecycle function--Called when page load
|
|
*/
|
|
onLoad(options) {
|
|
|
|
},
|
|
|
|
/**
|
|
* Lifecycle function--Called when page is initially rendered
|
|
*/
|
|
onReady() {
|
|
|
|
},
|
|
|
|
/**
|
|
* Lifecycle function--Called when page show
|
|
*/
|
|
onShow() {
|
|
|
|
},
|
|
|
|
/**
|
|
* Lifecycle function--Called when page hide
|
|
*/
|
|
onHide() {
|
|
|
|
},
|
|
|
|
/**
|
|
* Lifecycle function--Called when page unload
|
|
*/
|
|
onUnload() {
|
|
|
|
},
|
|
|
|
/**
|
|
* Page event handler function--Called when user drop down
|
|
*/
|
|
onPullDownRefresh() {
|
|
|
|
},
|
|
|
|
/**
|
|
* Called when page reach bottom
|
|
*/
|
|
onReachBottom() {
|
|
|
|
},
|
|
|
|
/**
|
|
* Called when user click on the top right corner to share
|
|
*/
|
|
onShareAppMessage() {
|
|
|
|
},
|
|
|
|
set_pos() {
|
|
this.setData({
|
|
label: "pos",
|
|
pos_class: "active",
|
|
neg_class: "",
|
|
stop_class: "",
|
|
})
|
|
},
|
|
|
|
set_neg() {
|
|
this.setData({
|
|
label: "neg",
|
|
pos_class: "",
|
|
neg_class: "active",
|
|
stop_class: "",
|
|
})
|
|
},
|
|
stop() {
|
|
this.setData({
|
|
"label": null,
|
|
pos_class: "",
|
|
neg_class: "",
|
|
stop_class: "active",
|
|
})
|
|
},
|
|
setup_camera() {
|
|
console.log("setup_camera");
|
|
const ctx = wx.createCameraContext();
|
|
ctx.setZoom({
|
|
zoom: 2
|
|
})
|
|
const listener = ctx.onCameraFrame((res) => { this.handle_frame(res) });
|
|
listener.start();
|
|
},
|
|
handle_frame(res) {
|
|
if (!this.data.label || this.data.uploading) {
|
|
return;
|
|
}
|
|
const now = Date.now();
|
|
if (now < this.data.next_upload_time) {
|
|
return;
|
|
}
|
|
console.log("uploading frame", this.data.frame_id);
|
|
const session_id = this.data.session_id;
|
|
const frame_id = this.data.frame_id;
|
|
this.setData({
|
|
frame_id: frame_id + 1,
|
|
uploading: true,
|
|
});
|
|
const url = `https://themblem.com/api/v5/frame/${session_id}/${frame_id}`;
|
|
var uca1 = new Uint8ClampedArray(res.data);
|
|
var uca = new Uint8ClampedArray(uca1);
|
|
|
|
const image_data_url = data_url_from_frame(res.width, res.height, uca);
|
|
wx.request({
|
|
url,
|
|
method: "POST",
|
|
data: {
|
|
label: this.data.label,
|
|
phone_model: get_phone_model(),
|
|
image: image_data_url,
|
|
},
|
|
success: (res) => {
|
|
this.setData({
|
|
uploaded: this.data.uploaded + 1,
|
|
next_upload_time: now + 500,
|
|
uploading: false,
|
|
});
|
|
},
|
|
fail: (res) => {
|
|
this.setData({
|
|
failed: this.data.failed + 1,
|
|
next_upload_time: now + 500,
|
|
uploading: false,
|
|
});
|
|
},
|
|
});
|
|
},
|
|
}) |