@norcy/react-native-toolkit 0.1.121 → 0.1.123
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/.DS_Store +0 -0
- package/lib/commonjs/MessageModel.js +1 -13
- package/lib/commonjs/MessageModel.js.map +1 -1
- package/lib/commonjs/VersionManager.js +20 -23
- package/lib/commonjs/VersionManager.js.map +1 -1
- package/lib/module/MessageModel.js +1 -13
- package/lib/module/MessageModel.js.map +1 -1
- package/lib/module/VersionManager.js +20 -23
- package/lib/module/VersionManager.js.map +1 -1
- package/lib/typescript/VersionManager.d.ts +1 -1
- package/package.json +1 -1
- package/src/MessageModel.ts +1 -13
- package/src/VersionManager.ts +25 -35
package/.DS_Store
CHANGED
Binary file
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.MessageModel = void 0;
|
7
7
|
var _reactNative = require("react-native");
|
8
|
-
var _reactNativeDeviceInfo = require("react-native-device-info");
|
9
8
|
var _ConfigDataModel = require("./ConfigDataModel");
|
10
9
|
var _Frequence = require("./Frequence");
|
11
10
|
var _LoginManager = require("./LoginManager");
|
@@ -17,22 +16,11 @@ var _VipManager = require("./VipManager");
|
|
17
16
|
const AV = require('leancloud-storage');
|
18
17
|
const EventEmitter = require('events').EventEmitter;
|
19
18
|
const eventEmitter = new EventEmitter();
|
20
|
-
const semverGt = require('semver/functions/gt');
|
21
|
-
const semverGte = require('semver/functions/gte');
|
22
|
-
const semverCoerce = require('semver/functions/coerce');
|
23
19
|
let MyMessages = [];
|
24
20
|
const _filterByVersion = items => {
|
25
21
|
let ret = [];
|
26
|
-
const curVer = semverCoerce((0, _reactNativeDeviceInfo.getReadableVersion)()).version;
|
27
22
|
for (const item of items) {
|
28
|
-
|
29
|
-
const minVer = (_item$minVer = item.minVer) === null || _item$minVer === void 0 ? void 0 : _item$minVer.trim();
|
30
|
-
const maxVer = (_item$maxVer = item.maxVer) === null || _item$maxVer === void 0 ? void 0 : _item$maxVer.trim();
|
31
|
-
// 确保 cur 处于 [minVer, maxVer)
|
32
|
-
if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {
|
33
|
-
continue;
|
34
|
-
}
|
35
|
-
if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {
|
23
|
+
if (!_VersionManager.VersionManager.isValidVersion(item.minVer, item.maxVer)) {
|
36
24
|
continue;
|
37
25
|
}
|
38
26
|
ret.push(item);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_Notification","_PrefData","_Tool","_VersionManager","_VipManager","AV","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","getReadableVersion","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_filterByUser","users","length","LoginManager","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","objectId","isRead","_item$key","key","ConfigDataModel","VersionManager","hasNewAppVer","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isVipStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","Notification","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","Platform","OS","descending","find","then","catch","e","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","addListenerOnce","callback","once","on","removeListener"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VersionManager } from './VersionManager';\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\nexport interface 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 url: string;\n actionTitle?: string;\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 && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && 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 if (\n ConfigDataModel.get('upgrade_alert') &&\n VersionManager.hasNewAppVer()\n ) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n } else {\n const configValue = FrequenceManager._getConfigValue(freConfig);\n if (configValue.lastTimestamp) {\n item.updatedAt = new Date(\n configValue.lastTimestamp * 1000\n ).toString();\n }\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isVipStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (\n !isConfigStateReady ||\n !OnlineItems.length ||\n !isNetwordDataReady ||\n !isVipStateReady\n ) {\n return;\n }\n\n if (VersionManager.isDanger()) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\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 console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n Notification.addListener('onVipRefresh', () => {\n // 监听多次,直到成功,整个生命周期最多处理一次\n if (!isVipStateReady) {\n isVipStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n ConfigDataModel.addListener(() => {\n if (!isConfigStateReady) {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isConfigStateReady = false;\n isVipStateReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\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: Object[]) => {\n console.log('Message 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse(customFilter);\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\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\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 if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return callback;\n }\n eventEmitter.on('change', callback);\n return callback;\n },\n\n removeListener: (callback: Function) => {\n eventEmitter.removeListener('change', callback);\n },\n};\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_reactNative","require","_ConfigDataModel","_Frequence","_LoginManager","_Notification","_PrefData","_Tool","_VersionManager","_VipManager","AV","EventEmitter","eventEmitter","MyMessages","_filterByVersion","items","ret","item","VersionManager","isValidVersion","minVer","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_filterByUser","users","length","LoginManager","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","objectId","isRead","_item$key","key","ConfigDataModel","hasNewAppVer","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isVipStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","Notification","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","Platform","OS","descending","find","then","catch","e","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","addListenerOnce","callback","once","on","removeListener"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VersionManager } from './VersionManager';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nexport interface 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 url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n if (!VersionManager.isValidVersion(item.minVer, item.maxVer)) {\n continue;\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 if (\n ConfigDataModel.get('upgrade_alert') &&\n VersionManager.hasNewAppVer()\n ) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n } else {\n const configValue = FrequenceManager._getConfigValue(freConfig);\n if (configValue.lastTimestamp) {\n item.updatedAt = new Date(\n configValue.lastTimestamp * 1000\n ).toString();\n }\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isVipStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (\n !isConfigStateReady ||\n !OnlineItems.length ||\n !isNetwordDataReady ||\n !isVipStateReady\n ) {\n return;\n }\n\n if (VersionManager.isDanger()) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\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 console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n Notification.addListener('onVipRefresh', () => {\n // 监听多次,直到成功,整个生命周期最多处理一次\n if (!isVipStateReady) {\n isVipStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n ConfigDataModel.addListener(() => {\n if (!isConfigStateReady) {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isConfigStateReady = false;\n isVipStateReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\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: Object[]) => {\n console.log('Message 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse(customFilter);\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\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\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 if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return callback;\n }\n eventEmitter.on('change', callback);\n return callback;\n },\n\n removeListener: (callback: Function) => {\n eventEmitter.removeListener('change', callback);\n },\n};\n"],"mappings":"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"}
|
@@ -5,14 +5,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.VersionManager = void 0;
|
7
7
|
var _reactNativeDeviceInfo = require("react-native-device-info");
|
8
|
+
var _coerce = _interopRequireDefault(require("semver/functions/coerce"));
|
9
|
+
var _gt = _interopRequireDefault(require("semver/functions/gt"));
|
10
|
+
var _gte = _interopRequireDefault(require("semver/functions/gte"));
|
8
11
|
var _DevConfig = require("./DevConfig");
|
9
12
|
var _PrefData = require("./PrefData");
|
10
|
-
|
11
|
-
|
12
|
-
const
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
14
|
+
// 辅助函数:安全获取版本
|
15
|
+
const safeCoerce = version => {
|
16
|
+
const coerced = (0, _coerce.default)(version);
|
17
|
+
return coerced ? coerced.version : '0.0.0';
|
18
|
+
};
|
13
19
|
let VersionInfo = {
|
14
|
-
currentAppVersion:
|
15
|
-
latestAppVersion:
|
20
|
+
currentAppVersion: safeCoerce((0, _reactNativeDeviceInfo.getReadableVersion)()),
|
21
|
+
latestAppVersion: safeCoerce((0, _reactNativeDeviceInfo.getReadableVersion)()),
|
16
22
|
currentBundleVersion: 0,
|
17
23
|
latestBundleVersion: 0
|
18
24
|
};
|
@@ -23,10 +29,10 @@ const VersionManager = exports.VersionManager = {
|
|
23
29
|
latestBundleVersion
|
24
30
|
} = _ref;
|
25
31
|
if (latestAppVersion) {
|
26
|
-
VersionInfo.latestAppVersion =
|
32
|
+
VersionInfo.latestAppVersion = safeCoerce(latestAppVersion);
|
27
33
|
}
|
28
34
|
if (latestBundleVersion) {
|
29
|
-
VersionInfo.latestBundleVersion =
|
35
|
+
VersionInfo.latestBundleVersion = Number(latestBundleVersion);
|
30
36
|
}
|
31
37
|
_PrefData.PrefData.addListenerOnce(() => {
|
32
38
|
VersionInfo.currentBundleVersion = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.CurrentBundleVersion);
|
@@ -37,17 +43,14 @@ const VersionManager = exports.VersionManager = {
|
|
37
43
|
return _DevConfig.DevConfig.getValue(_PrefData.BuildInPrefs.DevDanger);
|
38
44
|
}
|
39
45
|
// current > online,就危险
|
40
|
-
|
41
|
-
return true;
|
42
|
-
}
|
43
|
-
return false;
|
46
|
+
return (0, _gt.default)(VersionInfo.currentAppVersion, VersionInfo.latestAppVersion);
|
44
47
|
},
|
45
48
|
appVer: () => {
|
46
49
|
return VersionInfo.currentAppVersion;
|
47
50
|
},
|
48
51
|
setBundleVer: bundleVer => {
|
49
52
|
if (bundleVer) {
|
50
|
-
VersionInfo.currentBundleVersion =
|
53
|
+
VersionInfo.currentBundleVersion = Number(bundleVer);
|
51
54
|
_PrefData.PrefData.setValue(_PrefData.BuildInPrefs.CurrentBundleVersion, VersionInfo.currentBundleVersion);
|
52
55
|
}
|
53
56
|
},
|
@@ -59,27 +62,21 @@ const VersionManager = exports.VersionManager = {
|
|
59
62
|
},
|
60
63
|
hasNewAppVer: () => {
|
61
64
|
// online > current,才有新版本
|
62
|
-
|
63
|
-
return true;
|
64
|
-
}
|
65
|
-
return false;
|
65
|
+
return (0, _gt.default)(VersionInfo.latestAppVersion, VersionInfo.currentAppVersion);
|
66
66
|
},
|
67
67
|
hasNewBundleVer: () => {
|
68
68
|
// latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle
|
69
|
-
|
70
|
-
return true;
|
71
|
-
}
|
72
|
-
return false;
|
69
|
+
return VersionInfo.latestBundleVersion > VersionInfo.currentBundleVersion;
|
73
70
|
},
|
74
71
|
isValidVersion: (minVer, maxVer) => {
|
75
72
|
var _minVer, _maxVer;
|
76
73
|
minVer = (_minVer = minVer) === null || _minVer === void 0 ? void 0 : _minVer.trim();
|
77
74
|
maxVer = (_maxVer = maxVer) === null || _maxVer === void 0 ? void 0 : _maxVer.trim();
|
78
|
-
//
|
79
|
-
if (!!minVer &&
|
75
|
+
// 确保 cur 处于 [minVer, maxVer)
|
76
|
+
if (!!minVer && (0, _gt.default)(safeCoerce(minVer), VersionManager.appVer())) {
|
80
77
|
return false;
|
81
78
|
}
|
82
|
-
if (!!maxVer &&
|
79
|
+
if (!!maxVer && (0, _gte.default)(VersionManager.appVer(), safeCoerce(maxVer))) {
|
83
80
|
return false;
|
84
81
|
}
|
85
82
|
return true;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_reactNativeDeviceInfo","require","_DevConfig","_PrefData","
|
1
|
+
{"version":3,"names":["_reactNativeDeviceInfo","require","_coerce","_interopRequireDefault","_gt","_gte","_DevConfig","_PrefData","obj","__esModule","default","safeCoerce","version","coerced","semverCoerce","VersionInfo","currentAppVersion","getReadableVersion","latestAppVersion","currentBundleVersion","latestBundleVersion","VersionManager","exports","init","_ref","Number","PrefData","addListenerOnce","getValue","BuildInPrefs","CurrentBundleVersion","isDanger","__DEV__","DevConfig","hasValue","DevDanger","semverGt","appVer","setBundleVer","bundleVer","setValue","hasNewAppVer","hasNewBundleVer","isValidVersion","minVer","maxVer","_minVer","_maxVer","trim","semverGte"],"sources":["VersionManager.ts"],"sourcesContent":["import { getReadableVersion } from 'react-native-device-info';\nimport semverCoerce from 'semver/functions/coerce';\nimport semverGt from 'semver/functions/gt';\nimport semverGte from 'semver/functions/gte';\nimport { DevConfig } from './DevConfig';\nimport { BuildInPrefs, PrefData } from './PrefData';\n\n// 辅助函数:安全获取版本\nconst safeCoerce = (version: string) => {\n const coerced = semverCoerce(version);\n return coerced ? coerced.version : '0.0.0';\n};\n\nlet VersionInfo = {\n currentAppVersion: safeCoerce(getReadableVersion()),\n latestAppVersion: safeCoerce(getReadableVersion()),\n currentBundleVersion: 0,\n latestBundleVersion: 0,\n};\n\nexport const VersionManager = {\n init: ({\n latestAppVersion,\n latestBundleVersion,\n }: {\n latestAppVersion: string;\n latestBundleVersion?: string;\n }) => {\n if (latestAppVersion) {\n VersionInfo.latestAppVersion = safeCoerce(latestAppVersion);\n }\n\n if (latestBundleVersion) {\n VersionInfo.latestBundleVersion = Number(latestBundleVersion);\n }\n\n PrefData.addListenerOnce(() => {\n VersionInfo.currentBundleVersion = PrefData.getValue(\n BuildInPrefs.CurrentBundleVersion\n );\n });\n },\n\n isDanger: () => {\n if (__DEV__ && DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n return DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n // current > online,就危险\n return semverGt(\n VersionInfo.currentAppVersion,\n VersionInfo.latestAppVersion\n );\n },\n\n appVer: () => {\n return VersionInfo.currentAppVersion;\n },\n\n setBundleVer: (bundleVer: string) => {\n if (bundleVer) {\n VersionInfo.currentBundleVersion = Number(bundleVer);\n PrefData.setValue(\n BuildInPrefs.CurrentBundleVersion,\n VersionInfo.currentBundleVersion\n );\n }\n },\n\n bundleVer: () => {\n return VersionInfo.currentBundleVersion;\n },\n\n getReadableVersion: () => {\n return (\n VersionInfo.currentAppVersion +\n (VersionInfo.currentBundleVersion\n ? '(' + VersionInfo.currentBundleVersion + ')'\n : '')\n );\n },\n\n hasNewAppVer: () => {\n // online > current,才有新版本\n return semverGt(\n VersionInfo.latestAppVersion,\n VersionInfo.currentAppVersion\n );\n },\n\n hasNewBundleVer: () => {\n // latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle\n return VersionInfo.latestBundleVersion > VersionInfo.currentBundleVersion;\n },\n\n isValidVersion: (minVer?: string, maxVer?: string) => {\n minVer = minVer?.trim();\n maxVer = maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(safeCoerce(minVer), VersionManager.appVer())) {\n return false;\n }\n if (!!maxVer && semverGte(VersionManager.appVer(), safeCoerce(maxVer))) {\n return false;\n }\n return true;\n },\n};\n"],"mappings":"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"}
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import { Platform } from 'react-native';
|
2
|
-
import { getReadableVersion } from 'react-native-device-info';
|
3
2
|
import { ConfigDataModel } from './ConfigDataModel';
|
4
3
|
import { FrequenceManager } from './Frequence';
|
5
4
|
import { LoginManager } from './LoginManager';
|
@@ -11,22 +10,11 @@ import { VipManager } from './VipManager';
|
|
11
10
|
const AV = require('leancloud-storage');
|
12
11
|
const EventEmitter = require('events').EventEmitter;
|
13
12
|
const eventEmitter = new EventEmitter();
|
14
|
-
const semverGt = require('semver/functions/gt');
|
15
|
-
const semverGte = require('semver/functions/gte');
|
16
|
-
const semverCoerce = require('semver/functions/coerce');
|
17
13
|
let MyMessages = [];
|
18
14
|
const _filterByVersion = items => {
|
19
15
|
let ret = [];
|
20
|
-
const curVer = semverCoerce(getReadableVersion()).version;
|
21
16
|
for (const item of items) {
|
22
|
-
|
23
|
-
const minVer = (_item$minVer = item.minVer) === null || _item$minVer === void 0 ? void 0 : _item$minVer.trim();
|
24
|
-
const maxVer = (_item$maxVer = item.maxVer) === null || _item$maxVer === void 0 ? void 0 : _item$maxVer.trim();
|
25
|
-
// 确保 cur 处于 [minVer, maxVer)
|
26
|
-
if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {
|
27
|
-
continue;
|
28
|
-
}
|
29
|
-
if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {
|
17
|
+
if (!VersionManager.isValidVersion(item.minVer, item.maxVer)) {
|
30
18
|
continue;
|
31
19
|
}
|
32
20
|
ret.push(item);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","Notification","BuildInPrefs","PrefData","Tool","VersionManager","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","hasNewAppVer","updatedAt","Date","toString","freConfig","limit","gap","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isVipStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","OS","descending","find","then","catch","e","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","addListenerOnce","callback","once","on","removeListener"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VersionManager } from './VersionManager';\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\nexport interface 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 url: string;\n actionTitle?: string;\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 && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && 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 if (\n ConfigDataModel.get('upgrade_alert') &&\n VersionManager.hasNewAppVer()\n ) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n } else {\n const configValue = FrequenceManager._getConfigValue(freConfig);\n if (configValue.lastTimestamp) {\n item.updatedAt = new Date(\n configValue.lastTimestamp * 1000\n ).toString();\n }\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isVipStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (\n !isConfigStateReady ||\n !OnlineItems.length ||\n !isNetwordDataReady ||\n !isVipStateReady\n ) {\n return;\n }\n\n if (VersionManager.isDanger()) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\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 console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n Notification.addListener('onVipRefresh', () => {\n // 监听多次,直到成功,整个生命周期最多处理一次\n if (!isVipStateReady) {\n isVipStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n ConfigDataModel.addListener(() => {\n if (!isConfigStateReady) {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isConfigStateReady = false;\n isVipStateReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\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: Object[]) => {\n console.log('Message 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse(customFilter);\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\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\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 if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return callback;\n }\n eventEmitter.on('change', callback);\n return callback;\n },\n\n removeListener: (callback: Function) => {\n eventEmitter.removeListener('change', callback);\n },\n};\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["Platform","ConfigDataModel","FrequenceManager","LoginManager","Notification","BuildInPrefs","PrefData","Tool","VersionManager","VipManager","AV","require","EventEmitter","eventEmitter","MyMessages","_filterByVersion","items","ret","item","isValidVersion","minVer","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","hasNewAppVer","updatedAt","Date","toString","freConfig","limit","gap","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isVipStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","OS","descending","find","then","catch","e","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","addListenerOnce","callback","once","on","removeListener"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VersionManager } from './VersionManager';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\nexport interface 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 url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n if (!VersionManager.isValidVersion(item.minVer, item.maxVer)) {\n continue;\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 if (\n ConfigDataModel.get('upgrade_alert') &&\n VersionManager.hasNewAppVer()\n ) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n } else {\n const configValue = FrequenceManager._getConfigValue(freConfig);\n if (configValue.lastTimestamp) {\n item.updatedAt = new Date(\n configValue.lastTimestamp * 1000\n ).toString();\n }\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isVipStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (\n !isConfigStateReady ||\n !OnlineItems.length ||\n !isNetwordDataReady ||\n !isVipStateReady\n ) {\n return;\n }\n\n if (VersionManager.isDanger()) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\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 console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n Notification.addListener('onVipRefresh', () => {\n // 监听多次,直到成功,整个生命周期最多处理一次\n if (!isVipStateReady) {\n isVipStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n ConfigDataModel.addListener(() => {\n if (!isConfigStateReady) {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isConfigStateReady = false;\n isVipStateReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\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: Object[]) => {\n console.log('Message 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse(customFilter);\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\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\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 if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return callback;\n }\n eventEmitter.on('change', callback);\n return callback;\n },\n\n removeListener: (callback: Function) => {\n eventEmitter.removeListener('change', callback);\n },\n};\n"],"mappings":"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"}
|
@@ -1,12 +1,18 @@
|
|
1
1
|
import { getReadableVersion } from 'react-native-device-info';
|
2
|
+
import semverCoerce from 'semver/functions/coerce';
|
3
|
+
import semverGt from 'semver/functions/gt';
|
4
|
+
import semverGte from 'semver/functions/gte';
|
2
5
|
import { DevConfig } from './DevConfig';
|
3
6
|
import { BuildInPrefs, PrefData } from './PrefData';
|
4
|
-
|
5
|
-
|
6
|
-
const
|
7
|
+
|
8
|
+
// 辅助函数:安全获取版本
|
9
|
+
const safeCoerce = version => {
|
10
|
+
const coerced = semverCoerce(version);
|
11
|
+
return coerced ? coerced.version : '0.0.0';
|
12
|
+
};
|
7
13
|
let VersionInfo = {
|
8
|
-
currentAppVersion:
|
9
|
-
latestAppVersion:
|
14
|
+
currentAppVersion: safeCoerce(getReadableVersion()),
|
15
|
+
latestAppVersion: safeCoerce(getReadableVersion()),
|
10
16
|
currentBundleVersion: 0,
|
11
17
|
latestBundleVersion: 0
|
12
18
|
};
|
@@ -17,10 +23,10 @@ export const VersionManager = {
|
|
17
23
|
latestBundleVersion
|
18
24
|
} = _ref;
|
19
25
|
if (latestAppVersion) {
|
20
|
-
VersionInfo.latestAppVersion =
|
26
|
+
VersionInfo.latestAppVersion = safeCoerce(latestAppVersion);
|
21
27
|
}
|
22
28
|
if (latestBundleVersion) {
|
23
|
-
VersionInfo.latestBundleVersion =
|
29
|
+
VersionInfo.latestBundleVersion = Number(latestBundleVersion);
|
24
30
|
}
|
25
31
|
PrefData.addListenerOnce(() => {
|
26
32
|
VersionInfo.currentBundleVersion = PrefData.getValue(BuildInPrefs.CurrentBundleVersion);
|
@@ -31,17 +37,14 @@ export const VersionManager = {
|
|
31
37
|
return DevConfig.getValue(BuildInPrefs.DevDanger);
|
32
38
|
}
|
33
39
|
// current > online,就危险
|
34
|
-
|
35
|
-
return true;
|
36
|
-
}
|
37
|
-
return false;
|
40
|
+
return semverGt(VersionInfo.currentAppVersion, VersionInfo.latestAppVersion);
|
38
41
|
},
|
39
42
|
appVer: () => {
|
40
43
|
return VersionInfo.currentAppVersion;
|
41
44
|
},
|
42
45
|
setBundleVer: bundleVer => {
|
43
46
|
if (bundleVer) {
|
44
|
-
VersionInfo.currentBundleVersion =
|
47
|
+
VersionInfo.currentBundleVersion = Number(bundleVer);
|
45
48
|
PrefData.setValue(BuildInPrefs.CurrentBundleVersion, VersionInfo.currentBundleVersion);
|
46
49
|
}
|
47
50
|
},
|
@@ -53,27 +56,21 @@ export const VersionManager = {
|
|
53
56
|
},
|
54
57
|
hasNewAppVer: () => {
|
55
58
|
// online > current,才有新版本
|
56
|
-
|
57
|
-
return true;
|
58
|
-
}
|
59
|
-
return false;
|
59
|
+
return semverGt(VersionInfo.latestAppVersion, VersionInfo.currentAppVersion);
|
60
60
|
},
|
61
61
|
hasNewBundleVer: () => {
|
62
62
|
// latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle
|
63
|
-
|
64
|
-
return true;
|
65
|
-
}
|
66
|
-
return false;
|
63
|
+
return VersionInfo.latestBundleVersion > VersionInfo.currentBundleVersion;
|
67
64
|
},
|
68
65
|
isValidVersion: (minVer, maxVer) => {
|
69
66
|
var _minVer, _maxVer;
|
70
67
|
minVer = (_minVer = minVer) === null || _minVer === void 0 ? void 0 : _minVer.trim();
|
71
68
|
maxVer = (_maxVer = maxVer) === null || _maxVer === void 0 ? void 0 : _maxVer.trim();
|
72
|
-
//
|
73
|
-
if (!!minVer && semverGt(
|
69
|
+
// 确保 cur 处于 [minVer, maxVer)
|
70
|
+
if (!!minVer && semverGt(safeCoerce(minVer), VersionManager.appVer())) {
|
74
71
|
return false;
|
75
72
|
}
|
76
|
-
if (!!maxVer && semverGte(VersionManager.appVer(),
|
73
|
+
if (!!maxVer && semverGte(VersionManager.appVer(), safeCoerce(maxVer))) {
|
77
74
|
return false;
|
78
75
|
}
|
79
76
|
return true;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["getReadableVersion","
|
1
|
+
{"version":3,"names":["getReadableVersion","semverCoerce","semverGt","semverGte","DevConfig","BuildInPrefs","PrefData","safeCoerce","version","coerced","VersionInfo","currentAppVersion","latestAppVersion","currentBundleVersion","latestBundleVersion","VersionManager","init","_ref","Number","addListenerOnce","getValue","CurrentBundleVersion","isDanger","__DEV__","hasValue","DevDanger","appVer","setBundleVer","bundleVer","setValue","hasNewAppVer","hasNewBundleVer","isValidVersion","minVer","maxVer","_minVer","_maxVer","trim"],"sources":["VersionManager.ts"],"sourcesContent":["import { getReadableVersion } from 'react-native-device-info';\nimport semverCoerce from 'semver/functions/coerce';\nimport semverGt from 'semver/functions/gt';\nimport semverGte from 'semver/functions/gte';\nimport { DevConfig } from './DevConfig';\nimport { BuildInPrefs, PrefData } from './PrefData';\n\n// 辅助函数:安全获取版本\nconst safeCoerce = (version: string) => {\n const coerced = semverCoerce(version);\n return coerced ? coerced.version : '0.0.0';\n};\n\nlet VersionInfo = {\n currentAppVersion: safeCoerce(getReadableVersion()),\n latestAppVersion: safeCoerce(getReadableVersion()),\n currentBundleVersion: 0,\n latestBundleVersion: 0,\n};\n\nexport const VersionManager = {\n init: ({\n latestAppVersion,\n latestBundleVersion,\n }: {\n latestAppVersion: string;\n latestBundleVersion?: string;\n }) => {\n if (latestAppVersion) {\n VersionInfo.latestAppVersion = safeCoerce(latestAppVersion);\n }\n\n if (latestBundleVersion) {\n VersionInfo.latestBundleVersion = Number(latestBundleVersion);\n }\n\n PrefData.addListenerOnce(() => {\n VersionInfo.currentBundleVersion = PrefData.getValue(\n BuildInPrefs.CurrentBundleVersion\n );\n });\n },\n\n isDanger: () => {\n if (__DEV__ && DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n return DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n // current > online,就危险\n return semverGt(\n VersionInfo.currentAppVersion,\n VersionInfo.latestAppVersion\n );\n },\n\n appVer: () => {\n return VersionInfo.currentAppVersion;\n },\n\n setBundleVer: (bundleVer: string) => {\n if (bundleVer) {\n VersionInfo.currentBundleVersion = Number(bundleVer);\n PrefData.setValue(\n BuildInPrefs.CurrentBundleVersion,\n VersionInfo.currentBundleVersion\n );\n }\n },\n\n bundleVer: () => {\n return VersionInfo.currentBundleVersion;\n },\n\n getReadableVersion: () => {\n return (\n VersionInfo.currentAppVersion +\n (VersionInfo.currentBundleVersion\n ? '(' + VersionInfo.currentBundleVersion + ')'\n : '')\n );\n },\n\n hasNewAppVer: () => {\n // online > current,才有新版本\n return semverGt(\n VersionInfo.latestAppVersion,\n VersionInfo.currentAppVersion\n );\n },\n\n hasNewBundleVer: () => {\n // latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle\n return VersionInfo.latestBundleVersion > VersionInfo.currentBundleVersion;\n },\n\n isValidVersion: (minVer?: string, maxVer?: string) => {\n minVer = minVer?.trim();\n maxVer = maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(safeCoerce(minVer), VersionManager.appVer())) {\n return false;\n }\n if (!!maxVer && semverGte(VersionManager.appVer(), safeCoerce(maxVer))) {\n return false;\n }\n return true;\n },\n};\n"],"mappings":"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"}
|
@@ -4,7 +4,7 @@ export declare const VersionManager: {
|
|
4
4
|
latestBundleVersion?: string | undefined;
|
5
5
|
}) => void;
|
6
6
|
isDanger: () => any;
|
7
|
-
appVer: () =>
|
7
|
+
appVer: () => string;
|
8
8
|
setBundleVer: (bundleVer: string) => void;
|
9
9
|
bundleVer: () => number;
|
10
10
|
getReadableVersion: () => string;
|
package/package.json
CHANGED
package/src/MessageModel.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import { Object } from 'leancloud-storage';
|
2
2
|
import { Platform } from 'react-native';
|
3
|
-
import { getReadableVersion } from 'react-native-device-info';
|
4
3
|
import { ConfigDataModel } from './ConfigDataModel';
|
5
4
|
import { FreConfigType, FrequenceManager } from './Frequence';
|
6
5
|
import { LoginManager, LoginResultDataType } from './LoginManager';
|
@@ -13,9 +12,6 @@ import { VipManager } from './VipManager';
|
|
13
12
|
const AV = require('leancloud-storage');
|
14
13
|
const EventEmitter = require('events').EventEmitter;
|
15
14
|
const eventEmitter = new EventEmitter();
|
16
|
-
const semverGt = require('semver/functions/gt');
|
17
|
-
const semverGte = require('semver/functions/gte');
|
18
|
-
const semverCoerce = require('semver/functions/coerce');
|
19
15
|
|
20
16
|
export interface Message {
|
21
17
|
objectId: string;
|
@@ -41,18 +37,10 @@ let MyMessages: Message[] = [];
|
|
41
37
|
|
42
38
|
const _filterByVersion = (items: Message[]): Message[] => {
|
43
39
|
let ret: Message[] = [];
|
44
|
-
const curVer = semverCoerce(getReadableVersion()).version;
|
45
40
|
for (const item of items) {
|
46
|
-
|
47
|
-
const maxVer = item.maxVer?.trim();
|
48
|
-
// 确保 cur 处于 [minVer, maxVer)
|
49
|
-
if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {
|
41
|
+
if (!VersionManager.isValidVersion(item.minVer, item.maxVer)) {
|
50
42
|
continue;
|
51
43
|
}
|
52
|
-
if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {
|
53
|
-
continue;
|
54
|
-
}
|
55
|
-
|
56
44
|
ret.push(item);
|
57
45
|
}
|
58
46
|
return ret;
|
package/src/VersionManager.ts
CHANGED
@@ -1,14 +1,19 @@
|
|
1
1
|
import { getReadableVersion } from 'react-native-device-info';
|
2
|
+
import semverCoerce from 'semver/functions/coerce';
|
3
|
+
import semverGt from 'semver/functions/gt';
|
4
|
+
import semverGte from 'semver/functions/gte';
|
2
5
|
import { DevConfig } from './DevConfig';
|
3
6
|
import { BuildInPrefs, PrefData } from './PrefData';
|
4
7
|
|
5
|
-
|
6
|
-
const
|
7
|
-
const
|
8
|
+
// 辅助函数:安全获取版本
|
9
|
+
const safeCoerce = (version: string) => {
|
10
|
+
const coerced = semverCoerce(version);
|
11
|
+
return coerced ? coerced.version : '0.0.0';
|
12
|
+
};
|
8
13
|
|
9
14
|
let VersionInfo = {
|
10
|
-
currentAppVersion:
|
11
|
-
latestAppVersion:
|
15
|
+
currentAppVersion: safeCoerce(getReadableVersion()),
|
16
|
+
latestAppVersion: safeCoerce(getReadableVersion()),
|
12
17
|
currentBundleVersion: 0,
|
13
18
|
latestBundleVersion: 0,
|
14
19
|
};
|
@@ -22,12 +27,11 @@ export const VersionManager = {
|
|
22
27
|
latestBundleVersion?: string;
|
23
28
|
}) => {
|
24
29
|
if (latestAppVersion) {
|
25
|
-
VersionInfo.latestAppVersion =
|
30
|
+
VersionInfo.latestAppVersion = safeCoerce(latestAppVersion);
|
26
31
|
}
|
27
32
|
|
28
33
|
if (latestBundleVersion) {
|
29
|
-
VersionInfo.latestBundleVersion =
|
30
|
-
semverCoerce(latestBundleVersion).version;
|
34
|
+
VersionInfo.latestBundleVersion = Number(latestBundleVersion);
|
31
35
|
}
|
32
36
|
|
33
37
|
PrefData.addListenerOnce(() => {
|
@@ -42,10 +46,10 @@ export const VersionManager = {
|
|
42
46
|
return DevConfig.getValue(BuildInPrefs.DevDanger);
|
43
47
|
}
|
44
48
|
// current > online,就危险
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
return semverGt(
|
50
|
+
VersionInfo.currentAppVersion,
|
51
|
+
VersionInfo.latestAppVersion
|
52
|
+
);
|
49
53
|
},
|
50
54
|
|
51
55
|
appVer: () => {
|
@@ -54,7 +58,7 @@ export const VersionManager = {
|
|
54
58
|
|
55
59
|
setBundleVer: (bundleVer: string) => {
|
56
60
|
if (bundleVer) {
|
57
|
-
VersionInfo.currentBundleVersion =
|
61
|
+
VersionInfo.currentBundleVersion = Number(bundleVer);
|
58
62
|
PrefData.setValue(
|
59
63
|
BuildInPrefs.CurrentBundleVersion,
|
60
64
|
VersionInfo.currentBundleVersion
|
@@ -77,39 +81,25 @@ export const VersionManager = {
|
|
77
81
|
|
78
82
|
hasNewAppVer: () => {
|
79
83
|
// online > current,才有新版本
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
+
return semverGt(
|
85
|
+
VersionInfo.latestAppVersion,
|
86
|
+
VersionInfo.currentAppVersion
|
87
|
+
);
|
84
88
|
},
|
85
89
|
|
86
90
|
hasNewBundleVer: () => {
|
87
91
|
// latestBundleVersion 如果没命中,则为 0,此时判断为无新 Bundle
|
88
|
-
|
89
|
-
semverGt(
|
90
|
-
VersionInfo.latestBundleVersion,
|
91
|
-
VersionInfo.currentBundleVersion
|
92
|
-
)
|
93
|
-
) {
|
94
|
-
return true;
|
95
|
-
}
|
96
|
-
return false;
|
92
|
+
return VersionInfo.latestBundleVersion > VersionInfo.currentBundleVersion;
|
97
93
|
},
|
98
94
|
|
99
95
|
isValidVersion: (minVer?: string, maxVer?: string) => {
|
100
96
|
minVer = minVer?.trim();
|
101
97
|
maxVer = maxVer?.trim();
|
102
|
-
//
|
103
|
-
if (
|
104
|
-
!!minVer &&
|
105
|
-
semverGt(semverCoerce(minVer).version, VersionManager.appVer())
|
106
|
-
) {
|
98
|
+
// 确保 cur 处于 [minVer, maxVer)
|
99
|
+
if (!!minVer && semverGt(safeCoerce(minVer), VersionManager.appVer())) {
|
107
100
|
return false;
|
108
101
|
}
|
109
|
-
if (
|
110
|
-
!!maxVer &&
|
111
|
-
semverGte(VersionManager.appVer(), semverCoerce(maxVer).version)
|
112
|
-
) {
|
102
|
+
if (!!maxVer && semverGte(VersionManager.appVer(), safeCoerce(maxVer))) {
|
113
103
|
return false;
|
114
104
|
}
|
115
105
|
return true;
|