@norcy/react-native-toolkit 0.1.131 → 0.1.132
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/Frequence.js +8 -1
- package/lib/commonjs/Frequence.js.map +1 -1
- package/lib/commonjs/MessageModel.js +30 -0
- package/lib/commonjs/MessageModel.js.map +1 -1
- package/lib/module/Frequence.js +8 -1
- package/lib/module/Frequence.js.map +1 -1
- package/lib/module/MessageModel.js +30 -0
- package/lib/module/MessageModel.js.map +1 -1
- package/lib/typescript/Frequence.d.ts +2 -1
- package/lib/typescript/MessageModel.d.ts +1 -0
- package/package.json +1 -1
- package/src/Frequence.ts +13 -2
- package/src/MessageModel.ts +34 -0
@@ -55,6 +55,9 @@ const FrequenceManager = exports.FrequenceManager = {
|
|
55
55
|
// console.log('[Frequence] mark finish', configValue);
|
56
56
|
FrequenceManager._setConfigValue(config, configValue);
|
57
57
|
},
|
58
|
+
reset: config => {
|
59
|
+
FrequenceManager._setConfigValue(config, null);
|
60
|
+
},
|
58
61
|
_getConfigValue: config => {
|
59
62
|
var _PrefData$getValue;
|
60
63
|
const configs = (_PrefData$getValue = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue !== void 0 ? _PrefData$getValue : {};
|
@@ -63,7 +66,11 @@ const FrequenceManager = exports.FrequenceManager = {
|
|
63
66
|
_setConfigValue: (configType, config) => {
|
64
67
|
var _PrefData$getValue2;
|
65
68
|
const configs = (_PrefData$getValue2 = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue2 !== void 0 ? _PrefData$getValue2 : {};
|
66
|
-
|
69
|
+
if (config) {
|
70
|
+
configs[configType.key] = config;
|
71
|
+
} else {
|
72
|
+
delete configs[configType.key];
|
73
|
+
}
|
67
74
|
_PrefData.PrefData.setValue(_PrefData.BuildInPrefs.FrequenceConfig, configs);
|
68
75
|
}
|
69
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","_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
|
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","reset","_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 reset: (config: FreConfigType) => {\n FrequenceManager._setConfigValue(config, null);\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: (\n configType: FreConfigType,\n config: FreConfigValueType | null\n ) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n if (config) {\n configs[configType.key] = config;\n } else {\n delete configs[configType.key];\n }\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n};\n"],"mappings":"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"}
|
@@ -163,6 +163,36 @@ const MessageModel = exports.MessageModel = {
|
|
163
163
|
getAllMessages: () => {
|
164
164
|
return MyMessages;
|
165
165
|
},
|
166
|
+
removeMessage: async message => {
|
167
|
+
if (!message.objectId) {
|
168
|
+
return;
|
169
|
+
}
|
170
|
+
|
171
|
+
// 从内存中移除
|
172
|
+
const index = MyMessages.findIndex(item => item.objectId === message.objectId);
|
173
|
+
if (index !== -1) {
|
174
|
+
MyMessages.splice(index, 1);
|
175
|
+
}
|
176
|
+
|
177
|
+
// 从已读状态中移除
|
178
|
+
const readMsgs = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.Messages);
|
179
|
+
const readIndex = readMsgs.indexOf(message.objectId);
|
180
|
+
if (readIndex !== -1) {
|
181
|
+
readMsgs.splice(readIndex, 1);
|
182
|
+
await _PrefData.PrefData.setValue(_PrefData.BuildInPrefs.Messages, readMsgs);
|
183
|
+
}
|
184
|
+
|
185
|
+
// 如果消息有 key,也需要清理频率管理器的状态
|
186
|
+
if (message.key) {
|
187
|
+
const freConfig = {
|
188
|
+
key: message.key,
|
189
|
+
limit: message.limit,
|
190
|
+
gap: message.gap
|
191
|
+
};
|
192
|
+
_Frequence.FrequenceManager.reset(freConfig);
|
193
|
+
}
|
194
|
+
MessageModel.emitChange();
|
195
|
+
},
|
166
196
|
markMessageRead: async message => {
|
167
197
|
if (message.isRead || !message.objectId) {
|
168
198
|
return;
|
@@ -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","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","includes","objectId","isRead","_item$key","key","ConfigDataModel","get","hasNewAppVer","updatedAt","Date","toString","length","freConfig","limit","gap","FrequenceManager","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","Notification","addListener","fetch","_ref","isAuto","user","error","_LoginManager$current","query","Query","equalTo","Platform","OS","VipManager","isForeverVip","isVip","notEqualTo","userQuery","sizeEqualTo","userId","LoginManager","currentUser","AVUser","selectUserQuery","or","and","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 _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 isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\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 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 MessageModel.fetch(customFilter);\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 isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n let query = new AV.Query('Message');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n\n if (VipManager.isForeverVip()) {\n query.equalTo('vipFilter', 0);\n } else if (VipManager.isVip()) {\n // 这里如果后续增加枚举,就会有问题\n query.notEqualTo('vipFilter', 1);\n }\n\n let userQuery = new AV.Query('Message').sizeEqualTo('users', 0);\n const userId = LoginManager.currentUser()?.AVUser.get('objectId');\n if (userId) {\n const selectUserQuery = new AV.Query('Message').equalTo('users', userId);\n userQuery = AV.Query.or(userQuery, selectUserQuery);\n }\n query = AV.Query.and(query, userQuery);\n\n query\n .descending('updatedAt')\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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"}
|
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","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","includes","objectId","isRead","_item$key","key","ConfigDataModel","get","hasNewAppVer","updatedAt","Date","toString","length","freConfig","limit","gap","FrequenceManager","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","Notification","addListener","fetch","_ref","isAuto","user","error","_LoginManager$current","query","Query","equalTo","Platform","OS","VipManager","isForeverVip","isVip","notEqualTo","userQuery","sizeEqualTo","userId","LoginManager","currentUser","AVUser","selectUserQuery","or","and","descending","find","then","catch","e","getUnreadMessages","filter","getAllMessages","removeMessage","message","index","findIndex","splice","readIndex","indexOf","setValue","reset","markMessageRead","markFinish","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 _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 isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\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 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 MessageModel.fetch(customFilter);\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 isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n let query = new AV.Query('Message');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n\n if (VipManager.isForeverVip()) {\n query.equalTo('vipFilter', 0);\n } else if (VipManager.isVip()) {\n // 这里如果后续增加枚举,就会有问题\n query.notEqualTo('vipFilter', 1);\n }\n\n let userQuery = new AV.Query('Message').sizeEqualTo('users', 0);\n const userId = LoginManager.currentUser()?.AVUser.get('objectId');\n if (userId) {\n const selectUserQuery = new AV.Query('Message').equalTo('users', userId);\n userQuery = AV.Query.or(userQuery, selectUserQuery);\n }\n query = AV.Query.and(query, userQuery);\n\n query\n .descending('updatedAt')\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 removeMessage: async (message: Message) => {\n if (!message.objectId) {\n return;\n }\n\n // 从内存中移除\n const index = MyMessages.findIndex(\n (item) => item.objectId === message.objectId\n );\n if (index !== -1) {\n MyMessages.splice(index, 1);\n }\n\n // 从已读状态中移除\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n const readIndex = readMsgs.indexOf(message.objectId);\n if (readIndex !== -1) {\n readMsgs.splice(readIndex, 1);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n }\n\n // 如果消息有 key,也需要清理频率管理器的状态\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n FrequenceManager.reset(freConfig);\n }\n\n MessageModel.emitChange();\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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"}
|
package/lib/module/Frequence.js
CHANGED
@@ -49,6 +49,9 @@ export const FrequenceManager = {
|
|
49
49
|
// console.log('[Frequence] mark finish', configValue);
|
50
50
|
FrequenceManager._setConfigValue(config, configValue);
|
51
51
|
},
|
52
|
+
reset: config => {
|
53
|
+
FrequenceManager._setConfigValue(config, null);
|
54
|
+
},
|
52
55
|
_getConfigValue: config => {
|
53
56
|
var _PrefData$getValue;
|
54
57
|
const configs = (_PrefData$getValue = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue !== void 0 ? _PrefData$getValue : {};
|
@@ -57,7 +60,11 @@ export const FrequenceManager = {
|
|
57
60
|
_setConfigValue: (configType, config) => {
|
58
61
|
var _PrefData$getValue2;
|
59
62
|
const configs = (_PrefData$getValue2 = PrefData.getValue(BuildInPrefs.FrequenceConfig)) !== null && _PrefData$getValue2 !== void 0 ? _PrefData$getValue2 : {};
|
60
|
-
|
63
|
+
if (config) {
|
64
|
+
configs[configType.key] = config;
|
65
|
+
} else {
|
66
|
+
delete configs[configType.key];
|
67
|
+
}
|
61
68
|
PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
|
62
69
|
}
|
63
70
|
};
|
@@ -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","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
|
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","reset","_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 reset: (config: FreConfigType) => {\n FrequenceManager._setConfigValue(config, null);\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: (\n configType: FreConfigType,\n config: FreConfigValueType | null\n ) => {\n const configs: { [key: string]: FreConfigValueType } =\n PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};\n if (config) {\n configs[configType.key] = config;\n } else {\n delete configs[configType.key];\n }\n PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);\n },\n};\n"],"mappings":"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"}
|
@@ -157,6 +157,36 @@ export const MessageModel = {
|
|
157
157
|
getAllMessages: () => {
|
158
158
|
return MyMessages;
|
159
159
|
},
|
160
|
+
removeMessage: async message => {
|
161
|
+
if (!message.objectId) {
|
162
|
+
return;
|
163
|
+
}
|
164
|
+
|
165
|
+
// 从内存中移除
|
166
|
+
const index = MyMessages.findIndex(item => item.objectId === message.objectId);
|
167
|
+
if (index !== -1) {
|
168
|
+
MyMessages.splice(index, 1);
|
169
|
+
}
|
170
|
+
|
171
|
+
// 从已读状态中移除
|
172
|
+
const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
|
173
|
+
const readIndex = readMsgs.indexOf(message.objectId);
|
174
|
+
if (readIndex !== -1) {
|
175
|
+
readMsgs.splice(readIndex, 1);
|
176
|
+
await PrefData.setValue(BuildInPrefs.Messages, readMsgs);
|
177
|
+
}
|
178
|
+
|
179
|
+
// 如果消息有 key,也需要清理频率管理器的状态
|
180
|
+
if (message.key) {
|
181
|
+
const freConfig = {
|
182
|
+
key: message.key,
|
183
|
+
limit: message.limit,
|
184
|
+
gap: message.gap
|
185
|
+
};
|
186
|
+
FrequenceManager.reset(freConfig);
|
187
|
+
}
|
188
|
+
MessageModel.emitChange();
|
189
|
+
},
|
160
190
|
markMessageRead: async message => {
|
161
191
|
if (message.isRead || !message.objectId) {
|
162
192
|
return;
|
@@ -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","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","includes","objectId","isRead","_item$key","key","get","hasNewAppVer","updatedAt","Date","toString","length","freConfig","limit","gap","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListener","fetch","_ref","isAuto","user","error","_LoginManager$current","query","Query","equalTo","OS","isForeverVip","isVip","notEqualTo","userQuery","sizeEqualTo","userId","currentUser","AVUser","selectUserQuery","or","and","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 _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 isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\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 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 MessageModel.fetch(customFilter);\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 isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n let query = new AV.Query('Message');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n\n if (VipManager.isForeverVip()) {\n query.equalTo('vipFilter', 0);\n } else if (VipManager.isVip()) {\n // 这里如果后续增加枚举,就会有问题\n query.notEqualTo('vipFilter', 1);\n }\n\n let userQuery = new AV.Query('Message').sizeEqualTo('users', 0);\n const userId = LoginManager.currentUser()?.AVUser.get('objectId');\n if (userId) {\n const selectUserQuery = new AV.Query('Message').equalTo('users', userId);\n userQuery = AV.Query.or(userQuery, selectUserQuery);\n }\n query = AV.Query.and(query, userQuery);\n\n query\n .descending('updatedAt')\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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"}
|
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","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","includes","objectId","isRead","_item$key","key","get","hasNewAppVer","updatedAt","Date","toString","length","freConfig","limit","gap","canRun","configValue","_getConfigValue","lastTimestamp","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListener","fetch","_ref","isAuto","user","error","_LoginManager$current","query","Query","equalTo","OS","isForeverVip","isVip","notEqualTo","userQuery","sizeEqualTo","userId","currentUser","AVUser","selectUserQuery","or","and","descending","find","then","catch","e","getUnreadMessages","filter","getAllMessages","removeMessage","message","index","findIndex","splice","readIndex","indexOf","setValue","reset","markMessageRead","markFinish","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 _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 isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\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 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 MessageModel.fetch(customFilter);\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 isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n let query = new AV.Query('Message');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n\n if (VipManager.isForeverVip()) {\n query.equalTo('vipFilter', 0);\n } else if (VipManager.isVip()) {\n // 这里如果后续增加枚举,就会有问题\n query.notEqualTo('vipFilter', 1);\n }\n\n let userQuery = new AV.Query('Message').sizeEqualTo('users', 0);\n const userId = LoginManager.currentUser()?.AVUser.get('objectId');\n if (userId) {\n const selectUserQuery = new AV.Query('Message').equalTo('users', userId);\n userQuery = AV.Query.or(userQuery, selectUserQuery);\n }\n query = AV.Query.and(query, userQuery);\n\n query\n .descending('updatedAt')\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 removeMessage: async (message: Message) => {\n if (!message.objectId) {\n return;\n }\n\n // 从内存中移除\n const index = MyMessages.findIndex(\n (item) => item.objectId === message.objectId\n );\n if (index !== -1) {\n MyMessages.splice(index, 1);\n }\n\n // 从已读状态中移除\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n const readIndex = readMsgs.indexOf(message.objectId);\n if (readIndex !== -1) {\n readMsgs.splice(readIndex, 1);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n }\n\n // 如果消息有 key,也需要清理频率管理器的状态\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n FrequenceManager.reset(freConfig);\n }\n\n MessageModel.emitChange();\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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"}
|
@@ -11,7 +11,8 @@ declare class FreConfigValueType {
|
|
11
11
|
export declare const FrequenceManager: {
|
12
12
|
canRun: (config: FreConfigType) => boolean;
|
13
13
|
markFinish: (config: FreConfigType) => void;
|
14
|
+
reset: (config: FreConfigType) => void;
|
14
15
|
_getConfigValue: (config: FreConfigType) => FreConfigValueType;
|
15
|
-
_setConfigValue: (configType: FreConfigType, config: FreConfigValueType) => void;
|
16
|
+
_setConfigValue: (configType: FreConfigType, config: FreConfigValueType | null) => void;
|
16
17
|
};
|
17
18
|
export {};
|
@@ -23,6 +23,7 @@ export declare const MessageModel: {
|
|
23
23
|
fetch: (customFilter?: MessageFilter) => void;
|
24
24
|
getUnreadMessages: () => Message[];
|
25
25
|
getAllMessages: () => Message[];
|
26
|
+
removeMessage: (message: Message) => Promise<void>;
|
26
27
|
markMessageRead: (message: Message) => Promise<void>;
|
27
28
|
emitChange: () => void;
|
28
29
|
addListenerOnce: (callback: Function) => void;
|
package/package.json
CHANGED
package/src/Frequence.ts
CHANGED
@@ -57,16 +57,27 @@ export const FrequenceManager = {
|
|
57
57
|
FrequenceManager._setConfigValue(config, configValue);
|
58
58
|
},
|
59
59
|
|
60
|
+
reset: (config: FreConfigType) => {
|
61
|
+
FrequenceManager._setConfigValue(config, null);
|
62
|
+
},
|
63
|
+
|
60
64
|
_getConfigValue: (config: FreConfigType) => {
|
61
65
|
const configs: { [key: string]: FreConfigValueType } =
|
62
66
|
PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};
|
63
67
|
return configs[config.key];
|
64
68
|
},
|
65
69
|
|
66
|
-
_setConfigValue: (
|
70
|
+
_setConfigValue: (
|
71
|
+
configType: FreConfigType,
|
72
|
+
config: FreConfigValueType | null
|
73
|
+
) => {
|
67
74
|
const configs: { [key: string]: FreConfigValueType } =
|
68
75
|
PrefData.getValue(BuildInPrefs.FrequenceConfig) ?? {};
|
69
|
-
|
76
|
+
if (config) {
|
77
|
+
configs[configType.key] = config;
|
78
|
+
} else {
|
79
|
+
delete configs[configType.key];
|
80
|
+
}
|
70
81
|
PrefData.setValue(BuildInPrefs.FrequenceConfig, configs);
|
71
82
|
},
|
72
83
|
};
|
package/src/MessageModel.ts
CHANGED
@@ -206,6 +206,40 @@ export const MessageModel = {
|
|
206
206
|
return MyMessages;
|
207
207
|
},
|
208
208
|
|
209
|
+
removeMessage: async (message: Message) => {
|
210
|
+
if (!message.objectId) {
|
211
|
+
return;
|
212
|
+
}
|
213
|
+
|
214
|
+
// 从内存中移除
|
215
|
+
const index = MyMessages.findIndex(
|
216
|
+
(item) => item.objectId === message.objectId
|
217
|
+
);
|
218
|
+
if (index !== -1) {
|
219
|
+
MyMessages.splice(index, 1);
|
220
|
+
}
|
221
|
+
|
222
|
+
// 从已读状态中移除
|
223
|
+
const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
|
224
|
+
const readIndex = readMsgs.indexOf(message.objectId);
|
225
|
+
if (readIndex !== -1) {
|
226
|
+
readMsgs.splice(readIndex, 1);
|
227
|
+
await PrefData.setValue(BuildInPrefs.Messages, readMsgs);
|
228
|
+
}
|
229
|
+
|
230
|
+
// 如果消息有 key,也需要清理频率管理器的状态
|
231
|
+
if (message.key) {
|
232
|
+
const freConfig: FreConfigType = {
|
233
|
+
key: message.key,
|
234
|
+
limit: message.limit,
|
235
|
+
gap: message.gap,
|
236
|
+
};
|
237
|
+
FrequenceManager.reset(freConfig);
|
238
|
+
}
|
239
|
+
|
240
|
+
MessageModel.emitChange();
|
241
|
+
},
|
242
|
+
|
209
243
|
markMessageRead: async (message: Message) => {
|
210
244
|
if (message.isRead || !message.objectId) {
|
211
245
|
return;
|