1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
2024-06-09 22:57:41 +08:00

106 lines
4.7 KiB
JavaScript

const {kit, ice,
ctx, mdb, web, aaa,
lex, yac, ssh, gdb,
tcp, nfs, cli, log,
code, wiki, chat, team, mall,
http, html, icon, svg
} = require("../const.js")
const {shy, Volcanos} = require("../proto-wx.js")
module.exports =
Volcanos("user", {
agent: {
enableDebug: function(can) {
if (can.db.debug == ice.TRUE && can.conf.platform != "devtools") {
wx.setEnableDebug({enableDebug: true})
}
},
getLocation: function(can, cb) {
wx.chooseLocation({success: function(res) {
cb && cb({
latitude: parseInt(res.latitude * 100000),
longitude: parseInt(res.longitude * 100000),
type: "gcj02", name: res.name, text: res.address,
})
}})
},
connectWifi: function(can, ssid, password, cb, cbs) { wx.showLoading()
wx.startWifi({success: function(res) {
wx.connectWifi({SSID: ssid, password: password, success: function(res) {
can.core.Timer(1000, function() { wx.hideLoading()
can.misc.Info("wifi", res), cb && cb(res)
})
}, fail: function(res) { can.misc.Warn("wifi", res), cbs && cbs(res) }})
}, fail: function(res) { can.misc.Warn("wifi", res), cbs && cbs(res) }})
},
getClipboard: function(can, cb) {
wx.getClipboardData({success: function(res) {
cb && cb(can.base.ParseJSON(res.data))
}})
},
scanQRCode: function(can, cb) {
wx.scanCode({success: function(res) {
can.misc.Info("scan", res.result)
can.user.parse(can, res.result, cb)
}})
},
}, info: {},
scene: function(can, scene, cb) {
function post() {
can.misc.POST(can, can.request(), "/chat/wx/login/action/scene", {scene: scene, serve: can.db.serve}, function(msg) {
can.misc.Info("app scene", msg.Result()), can.user.parse(can, msg.Result())
})
}
function wifi(cb) { can.db.ssid && can.db.password != "******"? can.user.agent.connectWifi(can, can.db.ssid, can.db.password||"", function() { can.db.password = "******", cb() }): cb() }
if (scene) { var ls = scene.split(nfs.PS); scene = ls[2]
if (ls[0] == "s") { can.db.serve = "https://"+ls[1] }
if (ls[0] == "h") { can.db.serve = "http://"+ls[1] }
if (ls[0] == "w") {
wx.getLocalIPAddress({success(res) {
can.db.serve = "http://"+res.localip.split(".").slice(0,3).join(".")+"."+parseInt("0x"+ls[1])+":9020", can.db.ssid = ls[3], can.db.password = ls[4]
wifi(function() { post() })
} })
} else {
wifi(function() { post() })
}
} else { wifi(cb) }
},
parse: function(can, text, cb) {
if (text.indexOf("WIFI:") == 0) { var data = kit.Dict(can.core.Split(text, ":;").slice(1))
if (cb && cb(data)) { return }
return can.user.agent.connectWifi(can, data.S, data.P, function() { can.user.toast(can, ice.SUCCESS) })
}
var data = can.base.ParseJSON(text)
if (data.type == web.LINK && data._origin) { can.base.Copy(data, can.misc.ParseURL(can, text)) }
if (cb && cb(data)) { return }
if (data.type == web.LINK && data._origin) { delete(data.type), delete(data.name), delete(data.text)
var ls = new RegExp("(https?://[^/]+)([^?#]*)([^#]*)(.*)").exec(data._origin); delete(data._origin)
if (ls[1] != "https://servicewechat.com") { data.serve = ls[1] }
if (ls[2].indexOf("/pages/") == 0) { data.pages = ls[2] }
}
can.misc.Info("app parse", data)
if (data.cmd||data.index||data.share) {
can.user.jumps(can.base.MergeURL(data.pages||chat.PAGES_ACTION, data))
} else if (data.pod||data.space||data.serve) {
can.user.switchTab(can, web.DREAM, data)
} else {
can.misc.POST(can, can.request(), chat.WX_LOGIN_SCAN, data)
}
},
switchTab: function(can, name, data, force) { data = data||can.db
if (!force && data.serve == can.db.serve) { return wx.switchTab({url: name}) }
can.misc.localStorage(can, web.SERVE, data.serve||""), wx.reLaunch({url: name})
},
jumps: function(url, cb) { wx.navigateTo({url: url, success: cb, fail: function(res) { console.warn(res) }}) },
title: function(text, cb) { text && wx.setNavigationBarTitle({title: text, success: cb}) },
trans: function(can, text, list, zone) { if (!text) { return text }
return can.core.Value(can.core.Value(list, ctx.FEATURE_TRANS), can.core.Keys(zone, text))||can.core.Value(can.user._trans, can.core.Keys(zone, text))||text
}, _trans: {},
toast: function(can, title) { wx.showToast({title: title||""}) },
modal: function(can, content, title, cb) { wx.showModal({title: title||"", content: content||"", success: cb}) },
login: function(can, cb, cbs) { var serve = can.misc.serveList(can, {serve: can.db.serve}); if (serve.sessid) { return cb && cb() }
wx.login({success: function(res) { can.misc.POST(can, can.request(), chat.WX_LOGIN_SESS, {code: res.code}, function(msg) {
can.misc.serveList(can, {serve: can.db.serve, sessid: msg.Result()}), cb && cb()
}) }, fail: function(res) { cbs && cbs(res) }})
},
})