@norcy/react-native-toolkit 0.1.85 → 0.1.87
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/AppLink.js.map +1 -1
- package/lib/commonjs/MessageModel.js +14 -5
- package/lib/commonjs/MessageModel.js.map +1 -1
- package/lib/module/AppLink.js.map +1 -1
- package/lib/module/MessageModel.js +14 -5
- package/lib/module/MessageModel.js.map +1 -1
- package/lib/typescript/AppLink.d.ts +1 -1
- package/package.json +1 -1
- package/src/AppLink.ts +1 -1
- package/src/MessageModel.ts +16 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_queryString","_interopRequireDefault","require","_reactNative","_Tool","obj","__esModule","default","getAppInsideQueryParams","url","ret","page","params","scheme","query","split","queryString","parse","startsWith","ToolkitConfig","AppWebsite","AppScheme","pageName","substring","length","GlobalNavigation","AppLink","exports","open","ignoreSelf","console","log","AndroidStoreUrl","Tool","goAppStoreReview","_GlobalNavigation","navigate","Linking","canOpenURL","then","supported","openURL","error","catch","e","openPage","_GlobalNavigation2","init","navigation","setTimeout","getInitialURL","undefined","err","addEventListener","event"],"sources":["AppLink.ts"],"sourcesContent":["import { NavigationProp, ParamListBase } from '@react-navigation/native';\nimport queryString from 'query-string';\nimport { Linking } from 'react-native';\nimport { Tool, ToolkitConfig } from './Tool';\n\nconst getAppInsideQueryParams = (\n url: string\n): { page: string; params?: object } => {\n // 专门处理 App 内跳转\n // 情况 1:https://norcy.xyz/iread?page=WebPage&url=https%3A%2F%2Fqq.com\n // 情况 2:yiyue://WebPage?url=https%3A%2F%2Fqq.com\n // 情况 3:WebPage?url=https%3A%2F%2Fqq.com\n // 全部都转为 {page:Add, params:{value:'你好', mode:0}}\n const ret = { page: '', params: {} };\n\n const [scheme, query] = url.split('?');\n const params = queryString.parse(query) as { [key: string]: string };\n\n if (scheme.startsWith(ToolkitConfig.AppWebsite) && params.page) {\n // https://norcy.xyz/iread?page=WebPage&url=https%3A%2F%2Fqq.com\n ret.page = params.page;\n delete params.page;\n ret.params = params;\n } else if (scheme.startsWith(ToolkitConfig.AppScheme)) {\n // yiyue://WebPage?url=https%3A%2F%2Fqq.com\n const pageName = scheme.substring(ToolkitConfig.AppScheme.length);\n ret.page = pageName;\n ret.params = params;\n } else if (scheme.startsWith('http')) {\n // 除了第一个 if,http 开头的不处理\n } else {\n // WebPage?url=https%3A%2F%2Fqq.com\n ret.page = scheme;\n ret.params = params;\n }\n return ret;\n};\n\nlet GlobalNavigation: NavigationProp<ParamListBase> | null = null;\n\nexport const AppLink = {\n /* 测试用例:\n 详见 https://docs.qq.com/sheet/DSHpXb29STWpYempK?tab=w20187\n */\n open: (url?: string, ignoreSelf?: boolean) => {\n if (!url) {\n return;\n }\n\n console.log('Open URL', url);\n\n // 第一优先级:Android 市场\n if (url.startsWith(ToolkitConfig.AndroidStoreUrl)) {\n Tool.goAppStoreReview();\n return;\n }\n\n // 第二优先级:App 内跳转\n const ret = getAppInsideQueryParams(url);\n if (ret.page) {\n console.log('App 内跳转', ret);\n GlobalNavigation?.navigate(ret.page, ret.params);\n return;\n }\n\n // 如果是官网,则不再处理,因为 App 内跳转已经处理了\n if (ignoreSelf && url.startsWith(ToolkitConfig.AppWebsite)) {\n return;\n }\n\n // 第三优先级:外部跳转 AppStore、H5 等\n Linking.canOpenURL(url)\n .then((supported) => {\n if (supported) {\n console.log('外部跳转', url);\n Linking.openURL(url);\n } else {\n console.error('无法跳转', url);\n }\n })\n .catch((e) => {\n console.error('无法跳转', url, e);\n });\n },\n\n openPage: (page: string, params
|
|
1
|
+
{"version":3,"names":["_queryString","_interopRequireDefault","require","_reactNative","_Tool","obj","__esModule","default","getAppInsideQueryParams","url","ret","page","params","scheme","query","split","queryString","parse","startsWith","ToolkitConfig","AppWebsite","AppScheme","pageName","substring","length","GlobalNavigation","AppLink","exports","open","ignoreSelf","console","log","AndroidStoreUrl","Tool","goAppStoreReview","_GlobalNavigation","navigate","Linking","canOpenURL","then","supported","openURL","error","catch","e","openPage","_GlobalNavigation2","init","navigation","setTimeout","getInitialURL","undefined","err","addEventListener","event"],"sources":["AppLink.ts"],"sourcesContent":["import { NavigationProp, ParamListBase } from '@react-navigation/native';\nimport queryString from 'query-string';\nimport { Linking } from 'react-native';\nimport { Tool, ToolkitConfig } from './Tool';\n\nconst getAppInsideQueryParams = (\n url: string\n): { page: string; params?: object } => {\n // 专门处理 App 内跳转\n // 情况 1:https://norcy.xyz/iread?page=WebPage&url=https%3A%2F%2Fqq.com\n // 情况 2:yiyue://WebPage?url=https%3A%2F%2Fqq.com\n // 情况 3:WebPage?url=https%3A%2F%2Fqq.com\n // 全部都转为 {page:Add, params:{value:'你好', mode:0}}\n const ret = { page: '', params: {} };\n\n const [scheme, query] = url.split('?');\n const params = queryString.parse(query) as { [key: string]: string };\n\n if (scheme.startsWith(ToolkitConfig.AppWebsite) && params.page) {\n // https://norcy.xyz/iread?page=WebPage&url=https%3A%2F%2Fqq.com\n ret.page = params.page;\n delete params.page;\n ret.params = params;\n } else if (scheme.startsWith(ToolkitConfig.AppScheme)) {\n // yiyue://WebPage?url=https%3A%2F%2Fqq.com\n const pageName = scheme.substring(ToolkitConfig.AppScheme.length);\n ret.page = pageName;\n ret.params = params;\n } else if (scheme.startsWith('http')) {\n // 除了第一个 if,http 开头的不处理\n } else {\n // WebPage?url=https%3A%2F%2Fqq.com\n ret.page = scheme;\n ret.params = params;\n }\n return ret;\n};\n\nlet GlobalNavigation: NavigationProp<ParamListBase> | null = null;\n\nexport const AppLink = {\n /* 测试用例:\n 详见 https://docs.qq.com/sheet/DSHpXb29STWpYempK?tab=w20187\n */\n open: (url?: string, ignoreSelf?: boolean) => {\n if (!url) {\n return;\n }\n\n console.log('Open URL', url);\n\n // 第一优先级:Android 市场\n if (url.startsWith(ToolkitConfig.AndroidStoreUrl)) {\n Tool.goAppStoreReview();\n return;\n }\n\n // 第二优先级:App 内跳转\n const ret = getAppInsideQueryParams(url);\n if (ret.page) {\n console.log('App 内跳转', ret);\n GlobalNavigation?.navigate(ret.page, ret.params);\n return;\n }\n\n // 如果是官网,则不再处理,因为 App 内跳转已经处理了\n if (ignoreSelf && url.startsWith(ToolkitConfig.AppWebsite)) {\n return;\n }\n\n // 第三优先级:外部跳转 AppStore、H5 等\n Linking.canOpenURL(url)\n .then((supported) => {\n if (supported) {\n console.log('外部跳转', url);\n Linking.openURL(url);\n } else {\n console.error('无法跳转', url);\n }\n })\n .catch((e) => {\n console.error('无法跳转', url, e);\n });\n },\n\n openPage: (page: string, params?: object) => {\n if (!page) {\n return;\n }\n GlobalNavigation?.navigate(page, params);\n },\n\n init: (navigation: NavigationProp<ParamListBase>) => {\n GlobalNavigation = navigation;\n setTimeout(() => {\n Linking.getInitialURL()\n .then((url) => {\n // 此处 url 都是官网开头\n AppLink.open(url ?? undefined, true);\n })\n .catch((err) => console.error('获取初始URL时出错:', err));\n }, 1500);\n\n Linking.addEventListener('url', (event) => {\n // 此处 url 都是官网开头\n AppLink.open(event.url, true);\n });\n },\n};\n"],"mappings":"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"}
|
|
@@ -95,17 +95,13 @@ const _handleReadMessages = items => {
|
|
|
95
95
|
item.updatedAt = new Date().toString();
|
|
96
96
|
}
|
|
97
97
|
} else if ((_item$key = item.key) !== null && _item$key !== void 0 && _item$key.length) {
|
|
98
|
+
// 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会
|
|
98
99
|
const freConfig = {
|
|
99
100
|
key: item.key,
|
|
100
101
|
limit: item.limit,
|
|
101
102
|
gap: item.gap
|
|
102
103
|
};
|
|
103
104
|
if (_Frequence.FrequenceManager.canRun(freConfig)) {
|
|
104
|
-
if (freConfig.gap) {
|
|
105
|
-
_Frequence.FrequenceManager.markFinishForTime(freConfig);
|
|
106
|
-
} else if (freConfig.limit) {
|
|
107
|
-
_Frequence.FrequenceManager.markFinishForCount(freConfig);
|
|
108
|
-
}
|
|
109
105
|
item.isRead = false;
|
|
110
106
|
item.updatedAt = new Date().toString();
|
|
111
107
|
}
|
|
@@ -180,6 +176,19 @@ const MessageModel = exports.MessageModel = {
|
|
|
180
176
|
return;
|
|
181
177
|
}
|
|
182
178
|
message.isRead = true;
|
|
179
|
+
if (message.key) {
|
|
180
|
+
const freConfig = {
|
|
181
|
+
key: message.key,
|
|
182
|
+
limit: message.limit,
|
|
183
|
+
gap: message.gap
|
|
184
|
+
};
|
|
185
|
+
// 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
|
|
186
|
+
if (freConfig.gap) {
|
|
187
|
+
_Frequence.FrequenceManager.markFinishForTime(freConfig);
|
|
188
|
+
} else if (freConfig.limit) {
|
|
189
|
+
_Frequence.FrequenceManager.markFinishForCount(freConfig);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
183
192
|
const readMsgs = _PrefData.PrefData.getValue(_PrefData.BuildInPrefs.Messages);
|
|
184
193
|
readMsgs.push(message.objectId);
|
|
185
194
|
await _PrefData.PrefData.setValue(_PrefData.BuildInPrefs.Messages, readMsgs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_Notification","_PrefData","_Tool","_VipManager","AV","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","getReadableVersion","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_filterByUser","users","length","LoginManager","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","objectId","isRead","_item$key","key","config","ConfigDataModel","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","markFinishForTime","markFinishForCount","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","addListenerOnce","Notification","fetch","query","Query","equalTo","Platform","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","setValue","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse(customFilter);\n });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\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 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 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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_Notification","_PrefData","_Tool","_VipManager","AV","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","getReadableVersion","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_filterByUser","users","length","LoginManager","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","objectId","isRead","_item$key","key","config","ConfigDataModel","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","addListenerOnce","Notification","fetch","query","Query","equalTo","Platform","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse(customFilter);\n });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\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 OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,KAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AAEA,MAAMS,EAAE,GAAGT,OAAO,CAAC,mBAAmB,CAAC;AACvC,MAAMU,YAAY,GAAGV,OAAO,CAAC,QAAQ,CAAC,CAACU,YAAY;AACnD,MAAMC,YAAY,GAAG,IAAID,YAAY,CAAC,CAAC;AACvC,MAAME,QAAQ,GAAGZ,OAAO,CAAC,qBAAqB,CAAC;AAC/C,MAAMa,SAAS,GAAGb,OAAO,CAAC,sBAAsB,CAAC;AACjD,MAAMc,YAAY,GAAGd,OAAO,CAAC,yBAAyB,CAAC;AAsBvD,IAAIe,UAAqB,GAAG,EAAE;AAE9B,MAAMC,gBAAgB,GAAIC,KAAgB,IAAgB;EACxD,IAAIC,GAAc,GAAG,EAAE;EACvB,MAAMC,MAAM,GAAGL,YAAY,CAAC,IAAAM,yCAAkB,EAAC,CAAC,CAAC,CAACC,OAAO;EACzD,KAAK,MAAMC,IAAI,IAAIL,KAAK,EAAE;IAAA,IAAAM,YAAA,EAAAC,YAAA;IACxB,MAAMC,MAAM,IAAAF,YAAA,GAAGD,IAAI,CAACG,MAAM,cAAAF,YAAA,uBAAXA,YAAA,CAAaG,IAAI,CAAC,CAAC;IAClC,MAAMC,MAAM,IAAAH,YAAA,GAAGF,IAAI,CAACK,MAAM,cAAAH,YAAA,uBAAXA,YAAA,CAAaE,IAAI,CAAC,CAAC;IAClC;IACA,IAAI,CAAC,CAACD,MAAM,IAAIb,QAAQ,CAACE,YAAY,CAACW,MAAM,CAAC,CAACJ,OAAO,EAAEF,MAAM,CAAC,EAAE;MAC9D;IACF;IACA,IAAI,CAAC,CAACQ,MAAM,IAAId,SAAS,CAACM,MAAM,EAAEL,YAAY,CAACa,MAAM,CAAC,CAACN,OAAO,CAAC,EAAE;MAC/D;IACF;IAEAH,GAAG,CAACU,IAAI,CAACN,IAAI,CAAC;EAChB;EACA,OAAOJ,GAAG;AACZ,CAAC;AAED,MAAMW,YAAY,GAAIZ,KAAgB,IAAgB;EACpD,IAAIC,GAAc,GAAG,EAAE;EACvB,MAAMY,KAAK,GAAGC,sBAAU,CAACD,KAAK,CAAC,CAAC;EAChC,MAAME,YAAY,GAAGD,sBAAU,CAACC,YAAY,CAAC,CAAC;EAC9C,KAAK,MAAMV,IAAI,IAAIL,KAAK,EAAE;IACxB,MAAMgB,SAAS,GAAGX,IAAI,CAACW,SAAS;IAChC,IACEA,SAAS,KAAK,CAAC,IACdA,SAAS,KAAK,CAAC,IAAI,CAACH,KAAM,IAC1BG,SAAS,KAAK,CAAC,IAAI,CAACD,YAAa,EAClC;MACAd,GAAG,CAACU,IAAI,CAACN,IAAI,CAAC;IAChB;EACF;EACA,OAAOJ,GAAG;AACZ,CAAC;AAED,MAAMgB,aAAa,GAAIjB,KAAgB,IAAgB;EACrD,IAAIC,GAAc,GAAG,EAAE;EACvB,KAAK,MAAMI,IAAI,IAAIL,KAAK,EAAE;IACxB,MAAMkB,KAAK,GAAGb,IAAI,CAACa,KAAK;IACxB,IAAIA,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEC,MAAM,EAAE;MACjB,IAAIC,0BAAY,CAACC,OAAO,CAAC,CAAC,EAAE;QAAA,IAAAC,qBAAA;QAC1B,IACEJ,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEK,QAAQ,EAAAD,qBAAA,GAACF,0BAAY,CAACI,WAAW,CAAC,CAAC,cAAAF,qBAAA,uBAA1BA,qBAAA,CAA4BG,MAAM,CAACC,GAAG,CAAC,UAAU,CAAC,CAAC,EACnE;UACAzB,GAAG,CAACU,IAAI,CAACN,IAAI,CAAC;QAChB;MACF;IACF,CAAC,MAAM;MACLJ,GAAG,CAACU,IAAI,CAACN,IAAI,CAAC;IAChB;EACF;EACA,OAAOJ,GAAG;AACZ,CAAC;AAED,MAAM0B,mBAAmB,GAAI3B,KAAgB,IAAgB;EAC3D,IAAI4B,OAAO,EAAE;IACX;EAAA;;EAGF;EACA,MAAMC,QAAQ,GAAGC,kBAAQ,CAACC,QAAQ,CAACC,sBAAY,CAACC,QAAQ,CAAC;EACzD,KAAK,MAAM5B,IAAI,IAAIL,KAAK,EAAE;IACxB,IAAI6B,QAAQ,CAACN,QAAQ,CAAClB,IAAI,CAAC6B,QAAQ,CAAC,EAAE;MACpC7B,IAAI,CAAC8B,MAAM,GAAG,IAAI;IACpB;EACF;;EAEA;EACA,KAAK,MAAM9B,IAAI,IAAIL,KAAK,EAAE;IAAA,IAAAoC,SAAA;IACxB,IAAI,CAAC/B,IAAI,CAAC8B,MAAM,EAAE;MAChB;IACF;IACA,IAAI9B,IAAI,CAACgC,GAAG,KAAK,WAAW,EAAE;MAC5B;MACA;MACA,MAAMC,MAAM,GAAGC,gCAAe,CAACC,gBAAgB,CAAC,CAAC;MACjD,IAAID,gCAAe,CAACb,GAAG,CAAC,eAAe,CAAC,IAAIY,MAAM,CAACG,aAAa,EAAE;QAChEpC,IAAI,CAAC8B,MAAM,GAAG,KAAK;QACnB9B,IAAI,CAACqC,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MACxC;IACF,CAAC,MAAM,KAAAR,SAAA,GAAI/B,IAAI,CAACgC,GAAG,cAAAD,SAAA,eAARA,SAAA,CAAUjB,MAAM,EAAE;MAC3B;MACA,MAAM0B,SAAwB,GAAG;QAC/BR,GAAG,EAAEhC,IAAI,CAACgC,GAAG;QACbS,KAAK,EAAEzC,IAAI,CAACyC,KAAK;QACjBC,GAAG,EAAE1C,IAAI,CAAC0C;MACZ,CAAC;MACD,IAAIC,2BAAgB,CAACC,MAAM,CAACJ,SAAS,CAAC,EAAE;QACtCxC,IAAI,CAAC8B,MAAM,GAAG,KAAK;QACnB9B,IAAI,CAACqC,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MACxC;IACF;EACF;EAEA,OAAO5C,KAAK;AACd,CAAC;AAED,IAAIkD,WAAW,GAAG,KAAK;AACvB,IAAIC,eAAe,GAAG,KAAK;AAC3B,IAAIC,kBAAkB,GAAG,KAAK;AAC9B,IAAIC,WAAqB,GAAG,EAAE;AAE9B,MAAMC,eAAe,GAAIC,YAA4B,IAAK;EAAA,IAAAC,qBAAA;EACxD,IAAI,CAACL,eAAe,IAAI,CAACC,kBAAkB,IAAI,CAACC,WAAW,CAAClC,MAAM,EAAE;IAClE;EACF;EAEA,KAAAqC,qBAAA,GAAIjB,gCAAe,CAACC,gBAAgB,CAAC,CAAC,cAAAgB,qBAAA,eAAlCA,qBAAA,CAAoCC,QAAQ,EAAE;IAChD;EACF;EAEA3D,UAAU,GAAGuD,WAAW,CAACK,GAAG,CAAErD,IAAI,IAAKsD,UAAI,CAACC,OAAO,CAACvD,IAAI,CAAC,CAAC;EAC1DP,UAAU,GAAGC,gBAAgB,CAACD,UAAU,CAAC;EACzCA,UAAU,GAAGc,YAAY,CAACd,UAAU,CAAC;EACrCA,UAAU,GAAGmB,aAAa,CAACnB,UAAU,CAAC;EACtC,IAAIyD,YAAY,EAAE;IAChBzD,UAAU,GAAGyD,YAAY,CAACzD,UAAU,CAAC;EACvC;EAEAA,UAAU,GAAG6B,mBAAmB,CAAC7B,UAAU,CAAC;;EAE5C;EACAA,UAAU,GAAGA,UAAU,CAAC+D,IAAI,CAAC,CAACC,CAAU,EAAEC,CAAU,KAAK;IACvD,IAAIC,KAAK,GAAG,IAAIrB,IAAI,CAACmB,CAAC,CAACpB,SAAS,CAAC,CAACuB,OAAO,CAAC,CAAC;IAC3C,IAAIC,KAAK,GAAG,IAAIvB,IAAI,CAACoB,CAAC,CAACrB,SAAS,CAAC,CAACuB,OAAO,CAAC,CAAC;IAC3C,OAAOC,KAAK,GAAGF,KAAK;EACtB,CAAC,CAAC;EACFG,OAAO,CAACC,GAAG,CAAC,cAAc,CAAC;EAC3BlB,WAAW,GAAG,IAAI;EAClBmB,YAAY,CAACC,UAAU,CAAC,CAAC;AAC3B,CAAC;AAIM,MAAMD,YAAY,GAAAE,OAAA,CAAAF,YAAA,GAAG;EAC1BG,IAAI,EAAGjB,YAA4B,IAAK;IACtChB,gCAAe,CAACkC,eAAe,CAAC,MAAM;MACpCrB,kBAAkB,GAAG,IAAI;MACzBE,eAAe,CAACC,YAAY,CAAC;IAC/B,CAAC,CAAC;;IAEF;IACAmB,0BAAY,CAACD,eAAe,CAAC,cAAc,EAAE,MAAM;MACjDtB,eAAe,GAAG,IAAI;MACtBG,eAAe,CAACC,YAAY,CAAC;IAC/B,CAAC,CAAC;IAEFc,YAAY,CAACM,KAAK,CAACpB,YAAY,CAAC;EAClC,CAAC;EAEDoB,KAAK,EAAGpB,YAA4B,IAAK;IACvC,MAAMqB,KAAK,GAAG,IAAIpF,EAAE,CAACqF,KAAK,CAAC,SAAS,CAAC;IACrCD,KAAK,CACFE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CACtBA,OAAO,CAACC,qBAAQ,CAACC,EAAE,EAAE,IAAI,CAAC,CAC1BC,UAAU,CAAC,WAAW,CAAC;IAC1BL,KAAK,CACFM,IAAI,CAAC,CAAC,CACNC,IAAI,CAAC,MAAOnF,KAAe,IAAK;MAC/BmE,OAAO,CAACC,GAAG,CAAC,cAAc,CAAC;MAC3Bf,WAAW,GAAGrD,KAAK;MACnBsD,eAAe,CAACC,YAAY,CAAC;IAC/B,CAAC,CAAC,CACD6B,KAAK,CAAEC,CAAM,IAAK;MACjBlB,OAAO,CAACmB,KAAK,CAACD,CAAC,CAAC;IAClB,CAAC,CAAC;EACN,CAAC;EAEDE,iBAAiB,EAAEA,CAAA,KAAiB;IAClC,OAAOzF,UAAU,CAAC0F,MAAM,CAAEnF,IAAI,IAAK,CAACA,IAAI,CAAC8B,MAAM,CAAC;EAClD,CAAC;EAEDsD,cAAc,EAAEA,CAAA,KAAiB;IAC/B,OAAO3F,UAAU;EACnB,CAAC;EAED4F,eAAe,EAAE,MAAOC,OAAgB,IAAK;IAC3C,IAAIA,OAAO,CAACxD,MAAM,IAAI,CAACwD,OAAO,CAACzD,QAAQ,EAAE;MACvC;IACF;IACAyD,OAAO,CAACxD,MAAM,GAAG,IAAI;IAErB,IAAIwD,OAAO,CAACtD,GAAG,EAAE;MACf,MAAMQ,SAAwB,GAAG;QAC/BR,GAAG,EAAEsD,OAAO,CAACtD,GAAG;QAChBS,KAAK,EAAE6C,OAAO,CAAC7C,KAAK;QACpBC,GAAG,EAAE4C,OAAO,CAAC5C;MACf,CAAC;MACD;MACA,IAAIF,SAAS,CAACE,GAAG,EAAE;QACjBC,2BAAgB,CAAC4C,iBAAiB,CAAC/C,SAAS,CAAC;MAC/C,CAAC,MAAM,IAAIA,SAAS,CAACC,KAAK,EAAE;QAC1BE,2BAAgB,CAAC6C,kBAAkB,CAAChD,SAAS,CAAC;MAChD;IACF;IAEA,MAAMhB,QAAQ,GAAGC,kBAAQ,CAACC,QAAQ,CAACC,sBAAY,CAACC,QAAQ,CAAC;IACzDJ,QAAQ,CAAClB,IAAI,CAACgF,OAAO,CAACzD,QAAQ,CAAC;IAC/B,MAAMJ,kBAAQ,CAACgE,QAAQ,CAAC9D,sBAAY,CAACC,QAAQ,EAAEJ,QAAQ,CAAC;IACxDwC,YAAY,CAACC,UAAU,CAAC,CAAC;EAC3B,CAAC;EAEDA,UAAU,EAAEA,CAAA,KAAM;IAChB5E,YAAY,CAACqG,IAAI,CAAC,QAAQ,EAAEjG,UAAU,CAACkG,KAAK,CAAC,CAAC,CAAC;EACjD,CAAC;EAEDvB,eAAe,EAAGwB,QAAkB,IAAK;IACvC,IAAI/C,WAAW,EAAE;MACf+C,QAAQ,IAAIA,QAAQ,CAAC,CAAC;MACtB;IACF;IACAvG,YAAY,CAACwG,IAAI,CAAC,QAAQ,EAAED,QAAQ,CAAC;EACvC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["queryString","Linking","Tool","ToolkitConfig","getAppInsideQueryParams","url","ret","page","params","scheme","query","split","parse","startsWith","AppWebsite","AppScheme","pageName","substring","length","GlobalNavigation","AppLink","open","ignoreSelf","console","log","AndroidStoreUrl","goAppStoreReview","_GlobalNavigation","navigate","canOpenURL","then","supported","openURL","error","catch","e","openPage","_GlobalNavigation2","init","navigation","setTimeout","getInitialURL","undefined","err","addEventListener","event"],"sources":["AppLink.ts"],"sourcesContent":["import { NavigationProp, ParamListBase } from '@react-navigation/native';\nimport queryString from 'query-string';\nimport { Linking } from 'react-native';\nimport { Tool, ToolkitConfig } from './Tool';\n\nconst getAppInsideQueryParams = (\n url: string\n): { page: string; params?: object } => {\n // 专门处理 App 内跳转\n // 情况 1:https://norcy.xyz/iread?page=WebPage&url=https%3A%2F%2Fqq.com\n // 情况 2:yiyue://WebPage?url=https%3A%2F%2Fqq.com\n // 情况 3:WebPage?url=https%3A%2F%2Fqq.com\n // 全部都转为 {page:Add, params:{value:'你好', mode:0}}\n const ret = { page: '', params: {} };\n\n const [scheme, query] = url.split('?');\n const params = queryString.parse(query) as { [key: string]: string };\n\n if (scheme.startsWith(ToolkitConfig.AppWebsite) && params.page) {\n // https://norcy.xyz/iread?page=WebPage&url=https%3A%2F%2Fqq.com\n ret.page = params.page;\n delete params.page;\n ret.params = params;\n } else if (scheme.startsWith(ToolkitConfig.AppScheme)) {\n // yiyue://WebPage?url=https%3A%2F%2Fqq.com\n const pageName = scheme.substring(ToolkitConfig.AppScheme.length);\n ret.page = pageName;\n ret.params = params;\n } else if (scheme.startsWith('http')) {\n // 除了第一个 if,http 开头的不处理\n } else {\n // WebPage?url=https%3A%2F%2Fqq.com\n ret.page = scheme;\n ret.params = params;\n }\n return ret;\n};\n\nlet GlobalNavigation: NavigationProp<ParamListBase> | null = null;\n\nexport const AppLink = {\n /* 测试用例:\n 详见 https://docs.qq.com/sheet/DSHpXb29STWpYempK?tab=w20187\n */\n open: (url?: string, ignoreSelf?: boolean) => {\n if (!url) {\n return;\n }\n\n console.log('Open URL', url);\n\n // 第一优先级:Android 市场\n if (url.startsWith(ToolkitConfig.AndroidStoreUrl)) {\n Tool.goAppStoreReview();\n return;\n }\n\n // 第二优先级:App 内跳转\n const ret = getAppInsideQueryParams(url);\n if (ret.page) {\n console.log('App 内跳转', ret);\n GlobalNavigation?.navigate(ret.page, ret.params);\n return;\n }\n\n // 如果是官网,则不再处理,因为 App 内跳转已经处理了\n if (ignoreSelf && url.startsWith(ToolkitConfig.AppWebsite)) {\n return;\n }\n\n // 第三优先级:外部跳转 AppStore、H5 等\n Linking.canOpenURL(url)\n .then((supported) => {\n if (supported) {\n console.log('外部跳转', url);\n Linking.openURL(url);\n } else {\n console.error('无法跳转', url);\n }\n })\n .catch((e) => {\n console.error('无法跳转', url, e);\n });\n },\n\n openPage: (page: string, params
|
|
1
|
+
{"version":3,"names":["queryString","Linking","Tool","ToolkitConfig","getAppInsideQueryParams","url","ret","page","params","scheme","query","split","parse","startsWith","AppWebsite","AppScheme","pageName","substring","length","GlobalNavigation","AppLink","open","ignoreSelf","console","log","AndroidStoreUrl","goAppStoreReview","_GlobalNavigation","navigate","canOpenURL","then","supported","openURL","error","catch","e","openPage","_GlobalNavigation2","init","navigation","setTimeout","getInitialURL","undefined","err","addEventListener","event"],"sources":["AppLink.ts"],"sourcesContent":["import { NavigationProp, ParamListBase } from '@react-navigation/native';\nimport queryString from 'query-string';\nimport { Linking } from 'react-native';\nimport { Tool, ToolkitConfig } from './Tool';\n\nconst getAppInsideQueryParams = (\n url: string\n): { page: string; params?: object } => {\n // 专门处理 App 内跳转\n // 情况 1:https://norcy.xyz/iread?page=WebPage&url=https%3A%2F%2Fqq.com\n // 情况 2:yiyue://WebPage?url=https%3A%2F%2Fqq.com\n // 情况 3:WebPage?url=https%3A%2F%2Fqq.com\n // 全部都转为 {page:Add, params:{value:'你好', mode:0}}\n const ret = { page: '', params: {} };\n\n const [scheme, query] = url.split('?');\n const params = queryString.parse(query) as { [key: string]: string };\n\n if (scheme.startsWith(ToolkitConfig.AppWebsite) && params.page) {\n // https://norcy.xyz/iread?page=WebPage&url=https%3A%2F%2Fqq.com\n ret.page = params.page;\n delete params.page;\n ret.params = params;\n } else if (scheme.startsWith(ToolkitConfig.AppScheme)) {\n // yiyue://WebPage?url=https%3A%2F%2Fqq.com\n const pageName = scheme.substring(ToolkitConfig.AppScheme.length);\n ret.page = pageName;\n ret.params = params;\n } else if (scheme.startsWith('http')) {\n // 除了第一个 if,http 开头的不处理\n } else {\n // WebPage?url=https%3A%2F%2Fqq.com\n ret.page = scheme;\n ret.params = params;\n }\n return ret;\n};\n\nlet GlobalNavigation: NavigationProp<ParamListBase> | null = null;\n\nexport const AppLink = {\n /* 测试用例:\n 详见 https://docs.qq.com/sheet/DSHpXb29STWpYempK?tab=w20187\n */\n open: (url?: string, ignoreSelf?: boolean) => {\n if (!url) {\n return;\n }\n\n console.log('Open URL', url);\n\n // 第一优先级:Android 市场\n if (url.startsWith(ToolkitConfig.AndroidStoreUrl)) {\n Tool.goAppStoreReview();\n return;\n }\n\n // 第二优先级:App 内跳转\n const ret = getAppInsideQueryParams(url);\n if (ret.page) {\n console.log('App 内跳转', ret);\n GlobalNavigation?.navigate(ret.page, ret.params);\n return;\n }\n\n // 如果是官网,则不再处理,因为 App 内跳转已经处理了\n if (ignoreSelf && url.startsWith(ToolkitConfig.AppWebsite)) {\n return;\n }\n\n // 第三优先级:外部跳转 AppStore、H5 等\n Linking.canOpenURL(url)\n .then((supported) => {\n if (supported) {\n console.log('外部跳转', url);\n Linking.openURL(url);\n } else {\n console.error('无法跳转', url);\n }\n })\n .catch((e) => {\n console.error('无法跳转', url, e);\n });\n },\n\n openPage: (page: string, params?: object) => {\n if (!page) {\n return;\n }\n GlobalNavigation?.navigate(page, params);\n },\n\n init: (navigation: NavigationProp<ParamListBase>) => {\n GlobalNavigation = navigation;\n setTimeout(() => {\n Linking.getInitialURL()\n .then((url) => {\n // 此处 url 都是官网开头\n AppLink.open(url ?? undefined, true);\n })\n .catch((err) => console.error('获取初始URL时出错:', err));\n }, 1500);\n\n Linking.addEventListener('url', (event) => {\n // 此处 url 都是官网开头\n AppLink.open(event.url, true);\n });\n },\n};\n"],"mappings":"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"}
|
|
@@ -89,17 +89,13 @@ const _handleReadMessages = items => {
|
|
|
89
89
|
item.updatedAt = new Date().toString();
|
|
90
90
|
}
|
|
91
91
|
} else if ((_item$key = item.key) !== null && _item$key !== void 0 && _item$key.length) {
|
|
92
|
+
// 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会
|
|
92
93
|
const freConfig = {
|
|
93
94
|
key: item.key,
|
|
94
95
|
limit: item.limit,
|
|
95
96
|
gap: item.gap
|
|
96
97
|
};
|
|
97
98
|
if (FrequenceManager.canRun(freConfig)) {
|
|
98
|
-
if (freConfig.gap) {
|
|
99
|
-
FrequenceManager.markFinishForTime(freConfig);
|
|
100
|
-
} else if (freConfig.limit) {
|
|
101
|
-
FrequenceManager.markFinishForCount(freConfig);
|
|
102
|
-
}
|
|
103
99
|
item.isRead = false;
|
|
104
100
|
item.updatedAt = new Date().toString();
|
|
105
101
|
}
|
|
@@ -174,6 +170,19 @@ export const MessageModel = {
|
|
|
174
170
|
return;
|
|
175
171
|
}
|
|
176
172
|
message.isRead = true;
|
|
173
|
+
if (message.key) {
|
|
174
|
+
const freConfig = {
|
|
175
|
+
key: message.key,
|
|
176
|
+
limit: message.limit,
|
|
177
|
+
gap: message.gap
|
|
178
|
+
};
|
|
179
|
+
// 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
|
|
180
|
+
if (freConfig.gap) {
|
|
181
|
+
FrequenceManager.markFinishForTime(freConfig);
|
|
182
|
+
} else if (freConfig.limit) {
|
|
183
|
+
FrequenceManager.markFinishForCount(freConfig);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
177
186
|
const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
|
|
178
187
|
readMsgs.push(message.objectId);
|
|
179
188
|
await PrefData.setValue(BuildInPrefs.Messages, readMsgs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","Notification","BuildInPrefs","PrefData","Tool","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","markFinishForTime","markFinishForCount","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListenerOnce","fetch","query","Query","equalTo","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","setValue","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse(customFilter);\n });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\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 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 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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","Notification","BuildInPrefs","PrefData","Tool","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListenerOnce","fetch","query","Query","equalTo","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse(customFilter);\n });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\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 OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NavigationProp, ParamListBase } from '@react-navigation/native';
|
|
2
2
|
export declare const AppLink: {
|
|
3
3
|
open: (url?: string, ignoreSelf?: boolean) => void;
|
|
4
|
-
openPage: (page: string, params
|
|
4
|
+
openPage: (page: string, params?: object) => void;
|
|
5
5
|
init: (navigation: NavigationProp<ParamListBase>) => void;
|
|
6
6
|
};
|
package/package.json
CHANGED
package/src/AppLink.ts
CHANGED
package/src/MessageModel.ts
CHANGED
|
@@ -120,18 +120,13 @@ const _handleReadMessages = (items: Message[]): Message[] => {
|
|
|
120
120
|
item.updatedAt = new Date().toString();
|
|
121
121
|
}
|
|
122
122
|
} else if (item.key?.length) {
|
|
123
|
+
// 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会
|
|
123
124
|
const freConfig: FreConfigType = {
|
|
124
125
|
key: item.key,
|
|
125
126
|
limit: item.limit,
|
|
126
127
|
gap: item.gap,
|
|
127
128
|
};
|
|
128
129
|
if (FrequenceManager.canRun(freConfig)) {
|
|
129
|
-
if (freConfig.gap) {
|
|
130
|
-
FrequenceManager.markFinishForTime(freConfig);
|
|
131
|
-
} else if (freConfig.limit) {
|
|
132
|
-
FrequenceManager.markFinishForCount(freConfig);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
130
|
item.isRead = false;
|
|
136
131
|
item.updatedAt = new Date().toString();
|
|
137
132
|
}
|
|
@@ -225,6 +220,21 @@ export const MessageModel = {
|
|
|
225
220
|
return;
|
|
226
221
|
}
|
|
227
222
|
message.isRead = true;
|
|
223
|
+
|
|
224
|
+
if (message.key) {
|
|
225
|
+
const freConfig: FreConfigType = {
|
|
226
|
+
key: message.key,
|
|
227
|
+
limit: message.limit,
|
|
228
|
+
gap: message.gap,
|
|
229
|
+
};
|
|
230
|
+
// 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的
|
|
231
|
+
if (freConfig.gap) {
|
|
232
|
+
FrequenceManager.markFinishForTime(freConfig);
|
|
233
|
+
} else if (freConfig.limit) {
|
|
234
|
+
FrequenceManager.markFinishForCount(freConfig);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
228
238
|
const readMsgs = PrefData.getValue(BuildInPrefs.Messages);
|
|
229
239
|
readMsgs.push(message.objectId);
|
|
230
240
|
await PrefData.setValue(BuildInPrefs.Messages, readMsgs);
|