@norcy/react-native-toolkit 0.1.17 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/Frequence.js +67 -0
- package/lib/commonjs/Frequence.js.map +1 -0
- package/lib/commonjs/MessageModel.js +161 -0
- package/lib/commonjs/MessageModel.js.map +1 -0
- package/lib/commonjs/PrefData.js +10 -0
- package/lib/commonjs/PrefData.js.map +1 -1
- package/lib/commonjs/Tool.js +14 -1
- package/lib/commonjs/Tool.js.map +1 -1
- package/lib/commonjs/index.js +24 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/Frequence.js +61 -0
- package/lib/module/Frequence.js.map +1 -0
- package/lib/module/MessageModel.js +155 -0
- package/lib/module/MessageModel.js.map +1 -0
- package/lib/module/PrefData.js +10 -0
- package/lib/module/PrefData.js.map +1 -1
- package/lib/module/Tool.js +14 -1
- package/lib/module/Tool.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/Frequence.d.ts +10 -0
- package/lib/typescript/MessageModel.d.ts +26 -0
- package/lib/typescript/Tool.d.ts +3 -0
- package/lib/typescript/index.d.ts +2 -0
- package/package.json +1 -1
- package/src/Frequence.ts +70 -0
- package/src/MessageModel.ts +196 -0
- package/src/PrefData.ts +10 -0
- package/src/Tool.ts +26 -0
- package/src/index.tsx +2 -0
- package/ios/ReactNativeToolkit.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -4
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FrequenceManager = void 0;
|
|
7
|
+
var _PrefData = require("./PrefData");
|
|
8
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
10
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
11
|
+
class FreConfigValueType {
|
|
12
|
+
// 实际展示的次数,配合 limit 计算
|
|
13
|
+
constructor() {
|
|
14
|
+
_defineProperty(this, "lastTimestamp", void 0);
|
|
15
|
+
// 上一次展示的时间,配合 gap 计算
|
|
16
|
+
_defineProperty(this, "count", void 0);
|
|
17
|
+
this.count = 0;
|
|
18
|
+
this.lastTimestamp = 0;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const now = () => {
|
|
22
|
+
return new Date().getTime() / 1000;
|
|
23
|
+
};
|
|
24
|
+
const FrequenceManager = exports.FrequenceManager = {
|
|
25
|
+
canRun: config => {
|
|
26
|
+
var _PrefData$getValue, _config$limit, _config$limit2, _config$gap, _config$gap2;
|
|
27
|
+
const configs = (_PrefData$getValue = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue !== void 0 ? _PrefData$getValue : {};
|
|
28
|
+
if (!configs[config.key]) {
|
|
29
|
+
configs[config.key] = new FreConfigValueType();
|
|
30
|
+
}
|
|
31
|
+
const configValue = configs[config.key];
|
|
32
|
+
|
|
33
|
+
// 优先判断 Count
|
|
34
|
+
if (((_config$limit = config.limit) !== null && _config$limit !== void 0 ? _config$limit : 0) > 0 && configValue.count >= ((_config$limit2 = config.limit) !== null && _config$limit2 !== void 0 ? _config$limit2 : 0)) {
|
|
35
|
+
console.log('[Frequence] 次数限制', configValue, config);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
// 再判断 Time
|
|
39
|
+
if (((_config$gap = config.gap) !== null && _config$gap !== void 0 ? _config$gap : 0) > 0 && now() - configValue.lastTimestamp < ((_config$gap2 = config.gap) !== null && _config$gap2 !== void 0 ? _config$gap2 : 0)) {
|
|
40
|
+
console.log('[Frequence] 时间限制', configValue, config);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
console.log('[Frequence] 无限制', configValue, config);
|
|
44
|
+
return true;
|
|
45
|
+
},
|
|
46
|
+
markFinishForCount: configKey => {
|
|
47
|
+
var _PrefData$getValue2;
|
|
48
|
+
const configs = (_PrefData$getValue2 = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue2 !== void 0 ? _PrefData$getValue2 : {};
|
|
49
|
+
if (!configs[configKey]) {
|
|
50
|
+
configs[configKey] = new FreConfigValueType();
|
|
51
|
+
}
|
|
52
|
+
configs[configKey].count++;
|
|
53
|
+
// console.log('[Frequence] mark finish', configs[config.key]);
|
|
54
|
+
_PrefData.PrefData.setValue(_PrefData.BuildInPrefs.FrequenceConfig, configs);
|
|
55
|
+
},
|
|
56
|
+
markFinishForTime: configKey => {
|
|
57
|
+
var _PrefData$getValue3;
|
|
58
|
+
const configs = (_PrefData$getValue3 = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue3 !== void 0 ? _PrefData$getValue3 : {};
|
|
59
|
+
if (!configs[configKey]) {
|
|
60
|
+
configs[configKey] = new FreConfigValueType();
|
|
61
|
+
}
|
|
62
|
+
configs[configKey].lastTimestamp = now();
|
|
63
|
+
// console.log('[Frequence] mark finish', configs[config.key]);
|
|
64
|
+
_PrefData.PrefData.setValue(_PrefData.BuildInPrefs.FrequenceConfig, configs);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=Frequence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_PrefData","require","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","FreConfigValueType","constructor","count","lastTimestamp","now","Date","getTime","FrequenceManager","exports","canRun","config","_PrefData$getValue","_config$limit","_config$limit2","_config$gap","_config$gap2","configs","PrefData","getValue","BuildInPrefs","FrequenceConfig","configValue","limit","console","log","gap","markFinishForCount","configKey","_PrefData$getValue2","setValue","markFinishForTime","_PrefData$getValue3"],"sources":["Frequence.ts"],"sourcesContent":["import { BuildInPrefs, PrefData } from './PrefData';\n\nexport interface FreConfigType {\n key: string;\n limit?: number; // 0 表示无限次提示\n gap?: number; // 单位:秒;0 表示不间断提示\n}\n\nclass FreConfigValueType {\n lastTimestamp: number; // 上一次展示的时间,配合 gap 计算\n count: number; // 实际展示的次数,配合 limit 计算\n constructor() {\n this.count = 0;\n this.lastTimestamp = 0;\n }\n}\n\nconst now = () => {\n return new Date().getTime() / 1000;\n};\n\nexport const FrequenceManager = {\n canRun: (config: FreConfigType) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n if (!configs[config.key]) {\n configs[config.key] = new FreConfigValueType();\n }\n const configValue: FreConfigValueType = configs[config.key];\n\n // 优先判断 Count\n if ((config.limit ?? 0) > 0 && configValue.count >= (config.limit ?? 0)) {\n console.log('[Frequence] 次数限制', configValue, config);\n return false;\n }\n // 再判断 Time\n if (\n (config.gap ?? 0) > 0 &&\n now() - configValue.lastTimestamp < (config.gap ?? 0)\n ) {\n console.log('[Frequence] 时间限制', configValue, config);\n return false;\n }\n\n console.log('[Frequence] 无限制', configValue, config);\n return true;\n },\n\n markFinishForCount: (configKey: string) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n if (!configs[configKey]) {\n configs[configKey] = new FreConfigValueType();\n }\n configs[configKey].count++;\n // console.log('[Frequence] mark finish', configs[config.key]);\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n\n markFinishForTime: (configKey: string) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n if (!configs[configKey]) {\n configs[configKey] = new FreConfigValueType();\n }\n configs[configKey].lastTimestamp = now();\n // console.log('[Frequence] mark finish', configs[config.key]);\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MessageModel = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _reactNativeDeviceInfo = require("react-native-device-info");
|
|
9
|
+
var _ConfigDataModel = require("./ConfigDataModel");
|
|
10
|
+
var _Frequence = require("./Frequence");
|
|
11
|
+
var _LoginManager = require("./LoginManager");
|
|
12
|
+
var _PrefData = require("./PrefData");
|
|
13
|
+
var _Tool = require("./Tool");
|
|
14
|
+
var _VipManager = require("./VipManager");
|
|
15
|
+
const AV = require('leancloud-storage');
|
|
16
|
+
const EventEmitter = require('events').EventEmitter;
|
|
17
|
+
const eventEmitter = new EventEmitter();
|
|
18
|
+
const semverGt = require('semver/functions/gt');
|
|
19
|
+
const semverGte = require('semver/functions/gte');
|
|
20
|
+
const semverCoerce = require('semver/functions/coerce');
|
|
21
|
+
let MyMessages = [];
|
|
22
|
+
const _filterByVersion = items => {
|
|
23
|
+
let ret = [];
|
|
24
|
+
const curVer = semverCoerce((0, _reactNativeDeviceInfo.getReadableVersion)()).version;
|
|
25
|
+
for (const item of items) {
|
|
26
|
+
var _item$minVer, _item$maxVer;
|
|
27
|
+
const minVer = (_item$minVer = item.minVer) === null || _item$minVer === void 0 ? void 0 : _item$minVer.trim();
|
|
28
|
+
const maxVer = (_item$maxVer = item.maxVer) === null || _item$maxVer === void 0 ? void 0 : _item$maxVer.trim();
|
|
29
|
+
// 确保 cur 处于 [minVer, maxVer)
|
|
30
|
+
if (minVer !== null && minVer !== void 0 && minVer.length && semverGt(semverCoerce(minVer).version, curVer)) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (maxVer !== null && maxVer !== void 0 && maxVer.length && semverGte(curVer, semverCoerce(maxVer).version)) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
ret.push(item);
|
|
37
|
+
}
|
|
38
|
+
return ret;
|
|
39
|
+
};
|
|
40
|
+
const _filterByVip = items => {
|
|
41
|
+
let ret = [];
|
|
42
|
+
const isVip = _VipManager.VipManager.isVip();
|
|
43
|
+
const isForeverVip = _VipManager.VipManager.isForeverVip();
|
|
44
|
+
for (const item of items) {
|
|
45
|
+
const vipFilter = item.vipFilter;
|
|
46
|
+
if (vipFilter === 0 || vipFilter === 1 && !isVip || vipFilter === 2 && !isForeverVip) {
|
|
47
|
+
ret.push(item);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return ret;
|
|
51
|
+
};
|
|
52
|
+
const _filterByUser = items => {
|
|
53
|
+
let ret = [];
|
|
54
|
+
for (const item of items) {
|
|
55
|
+
const users = item.users;
|
|
56
|
+
if (users !== null && users !== void 0 && users.length) {
|
|
57
|
+
if (_LoginManager.LoginManager.isLogin()) {
|
|
58
|
+
var _LoginManager$current;
|
|
59
|
+
if (users !== null && users !== void 0 && users.includes((_LoginManager$current = _LoginManager.LoginManager.currentUser()) === null || _LoginManager$current === void 0 ? void 0 : _LoginManager$current.AVUser.get('objectId'))) {
|
|
60
|
+
ret.push(item);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
ret.push(item);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return ret;
|
|
68
|
+
};
|
|
69
|
+
const _handleReadMessages = items => {
|
|
70
|
+
if (__DEV__) {
|
|
71
|
+
// return items;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 根据已读状态标为已读
|
|
75
|
+
const readMsgs = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.Messages);
|
|
76
|
+
for (const item of items) {
|
|
77
|
+
if (readMsgs.includes(item.objectId)) {
|
|
78
|
+
item.isRead = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// 挑选需要强制未读
|
|
83
|
+
for (const item of items) {
|
|
84
|
+
var _item$key;
|
|
85
|
+
if (!item.isRead) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (item.key === 'changeLog') {
|
|
89
|
+
// 强制升级弹窗
|
|
90
|
+
// Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的
|
|
91
|
+
const config = _ConfigDataModel.ConfigDataModel.getVersionConfig();
|
|
92
|
+
if (_ConfigDataModel.ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {
|
|
93
|
+
item.isRead = false;
|
|
94
|
+
item.updatedAt = new Date().toString();
|
|
95
|
+
}
|
|
96
|
+
} else if ((_item$key = item.key) !== null && _item$key !== void 0 && _item$key.length) {
|
|
97
|
+
const freConfig = {
|
|
98
|
+
key: item.key,
|
|
99
|
+
limit: item.limit,
|
|
100
|
+
gap: item.gap
|
|
101
|
+
};
|
|
102
|
+
if (_Frequence.FrequenceManager.canRun(freConfig)) {
|
|
103
|
+
if (freConfig.gap) {
|
|
104
|
+
_Frequence.FrequenceManager.markFinishForTime(freConfig.key);
|
|
105
|
+
} else if (freConfig.limit) {
|
|
106
|
+
_Frequence.FrequenceManager.markFinishForCount(freConfig.key);
|
|
107
|
+
}
|
|
108
|
+
item.isRead = false;
|
|
109
|
+
item.updatedAt = new Date().toString();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return items;
|
|
114
|
+
};
|
|
115
|
+
const MessageModel = exports.MessageModel = {
|
|
116
|
+
fetch: () => {
|
|
117
|
+
const query = new AV.Query('Message');
|
|
118
|
+
query.equalTo('valid', true).equalTo(_reactNative.Platform.OS, true).descending('updatedAt');
|
|
119
|
+
query.find().then(async items => {
|
|
120
|
+
console.log('Message 抓取完毕');
|
|
121
|
+
MyMessages = items.map(item => _Tool.Tool.jsonify(item));
|
|
122
|
+
MyMessages = _filterByVersion(MyMessages);
|
|
123
|
+
MyMessages = _filterByVip(MyMessages);
|
|
124
|
+
MyMessages = _filterByUser(MyMessages);
|
|
125
|
+
MyMessages = _handleReadMessages(MyMessages);
|
|
126
|
+
|
|
127
|
+
// 由于强制插入的未读消息更改了时间,因此需要重新排序
|
|
128
|
+
MyMessages = MyMessages.sort((a, b) => {
|
|
129
|
+
let dateA = new Date(a.updatedAt).getTime();
|
|
130
|
+
let dateB = new Date(b.updatedAt).getTime();
|
|
131
|
+
return dateB - dateA;
|
|
132
|
+
});
|
|
133
|
+
MessageModel.emitChange();
|
|
134
|
+
}).catch(e => {
|
|
135
|
+
console.error(e);
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
getUnreadMessages: () => {
|
|
139
|
+
return MyMessages.filter(item => !item.isRead);
|
|
140
|
+
},
|
|
141
|
+
getAllMessages: () => {
|
|
142
|
+
return MyMessages;
|
|
143
|
+
},
|
|
144
|
+
markMessageRead: async message => {
|
|
145
|
+
if (message.isRead || !message.objectId) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
message.isRead = true;
|
|
149
|
+
const readMsgs = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.Messages);
|
|
150
|
+
readMsgs.push(message.objectId);
|
|
151
|
+
await _PrefData.PrefData.setValue(_PrefData.BuildInPrefs.Messages, readMsgs);
|
|
152
|
+
MessageModel.emitChange();
|
|
153
|
+
},
|
|
154
|
+
emitChange: () => {
|
|
155
|
+
eventEmitter.emit('change', MyMessages.slice());
|
|
156
|
+
},
|
|
157
|
+
addListenerOnce: callback => {
|
|
158
|
+
eventEmitter.once('change', callback);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
//# sourceMappingURL=MessageModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_PrefData","_Tool","_VipManager","AV","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","getReadableVersion","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","length","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_filterByUser","users","LoginManager","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","objectId","isRead","_item$key","key","config","ConfigDataModel","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","markFinishForTime","markFinishForCount","MessageModel","exports","fetch","query","Query","equalTo","Platform","OS","descending","find","then","console","log","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","emitChange","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","setValue","emit","slice","addListenerOnce","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\ninterface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (minVer?.length && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (maxVer?.length && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig.key);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig.key);\n }\n\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nexport const MessageModel = {\n fetch: () => {\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: any[]) => {\n console.log('Message 抓取完毕');\n MyMessages = items.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n MessageModel.emitChange();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"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"}
|
package/lib/commonjs/PrefData.js
CHANGED
|
@@ -25,6 +25,16 @@ const BuildInPrefs = exports.BuildInPrefs = {
|
|
|
25
25
|
key: 'DevDanger_Key',
|
|
26
26
|
type: 'int',
|
|
27
27
|
default: 0
|
|
28
|
+
},
|
|
29
|
+
FrequenceConfig: {
|
|
30
|
+
key: 'FrequenceConfig_Key',
|
|
31
|
+
type: 'object',
|
|
32
|
+
default: {}
|
|
33
|
+
},
|
|
34
|
+
Messages: {
|
|
35
|
+
key: 'Message_Key5',
|
|
36
|
+
type: 'array',
|
|
37
|
+
default: []
|
|
28
38
|
}
|
|
29
39
|
};
|
|
30
40
|
const getPrefByKey = (Prefs, key) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_asyncStorage","_interopRequireDefault","require","obj","__esModule","default","EventEmitter","eventEmitter","isDataLoaded","_PrefDatas","BuildInPrefs","exports","LastLoginType","key","type","DevVip","DevDanger","getPrefByKey","Prefs","keyOfPref","PrefData","load","initPrefs","console","log","keys","pref","push","values","getMultiDatas","i","length","value","JSON","parse","parseInt","emit","getValue","setValue","finalValue","stringify","toString","storeData","addListener","callback","on","error","AsyncStorage","setItem","e","multiGet"],"sources":["PrefData.ts"],"sourcesContent":["import AsyncStorage from '@react-native-community/async-storage';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nlet isDataLoaded = false;\n\nexport interface PrefType {\n key: string;\n type: string;\n default: any;\n}\n\nexport interface PrefsType {\n [key: string]: PrefType;\n}\n\nconst _PrefDatas: { [key: string]: any } = {};\n\nexport const BuildInPrefs: PrefsType = {\n LastLoginType: {\n key: 'LastLoginType_Key',\n type: 'int',\n default: -1,\n },\n DevVip: {\n key: 'DevVip_Key',\n type: 'int',\n default: 0,\n },\n DevDanger: {\n key: 'DevDanger_Key',\n type: 'int',\n default: 0,\n },\n};\n\nconst getPrefByKey = (Prefs: PrefsType, key: string) => {\n for (const keyOfPref in Prefs) {\n if (Prefs[keyOfPref].key === key) {\n return Prefs[keyOfPref];\n }\n }\n return null;\n};\n\nexport const PrefData = {\n load: async (initPrefs: PrefsType) => {\n console.log('读取配置');\n let keys = [];\n const Prefs = { ...BuildInPrefs, ...initPrefs };\n for (const pref in Prefs) {\n keys.push(Prefs[pref].key);\n }\n const values = await getMultiDatas(keys);\n\n for (let i = 0; i < values.length; i++) {\n const key = values[i][0];\n const value = values[i][1];\n const pref = getPrefByKey(Prefs, key);\n if (!pref) {\n continue;\n }\n // console.log(key, value, pref);\n if (!value) {\n _PrefDatas[key] = pref.default;\n } else if (pref.type === 'object' || pref.type === 'array') {\n _PrefDatas[key] = JSON.parse(value);\n } else if (pref.type === 'int') {\n _PrefDatas[key] = parseInt(value, 10);\n } else if (pref.type === 'bool') {\n _PrefDatas[key] = JSON.parse(value);\n } else {\n _PrefDatas[key] = value;\n }\n // console.log(\n // '配置读取结果:',\n // key,\n // _PrefDatas[key],\n // typeof _PrefDatas[key],\n // );\n }\n\n eventEmitter.emit('load');\n isDataLoaded = true;\n },\n\n getValue: (pref: PrefType) => {\n return _PrefDatas[pref.key];\n },\n\n setValue: async (pref: PrefType, value: any) => {\n const key = pref.key;\n let finalValue: string;\n _PrefDatas[key] = value;\n if (pref.type === 'object' || pref.type === 'array') {\n finalValue = JSON.stringify(value);\n } else if (pref.type === 'int') {\n finalValue = value.toString();\n } else if (pref.type === 'bool') {\n finalValue = value.toString();\n } else {\n finalValue = value;\n }\n\n await storeData(key, finalValue);\n },\n\n addListener: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.on('load', callback);\n },\n};\n\nconst storeData = async (key: string, value: string) => {\n try {\n if (typeof value !== 'string') {\n console.error('只接受 String');\n }\n // console.log('save to storage ' + value);\n await AsyncStorage.setItem(key, value);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst getMultiDatas = async (keys: string[]) => {\n try {\n const values = await AsyncStorage.multiGet(keys);\n // console.log('read from storage ' + values);\n return values;\n } catch (e) {\n console.error(e);\n return [];\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiE,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEjE,MAAMG,YAAY,GAAGJ,OAAO,CAAC,QAAQ,CAAC,CAACI,YAAY;AACnD,MAAMC,YAAY,GAAG,IAAID,YAAY,CAAC,CAAC;AAEvC,IAAIE,YAAY,GAAG,KAAK;AAYxB,MAAMC,UAAkC,GAAG,CAAC,CAAC;AAEtC,MAAMC,YAAuB,GAAAC,OAAA,CAAAD,YAAA,GAAG;EACrCE,aAAa,EAAE;IACbC,GAAG,EAAE,mBAAmB;IACxBC,IAAI,EAAE,KAAK;IACXT,OAAO,EAAE,CAAC;EACZ,CAAC;EACDU,MAAM,EAAE;IACNF,GAAG,EAAE,YAAY;IACjBC,IAAI,EAAE,KAAK;IACXT,OAAO,EAAE;EACX,CAAC;EACDW,SAAS,EAAE;IACTH,GAAG,EAAE,eAAe;IACpBC,IAAI,EAAE,KAAK;IACXT,OAAO,EAAE;EACX;AACF,CAAC;AAED,
|
|
1
|
+
{"version":3,"names":["_asyncStorage","_interopRequireDefault","require","obj","__esModule","default","EventEmitter","eventEmitter","isDataLoaded","_PrefDatas","BuildInPrefs","exports","LastLoginType","key","type","DevVip","DevDanger","FrequenceConfig","Messages","getPrefByKey","Prefs","keyOfPref","PrefData","load","initPrefs","console","log","keys","pref","push","values","getMultiDatas","i","length","value","JSON","parse","parseInt","emit","getValue","setValue","finalValue","stringify","toString","storeData","addListener","callback","on","error","AsyncStorage","setItem","e","multiGet"],"sources":["PrefData.ts"],"sourcesContent":["import AsyncStorage from '@react-native-community/async-storage';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nlet isDataLoaded = false;\n\nexport interface PrefType {\n key: string;\n type: string;\n default: any;\n}\n\nexport interface PrefsType {\n [key: string]: PrefType;\n}\n\nconst _PrefDatas: { [key: string]: any } = {};\n\nexport const BuildInPrefs: PrefsType = {\n LastLoginType: {\n key: 'LastLoginType_Key',\n type: 'int',\n default: -1,\n },\n DevVip: {\n key: 'DevVip_Key',\n type: 'int',\n default: 0,\n },\n DevDanger: {\n key: 'DevDanger_Key',\n type: 'int',\n default: 0,\n },\n FrequenceConfig: {\n key: 'FrequenceConfig_Key',\n type: 'object',\n default: {},\n },\n Messages: {\n key: 'Message_Key5',\n type: 'array',\n default: [],\n },\n};\n\nconst getPrefByKey = (Prefs: PrefsType, key: string) => {\n for (const keyOfPref in Prefs) {\n if (Prefs[keyOfPref].key === key) {\n return Prefs[keyOfPref];\n }\n }\n return null;\n};\n\nexport const PrefData = {\n load: async (initPrefs: PrefsType) => {\n console.log('读取配置');\n let keys = [];\n const Prefs = { ...BuildInPrefs, ...initPrefs };\n for (const pref in Prefs) {\n keys.push(Prefs[pref].key);\n }\n const values = await getMultiDatas(keys);\n\n for (let i = 0; i < values.length; i++) {\n const key = values[i][0];\n const value = values[i][1];\n const pref = getPrefByKey(Prefs, key);\n if (!pref) {\n continue;\n }\n // console.log(key, value, pref);\n if (!value) {\n _PrefDatas[key] = pref.default;\n } else if (pref.type === 'object' || pref.type === 'array') {\n _PrefDatas[key] = JSON.parse(value);\n } else if (pref.type === 'int') {\n _PrefDatas[key] = parseInt(value, 10);\n } else if (pref.type === 'bool') {\n _PrefDatas[key] = JSON.parse(value);\n } else {\n _PrefDatas[key] = value;\n }\n // console.log(\n // '配置读取结果:',\n // key,\n // _PrefDatas[key],\n // typeof _PrefDatas[key],\n // );\n }\n\n eventEmitter.emit('load');\n isDataLoaded = true;\n },\n\n getValue: (pref: PrefType) => {\n return _PrefDatas[pref.key];\n },\n\n setValue: async (pref: PrefType, value: any) => {\n const key = pref.key;\n let finalValue: string;\n _PrefDatas[key] = value;\n if (pref.type === 'object' || pref.type === 'array') {\n finalValue = JSON.stringify(value);\n } else if (pref.type === 'int') {\n finalValue = value.toString();\n } else if (pref.type === 'bool') {\n finalValue = value.toString();\n } else {\n finalValue = value;\n }\n\n await storeData(key, finalValue);\n },\n\n addListener: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.on('load', callback);\n },\n};\n\nconst storeData = async (key: string, value: string) => {\n try {\n if (typeof value !== 'string') {\n console.error('只接受 String');\n }\n // console.log('save to storage ' + value);\n await AsyncStorage.setItem(key, value);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst getMultiDatas = async (keys: string[]) => {\n try {\n const values = await AsyncStorage.multiGet(keys);\n // console.log('read from storage ' + values);\n return values;\n } catch (e) {\n console.error(e);\n return [];\n }\n};\n"],"mappings":"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"}
|
package/lib/commonjs/Tool.js
CHANGED
|
@@ -34,6 +34,19 @@ const Tool = exports.Tool = {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
return fmt;
|
|
37
|
-
}
|
|
37
|
+
},
|
|
38
|
+
isPlainObject: target => {
|
|
39
|
+
return target && target.toString() === '[object Object]' && Object.getPrototypeOf(target) === Object.prototype;
|
|
40
|
+
},
|
|
41
|
+
_jsonify: target => {
|
|
42
|
+
if (target && typeof target.toJSON === 'function') return target.toJSON();
|
|
43
|
+
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
44
|
+
if (Array.isArray(target)) return target.map(Tool._jsonify);
|
|
45
|
+
return target;
|
|
46
|
+
},
|
|
47
|
+
jsonify: target => Tool.isPlainObject(target) ? Object.keys(target).reduce((result, key) => ({
|
|
48
|
+
...result,
|
|
49
|
+
[key]: Tool._jsonify(target[key])
|
|
50
|
+
}), {}) : Tool._jsonify(target)
|
|
38
51
|
};
|
|
39
52
|
//# sourceMappingURL=Tool.js.map
|
package/lib/commonjs/Tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Tool","exports","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","toString"],"sources":["Tool.ts"],"sourcesContent":["export const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n};\n"],"mappings":";;;;;;AAAO,MAAMA,IAAI,GAAAC,OAAA,CAAAD,IAAA,GAAG;EAClBE,KAAK,EAAGC,KAAa,IACnB,IAAIC,OAAO,CAAEC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAEF,KAAK,CAAC,CAAC;EAEtDI,UAAUA,CAACC,IAAU,EAAEC,GAAW,EAAU;IAC1CA,GAAG,GAAGA,GAAG,GAAGA,GAAG,GAAG,YAAY;IAC9B,IAAIC,CAA4B,GAAG;MACjC,IAAI,EAAEF,IAAI,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC;MAAE;MAC3B,IAAI,EAAEH,IAAI,CAACI,OAAO,CAAC,CAAC;MAAE;MACtB,IAAI,EAAEJ,IAAI,CAACK,QAAQ,CAAC,CAAC;MAAE;MACvB,IAAI,EAAEL,IAAI,CAACM,UAAU,CAAC,CAAC;MAAE;MACzB,IAAI,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;MAAE;MACzB,IAAI,EAAEC,IAAI,CAACC,KAAK,CAAC,CAACT,IAAI,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;MAAE;MAC7C,GAAG,EAAEH,IAAI,CAACU,eAAe,CAAC,CAAC,CAAE;IAC/B,CAAC;;IAED;IACA,IAAI,OAAO,CAACC,IAAI,CAACV,GAAG,CAAC,EAAE;MACrBA,GAAG,GAAGA,GAAG,CAACW,OAAO,CACfC,MAAM,CAACC,EAAE,EACT,CAACd,IAAI,CAACe,WAAW,CAAC,CAAC,GAAG,EAAE,EAAEC,MAAM,CAAC,CAAC,GAAGH,MAAM,CAACC,EAAE,CAACG,MAAM,CACvD,CAAC;IACH;IAEA,KAAK,IAAIC,CAAC,IAAIhB,CAAC,EAAE;MACf,IAAI,IAAIW,MAAM,CAAC,GAAG,GAAGK,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAACP,IAAI,CAACV,GAAG,CAAC,EAAE;QAC5CA,GAAG,GAAGA,GAAG,CAACW,OAAO,CACfC,MAAM,CAACC,EAAE,EACT,CAACD,MAAM,CAACC,EAAE,CAACG,MAAM,KAAK,CAAC,GACnBf,CAAC,CAACgB,CAAC,CAAC,GACJ,CAAC,IAAI,GAAGhB,CAAC,CAACgB,CAAC,CAAC,EAAEF,MAAM,CAAC,CAAC,EAAE,GAAGd,CAAC,CAACgB,CAAC,CAAC,EAAED,MAAM,CAAC,EAC1CE,QAAQ,CAAC,CACb,CAAC;MACH;IACF;IACA,OAAOlB,GAAG;EACZ;
|
|
1
|
+
{"version":3,"names":["Tool","exports","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","toString","isPlainObject","target","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","jsonify","keys","reduce","result","key"],"sources":["Tool.ts"],"sourcesContent":["export const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n isPlainObject: (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n },\n\n _jsonify: (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(Tool._jsonify);\n return target;\n },\n\n jsonify: (target: any) =>\n Tool.isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: Tool._jsonify(target[key]),\n }),\n {}\n )\n : Tool._jsonify(target),\n};\n"],"mappings":"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"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -42,6 +42,18 @@ Object.keys(_DevConfig).forEach(function (key) {
|
|
|
42
42
|
}
|
|
43
43
|
});
|
|
44
44
|
});
|
|
45
|
+
var _Frequence = require("./Frequence");
|
|
46
|
+
Object.keys(_Frequence).forEach(function (key) {
|
|
47
|
+
if (key === "default" || key === "__esModule") return;
|
|
48
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
49
|
+
if (key in exports && exports[key] === _Frequence[key]) return;
|
|
50
|
+
Object.defineProperty(exports, key, {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
get: function () {
|
|
53
|
+
return _Frequence[key];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
45
57
|
var _LoginManager = require("./LoginManager");
|
|
46
58
|
Object.keys(_LoginManager).forEach(function (key) {
|
|
47
59
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -54,6 +66,18 @@ Object.keys(_LoginManager).forEach(function (key) {
|
|
|
54
66
|
}
|
|
55
67
|
});
|
|
56
68
|
});
|
|
69
|
+
var _MessageModel = require("./MessageModel");
|
|
70
|
+
Object.keys(_MessageModel).forEach(function (key) {
|
|
71
|
+
if (key === "default" || key === "__esModule") return;
|
|
72
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
73
|
+
if (key in exports && exports[key] === _MessageModel[key]) return;
|
|
74
|
+
Object.defineProperty(exports, key, {
|
|
75
|
+
enumerable: true,
|
|
76
|
+
get: function () {
|
|
77
|
+
return _MessageModel[key];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
57
81
|
var _Notification = require("./Notification");
|
|
58
82
|
Object.keys(_Notification).forEach(function (key) {
|
|
59
83
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_AppleLoginUtil","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_ConfigDataModel","_DevConfig","_LoginManager","_Notification","_PrefData","_ReportUtil","_SentryManager","_SyncPrefData","_Tool","_VipAndroidManager","_VipManager","_WeChatLoginUtil","_constant","ReactNativeToolkit","NativeModules","_default","default"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ntype ReactNativeToolkitType = {\n multiply(a: number, b: number): Promise<number>;\n};\n\nconst { ReactNativeToolkit } = NativeModules;\n\nexport default ReactNativeToolkit as ReactNativeToolkitType;\nexport * from './AppleLoginUtil';\nexport * from './ConfigDataModel';\nexport * from './DevConfig';\nexport * from './LoginManager';\nexport * from './Notification';\nexport * from './PrefData';\nexport * from './ReportUtil';\nexport * from './SentryManager';\nexport * from './SyncPrefData';\nexport * from './Tool';\nexport * from './VipAndroidManager';\nexport * from './VipManager';\nexport * from './WeChatLoginUtil';\nexport * from './constant';\n"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AASA,IAAAC,eAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,eAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,eAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,eAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,gBAAA,GAAAd,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAW,gBAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,gBAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,gBAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,UAAA,GAAAf,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAY,UAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,UAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,UAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AACA,IAAAW,
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_AppleLoginUtil","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_ConfigDataModel","_DevConfig","_Frequence","_LoginManager","_MessageModel","_Notification","_PrefData","_ReportUtil","_SentryManager","_SyncPrefData","_Tool","_VipAndroidManager","_VipManager","_WeChatLoginUtil","_constant","ReactNativeToolkit","NativeModules","_default","default"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ntype ReactNativeToolkitType = {\n multiply(a: number, b: number): Promise<number>;\n};\n\nconst { ReactNativeToolkit } = NativeModules;\n\nexport default ReactNativeToolkit as ReactNativeToolkitType;\nexport * from './AppleLoginUtil';\nexport * from './ConfigDataModel';\nexport * from './DevConfig';\nexport * from './Frequence';\nexport * from './LoginManager';\nexport * from './MessageModel';\nexport * from './Notification';\nexport * from './PrefData';\nexport * from './ReportUtil';\nexport * from './SentryManager';\nexport * from './SyncPrefData';\nexport * from './Tool';\nexport * from './VipAndroidManager';\nexport * from './VipManager';\nexport * from './WeChatLoginUtil';\nexport * from './constant';\n"],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
3
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
4
|
+
import { BuildInPrefs, PrefData } from './PrefData';
|
|
5
|
+
class FreConfigValueType {
|
|
6
|
+
// 实际展示的次数,配合 limit 计算
|
|
7
|
+
constructor() {
|
|
8
|
+
_defineProperty(this, "lastTimestamp", void 0);
|
|
9
|
+
// 上一次展示的时间,配合 gap 计算
|
|
10
|
+
_defineProperty(this, "count", void 0);
|
|
11
|
+
this.count = 0;
|
|
12
|
+
this.lastTimestamp = 0;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const now = () => {
|
|
16
|
+
return new Date().getTime() / 1000;
|
|
17
|
+
};
|
|
18
|
+
export const FrequenceManager = {
|
|
19
|
+
canRun: config => {
|
|
20
|
+
var _PrefData$getValue, _config$limit, _config$limit2, _config$gap, _config$gap2;
|
|
21
|
+
const configs = (_PrefData$getValue = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue !== void 0 ? _PrefData$getValue : {};
|
|
22
|
+
if (!configs[config.key]) {
|
|
23
|
+
configs[config.key] = new FreConfigValueType();
|
|
24
|
+
}
|
|
25
|
+
const configValue = configs[config.key];
|
|
26
|
+
|
|
27
|
+
// 优先判断 Count
|
|
28
|
+
if (((_config$limit = config.limit) !== null && _config$limit !== void 0 ? _config$limit : 0) > 0 && configValue.count >= ((_config$limit2 = config.limit) !== null && _config$limit2 !== void 0 ? _config$limit2 : 0)) {
|
|
29
|
+
console.log('[Frequence] 次数限制', configValue, config);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
// 再判断 Time
|
|
33
|
+
if (((_config$gap = config.gap) !== null && _config$gap !== void 0 ? _config$gap : 0) > 0 && now() - configValue.lastTimestamp < ((_config$gap2 = config.gap) !== null && _config$gap2 !== void 0 ? _config$gap2 : 0)) {
|
|
34
|
+
console.log('[Frequence] 时间限制', configValue, config);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
console.log('[Frequence] 无限制', configValue, config);
|
|
38
|
+
return true;
|
|
39
|
+
},
|
|
40
|
+
markFinishForCount: configKey => {
|
|
41
|
+
var _PrefData$getValue2;
|
|
42
|
+
const configs = (_PrefData$getValue2 = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue2 !== void 0 ? _PrefData$getValue2 : {};
|
|
43
|
+
if (!configs[configKey]) {
|
|
44
|
+
configs[configKey] = new FreConfigValueType();
|
|
45
|
+
}
|
|
46
|
+
configs[configKey].count++;
|
|
47
|
+
// console.log('[Frequence] mark finish', configs[config.key]);
|
|
48
|
+
PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
|
|
49
|
+
},
|
|
50
|
+
markFinishForTime: configKey => {
|
|
51
|
+
var _PrefData$getValue3;
|
|
52
|
+
const configs = (_PrefData$getValue3 = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue3 !== void 0 ? _PrefData$getValue3 : {};
|
|
53
|
+
if (!configs[configKey]) {
|
|
54
|
+
configs[configKey] = new FreConfigValueType();
|
|
55
|
+
}
|
|
56
|
+
configs[configKey].lastTimestamp = now();
|
|
57
|
+
// console.log('[Frequence] mark finish', configs[config.key]);
|
|
58
|
+
PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=Frequence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BuildInPrefs","PrefData","FreConfigValueType","constructor","_defineProperty","count","lastTimestamp","now","Date","getTime","FrequenceManager","canRun","config","_PrefData$getValue","_config$limit","_config$limit2","_config$gap","_config$gap2","configs","getValue","FrequenceConfig","key","configValue","limit","console","log","gap","markFinishForCount","configKey","_PrefData$getValue2","setValue","markFinishForTime","_PrefData$getValue3"],"sources":["Frequence.ts"],"sourcesContent":["import { BuildInPrefs, PrefData } from './PrefData';\n\nexport interface FreConfigType {\n key: string;\n limit?: number; // 0 表示无限次提示\n gap?: number; // 单位:秒;0 表示不间断提示\n}\n\nclass FreConfigValueType {\n lastTimestamp: number; // 上一次展示的时间,配合 gap 计算\n count: number; // 实际展示的次数,配合 limit 计算\n constructor() {\n this.count = 0;\n this.lastTimestamp = 0;\n }\n}\n\nconst now = () => {\n return new Date().getTime() / 1000;\n};\n\nexport const FrequenceManager = {\n canRun: (config: FreConfigType) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n if (!configs[config.key]) {\n configs[config.key] = new FreConfigValueType();\n }\n const configValue: FreConfigValueType = configs[config.key];\n\n // 优先判断 Count\n if ((config.limit ?? 0) > 0 && configValue.count >= (config.limit ?? 0)) {\n console.log('[Frequence] 次数限制', configValue, config);\n return false;\n }\n // 再判断 Time\n if (\n (config.gap ?? 0) > 0 &&\n now() - configValue.lastTimestamp < (config.gap ?? 0)\n ) {\n console.log('[Frequence] 时间限制', configValue, config);\n return false;\n }\n\n console.log('[Frequence] 无限制', configValue, config);\n return true;\n },\n\n markFinishForCount: (configKey: string) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n if (!configs[configKey]) {\n configs[configKey] = new FreConfigValueType();\n }\n configs[configKey].count++;\n // console.log('[Frequence] mark finish', configs[config.key]);\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n\n markFinishForTime: (configKey: string) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n if (!configs[configKey]) {\n configs[configKey] = new FreConfigValueType();\n }\n configs[configKey].lastTimestamp = now();\n // console.log('[Frequence] mark finish', configs[config.key]);\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
import { getReadableVersion } from 'react-native-device-info';
|
|
3
|
+
import { ConfigDataModel } from './ConfigDataModel';
|
|
4
|
+
import { FrequenceManager } from './Frequence';
|
|
5
|
+
import { LoginManager } from './LoginManager';
|
|
6
|
+
import { BuildInPrefs, PrefData } from './PrefData';
|
|
7
|
+
import { Tool } from './Tool';
|
|
8
|
+
import { VipManager } from './VipManager';
|
|
9
|
+
const AV = require('leancloud-storage');
|
|
10
|
+
const EventEmitter = require('events').EventEmitter;
|
|
11
|
+
const eventEmitter = new EventEmitter();
|
|
12
|
+
const semverGt = require('semver/functions/gt');
|
|
13
|
+
const semverGte = require('semver/functions/gte');
|
|
14
|
+
const semverCoerce = require('semver/functions/coerce');
|
|
15
|
+
let MyMessages = [];
|
|
16
|
+
const _filterByVersion = items => {
|
|
17
|
+
let ret = [];
|
|
18
|
+
const curVer = semverCoerce(getReadableVersion()).version;
|
|
19
|
+
for (const item of items) {
|
|
20
|
+
var _item$minVer, _item$maxVer;
|
|
21
|
+
const minVer = (_item$minVer = item.minVer) === null || _item$minVer === void 0 ? void 0 : _item$minVer.trim();
|
|
22
|
+
const maxVer = (_item$maxVer = item.maxVer) === null || _item$maxVer === void 0 ? void 0 : _item$maxVer.trim();
|
|
23
|
+
// 确保 cur 处于 [minVer, maxVer)
|
|
24
|
+
if (minVer !== null && minVer !== void 0 && minVer.length && semverGt(semverCoerce(minVer).version, curVer)) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (maxVer !== null && maxVer !== void 0 && maxVer.length && semverGte(curVer, semverCoerce(maxVer).version)) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
ret.push(item);
|
|
31
|
+
}
|
|
32
|
+
return ret;
|
|
33
|
+
};
|
|
34
|
+
const _filterByVip = items => {
|
|
35
|
+
let ret = [];
|
|
36
|
+
const isVip = VipManager.isVip();
|
|
37
|
+
const isForeverVip = VipManager.isForeverVip();
|
|
38
|
+
for (const item of items) {
|
|
39
|
+
const vipFilter = item.vipFilter;
|
|
40
|
+
if (vipFilter === 0 || vipFilter === 1 && !isVip || vipFilter === 2 && !isForeverVip) {
|
|
41
|
+
ret.push(item);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return ret;
|
|
45
|
+
};
|
|
46
|
+
const _filterByUser = items => {
|
|
47
|
+
let ret = [];
|
|
48
|
+
for (const item of items) {
|
|
49
|
+
const users = item.users;
|
|
50
|
+
if (users !== null && users !== void 0 && users.length) {
|
|
51
|
+
if (LoginManager.isLogin()) {
|
|
52
|
+
var _LoginManager$current;
|
|
53
|
+
if (users !== null && users !== void 0 && users.includes((_LoginManager$current = LoginManager.currentUser()) === null || _LoginManager$current === void 0 ? void 0 : _LoginManager$current.AVUser.get('objectId'))) {
|
|
54
|
+
ret.push(item);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
ret.push(item);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return ret;
|
|
62
|
+
};
|
|
63
|
+
const _handleReadMessages = items => {
|
|
64
|
+
if (__DEV__) {
|
|
65
|
+
// return items;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// 根据已读状态标为已读
|
|
69
|
+
const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
|
|
70
|
+
for (const item of items) {
|
|
71
|
+
if (readMsgs.includes(item.objectId)) {
|
|
72
|
+
item.isRead = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// 挑选需要强制未读
|
|
77
|
+
for (const item of items) {
|
|
78
|
+
var _item$key;
|
|
79
|
+
if (!item.isRead) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (item.key === 'changeLog') {
|
|
83
|
+
// 强制升级弹窗
|
|
84
|
+
// Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的
|
|
85
|
+
const config = ConfigDataModel.getVersionConfig();
|
|
86
|
+
if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {
|
|
87
|
+
item.isRead = false;
|
|
88
|
+
item.updatedAt = new Date().toString();
|
|
89
|
+
}
|
|
90
|
+
} else if ((_item$key = item.key) !== null && _item$key !== void 0 && _item$key.length) {
|
|
91
|
+
const freConfig = {
|
|
92
|
+
key: item.key,
|
|
93
|
+
limit: item.limit,
|
|
94
|
+
gap: item.gap
|
|
95
|
+
};
|
|
96
|
+
if (FrequenceManager.canRun(freConfig)) {
|
|
97
|
+
if (freConfig.gap) {
|
|
98
|
+
FrequenceManager.markFinishForTime(freConfig.key);
|
|
99
|
+
} else if (freConfig.limit) {
|
|
100
|
+
FrequenceManager.markFinishForCount(freConfig.key);
|
|
101
|
+
}
|
|
102
|
+
item.isRead = false;
|
|
103
|
+
item.updatedAt = new Date().toString();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return items;
|
|
108
|
+
};
|
|
109
|
+
export const MessageModel = {
|
|
110
|
+
fetch: () => {
|
|
111
|
+
const query = new AV.Query('Message');
|
|
112
|
+
query.equalTo('valid', true).equalTo(Platform.OS, true).descending('updatedAt');
|
|
113
|
+
query.find().then(async items => {
|
|
114
|
+
console.log('Message 抓取完毕');
|
|
115
|
+
MyMessages = items.map(item => Tool.jsonify(item));
|
|
116
|
+
MyMessages = _filterByVersion(MyMessages);
|
|
117
|
+
MyMessages = _filterByVip(MyMessages);
|
|
118
|
+
MyMessages = _filterByUser(MyMessages);
|
|
119
|
+
MyMessages = _handleReadMessages(MyMessages);
|
|
120
|
+
|
|
121
|
+
// 由于强制插入的未读消息更改了时间,因此需要重新排序
|
|
122
|
+
MyMessages = MyMessages.sort((a, b) => {
|
|
123
|
+
let dateA = new Date(a.updatedAt).getTime();
|
|
124
|
+
let dateB = new Date(b.updatedAt).getTime();
|
|
125
|
+
return dateB - dateA;
|
|
126
|
+
});
|
|
127
|
+
MessageModel.emitChange();
|
|
128
|
+
}).catch(e => {
|
|
129
|
+
console.error(e);
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
getUnreadMessages: () => {
|
|
133
|
+
return MyMessages.filter(item => !item.isRead);
|
|
134
|
+
},
|
|
135
|
+
getAllMessages: () => {
|
|
136
|
+
return MyMessages;
|
|
137
|
+
},
|
|
138
|
+
markMessageRead: async message => {
|
|
139
|
+
if (message.isRead || !message.objectId) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
message.isRead = true;
|
|
143
|
+
const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
|
|
144
|
+
readMsgs.push(message.objectId);
|
|
145
|
+
await PrefData.setValue(BuildInPrefs.Messages, readMsgs);
|
|
146
|
+
MessageModel.emitChange();
|
|
147
|
+
},
|
|
148
|
+
emitChange: () => {
|
|
149
|
+
eventEmitter.emit('change', MyMessages.slice());
|
|
150
|
+
},
|
|
151
|
+
addListenerOnce: callback => {
|
|
152
|
+
eventEmitter.once('change', callback);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=MessageModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","BuildInPrefs","PrefData","Tool","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","length","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","markFinishForTime","markFinishForCount","MessageModel","fetch","query","Query","equalTo","OS","descending","find","then","console","log","map","jsonify","sort","a","b","dateA","getTime","dateB","emitChange","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","setValue","emit","slice","addListenerOnce","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\ninterface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (minVer?.length && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (maxVer?.length && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig.key);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig.key);\n }\n\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nexport const MessageModel = {\n fetch: () => {\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: any[]) => {\n console.log('Message 抓取完毕');\n MyMessages = items.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n MessageModel.emitChange();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"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"}
|
package/lib/module/PrefData.js
CHANGED
|
@@ -18,6 +18,16 @@ export const BuildInPrefs = {
|
|
|
18
18
|
key: 'DevDanger_Key',
|
|
19
19
|
type: 'int',
|
|
20
20
|
default: 0
|
|
21
|
+
},
|
|
22
|
+
FrequenceConfig: {
|
|
23
|
+
key: 'FrequenceConfig_Key',
|
|
24
|
+
type: 'object',
|
|
25
|
+
default: {}
|
|
26
|
+
},
|
|
27
|
+
Messages: {
|
|
28
|
+
key: 'Message_Key5',
|
|
29
|
+
type: 'array',
|
|
30
|
+
default: []
|
|
21
31
|
}
|
|
22
32
|
};
|
|
23
33
|
const getPrefByKey = (Prefs, key) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AsyncStorage","EventEmitter","require","eventEmitter","isDataLoaded","_PrefDatas","BuildInPrefs","LastLoginType","key","type","default","DevVip","DevDanger","getPrefByKey","Prefs","keyOfPref","PrefData","load","initPrefs","console","log","keys","pref","push","values","getMultiDatas","i","length","value","JSON","parse","parseInt","emit","getValue","setValue","finalValue","stringify","toString","storeData","addListener","callback","on","error","setItem","e","multiGet"],"sources":["PrefData.ts"],"sourcesContent":["import AsyncStorage from '@react-native-community/async-storage';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nlet isDataLoaded = false;\n\nexport interface PrefType {\n key: string;\n type: string;\n default: any;\n}\n\nexport interface PrefsType {\n [key: string]: PrefType;\n}\n\nconst _PrefDatas: { [key: string]: any } = {};\n\nexport const BuildInPrefs: PrefsType = {\n LastLoginType: {\n key: 'LastLoginType_Key',\n type: 'int',\n default: -1,\n },\n DevVip: {\n key: 'DevVip_Key',\n type: 'int',\n default: 0,\n },\n DevDanger: {\n key: 'DevDanger_Key',\n type: 'int',\n default: 0,\n },\n};\n\nconst getPrefByKey = (Prefs: PrefsType, key: string) => {\n for (const keyOfPref in Prefs) {\n if (Prefs[keyOfPref].key === key) {\n return Prefs[keyOfPref];\n }\n }\n return null;\n};\n\nexport const PrefData = {\n load: async (initPrefs: PrefsType) => {\n console.log('读取配置');\n let keys = [];\n const Prefs = { ...BuildInPrefs, ...initPrefs };\n for (const pref in Prefs) {\n keys.push(Prefs[pref].key);\n }\n const values = await getMultiDatas(keys);\n\n for (let i = 0; i < values.length; i++) {\n const key = values[i][0];\n const value = values[i][1];\n const pref = getPrefByKey(Prefs, key);\n if (!pref) {\n continue;\n }\n // console.log(key, value, pref);\n if (!value) {\n _PrefDatas[key] = pref.default;\n } else if (pref.type === 'object' || pref.type === 'array') {\n _PrefDatas[key] = JSON.parse(value);\n } else if (pref.type === 'int') {\n _PrefDatas[key] = parseInt(value, 10);\n } else if (pref.type === 'bool') {\n _PrefDatas[key] = JSON.parse(value);\n } else {\n _PrefDatas[key] = value;\n }\n // console.log(\n // '配置读取结果:',\n // key,\n // _PrefDatas[key],\n // typeof _PrefDatas[key],\n // );\n }\n\n eventEmitter.emit('load');\n isDataLoaded = true;\n },\n\n getValue: (pref: PrefType) => {\n return _PrefDatas[pref.key];\n },\n\n setValue: async (pref: PrefType, value: any) => {\n const key = pref.key;\n let finalValue: string;\n _PrefDatas[key] = value;\n if (pref.type === 'object' || pref.type === 'array') {\n finalValue = JSON.stringify(value);\n } else if (pref.type === 'int') {\n finalValue = value.toString();\n } else if (pref.type === 'bool') {\n finalValue = value.toString();\n } else {\n finalValue = value;\n }\n\n await storeData(key, finalValue);\n },\n\n addListener: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.on('load', callback);\n },\n};\n\nconst storeData = async (key: string, value: string) => {\n try {\n if (typeof value !== 'string') {\n console.error('只接受 String');\n }\n // console.log('save to storage ' + value);\n await AsyncStorage.setItem(key, value);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst getMultiDatas = async (keys: string[]) => {\n try {\n const values = await AsyncStorage.multiGet(keys);\n // console.log('read from storage ' + values);\n return values;\n } catch (e) {\n console.error(e);\n return [];\n }\n};\n"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uCAAuC;AAEhE,MAAMC,YAAY,GAAGC,OAAO,CAAC,QAAQ,CAAC,CAACD,YAAY;AACnD,MAAME,YAAY,GAAG,IAAIF,YAAY,CAAC,CAAC;AAEvC,IAAIG,YAAY,GAAG,KAAK;AAYxB,MAAMC,UAAkC,GAAG,CAAC,CAAC;AAE7C,OAAO,MAAMC,YAAuB,GAAG;EACrCC,aAAa,EAAE;IACbC,GAAG,EAAE,mBAAmB;IACxBC,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE,CAAC;EACZ,CAAC;EACDC,MAAM,EAAE;IACNH,GAAG,EAAE,YAAY;IACjBC,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE;EACX,CAAC;EACDE,SAAS,EAAE;IACTJ,GAAG,EAAE,eAAe;IACpBC,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE;EACX;AACF,CAAC;AAED,
|
|
1
|
+
{"version":3,"names":["AsyncStorage","EventEmitter","require","eventEmitter","isDataLoaded","_PrefDatas","BuildInPrefs","LastLoginType","key","type","default","DevVip","DevDanger","FrequenceConfig","Messages","getPrefByKey","Prefs","keyOfPref","PrefData","load","initPrefs","console","log","keys","pref","push","values","getMultiDatas","i","length","value","JSON","parse","parseInt","emit","getValue","setValue","finalValue","stringify","toString","storeData","addListener","callback","on","error","setItem","e","multiGet"],"sources":["PrefData.ts"],"sourcesContent":["import AsyncStorage from '@react-native-community/async-storage';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nlet isDataLoaded = false;\n\nexport interface PrefType {\n key: string;\n type: string;\n default: any;\n}\n\nexport interface PrefsType {\n [key: string]: PrefType;\n}\n\nconst _PrefDatas: { [key: string]: any } = {};\n\nexport const BuildInPrefs: PrefsType = {\n LastLoginType: {\n key: 'LastLoginType_Key',\n type: 'int',\n default: -1,\n },\n DevVip: {\n key: 'DevVip_Key',\n type: 'int',\n default: 0,\n },\n DevDanger: {\n key: 'DevDanger_Key',\n type: 'int',\n default: 0,\n },\n FrequenceConfig: {\n key: 'FrequenceConfig_Key',\n type: 'object',\n default: {},\n },\n Messages: {\n key: 'Message_Key5',\n type: 'array',\n default: [],\n },\n};\n\nconst getPrefByKey = (Prefs: PrefsType, key: string) => {\n for (const keyOfPref in Prefs) {\n if (Prefs[keyOfPref].key === key) {\n return Prefs[keyOfPref];\n }\n }\n return null;\n};\n\nexport const PrefData = {\n load: async (initPrefs: PrefsType) => {\n console.log('读取配置');\n let keys = [];\n const Prefs = { ...BuildInPrefs, ...initPrefs };\n for (const pref in Prefs) {\n keys.push(Prefs[pref].key);\n }\n const values = await getMultiDatas(keys);\n\n for (let i = 0; i < values.length; i++) {\n const key = values[i][0];\n const value = values[i][1];\n const pref = getPrefByKey(Prefs, key);\n if (!pref) {\n continue;\n }\n // console.log(key, value, pref);\n if (!value) {\n _PrefDatas[key] = pref.default;\n } else if (pref.type === 'object' || pref.type === 'array') {\n _PrefDatas[key] = JSON.parse(value);\n } else if (pref.type === 'int') {\n _PrefDatas[key] = parseInt(value, 10);\n } else if (pref.type === 'bool') {\n _PrefDatas[key] = JSON.parse(value);\n } else {\n _PrefDatas[key] = value;\n }\n // console.log(\n // '配置读取结果:',\n // key,\n // _PrefDatas[key],\n // typeof _PrefDatas[key],\n // );\n }\n\n eventEmitter.emit('load');\n isDataLoaded = true;\n },\n\n getValue: (pref: PrefType) => {\n return _PrefDatas[pref.key];\n },\n\n setValue: async (pref: PrefType, value: any) => {\n const key = pref.key;\n let finalValue: string;\n _PrefDatas[key] = value;\n if (pref.type === 'object' || pref.type === 'array') {\n finalValue = JSON.stringify(value);\n } else if (pref.type === 'int') {\n finalValue = value.toString();\n } else if (pref.type === 'bool') {\n finalValue = value.toString();\n } else {\n finalValue = value;\n }\n\n await storeData(key, finalValue);\n },\n\n addListener: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.on('load', callback);\n },\n};\n\nconst storeData = async (key: string, value: string) => {\n try {\n if (typeof value !== 'string') {\n console.error('只接受 String');\n }\n // console.log('save to storage ' + value);\n await AsyncStorage.setItem(key, value);\n } catch (e) {\n console.error(e);\n }\n};\n\nconst getMultiDatas = async (keys: string[]) => {\n try {\n const values = await AsyncStorage.multiGet(keys);\n // console.log('read from storage ' + values);\n return values;\n } catch (e) {\n console.error(e);\n return [];\n }\n};\n"],"mappings":"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"}
|
package/lib/module/Tool.js
CHANGED
|
@@ -28,6 +28,19 @@ export const Tool = {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
return fmt;
|
|
31
|
-
}
|
|
31
|
+
},
|
|
32
|
+
isPlainObject: target => {
|
|
33
|
+
return target && target.toString() === '[object Object]' && Object.getPrototypeOf(target) === Object.prototype;
|
|
34
|
+
},
|
|
35
|
+
_jsonify: target => {
|
|
36
|
+
if (target && typeof target.toJSON === 'function') return target.toJSON();
|
|
37
|
+
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
38
|
+
if (Array.isArray(target)) return target.map(Tool._jsonify);
|
|
39
|
+
return target;
|
|
40
|
+
},
|
|
41
|
+
jsonify: target => Tool.isPlainObject(target) ? Object.keys(target).reduce((result, key) => ({
|
|
42
|
+
...result,
|
|
43
|
+
[key]: Tool._jsonify(target[key])
|
|
44
|
+
}), {}) : Tool._jsonify(target)
|
|
32
45
|
};
|
|
33
46
|
//# sourceMappingURL=Tool.js.map
|
package/lib/module/Tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","toString"],"sources":["Tool.ts"],"sourcesContent":["export const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n};\n"],"mappings":"AAAA,OAAO,MAAMA,IAAI,GAAG;EAClBC,KAAK,EAAGC,KAAa,IACnB,IAAIC,OAAO,CAAEC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAEF,KAAK,CAAC,CAAC;EAEtDI,UAAUA,CAACC,IAAU,EAAEC,GAAW,EAAU;IAC1CA,GAAG,GAAGA,GAAG,GAAGA,GAAG,GAAG,YAAY;IAC9B,IAAIC,CAA4B,GAAG;MACjC,IAAI,EAAEF,IAAI,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC;MAAE;MAC3B,IAAI,EAAEH,IAAI,CAACI,OAAO,CAAC,CAAC;MAAE;MACtB,IAAI,EAAEJ,IAAI,CAACK,QAAQ,CAAC,CAAC;MAAE;MACvB,IAAI,EAAEL,IAAI,CAACM,UAAU,CAAC,CAAC;MAAE;MACzB,IAAI,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;MAAE;MACzB,IAAI,EAAEC,IAAI,CAACC,KAAK,CAAC,CAACT,IAAI,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;MAAE;MAC7C,GAAG,EAAEH,IAAI,CAACU,eAAe,CAAC,CAAC,CAAE;IAC/B,CAAC;;IAED;IACA,IAAI,OAAO,CAACC,IAAI,CAACV,GAAG,CAAC,EAAE;MACrBA,GAAG,GAAGA,GAAG,CAACW,OAAO,CACfC,MAAM,CAACC,EAAE,EACT,CAACd,IAAI,CAACe,WAAW,CAAC,CAAC,GAAG,EAAE,EAAEC,MAAM,CAAC,CAAC,GAAGH,MAAM,CAACC,EAAE,CAACG,MAAM,CACvD,CAAC;IACH;IAEA,KAAK,IAAIC,CAAC,IAAIhB,CAAC,EAAE;MACf,IAAI,IAAIW,MAAM,CAAC,GAAG,GAAGK,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAACP,IAAI,CAACV,GAAG,CAAC,EAAE;QAC5CA,GAAG,GAAGA,GAAG,CAACW,OAAO,CACfC,MAAM,CAACC,EAAE,EACT,CAACD,MAAM,CAACC,EAAE,CAACG,MAAM,KAAK,CAAC,GACnBf,CAAC,CAACgB,CAAC,CAAC,GACJ,CAAC,IAAI,GAAGhB,CAAC,CAACgB,CAAC,CAAC,EAAEF,MAAM,CAAC,CAAC,EAAE,GAAGd,CAAC,CAACgB,CAAC,CAAC,EAAED,MAAM,CAAC,EAC1CE,QAAQ,CAAC,CACb,CAAC;MACH;IACF;IACA,OAAOlB,GAAG;EACZ;
|
|
1
|
+
{"version":3,"names":["Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","toString","isPlainObject","target","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","jsonify","keys","reduce","result","key"],"sources":["Tool.ts"],"sourcesContent":["export const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n isPlainObject: (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n },\n\n _jsonify: (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(Tool._jsonify);\n return target;\n },\n\n jsonify: (target: any) =>\n Tool.isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: Tool._jsonify(target[key]),\n }),\n {}\n )\n : Tool._jsonify(target),\n};\n"],"mappings":"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"}
|
package/lib/module/index.js
CHANGED
|
@@ -6,7 +6,9 @@ export default ReactNativeToolkit;
|
|
|
6
6
|
export * from './AppleLoginUtil';
|
|
7
7
|
export * from './ConfigDataModel';
|
|
8
8
|
export * from './DevConfig';
|
|
9
|
+
export * from './Frequence';
|
|
9
10
|
export * from './LoginManager';
|
|
11
|
+
export * from './MessageModel';
|
|
10
12
|
export * from './Notification';
|
|
11
13
|
export * from './PrefData';
|
|
12
14
|
export * from './ReportUtil';
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","ReactNativeToolkit"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ntype ReactNativeToolkitType = {\n multiply(a: number, b: number): Promise<number>;\n};\n\nconst { ReactNativeToolkit } = NativeModules;\n\nexport default ReactNativeToolkit as ReactNativeToolkitType;\nexport * from './AppleLoginUtil';\nexport * from './ConfigDataModel';\nexport * from './DevConfig';\nexport * from './LoginManager';\nexport * from './Notification';\nexport * from './PrefData';\nexport * from './ReportUtil';\nexport * from './SentryManager';\nexport * from './SyncPrefData';\nexport * from './Tool';\nexport * from './VipAndroidManager';\nexport * from './VipManager';\nexport * from './WeChatLoginUtil';\nexport * from './constant';\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAM5C,MAAM;EAAEC;AAAmB,CAAC,GAAGD,aAAa;AAE5C,eAAeC,kBAAkB;AACjC,cAAc,kBAAkB;AAChC,cAAc,mBAAmB;AACjC,cAAc,aAAa;AAC3B,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,YAAY;AAC1B,cAAc,cAAc;AAC5B,cAAc,iBAAiB;AAC/B,cAAc,gBAAgB;AAC9B,cAAc,QAAQ;AACtB,cAAc,qBAAqB;AACnC,cAAc,cAAc;AAC5B,cAAc,mBAAmB;AACjC,cAAc,YAAY"}
|
|
1
|
+
{"version":3,"names":["NativeModules","ReactNativeToolkit"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ntype ReactNativeToolkitType = {\n multiply(a: number, b: number): Promise<number>;\n};\n\nconst { ReactNativeToolkit } = NativeModules;\n\nexport default ReactNativeToolkit as ReactNativeToolkitType;\nexport * from './AppleLoginUtil';\nexport * from './ConfigDataModel';\nexport * from './DevConfig';\nexport * from './Frequence';\nexport * from './LoginManager';\nexport * from './MessageModel';\nexport * from './Notification';\nexport * from './PrefData';\nexport * from './ReportUtil';\nexport * from './SentryManager';\nexport * from './SyncPrefData';\nexport * from './Tool';\nexport * from './VipAndroidManager';\nexport * from './VipManager';\nexport * from './WeChatLoginUtil';\nexport * from './constant';\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAM5C,MAAM;EAAEC;AAAmB,CAAC,GAAGD,aAAa;AAE5C,eAAeC,kBAAkB;AACjC,cAAc,kBAAkB;AAChC,cAAc,mBAAmB;AACjC,cAAc,aAAa;AAC3B,cAAc,aAAa;AAC3B,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,YAAY;AAC1B,cAAc,cAAc;AAC5B,cAAc,iBAAiB;AAC/B,cAAc,gBAAgB;AAC9B,cAAc,QAAQ;AACtB,cAAc,qBAAqB;AACnC,cAAc,cAAc;AAC5B,cAAc,mBAAmB;AACjC,cAAc,YAAY"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface FreConfigType {
|
|
2
|
+
key: string;
|
|
3
|
+
limit?: number;
|
|
4
|
+
gap?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare const FrequenceManager: {
|
|
7
|
+
canRun: (config: FreConfigType) => boolean;
|
|
8
|
+
markFinishForCount: (configKey: string) => void;
|
|
9
|
+
markFinishForTime: (configKey: string) => void;
|
|
10
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface Message {
|
|
2
|
+
objectId: string;
|
|
3
|
+
android: boolean;
|
|
4
|
+
ios: boolean;
|
|
5
|
+
title?: string;
|
|
6
|
+
content?: string;
|
|
7
|
+
maxVer?: string;
|
|
8
|
+
minVer?: string;
|
|
9
|
+
key?: string;
|
|
10
|
+
updatedAt: string;
|
|
11
|
+
valid: boolean;
|
|
12
|
+
vipFilter?: number;
|
|
13
|
+
isRead: boolean;
|
|
14
|
+
users?: string[];
|
|
15
|
+
limit?: number;
|
|
16
|
+
gap?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const MessageModel: {
|
|
19
|
+
fetch: () => void;
|
|
20
|
+
getUnreadMessages: () => Message[];
|
|
21
|
+
getAllMessages: () => Message[];
|
|
22
|
+
markMessageRead: (message: Message) => Promise<void>;
|
|
23
|
+
emitChange: () => void;
|
|
24
|
+
addListenerOnce: (callback: Function) => void;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
package/lib/typescript/Tool.d.ts
CHANGED
|
@@ -6,7 +6,9 @@ export default _default;
|
|
|
6
6
|
export * from './AppleLoginUtil';
|
|
7
7
|
export * from './ConfigDataModel';
|
|
8
8
|
export * from './DevConfig';
|
|
9
|
+
export * from './Frequence';
|
|
9
10
|
export * from './LoginManager';
|
|
11
|
+
export * from './MessageModel';
|
|
10
12
|
export * from './Notification';
|
|
11
13
|
export * from './PrefData';
|
|
12
14
|
export * from './ReportUtil';
|
package/package.json
CHANGED
package/src/Frequence.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { BuildInPrefs, PrefData } from './PrefData';
|
|
2
|
+
|
|
3
|
+
export interface FreConfigType {
|
|
4
|
+
key: string;
|
|
5
|
+
limit?: number; // 0 表示无限次提示
|
|
6
|
+
gap?: number; // 单位:秒;0 表示不间断提示
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
class FreConfigValueType {
|
|
10
|
+
lastTimestamp: number; // 上一次展示的时间,配合 gap 计算
|
|
11
|
+
count: number; // 实际展示的次数,配合 limit 计算
|
|
12
|
+
constructor() {
|
|
13
|
+
this.count = 0;
|
|
14
|
+
this.lastTimestamp = 0;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const now = () => {
|
|
19
|
+
return new Date().getTime() / 1000;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const FrequenceManager = {
|
|
23
|
+
canRun: (config: FreConfigType) => {
|
|
24
|
+
const configs: { [key: string]: FreConfigValueType } =
|
|
25
|
+
PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};
|
|
26
|
+
if (!configs[config.key]) {
|
|
27
|
+
configs[config.key] = new FreConfigValueType();
|
|
28
|
+
}
|
|
29
|
+
const configValue: FreConfigValueType = configs[config.key];
|
|
30
|
+
|
|
31
|
+
// 优先判断 Count
|
|
32
|
+
if ((config.limit ?? 0) > 0 && configValue.count >= (config.limit ?? 0)) {
|
|
33
|
+
console.log('[Frequence] 次数限制', configValue, config);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
// 再判断 Time
|
|
37
|
+
if (
|
|
38
|
+
(config.gap ?? 0) > 0 &&
|
|
39
|
+
now() - configValue.lastTimestamp < (config.gap ?? 0)
|
|
40
|
+
) {
|
|
41
|
+
console.log('[Frequence] 时间限制', configValue, config);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
console.log('[Frequence] 无限制', configValue, config);
|
|
46
|
+
return true;
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
markFinishForCount: (configKey: string) => {
|
|
50
|
+
const configs: { [key: string]: FreConfigValueType } =
|
|
51
|
+
PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};
|
|
52
|
+
if (!configs[configKey]) {
|
|
53
|
+
configs[configKey] = new FreConfigValueType();
|
|
54
|
+
}
|
|
55
|
+
configs[configKey].count++;
|
|
56
|
+
// console.log('[Frequence] mark finish', configs[config.key]);
|
|
57
|
+
PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
markFinishForTime: (configKey: string) => {
|
|
61
|
+
const configs: { [key: string]: FreConfigValueType } =
|
|
62
|
+
PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};
|
|
63
|
+
if (!configs[configKey]) {
|
|
64
|
+
configs[configKey] = new FreConfigValueType();
|
|
65
|
+
}
|
|
66
|
+
configs[configKey].lastTimestamp = now();
|
|
67
|
+
// console.log('[Frequence] mark finish', configs[config.key]);
|
|
68
|
+
PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
|
|
69
|
+
},
|
|
70
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
import { getReadableVersion } from 'react-native-device-info';
|
|
3
|
+
import { ConfigDataModel } from './ConfigDataModel';
|
|
4
|
+
import { FreConfigType, FrequenceManager } from './Frequence';
|
|
5
|
+
import { LoginManager } from './LoginManager';
|
|
6
|
+
import { BuildInPrefs, PrefData } from './PrefData';
|
|
7
|
+
import { Tool } from './Tool';
|
|
8
|
+
import { VipManager } from './VipManager';
|
|
9
|
+
|
|
10
|
+
const AV = require('leancloud-storage');
|
|
11
|
+
const EventEmitter = require('events').EventEmitter;
|
|
12
|
+
const eventEmitter = new EventEmitter();
|
|
13
|
+
const semverGt = require('semver/functions/gt');
|
|
14
|
+
const semverGte = require('semver/functions/gte');
|
|
15
|
+
const semverCoerce = require('semver/functions/coerce');
|
|
16
|
+
|
|
17
|
+
interface Message {
|
|
18
|
+
objectId: string;
|
|
19
|
+
android: boolean;
|
|
20
|
+
ios: boolean;
|
|
21
|
+
title?: string;
|
|
22
|
+
content?: string;
|
|
23
|
+
maxVer?: string;
|
|
24
|
+
minVer?: string;
|
|
25
|
+
key?: string;
|
|
26
|
+
updatedAt: string;
|
|
27
|
+
valid: boolean;
|
|
28
|
+
vipFilter?: number;
|
|
29
|
+
isRead: boolean;
|
|
30
|
+
users?: string[];
|
|
31
|
+
limit?: number;
|
|
32
|
+
gap?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let MyMessages: Message[] = [];
|
|
36
|
+
|
|
37
|
+
const _filterByVersion = (items: Message[]): Message[] => {
|
|
38
|
+
let ret: Message[] = [];
|
|
39
|
+
const curVer = semverCoerce(getReadableVersion()).version;
|
|
40
|
+
for (const item of items) {
|
|
41
|
+
const minVer = item.minVer?.trim();
|
|
42
|
+
const maxVer = item.maxVer?.trim();
|
|
43
|
+
// 确保 cur 处于 [minVer, maxVer)
|
|
44
|
+
if (minVer?.length && semverGt(semverCoerce(minVer).version, curVer)) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (maxVer?.length && semverGte(curVer, semverCoerce(maxVer).version)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
ret.push(item);
|
|
52
|
+
}
|
|
53
|
+
return ret;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const _filterByVip = (items: Message[]): Message[] => {
|
|
57
|
+
let ret: Message[] = [];
|
|
58
|
+
const isVip = VipManager.isVip();
|
|
59
|
+
const isForeverVip = VipManager.isForeverVip();
|
|
60
|
+
for (const item of items) {
|
|
61
|
+
const vipFilter = item.vipFilter;
|
|
62
|
+
if (
|
|
63
|
+
vipFilter === 0 ||
|
|
64
|
+
(vipFilter === 1 && !isVip) ||
|
|
65
|
+
(vipFilter === 2 && !isForeverVip)
|
|
66
|
+
) {
|
|
67
|
+
ret.push(item);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return ret;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const _filterByUser = (items: Message[]): Message[] => {
|
|
74
|
+
let ret: Message[] = [];
|
|
75
|
+
for (const item of items) {
|
|
76
|
+
const users = item.users;
|
|
77
|
+
if (users?.length) {
|
|
78
|
+
if (LoginManager.isLogin()) {
|
|
79
|
+
if (
|
|
80
|
+
users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))
|
|
81
|
+
) {
|
|
82
|
+
ret.push(item);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
ret.push(item);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return ret;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const _handleReadMessages = (items: Message[]): Message[] => {
|
|
93
|
+
if (__DEV__) {
|
|
94
|
+
// return items;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// 根据已读状态标为已读
|
|
98
|
+
const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
|
|
99
|
+
for (const item of items) {
|
|
100
|
+
if (readMsgs.includes(item.objectId)) {
|
|
101
|
+
item.isRead = true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// 挑选需要强制未读
|
|
106
|
+
for (const item of items) {
|
|
107
|
+
if (!item.isRead) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (item.key === 'changeLog') {
|
|
111
|
+
// 强制升级弹窗
|
|
112
|
+
// Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的
|
|
113
|
+
const config = ConfigDataModel.getVersionConfig();
|
|
114
|
+
if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {
|
|
115
|
+
item.isRead = false;
|
|
116
|
+
item.updatedAt = new Date().toString();
|
|
117
|
+
}
|
|
118
|
+
} else if (item.key?.length) {
|
|
119
|
+
const freConfig: FreConfigType = {
|
|
120
|
+
key: item.key,
|
|
121
|
+
limit: item.limit,
|
|
122
|
+
gap: item.gap,
|
|
123
|
+
};
|
|
124
|
+
if (FrequenceManager.canRun(freConfig)) {
|
|
125
|
+
if (freConfig.gap) {
|
|
126
|
+
FrequenceManager.markFinishForTime(freConfig.key);
|
|
127
|
+
} else if (freConfig.limit) {
|
|
128
|
+
FrequenceManager.markFinishForCount(freConfig.key);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
item.isRead = false;
|
|
132
|
+
item.updatedAt = new Date().toString();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return items;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export const MessageModel = {
|
|
141
|
+
fetch: () => {
|
|
142
|
+
const query = new AV.Query('Message');
|
|
143
|
+
query
|
|
144
|
+
.equalTo('valid', true)
|
|
145
|
+
.equalTo(Platform.OS, true)
|
|
146
|
+
.descending('updatedAt');
|
|
147
|
+
query
|
|
148
|
+
.find()
|
|
149
|
+
.then(async (items: any[]) => {
|
|
150
|
+
console.log('Message 抓取完毕');
|
|
151
|
+
MyMessages = items.map((item) => Tool.jsonify(item));
|
|
152
|
+
MyMessages = _filterByVersion(MyMessages);
|
|
153
|
+
MyMessages = _filterByVip(MyMessages);
|
|
154
|
+
MyMessages = _filterByUser(MyMessages);
|
|
155
|
+
MyMessages = _handleReadMessages(MyMessages);
|
|
156
|
+
|
|
157
|
+
// 由于强制插入的未读消息更改了时间,因此需要重新排序
|
|
158
|
+
MyMessages = MyMessages.sort((a: Message, b: Message) => {
|
|
159
|
+
let dateA = new Date(a.updatedAt).getTime();
|
|
160
|
+
let dateB = new Date(b.updatedAt).getTime();
|
|
161
|
+
return dateB - dateA;
|
|
162
|
+
});
|
|
163
|
+
MessageModel.emitChange();
|
|
164
|
+
})
|
|
165
|
+
.catch((e: any) => {
|
|
166
|
+
console.error(e);
|
|
167
|
+
});
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
getUnreadMessages: (): Message[] => {
|
|
171
|
+
return MyMessages.filter((item) => !item.isRead);
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
getAllMessages: (): Message[] => {
|
|
175
|
+
return MyMessages;
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
markMessageRead: async (message: Message) => {
|
|
179
|
+
if (message.isRead || !message.objectId) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
message.isRead = true;
|
|
183
|
+
const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
|
|
184
|
+
readMsgs.push(message.objectId);
|
|
185
|
+
await PrefData.setValue(BuildInPrefs.Messages, readMsgs);
|
|
186
|
+
MessageModel.emitChange();
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
emitChange: () => {
|
|
190
|
+
eventEmitter.emit('change', MyMessages.slice());
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
addListenerOnce: (callback: Function) => {
|
|
194
|
+
eventEmitter.once('change', callback);
|
|
195
|
+
},
|
|
196
|
+
};
|
package/src/PrefData.ts
CHANGED
|
@@ -33,6 +33,16 @@ export const BuildInPrefs: PrefsType = {
|
|
|
33
33
|
type: 'int',
|
|
34
34
|
default: 0,
|
|
35
35
|
},
|
|
36
|
+
FrequenceConfig: {
|
|
37
|
+
key: 'FrequenceConfig_Key',
|
|
38
|
+
type: 'object',
|
|
39
|
+
default: {},
|
|
40
|
+
},
|
|
41
|
+
Messages: {
|
|
42
|
+
key: 'Message_Key5',
|
|
43
|
+
type: 'array',
|
|
44
|
+
default: [],
|
|
45
|
+
},
|
|
36
46
|
};
|
|
37
47
|
|
|
38
48
|
const getPrefByKey = (Prefs: PrefsType, key: string) => {
|
package/src/Tool.ts
CHANGED
|
@@ -35,4 +35,30 @@ export const Tool = {
|
|
|
35
35
|
}
|
|
36
36
|
return fmt;
|
|
37
37
|
},
|
|
38
|
+
|
|
39
|
+
isPlainObject: (target: any) => {
|
|
40
|
+
return (
|
|
41
|
+
target &&
|
|
42
|
+
target.toString() === '[object Object]' &&
|
|
43
|
+
Object.getPrototypeOf(target) === Object.prototype
|
|
44
|
+
);
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
_jsonify: (target: any): any => {
|
|
48
|
+
if (target && typeof target.toJSON === 'function') return target.toJSON();
|
|
49
|
+
// map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
|
|
50
|
+
if (Array.isArray(target)) return target.map(Tool._jsonify);
|
|
51
|
+
return target;
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
jsonify: (target: any) =>
|
|
55
|
+
Tool.isPlainObject(target)
|
|
56
|
+
? Object.keys(target).reduce(
|
|
57
|
+
(result, key) => ({
|
|
58
|
+
...result,
|
|
59
|
+
[key]: Tool._jsonify(target[key]),
|
|
60
|
+
}),
|
|
61
|
+
{}
|
|
62
|
+
)
|
|
63
|
+
: Tool._jsonify(target),
|
|
38
64
|
};
|
package/src/index.tsx
CHANGED
|
@@ -10,7 +10,9 @@ export default ReactNativeToolkit as ReactNativeToolkitType;
|
|
|
10
10
|
export * from './AppleLoginUtil';
|
|
11
11
|
export * from './ConfigDataModel';
|
|
12
12
|
export * from './DevConfig';
|
|
13
|
+
export * from './Frequence';
|
|
13
14
|
export * from './LoginManager';
|
|
15
|
+
export * from './MessageModel';
|
|
14
16
|
export * from './Notification';
|
|
15
17
|
export * from './PrefData';
|
|
16
18
|
export * from './ReportUtil';
|