@norcy/react-native-toolkit 0.1.128 → 0.1.130

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/README.md CHANGED
@@ -19,7 +19,7 @@ yarn lint
19
19
  【重要】发布,记得要先把修改内容提交 Git 后再执行此命令
20
20
 
21
21
  ```sh
22
- yarn publish
22
+ yarn publish --patch
23
23
  ```
24
24
 
25
25
  安装依赖
@@ -21,8 +21,20 @@
21
21
 
22
22
  - (BOOL)hook_openURL:(NSURL *)url
23
23
  {
24
- [self openURL:url options:@{} completionHandler:nil];
25
- return YES;
24
+ if (!url) {
25
+ return NO;
26
+ }
27
+
28
+ __block BOOL result = NO;
29
+ dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
30
+
31
+ [self openURL:url options:@{} completionHandler:^(BOOL success) {
32
+ result = success;
33
+ dispatch_semaphore_signal(semaphore);
34
+ }];
35
+
36
+ dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)));
37
+ return result;
26
38
  }
27
39
 
28
40
  @end
@@ -43,20 +43,13 @@ const FrequenceManager = exports.FrequenceManager = {
43
43
  // console.log('[Frequence] 无限制', configValue, config);
44
44
  return true;
45
45
  },
46
- markFinishForCount: config => {
46
+ markFinish: config => {
47
47
  let configValue = FrequenceManager._getConfigValue(config);
48
48
  if (!configValue) {
49
49
  configValue = new FreConfigValueType();
50
50
  }
51
- configValue.count++;
52
- configValue.lastTimestamp = now();
53
- // console.log('[Frequence] mark finish', configValue);
54
- FrequenceManager._setConfigValue(config, configValue);
55
- },
56
- markFinishForTime: config => {
57
- let configValue = FrequenceManager._getConfigValue(config);
58
- if (!configValue) {
59
- configValue = new FreConfigValueType();
51
+ if (config.limit) {
52
+ configValue.count++;
60
53
  }
61
54
  configValue.lastTimestamp = now();
62
55
  // console.log('[Frequence] mark finish', configValue);
@@ -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","_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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"}
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","markFinish","_setConfigValue","_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 markFinish: (config: FreConfigType) => {\n let configValue = FrequenceManager._getConfigValue(config);\n if (!configValue) {\n configValue = new FreConfigValueType();\n }\n if (config.limit) {\n configValue.count++;\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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"}
@@ -199,11 +199,7 @@ const MessageModel = exports.MessageModel = {
199
199
  gap: message.gap
200
200
  };
201
201
  // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
202
- if (freConfig.gap) {
203
- _Frequence.FrequenceManager.markFinishForTime(freConfig);
204
- } else if (freConfig.limit) {
205
- _Frequence.FrequenceManager.markFinishForCount(freConfig);
206
- }
202
+ _Frequence.FrequenceManager.markFinish(freConfig);
207
203
  }
208
204
  const readMsgs = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.Messages);
209
205
  readMsgs.push(message.objectId);
@@ -1 +1 @@
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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"}
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","markFinish","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 FrequenceManager.markFinish(freConfig);\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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"}
@@ -37,20 +37,13 @@ export const FrequenceManager = {
37
37
  // console.log('[Frequence] 无限制', configValue, config);
38
38
  return true;
39
39
  },
40
- markFinishForCount: config => {
40
+ markFinish: config => {
41
41
  let configValue = FrequenceManager._getConfigValue(config);
42
42
  if (!configValue) {
43
43
  configValue = new FreConfigValueType();
44
44
  }
45
- configValue.count++;
46
- configValue.lastTimestamp = now();
47
- // console.log('[Frequence] mark finish', configValue);
48
- FrequenceManager._setConfigValue(config, configValue);
49
- },
50
- markFinishForTime: config => {
51
- let configValue = FrequenceManager._getConfigValue(config);
52
- if (!configValue) {
53
- configValue = new FreConfigValueType();
45
+ if (config.limit) {
46
+ configValue.count++;
54
47
  }
55
48
  configValue.lastTimestamp = now();
56
49
  // console.log('[Frequence] mark finish', configValue);
@@ -1 +1 @@
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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"}
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","markFinish","_setConfigValue","_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 markFinish: (config: FreConfigType) => {\n let configValue = FrequenceManager._getConfigValue(config);\n if (!configValue) {\n configValue = new FreConfigValueType();\n }\n if (config.limit) {\n configValue.count++;\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":";;;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,aAAA,EAAAC,cAAA,EAAAC,WAAA,EAAAC,YAAA;IACjC,IAAIC,WAAW,GAAGP,gBAAgB,CAACQ,eAAe,CAACN,MAAM,CAAC;IAC1D,IAAI,CAACK,WAAW,EAAE;MAChBA,WAAW,GAAG,IAAIf,kBAAkB,CAAC,CAAC;IACxC;;IAEA;IACA,IAAI,EAAAW,aAAA,GAACD,MAAM,CAACO,KAAK,cAAAN,aAAA,cAAAA,aAAA,GAAI,CAAC,IAAI,CAAC,IAAII,WAAW,CAACZ,KAAK,MAAAS,cAAA,GAAKF,MAAM,CAACO,KAAK,cAAAL,cAAA,cAAAA,cAAA,GAAI,CAAC,CAAC,EAAE;MACvE;MACA,OAAO,KAAK;IACd;IACA;IACA,IACE,EAAAC,WAAA,GAACH,MAAM,CAACQ,GAAG,cAAAL,WAAA,cAAAA,WAAA,GAAI,CAAC,IAAI,CAAC,IACrBR,GAAG,CAAC,CAAC,GAAGU,WAAW,CAACX,aAAa,KAAAU,YAAA,GAAIJ,MAAM,CAACQ,GAAG,cAAAJ,YAAA,cAAAA,YAAA,GAAI,CAAC,CAAC,EACrD;MACA;MACA,OAAO,KAAK;IACd;;IAEA;IACA,OAAO,IAAI;EACb,CAAC;EAEDK,UAAU,EAAGT,MAAqB,IAAK;IACrC,IAAIK,WAAW,GAAGP,gBAAgB,CAACQ,eAAe,CAACN,MAAM,CAAC;IAC1D,IAAI,CAACK,WAAW,EAAE;MAChBA,WAAW,GAAG,IAAIf,kBAAkB,CAAC,CAAC;IACxC;IACA,IAAIU,MAAM,CAACO,KAAK,EAAE;MAChBF,WAAW,CAACZ,KAAK,EAAE;IACrB;IACAY,WAAW,CAACX,aAAa,GAAGC,GAAG,CAAC,CAAC;IACjC;IACAG,gBAAgB,CAACY,eAAe,CAACV,MAAM,EAAEK,WAAW,CAAC;EACvD,CAAC;EAEDC,eAAe,EAAGN,MAAqB,IAAK;IAAA,IAAAW,kBAAA;IAC1C,MAAMC,OAA8C,IAAAD,kBAAA,GAClDtB,QAAQ,CAACwB,QAAQ,CAACzB,YAAY,CAAC0B,eAAe,CAAC,cAAAH,kBAAA,cAAAA,kBAAA,GAAI,CAAC,CAAC;IACvD,OAAOC,OAAO,CAACZ,MAAM,CAACe,GAAG,CAAC;EAC5B,CAAC;EAEDL,eAAe,EAAEA,CAACM,UAAyB,EAAEhB,MAA0B,KAAK;IAAA,IAAAiB,mBAAA;IAC1E,MAAML,OAA8C,IAAAK,mBAAA,GAClD5B,QAAQ,CAACwB,QAAQ,CAACzB,YAAY,CAAC0B,eAAe,CAAC,cAAAG,mBAAA,cAAAA,mBAAA,GAAI,CAAC,CAAC;IACvDL,OAAO,CAACI,UAAU,CAACD,GAAG,CAAC,GAAGf,MAAM;IAChCX,QAAQ,CAAC6B,QAAQ,CAAC9B,YAAY,CAAC0B,eAAe,EAAEF,OAAO,CAAC;EAC1D;AACF,CAAC"}
@@ -193,11 +193,7 @@ export const MessageModel = {
193
193
  gap: message.gap
194
194
  };
195
195
  // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
196
- if (freConfig.gap) {
197
- FrequenceManager.markFinishForTime(freConfig);
198
- } else if (freConfig.limit) {
199
- FrequenceManager.markFinishForCount(freConfig);
200
- }
196
+ FrequenceManager.markFinish(freConfig);
201
197
  }
202
198
  const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
203
199
  readMsgs.push(message.objectId);
@@ -1 +1 @@
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
+ {"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","markFinish","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 FrequenceManager.markFinish(freConfig);\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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"}
@@ -10,8 +10,7 @@ declare class FreConfigValueType {
10
10
  }
11
11
  export declare const FrequenceManager: {
12
12
  canRun: (config: FreConfigType) => boolean;
13
- markFinishForCount: (config: FreConfigType) => void;
14
- markFinishForTime: (config: FreConfigType) => void;
13
+ markFinish: (config: FreConfigType) => void;
15
14
  _getConfigValue: (config: FreConfigType) => FreConfigValueType;
16
15
  _setConfigValue: (configType: FreConfigType, config: FreConfigValueType) => void;
17
16
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norcy/react-native-toolkit",
3
- "version": "0.1.128",
3
+ "version": "0.1.130",
4
4
  "description": "My Toolkit",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/Frequence.ts CHANGED
@@ -44,21 +44,13 @@ export const FrequenceManager = {
44
44
  return true;
45
45
  },
46
46
 
47
- markFinishForCount: (config: FreConfigType) => {
47
+ markFinish: (config: FreConfigType) => {
48
48
  let configValue = FrequenceManager._getConfigValue(config);
49
49
  if (!configValue) {
50
50
  configValue = new FreConfigValueType();
51
51
  }
52
- configValue.count++;
53
- configValue.lastTimestamp = now();
54
- // console.log('[Frequence] mark finish', configValue);
55
- FrequenceManager._setConfigValue(config, configValue);
56
- },
57
-
58
- markFinishForTime: (config: FreConfigType) => {
59
- let configValue = FrequenceManager._getConfigValue(config);
60
- if (!configValue) {
61
- configValue = new FreConfigValueType();
52
+ if (config.limit) {
53
+ configValue.count++;
62
54
  }
63
55
  configValue.lastTimestamp = now();
64
56
  // console.log('[Frequence] mark finish', configValue);
@@ -256,11 +256,7 @@ export const MessageModel = {
256
256
  gap: message.gap,
257
257
  };
258
258
  // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
259
- if (freConfig.gap) {
260
- FrequenceManager.markFinishForTime(freConfig);
261
- } else if (freConfig.limit) {
262
- FrequenceManager.markFinishForCount(freConfig);
263
- }
259
+ FrequenceManager.markFinish(freConfig);
264
260
  }
265
261
 
266
262
  const readMsgs = PrefData.getValue(BuildInPrefs.Messages);