智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
LightingSystemApp-serial/.svn/pristine/25/25568d2b80cef28eed7c99bb5a1...

207 lines
5.3 KiB

3 years ago
import {
invoke
} from '../../bridge'
const STORAGE_DATA_TYPE = '__TYPE'
const STORAGE_KEYS = 'uni-storage-keys'
function parseValue (value) {
const types = ['object', 'string', 'number', 'boolean', 'undefined']
try {
const object = typeof value === 'string' ? JSON.parse(value) : value
const type = object.type
if (types.indexOf(type) >= 0) {
const keys = Object.keys(object)
if (keys.length === 2 && 'data' in object) {
// eslint-disable-next-line valid-typeof
if (typeof object.data === type) {
return object.data
}
// eslint-disable-next-line no-useless-escape
if (type === 'object' && /^\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}\.\d{3}Z$/.test(object.data)) {
// ISO 8601 格式返回 Date
return new Date(object.data)
}
} else if (keys.length === 1) {
return ''
}
}
} catch (error) {}
}
export function setStorage ({
key,
data,
isSync
} = {}, callbackId) {
const type = typeof data
const value = type === 'string' ? data : JSON.stringify({
type,
data: data
})
try {
if (type === 'string' && parseValue(value) !== undefined) {
plus.storage.setItemAsync(key + STORAGE_DATA_TYPE, type)
} else {
plus.storage.removeItemAsync(key + STORAGE_DATA_TYPE)
}
plus.storage.setItemAsync(key, value, function () {
invoke(callbackId, {
errMsg: 'setStorage:ok'
})
}, function (err) {
invoke(callbackId, {
errMsg: `setStorage:fail ${err.message}`
})
})
} catch (error) {
invoke(callbackId, {
errMsg: `setStorage:fail ${error}`
})
}
}
export function setStorageSync (key, data) {
const type = typeof data
const value = type === 'string' ? data : JSON.stringify({
type,
data: data
})
try {
if (type === 'string' && parseValue(value) !== undefined) {
plus.storage.setItem(key + STORAGE_DATA_TYPE, type)
} else {
plus.storage.removeItem(key + STORAGE_DATA_TYPE)
}
plus.storage.setItem(key, value)
} catch (error) {
}
}
function parseGetStorage (type, value) {
let data = value
if (type !== 'string' || (type === 'string' && value === '{"type":"undefined"}')) {
try {
// 兼容H5和V3初期历史格式
let object = JSON.parse(value)
const result = parseValue(object)
if (result !== undefined) {
data = result
} else if (type) {
// 兼容App端历史格式
data = object
if (typeof object === 'string') {
object = JSON.parse(object)
const objectType = typeof object
if (objectType === 'number' && type === 'date') {
data = new Date(object)
} else if (objectType === (['null', 'array'].indexOf(type) < 0 ? type : 'object')) {
data = object
}
}
}
} catch (error) {}
}
return data
}
export function getStorage ({
key
} = {}, callbackId) {
plus.storage.getItemAsync(key, function (res) {
plus.storage.getItemAsync(key + STORAGE_DATA_TYPE, function (typeRes) {
const typeOrigin = typeRes.data || ''
const type = typeOrigin.toLowerCase()
invoke(callbackId, {
data: parseGetStorage(type, res.data),
errMsg: 'getStorage:ok'
})
}, function () {
const type = ''
invoke(callbackId, {
data: parseGetStorage(type, res.data),
errMsg: 'getStorage:ok'
})
})
}, function (err) {
invoke(callbackId, {
data: '',
errMsg: `getStorage:fail ${err.message}`
})
})
}
export function getStorageSync (key) {
const value = plus.storage.getItem(key)
const typeOrigin = plus.storage.getItem(key + STORAGE_DATA_TYPE) || ''
const type = typeOrigin.toLowerCase()
if (typeof value !== 'string') {
return ''
}
return parseGetStorage(type, value)
}
export function removeStorage ({
key
} = {}, callbackId) {
// 兼容App端历史格式
plus.storage.removeItemAsync(key + STORAGE_DATA_TYPE)
plus.storage.removeItemAsync(key, function (res) {
invoke(callbackId, {
errMsg: 'removeStorage:ok'
})
}, function (err) {
invoke(callbackId, {
errMsg: `removeStorage:fail ${err.message}`
})
})
}
export function removeStorageSync (key) {
plus.storage.removeItem(key + STORAGE_DATA_TYPE)
plus.storage.removeItem(key)
}
export function clearStorage (args, callbackId) {
plus.storage.clearAsync(function (res) {
invoke(callbackId, {
errMsg: 'clearStorage:ok'
})
}, function (err) {
invoke(callbackId, {
errMsg: `clearStorage:fail ${err.message}`
})
})
}
export function clearStorageSync () {
plus.storage.clear()
}
export function getStorageInfo () {
const length = (plus.storage.length || plus.storage.getLength()) || 0
const keys = []
let currentSize = 0
for (let index = 0; index < length; index++) {
const key = plus.storage.key(index)
if (key !== STORAGE_KEYS && key.indexOf(STORAGE_DATA_TYPE) + STORAGE_DATA_TYPE.length !== key.length) {
const value = plus.storage.getItem(key)
currentSize += key.length + value.length
keys.push(key)
}
}
return {
keys,
currentSize: Math.ceil(currentSize * 2 / 1024),
limitSize: Number.MAX_VALUE,
errMsg: 'getStorageInfo:ok'
}
}
export function getStorageInfoSync () {
const res = getStorageInfo()
delete res.errMsg
return res
}