@norcy/react-native-toolkit 0.1.130 → 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 +49 -43
- 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 +49 -43
- 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 +55 -58
@@ -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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"}
|
@@ -27,35 +27,6 @@ const _filterByVersion = items => {
|
|
27
27
|
}
|
28
28
|
return ret;
|
29
29
|
};
|
30
|
-
const _filterByVip = items => {
|
31
|
-
let ret = [];
|
32
|
-
const isVip = _VipManager.VipManager.isVip();
|
33
|
-
const isForeverVip = _VipManager.VipManager.isForeverVip();
|
34
|
-
for (const item of items) {
|
35
|
-
const vipFilter = item.vipFilter;
|
36
|
-
if (vipFilter === 0 || vipFilter === 1 && !isVip || vipFilter === 2 && !isForeverVip) {
|
37
|
-
ret.push(item);
|
38
|
-
}
|
39
|
-
}
|
40
|
-
return ret;
|
41
|
-
};
|
42
|
-
const _filterByUser = items => {
|
43
|
-
let ret = [];
|
44
|
-
for (const item of items) {
|
45
|
-
const users = item.users;
|
46
|
-
if (users !== null && users !== void 0 && users.length) {
|
47
|
-
if (_LoginManager.LoginManager.isLogin()) {
|
48
|
-
var _LoginManager$current;
|
49
|
-
if (users !== null && users !== void 0 && users.includes((_LoginManager$current = _LoginManager.LoginManager.currentUser()) === null || _LoginManager$current === void 0 ? void 0 : _LoginManager$current.AVUser.get('objectId'))) {
|
50
|
-
ret.push(item);
|
51
|
-
}
|
52
|
-
}
|
53
|
-
} else {
|
54
|
-
ret.push(item);
|
55
|
-
}
|
56
|
-
}
|
57
|
-
return ret;
|
58
|
-
};
|
59
30
|
const _handleReadMessages = items => {
|
60
31
|
if (__DEV__) {
|
61
32
|
// return items;
|
@@ -104,11 +75,10 @@ const _handleReadMessages = items => {
|
|
104
75
|
};
|
105
76
|
let isDataReady = false;
|
106
77
|
let isConfigStateReady = false;
|
107
|
-
let isVipStateReady = false;
|
108
78
|
let isNetwordDataReady = false;
|
109
79
|
let OnlineItems = [];
|
110
80
|
const _handleResponse = customFilter => {
|
111
|
-
if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady
|
81
|
+
if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {
|
112
82
|
return;
|
113
83
|
}
|
114
84
|
if (_VersionManager.VersionManager.isDanger()) {
|
@@ -116,8 +86,6 @@ const _handleResponse = customFilter => {
|
|
116
86
|
}
|
117
87
|
MyMessages = OnlineItems.map(item => _Tool.Tool.jsonify(item));
|
118
88
|
MyMessages = _filterByVersion(MyMessages);
|
119
|
-
MyMessages = _filterByVip(MyMessages);
|
120
|
-
MyMessages = _filterByUser(MyMessages);
|
121
89
|
if (customFilter) {
|
122
90
|
MyMessages = customFilter(MyMessages);
|
123
91
|
}
|
@@ -136,11 +104,7 @@ const _handleResponse = customFilter => {
|
|
136
104
|
const MessageModel = exports.MessageModel = {
|
137
105
|
init: customFilter => {
|
138
106
|
_Notification.Notification.addListener('onVipRefresh', () => {
|
139
|
-
|
140
|
-
if (!isVipStateReady) {
|
141
|
-
isVipStateReady = true;
|
142
|
-
_handleResponse(customFilter);
|
143
|
-
}
|
107
|
+
MessageModel.fetch(customFilter);
|
144
108
|
});
|
145
109
|
_ConfigDataModel.ConfigDataModel.addListener(() => {
|
146
110
|
if (!isConfigStateReady) {
|
@@ -157,22 +121,34 @@ const MessageModel = exports.MessageModel = {
|
|
157
121
|
if (!isAuto && user && !error) {
|
158
122
|
isDataReady = false;
|
159
123
|
isConfigStateReady = false;
|
160
|
-
isVipStateReady = false;
|
161
124
|
isNetwordDataReady = false;
|
162
125
|
OnlineItems = [];
|
163
126
|
MessageModel.fetch(customFilter);
|
164
127
|
}
|
165
128
|
});
|
166
|
-
MessageModel.fetch(customFilter);
|
167
129
|
},
|
168
130
|
fetch: customFilter => {
|
131
|
+
var _LoginManager$current;
|
169
132
|
// 确保可重入,但如果网络一直出错的话,每次调用都会一直发
|
170
133
|
if (isNetwordDataReady) {
|
171
134
|
return;
|
172
135
|
}
|
173
|
-
|
174
|
-
query.equalTo('valid', true).equalTo(_reactNative.Platform.OS, true)
|
175
|
-
|
136
|
+
let query = new AV.Query('Message');
|
137
|
+
query.equalTo('valid', true).equalTo(_reactNative.Platform.OS, true);
|
138
|
+
if (_VipManager.VipManager.isForeverVip()) {
|
139
|
+
query.equalTo('vipFilter', 0);
|
140
|
+
} else if (_VipManager.VipManager.isVip()) {
|
141
|
+
// 这里如果后续增加枚举,就会有问题
|
142
|
+
query.notEqualTo('vipFilter', 1);
|
143
|
+
}
|
144
|
+
let userQuery = new AV.Query('Message').sizeEqualTo('users', 0);
|
145
|
+
const userId = (_LoginManager$current = _LoginManager.LoginManager.currentUser()) === null || _LoginManager$current === void 0 ? void 0 : _LoginManager$current.AVUser.get('objectId');
|
146
|
+
if (userId) {
|
147
|
+
const selectUserQuery = new AV.Query('Message').equalTo('users', userId);
|
148
|
+
userQuery = AV.Query.or(userQuery, selectUserQuery);
|
149
|
+
}
|
150
|
+
query = AV.Query.and(query, userQuery);
|
151
|
+
query.descending('updatedAt').find().then(async items => {
|
176
152
|
console.log('Message 抓取完毕');
|
177
153
|
isNetwordDataReady = true;
|
178
154
|
OnlineItems = items;
|
@@ -187,6 +163,36 @@ const MessageModel = exports.MessageModel = {
|
|
187
163
|
getAllMessages: () => {
|
188
164
|
return MyMessages;
|
189
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
|
+
},
|
190
196
|
markMessageRead: async message => {
|
191
197
|
if (message.isRead || !message.objectId) {
|
192
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","_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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"}
|
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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"}
|
@@ -21,35 +21,6 @@ const _filterByVersion = items => {
|
|
21
21
|
}
|
22
22
|
return ret;
|
23
23
|
};
|
24
|
-
const _filterByVip = items => {
|
25
|
-
let ret = [];
|
26
|
-
const isVip = VipManager.isVip();
|
27
|
-
const isForeverVip = VipManager.isForeverVip();
|
28
|
-
for (const item of items) {
|
29
|
-
const vipFilter = item.vipFilter;
|
30
|
-
if (vipFilter === 0 || vipFilter === 1 && !isVip || vipFilter === 2 && !isForeverVip) {
|
31
|
-
ret.push(item);
|
32
|
-
}
|
33
|
-
}
|
34
|
-
return ret;
|
35
|
-
};
|
36
|
-
const _filterByUser = items => {
|
37
|
-
let ret = [];
|
38
|
-
for (const item of items) {
|
39
|
-
const users = item.users;
|
40
|
-
if (users !== null && users !== void 0 && users.length) {
|
41
|
-
if (LoginManager.isLogin()) {
|
42
|
-
var _LoginManager$current;
|
43
|
-
if (users !== null && users !== void 0 && users.includes((_LoginManager$current = LoginManager.currentUser()) === null || _LoginManager$current === void 0 ? void 0 : _LoginManager$current.AVUser.get('objectId'))) {
|
44
|
-
ret.push(item);
|
45
|
-
}
|
46
|
-
}
|
47
|
-
} else {
|
48
|
-
ret.push(item);
|
49
|
-
}
|
50
|
-
}
|
51
|
-
return ret;
|
52
|
-
};
|
53
24
|
const _handleReadMessages = items => {
|
54
25
|
if (__DEV__) {
|
55
26
|
// return items;
|
@@ -98,11 +69,10 @@ const _handleReadMessages = items => {
|
|
98
69
|
};
|
99
70
|
let isDataReady = false;
|
100
71
|
let isConfigStateReady = false;
|
101
|
-
let isVipStateReady = false;
|
102
72
|
let isNetwordDataReady = false;
|
103
73
|
let OnlineItems = [];
|
104
74
|
const _handleResponse = customFilter => {
|
105
|
-
if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady
|
75
|
+
if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {
|
106
76
|
return;
|
107
77
|
}
|
108
78
|
if (VersionManager.isDanger()) {
|
@@ -110,8 +80,6 @@ const _handleResponse = customFilter => {
|
|
110
80
|
}
|
111
81
|
MyMessages = OnlineItems.map(item => Tool.jsonify(item));
|
112
82
|
MyMessages = _filterByVersion(MyMessages);
|
113
|
-
MyMessages = _filterByVip(MyMessages);
|
114
|
-
MyMessages = _filterByUser(MyMessages);
|
115
83
|
if (customFilter) {
|
116
84
|
MyMessages = customFilter(MyMessages);
|
117
85
|
}
|
@@ -130,11 +98,7 @@ const _handleResponse = customFilter => {
|
|
130
98
|
export const MessageModel = {
|
131
99
|
init: customFilter => {
|
132
100
|
Notification.addListener('onVipRefresh', () => {
|
133
|
-
|
134
|
-
if (!isVipStateReady) {
|
135
|
-
isVipStateReady = true;
|
136
|
-
_handleResponse(customFilter);
|
137
|
-
}
|
101
|
+
MessageModel.fetch(customFilter);
|
138
102
|
});
|
139
103
|
ConfigDataModel.addListener(() => {
|
140
104
|
if (!isConfigStateReady) {
|
@@ -151,22 +115,34 @@ export const MessageModel = {
|
|
151
115
|
if (!isAuto && user && !error) {
|
152
116
|
isDataReady = false;
|
153
117
|
isConfigStateReady = false;
|
154
|
-
isVipStateReady = false;
|
155
118
|
isNetwordDataReady = false;
|
156
119
|
OnlineItems = [];
|
157
120
|
MessageModel.fetch(customFilter);
|
158
121
|
}
|
159
122
|
});
|
160
|
-
MessageModel.fetch(customFilter);
|
161
123
|
},
|
162
124
|
fetch: customFilter => {
|
125
|
+
var _LoginManager$current;
|
163
126
|
// 确保可重入,但如果网络一直出错的话,每次调用都会一直发
|
164
127
|
if (isNetwordDataReady) {
|
165
128
|
return;
|
166
129
|
}
|
167
|
-
|
168
|
-
query.equalTo('valid', true).equalTo(Platform.OS, true)
|
169
|
-
|
130
|
+
let query = new AV.Query('Message');
|
131
|
+
query.equalTo('valid', true).equalTo(Platform.OS, true);
|
132
|
+
if (VipManager.isForeverVip()) {
|
133
|
+
query.equalTo('vipFilter', 0);
|
134
|
+
} else if (VipManager.isVip()) {
|
135
|
+
// 这里如果后续增加枚举,就会有问题
|
136
|
+
query.notEqualTo('vipFilter', 1);
|
137
|
+
}
|
138
|
+
let userQuery = new AV.Query('Message').sizeEqualTo('users', 0);
|
139
|
+
const userId = (_LoginManager$current = LoginManager.currentUser()) === null || _LoginManager$current === void 0 ? void 0 : _LoginManager$current.AVUser.get('objectId');
|
140
|
+
if (userId) {
|
141
|
+
const selectUserQuery = new AV.Query('Message').equalTo('users', userId);
|
142
|
+
userQuery = AV.Query.or(userQuery, selectUserQuery);
|
143
|
+
}
|
144
|
+
query = AV.Query.and(query, userQuery);
|
145
|
+
query.descending('updatedAt').find().then(async items => {
|
170
146
|
console.log('Message 抓取完毕');
|
171
147
|
isNetwordDataReady = true;
|
172
148
|
OnlineItems = items;
|
@@ -181,6 +157,36 @@ export const MessageModel = {
|
|
181
157
|
getAllMessages: () => {
|
182
158
|
return MyMessages;
|
183
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
|
+
},
|
184
190
|
markMessageRead: async message => {
|
185
191
|
if (message.isRead || !message.objectId) {
|
186
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","_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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"}
|
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
@@ -46,42 +46,6 @@ const _filterByVersion = (items: Message[]): Message[] => {
|
|
46
46
|
return ret;
|
47
47
|
};
|
48
48
|
|
49
|
-
const _filterByVip = (items: Message[]): Message[] => {
|
50
|
-
let ret: Message[] = [];
|
51
|
-
const isVip = VipManager.isVip();
|
52
|
-
const isForeverVip = VipManager.isForeverVip();
|
53
|
-
for (const item of items) {
|
54
|
-
const vipFilter = item.vipFilter;
|
55
|
-
if (
|
56
|
-
vipFilter === 0 ||
|
57
|
-
(vipFilter === 1 && !isVip) ||
|
58
|
-
(vipFilter === 2 && !isForeverVip)
|
59
|
-
) {
|
60
|
-
ret.push(item);
|
61
|
-
}
|
62
|
-
}
|
63
|
-
return ret;
|
64
|
-
};
|
65
|
-
|
66
|
-
const _filterByUser = (items: Message[]): Message[] => {
|
67
|
-
let ret: Message[] = [];
|
68
|
-
for (const item of items) {
|
69
|
-
const users = item.users;
|
70
|
-
if (users?.length) {
|
71
|
-
if (LoginManager.isLogin()) {
|
72
|
-
if (
|
73
|
-
users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))
|
74
|
-
) {
|
75
|
-
ret.push(item);
|
76
|
-
}
|
77
|
-
}
|
78
|
-
} else {
|
79
|
-
ret.push(item);
|
80
|
-
}
|
81
|
-
}
|
82
|
-
return ret;
|
83
|
-
};
|
84
|
-
|
85
49
|
const _handleReadMessages = (items: Message[]): Message[] => {
|
86
50
|
if (__DEV__) {
|
87
51
|
// return items;
|
@@ -136,17 +100,11 @@ const _handleReadMessages = (items: Message[]): Message[] => {
|
|
136
100
|
|
137
101
|
let isDataReady = false;
|
138
102
|
let isConfigStateReady = false;
|
139
|
-
let isVipStateReady = false;
|
140
103
|
let isNetwordDataReady = false;
|
141
104
|
let OnlineItems: Object[] = [];
|
142
105
|
|
143
106
|
const _handleResponse = (customFilter?: MessageFilter) => {
|
144
|
-
if (
|
145
|
-
!isConfigStateReady ||
|
146
|
-
!OnlineItems.length ||
|
147
|
-
!isNetwordDataReady ||
|
148
|
-
!isVipStateReady
|
149
|
-
) {
|
107
|
+
if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {
|
150
108
|
return;
|
151
109
|
}
|
152
110
|
|
@@ -156,8 +114,6 @@ const _handleResponse = (customFilter?: MessageFilter) => {
|
|
156
114
|
|
157
115
|
MyMessages = OnlineItems.map((item) => Tool.jsonify(item));
|
158
116
|
MyMessages = _filterByVersion(MyMessages);
|
159
|
-
MyMessages = _filterByVip(MyMessages);
|
160
|
-
MyMessages = _filterByUser(MyMessages);
|
161
117
|
if (customFilter) {
|
162
118
|
MyMessages = customFilter(MyMessages);
|
163
119
|
}
|
@@ -180,11 +136,7 @@ export type MessageFilter = (oldMessage: Message[]) => Message[];
|
|
180
136
|
export const MessageModel = {
|
181
137
|
init: (customFilter?: MessageFilter) => {
|
182
138
|
Notification.addListener('onVipRefresh', () => {
|
183
|
-
|
184
|
-
if (!isVipStateReady) {
|
185
|
-
isVipStateReady = true;
|
186
|
-
_handleResponse(customFilter);
|
187
|
-
}
|
139
|
+
MessageModel.fetch(customFilter);
|
188
140
|
});
|
189
141
|
|
190
142
|
ConfigDataModel.addListener(() => {
|
@@ -200,15 +152,12 @@ export const MessageModel = {
|
|
200
152
|
if (!isAuto && user && !error) {
|
201
153
|
isDataReady = false;
|
202
154
|
isConfigStateReady = false;
|
203
|
-
isVipStateReady = false;
|
204
155
|
isNetwordDataReady = false;
|
205
156
|
OnlineItems = [];
|
206
157
|
MessageModel.fetch(customFilter);
|
207
158
|
}
|
208
159
|
}
|
209
160
|
);
|
210
|
-
|
211
|
-
MessageModel.fetch(customFilter);
|
212
161
|
},
|
213
162
|
|
214
163
|
fetch: (customFilter?: MessageFilter) => {
|
@@ -217,12 +166,26 @@ export const MessageModel = {
|
|
217
166
|
return;
|
218
167
|
}
|
219
168
|
|
220
|
-
|
221
|
-
query
|
222
|
-
|
223
|
-
|
224
|
-
.
|
169
|
+
let query = new AV.Query('Message');
|
170
|
+
query.equalTo('valid', true).equalTo(Platform.OS, true);
|
171
|
+
|
172
|
+
if (VipManager.isForeverVip()) {
|
173
|
+
query.equalTo('vipFilter', 0);
|
174
|
+
} else if (VipManager.isVip()) {
|
175
|
+
// 这里如果后续增加枚举,就会有问题
|
176
|
+
query.notEqualTo('vipFilter', 1);
|
177
|
+
}
|
178
|
+
|
179
|
+
let userQuery = new AV.Query('Message').sizeEqualTo('users', 0);
|
180
|
+
const userId = LoginManager.currentUser()?.AVUser.get('objectId');
|
181
|
+
if (userId) {
|
182
|
+
const selectUserQuery = new AV.Query('Message').equalTo('users', userId);
|
183
|
+
userQuery = AV.Query.or(userQuery, selectUserQuery);
|
184
|
+
}
|
185
|
+
query = AV.Query.and(query, userQuery);
|
186
|
+
|
225
187
|
query
|
188
|
+
.descending('updatedAt')
|
226
189
|
.find()
|
227
190
|
.then(async (items: Object[]) => {
|
228
191
|
console.log('Message 抓取完毕');
|
@@ -243,6 +206,40 @@ export const MessageModel = {
|
|
243
206
|
return MyMessages;
|
244
207
|
},
|
245
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
|
+
|
246
243
|
markMessageRead: async (message: Message) => {
|
247
244
|
if (message.isRead || !message.objectId) {
|
248
245
|
return;
|