@norcy/react-native-toolkit 0.1.98 → 0.1.100

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.
@@ -23,12 +23,11 @@ const now = () => {
23
23
  };
24
24
  const FrequenceManager = exports.FrequenceManager = {
25
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();
26
+ var _config$limit, _config$limit2, _config$gap, _config$gap2;
27
+ let configValue = FrequenceManager._getConfigValue(config);
28
+ if (!configValue) {
29
+ configValue = new FreConfigValueType();
30
30
  }
31
- const configValue = configs[config.key];
32
31
 
33
32
  // 优先判断 Count
34
33
  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)) {
@@ -45,23 +44,33 @@ const FrequenceManager = exports.FrequenceManager = {
45
44
  return true;
46
45
  },
47
46
  markFinishForCount: config => {
48
- var _PrefData$getValue2;
49
- const configs = (_PrefData$getValue2 = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue2 !== void 0 ? _PrefData$getValue2 : {};
50
- if (!configs[config.key]) {
51
- configs[config.key] = new FreConfigValueType();
47
+ let configValue = FrequenceManager._getConfigValue(config);
48
+ if (!configValue) {
49
+ configValue = new FreConfigValueType();
52
50
  }
53
- configs[config.key].count++;
54
- // console.log('[Frequence] mark finish', configs[config.key]);
55
- _PrefData.PrefData.setValue(_PrefData.BuildInPrefs.FrequenceConfig, configs);
51
+ configValue.count++;
52
+ configValue.lastTimestamp = now();
53
+ // console.log('[Frequence] mark finish', configValue);
54
+ FrequenceManager._setConfigValue(config, configValue);
56
55
  },
57
56
  markFinishForTime: config => {
58
- var _PrefData$getValue3;
59
- const configs = (_PrefData$getValue3 = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue3 !== void 0 ? _PrefData$getValue3 : {};
60
- if (!configs[config.key]) {
61
- configs[config.key] = new FreConfigValueType();
57
+ let configValue = FrequenceManager._getConfigValue(config);
58
+ if (!configValue) {
59
+ configValue = new FreConfigValueType();
62
60
  }
63
- configs[config.key].lastTimestamp = now();
64
- // console.log('[Frequence] mark finish', configs[config.key]);
61
+ configValue.lastTimestamp = now();
62
+ // console.log('[Frequence] mark finish', configValue);
63
+ FrequenceManager._setConfigValue(config, configValue);
64
+ },
65
+ _getConfigValue: config => {
66
+ var _PrefData$getValue;
67
+ const configs = (_PrefData$getValue = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue !== void 0 ? _PrefData$getValue : {};
68
+ return configs[config.key];
69
+ },
70
+ _setConfigValue: (configType, config) => {
71
+ var _PrefData$getValue2;
72
+ const configs = (_PrefData$getValue2 = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue2 !== void 0 ? _PrefData$getValue2 : {};
73
+ configs[configType.key] = config;
65
74
  _PrefData.PrefData.setValue(_PrefData.BuildInPrefs.FrequenceConfig, configs);
66
75
  }
67
76
  };
@@ -1 +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","gap","markFinishForCount","_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: (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 configs[config.key].count++;\n // console.log('[Frequence] mark finish', configs[config.key]);\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n\n markFinishForTime: (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 configs[config.key].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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"}
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","_config$limit","_config$limit2","_config$gap","_config$gap2","configValue","_getConfigValue","limit","gap","markFinishForCount","_setConfigValue","markFinishForTime","_PrefData$getValue","configs","PrefData","getValue","BuildInPrefs","FrequenceConfig","configType","_PrefData$getValue2","setValue"],"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 let configValue = FrequenceManager._getConfigValue(config);\n if (!configValue) {\n configValue = new FreConfigValueType();\n }\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: (config: FreConfigType) => {\n let configValue = FrequenceManager._getConfigValue(config);\n if (!configValue) {\n configValue = new FreConfigValueType();\n }\n configValue.count++;\n configValue.lastTimestamp = now();\n // console.log('[Frequence] mark finish', configValue);\n FrequenceManager._setConfigValue(config, configValue);\n },\n\n markFinishForTime: (config: FreConfigType) => {\n let configValue = FrequenceManager._getConfigValue(config);\n if (!configValue) {\n configValue = new FreConfigValueType();\n }\n configValue.lastTimestamp = now();\n // console.log('[Frequence] mark finish', configValue);\n FrequenceManager._setConfigValue(config, configValue);\n },\n\n _getConfigValue: (config: FreConfigType) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n return configs[config.key];\n },\n\n _setConfigValue: (configType: FreConfigType, config: FreConfigValueType) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n configs[configType.key] = config;\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n};\n"],"mappings":"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"}
@@ -104,6 +104,11 @@ const _handleReadMessages = items => {
104
104
  if (_Frequence.FrequenceManager.canRun(freConfig)) {
105
105
  item.isRead = false;
106
106
  item.updatedAt = new Date().toString();
107
+ } else {
108
+ const configValue = _Frequence.FrequenceManager._getConfigValue(freConfig);
109
+ if (configValue.lastTimestamp) {
110
+ item.updatedAt = new Date(configValue.lastTimestamp * 1000).toString();
111
+ }
107
112
  }
108
113
  }
109
114
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_Notification","_PrefData","_Tool","_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","config","ConfigDataModel","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","addListener","Notification","_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 { 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 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 // 如果是带 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 }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.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 // 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready\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 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","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_Notification","_PrefData","_Tool","_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","config","ConfigDataModel","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","addListener","Notification","_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 { 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 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 // 如果是带 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 isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.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 // 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready\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 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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"}
@@ -17,12 +17,11 @@ const now = () => {
17
17
  };
18
18
  export const FrequenceManager = {
19
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();
20
+ var _config$limit, _config$limit2, _config$gap, _config$gap2;
21
+ let configValue = FrequenceManager._getConfigValue(config);
22
+ if (!configValue) {
23
+ configValue = new FreConfigValueType();
24
24
  }
25
- const configValue = configs[config.key];
26
25
 
27
26
  // 优先判断 Count
28
27
  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)) {
@@ -39,23 +38,33 @@ export const FrequenceManager = {
39
38
  return true;
40
39
  },
41
40
  markFinishForCount: config => {
42
- var _PrefData$getValue2;
43
- const configs = (_PrefData$getValue2 = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue2 !== void 0 ? _PrefData$getValue2 : {};
44
- if (!configs[config.key]) {
45
- configs[config.key] = new FreConfigValueType();
41
+ let configValue = FrequenceManager._getConfigValue(config);
42
+ if (!configValue) {
43
+ configValue = new FreConfigValueType();
46
44
  }
47
- configs[config.key].count++;
48
- // console.log('[Frequence] mark finish', configs[config.key]);
49
- PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
45
+ configValue.count++;
46
+ configValue.lastTimestamp = now();
47
+ // console.log('[Frequence] mark finish', configValue);
48
+ FrequenceManager._setConfigValue(config, configValue);
50
49
  },
51
50
  markFinishForTime: config => {
52
- var _PrefData$getValue3;
53
- const configs = (_PrefData$getValue3 = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue3 !== void 0 ? _PrefData$getValue3 : {};
54
- if (!configs[config.key]) {
55
- configs[config.key] = new FreConfigValueType();
51
+ let configValue = FrequenceManager._getConfigValue(config);
52
+ if (!configValue) {
53
+ configValue = new FreConfigValueType();
56
54
  }
57
- configs[config.key].lastTimestamp = now();
58
- // console.log('[Frequence] mark finish', configs[config.key]);
55
+ configValue.lastTimestamp = now();
56
+ // console.log('[Frequence] mark finish', configValue);
57
+ FrequenceManager._setConfigValue(config, configValue);
58
+ },
59
+ _getConfigValue: config => {
60
+ var _PrefData$getValue;
61
+ const configs = (_PrefData$getValue = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue !== void 0 ? _PrefData$getValue : {};
62
+ return configs[config.key];
63
+ },
64
+ _setConfigValue: (configType, config) => {
65
+ var _PrefData$getValue2;
66
+ const configs = (_PrefData$getValue2 = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue2 !== void 0 ? _PrefData$getValue2 : {};
67
+ configs[configType.key] = config;
59
68
  PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
60
69
  }
61
70
  };
@@ -1 +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","gap","markFinishForCount","_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: (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 configs[config.key].count++;\n // console.log('[Frequence] mark finish', configs[config.key]);\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n\n markFinishForTime: (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 configs[config.key].lastTimestamp = now();\n // console.log('[Frequence] mark finish', configs[config.key]);\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n};\n"],"mappings":";;;AAAA,SAASA,YAAY,EAAEC,QAAQ,QAAQ,YAAY;AAQnD,MAAMC,kBAAkB,CAAC;EAER;EACfC,WAAWA,CAAA,EAAG;IAAAC,eAAA;IAFS;IAAAA,eAAA;IAGrB,IAAI,CAACC,KAAK,GAAG,CAAC;IACd,IAAI,CAACC,aAAa,GAAG,CAAC;EACxB;AACF;AAEA,MAAMC,GAAG,GAAGA,CAAA,KAAM;EAChB,OAAO,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,GAAG,IAAI;AACpC,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAG;EAC9BC,MAAM,EAAGC,MAAqB,IAAK;IAAA,IAAAC,kBAAA,EAAAC,aAAA,EAAAC,cAAA,EAAAC,WAAA,EAAAC,YAAA;IACjC,MAAMC,OAA8C,IAAAL,kBAAA,GAClDZ,QAAQ,CAACkB,QAAQ,CAACnB,YAAY,CAACoB,eAAe,CAAC,cAAAP,kBAAA,cAAAA,kBAAA,GAAI,CAAC,CAAC;IACvD,IAAI,CAACK,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC,EAAE;MACxBH,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC,GAAG,IAAInB,kBAAkB,CAAC,CAAC;IAChD;IACA,MAAMoB,WAA+B,GAAGJ,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC;;IAE3D;IACA,IAAI,EAAAP,aAAA,GAACF,MAAM,CAACW,KAAK,cAAAT,aAAA,cAAAA,aAAA,GAAI,CAAC,IAAI,CAAC,IAAIQ,WAAW,CAACjB,KAAK,MAAAU,cAAA,GAAKH,MAAM,CAACW,KAAK,cAAAR,cAAA,cAAAA,cAAA,GAAI,CAAC,CAAC,EAAE;MACvE;MACA,OAAO,KAAK;IACd;IACA;IACA,IACE,EAAAC,WAAA,GAACJ,MAAM,CAACY,GAAG,cAAAR,WAAA,cAAAA,WAAA,GAAI,CAAC,IAAI,CAAC,IACrBT,GAAG,CAAC,CAAC,GAAGe,WAAW,CAAChB,aAAa,KAAAW,YAAA,GAAIL,MAAM,CAACY,GAAG,cAAAP,YAAA,cAAAA,YAAA,GAAI,CAAC,CAAC,EACrD;MACA;MACA,OAAO,KAAK;IACd;;IAEA;IACA,OAAO,IAAI;EACb,CAAC;EAEDQ,kBAAkB,EAAGb,MAAqB,IAAK;IAAA,IAAAc,mBAAA;IAC7C,MAAMR,OAA8C,IAAAQ,mBAAA,GAClDzB,QAAQ,CAACkB,QAAQ,CAACnB,YAAY,CAACoB,eAAe,CAAC,cAAAM,mBAAA,cAAAA,mBAAA,GAAI,CAAC,CAAC;IACvD,IAAI,CAACR,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC,EAAE;MACxBH,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC,GAAG,IAAInB,kBAAkB,CAAC,CAAC;IAChD;IACAgB,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC,CAAChB,KAAK,EAAE;IAC3B;IACAJ,QAAQ,CAAC0B,QAAQ,CAAC3B,YAAY,CAACoB,eAAe,EAAEF,OAAO,CAAC;EAC1D,CAAC;EAEDU,iBAAiB,EAAGhB,MAAqB,IAAK;IAAA,IAAAiB,mBAAA;IAC5C,MAAMX,OAA8C,IAAAW,mBAAA,GAClD5B,QAAQ,CAACkB,QAAQ,CAACnB,YAAY,CAACoB,eAAe,CAAC,cAAAS,mBAAA,cAAAA,mBAAA,GAAI,CAAC,CAAC;IACvD,IAAI,CAACX,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC,EAAE;MACxBH,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC,GAAG,IAAInB,kBAAkB,CAAC,CAAC;IAChD;IACAgB,OAAO,CAACN,MAAM,CAACS,GAAG,CAAC,CAACf,aAAa,GAAGC,GAAG,CAAC,CAAC;IACzC;IACAN,QAAQ,CAAC0B,QAAQ,CAAC3B,YAAY,CAACoB,eAAe,EAAEF,OAAO,CAAC;EAC1D;AACF,CAAC"}
1
+ {"version":3,"names":["BuildInPrefs","PrefData","FreConfigValueType","constructor","_defineProperty","count","lastTimestamp","now","Date","getTime","FrequenceManager","canRun","config","_config$limit","_config$limit2","_config$gap","_config$gap2","configValue","_getConfigValue","limit","gap","markFinishForCount","_setConfigValue","markFinishForTime","_PrefData$getValue","configs","getValue","FrequenceConfig","key","configType","_PrefData$getValue2","setValue"],"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 let configValue = FrequenceManager._getConfigValue(config);\n if (!configValue) {\n configValue = new FreConfigValueType();\n }\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: (config: FreConfigType) => {\n let configValue = FrequenceManager._getConfigValue(config);\n if (!configValue) {\n configValue = new FreConfigValueType();\n }\n configValue.count++;\n configValue.lastTimestamp = now();\n // console.log('[Frequence] mark finish', configValue);\n FrequenceManager._setConfigValue(config, configValue);\n },\n\n markFinishForTime: (config: FreConfigType) => {\n let configValue = FrequenceManager._getConfigValue(config);\n if (!configValue) {\n configValue = new FreConfigValueType();\n }\n configValue.lastTimestamp = now();\n // console.log('[Frequence] mark finish', configValue);\n FrequenceManager._setConfigValue(config, configValue);\n },\n\n _getConfigValue: (config: FreConfigType) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n return configs[config.key];\n },\n\n _setConfigValue: (configType: FreConfigType, config: FreConfigValueType) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n configs[configType.key] = config;\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n};\n"],"mappings":"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"}
@@ -98,6 +98,11 @@ const _handleReadMessages = items => {
98
98
  if (FrequenceManager.canRun(freConfig)) {
99
99
  item.isRead = false;
100
100
  item.updatedAt = new Date().toString();
101
+ } else {
102
+ const configValue = FrequenceManager._getConfigValue(freConfig);
103
+ if (configValue.lastTimestamp) {
104
+ item.updatedAt = new Date(configValue.lastTimestamp * 1000).toString();
105
+ }
101
106
  }
102
107
  }
103
108
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","Notification","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","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","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","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 { 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 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 // 如果是带 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 }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.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 // 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready\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 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","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","Notification","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","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","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","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 { 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 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 // 如果是带 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 isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.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 // 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready\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 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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"}
@@ -3,8 +3,16 @@ export interface FreConfigType {
3
3
  limit?: number;
4
4
  gap?: number;
5
5
  }
6
+ declare class FreConfigValueType {
7
+ lastTimestamp: number;
8
+ count: number;
9
+ constructor();
10
+ }
6
11
  export declare const FrequenceManager: {
7
12
  canRun: (config: FreConfigType) => boolean;
8
13
  markFinishForCount: (config: FreConfigType) => void;
9
14
  markFinishForTime: (config: FreConfigType) => void;
15
+ _getConfigValue: (config: FreConfigType) => FreConfigValueType;
16
+ _setConfigValue: (configType: FreConfigType, config: FreConfigValueType) => void;
10
17
  };
18
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norcy/react-native-toolkit",
3
- "version": "0.1.98",
3
+ "version": "0.1.100",
4
4
  "description": "My Toolkit",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/Frequence.ts CHANGED
@@ -21,12 +21,10 @@ const now = () => {
21
21
 
22
22
  export const FrequenceManager = {
23
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();
24
+ let configValue = FrequenceManager._getConfigValue(config);
25
+ if (!configValue) {
26
+ configValue = new FreConfigValueType();
28
27
  }
29
- const configValue: FreConfigValueType = configs[config.key];
30
28
 
31
29
  // 优先判断 Count
32
30
  if ((config.limit ?? 0) > 0 && configValue.count >= (config.limit ?? 0)) {
@@ -47,24 +45,36 @@ export const FrequenceManager = {
47
45
  },
48
46
 
49
47
  markFinishForCount: (config: FreConfigType) => {
50
- const configs: { [key: string]: FreConfigValueType } =
51
- PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};
52
- if (!configs[config.key]) {
53
- configs[config.key] = new FreConfigValueType();
48
+ let configValue = FrequenceManager._getConfigValue(config);
49
+ if (!configValue) {
50
+ configValue = new FreConfigValueType();
54
51
  }
55
- configs[config.key].count++;
56
- // console.log('[Frequence] mark finish', configs[config.key]);
57
- PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
52
+ configValue.count++;
53
+ configValue.lastTimestamp = now();
54
+ // console.log('[Frequence] mark finish', configValue);
55
+ FrequenceManager._setConfigValue(config, configValue);
58
56
  },
59
57
 
60
58
  markFinishForTime: (config: FreConfigType) => {
59
+ let configValue = FrequenceManager._getConfigValue(config);
60
+ if (!configValue) {
61
+ configValue = new FreConfigValueType();
62
+ }
63
+ configValue.lastTimestamp = now();
64
+ // console.log('[Frequence] mark finish', configValue);
65
+ FrequenceManager._setConfigValue(config, configValue);
66
+ },
67
+
68
+ _getConfigValue: (config: FreConfigType) => {
61
69
  const configs: { [key: string]: FreConfigValueType } =
62
70
  PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};
63
- if (!configs[config.key]) {
64
- configs[config.key] = new FreConfigValueType();
65
- }
66
- configs[config.key].lastTimestamp = now();
67
- // console.log('[Frequence] mark finish', configs[config.key]);
71
+ return configs[config.key];
72
+ },
73
+
74
+ _setConfigValue: (configType: FreConfigType, config: FreConfigValueType) => {
75
+ const configs: { [key: string]: FreConfigValueType } =
76
+ PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};
77
+ configs[configType.key] = config;
68
78
  PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
69
79
  },
70
80
  };
@@ -129,6 +129,13 @@ const _handleReadMessages = (items: Message[]): Message[] => {
129
129
  if (FrequenceManager.canRun(freConfig)) {
130
130
  item.isRead = false;
131
131
  item.updatedAt = new Date().toString();
132
+ } else {
133
+ const configValue = FrequenceManager._getConfigValue(freConfig);
134
+ if (configValue.lastTimestamp) {
135
+ item.updatedAt = new Date(
136
+ configValue.lastTimestamp * 1000
137
+ ).toString();
138
+ }
132
139
  }
133
140
  }
134
141
  }
package/.DS_Store DELETED
Binary file
@@ -1,9 +0,0 @@
1
- {
2
- "editor.formatOnSave": true,
3
- "editor.codeActionsOnSave": {
4
- "source.organizeImports": "explicit"
5
- },
6
- "prettier.tabWidth": 4,
7
- "prettier.jsxBracketSameLine": true,
8
- "editor.tabSize": 2
9
- }
package/ios/.DS_Store DELETED
Binary file
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Workspace
3
- version = "1.0">
4
- </Workspace>
package/src/.DS_Store DELETED
Binary file