@norcy/react-native-toolkit 0.1.91 → 0.1.93
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/ConfigDataModel.js +22 -3
- package/lib/commonjs/ConfigDataModel.js.map +1 -1
- package/lib/commonjs/MessageModel.js +32 -10
- package/lib/commonjs/MessageModel.js.map +1 -1
- package/lib/module/ConfigDataModel.js +22 -3
- package/lib/module/ConfigDataModel.js.map +1 -1
- package/lib/module/MessageModel.js +32 -10
- package/lib/module/MessageModel.js.map +1 -1
- package/lib/typescript/ConfigDataModel.d.ts +1 -0
- package/lib/typescript/MessageModel.d.ts +2 -0
- package/package.json +1 -1
- package/src/ConfigDataModel.ts +24 -2
- package/src/MessageModel.ts +33 -9
|
@@ -94,7 +94,7 @@ let isVipStateReady = false;
|
|
|
94
94
|
let isNetwordDataReady = false;
|
|
95
95
|
let OnlineItems = [];
|
|
96
96
|
const _handleResponse = () => {
|
|
97
|
-
if (!isVipStateReady || !
|
|
97
|
+
if (!isVipStateReady || !isNetwordDataReady) {
|
|
98
98
|
return;
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -113,8 +113,6 @@ const _handleResponse = () => {
|
|
|
113
113
|
const ConfigDataModel = exports.ConfigDataModel = {
|
|
114
114
|
init: defaultValues => {
|
|
115
115
|
MyItems = defaultValues;
|
|
116
|
-
// TODO 这里切换登录信息会复用
|
|
117
|
-
|
|
118
116
|
_Notification.Notification.addListener('onVipRefresh', _ref => {
|
|
119
117
|
let {
|
|
120
118
|
e
|
|
@@ -125,6 +123,20 @@ const ConfigDataModel = exports.ConfigDataModel = {
|
|
|
125
123
|
_handleResponse();
|
|
126
124
|
}
|
|
127
125
|
});
|
|
126
|
+
_Notification.Notification.addListener('onLogin', _ref2 => {
|
|
127
|
+
let {
|
|
128
|
+
isAuto,
|
|
129
|
+
user,
|
|
130
|
+
error
|
|
131
|
+
} = _ref2;
|
|
132
|
+
if (!isAuto && user && !error) {
|
|
133
|
+
isDataReady = false;
|
|
134
|
+
isVipStateReady = false;
|
|
135
|
+
isNetwordDataReady = false;
|
|
136
|
+
OnlineItems = [];
|
|
137
|
+
ConfigDataModel.fetch();
|
|
138
|
+
}
|
|
139
|
+
});
|
|
128
140
|
ConfigDataModel.fetch();
|
|
129
141
|
},
|
|
130
142
|
fetch: () => {
|
|
@@ -158,6 +170,13 @@ const ConfigDataModel = exports.ConfigDataModel = {
|
|
|
158
170
|
return;
|
|
159
171
|
}
|
|
160
172
|
eventEmitter.once('change', callback);
|
|
173
|
+
},
|
|
174
|
+
addListener: callback => {
|
|
175
|
+
if (isDataReady) {
|
|
176
|
+
callback && callback();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
eventEmitter.on('change', callback);
|
|
161
180
|
}
|
|
162
181
|
};
|
|
163
182
|
//# sourceMappingURL=ConfigDataModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_DevConfig","_Notification","_PrefData","_VipAndroidManager","_VipManager","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","getReadableVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_updateKeyValues","value","handleVersionInfo","key","Platform","OS","configVersion","ConfigDataModel","onlineVersion","__DEV__","DevConfig","hasValue","BuildInPrefs","DevDanger","getValue","isDataReady","isVipStateReady","isNetwordDataReady","OnlineItems","_handleResponse","length","console","log","VipAndroidManager","setPackages","emitChange","exports","init","defaultValues","Notification","addListener","_ref","e","fetch","query","Query","equalTo","find","then","catch","error","getVersionConfig","emit","addListenerOnce","callback","once"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { VipManager } from './VipManager';\n\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 ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: false,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('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: Object[]) => {\n let ret = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.get('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 _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n const onlineVersion = semverCoerce(configVersion).version;\n // current < online,才有新版本\n if (semverGt(onlineVersion, VersionInfo.currentVersion)) {\n VersionInfo.latestVersion = onlineVersion;\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (!semverGt(VersionInfo.currentVersion, onlineVersion)) {\n VersionInfo.isDanger = false;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = () => {\n if (!isVipStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n // 根据 VIP 状态过滤\n items = _filterByVip(items);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setPackages(ConfigDataModel.get('vip_android_products'));\n ConfigDataModel.emitChange();\n};\n\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n // TODO 这里切换登录信息会复用\n\n Notification.addListener('onVipRefresh', ({ e }: { e: any }) => {\n // 监听多次,直到成功,整个生命周期最多处理一次\n if (!e && !isVipStateReady) {\n isVipStateReady = true;\n _handleResponse();\n }\n });\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AAEA,MAAMO,YAAY,GAAGP,OAAO,CAAC,QAAQ,CAAC,CAACO,YAAY;AACnD,MAAMC,YAAY,GAAG,IAAID,YAAY,CAAC,CAAC;AACvC,MAAME,QAAQ,GAAGT,OAAO,CAAC,qBAAqB,CAAC;AAC/C,MAAMU,SAAS,GAAGV,OAAO,CAAC,sBAAsB,CAAC;AACjD,MAAMW,YAAY,GAAGX,OAAO,CAAC,yBAAyB,CAAC;AAKvD,IAAIY,OAAoB,GAAG,CAAC,CAAC;AAC7B,IAAIC,WAAW,GAAG;EAChBC,cAAc,EAAEH,YAAY,CAAC,IAAAI,yCAAkB,EAAC,CAAC,CAAC,CAACC,OAAO;EAC1DC,aAAa,EAAEN,YAAY,CAAC,IAAAI,yCAAkB,EAAC,CAAC,CAAC,CAACC,OAAO;EACzDE,QAAQ,EAAE,KAAK;EACfC,aAAa,EAAE;AACjB,CAAC;AAED,MAAMC,EAAE,GAAGpB,OAAO,CAAC,mBAAmB,CAAC;AAEvC,MAAMqB,gBAAgB,GAAIC,KAAe,IAAK;EAC5C,IAAIC,GAAG,GAAG,EAAE;EACZ,MAAMC,MAAM,GAAGb,YAAY,CAAC,IAAAI,yCAAkB,EAAC,CAAC,CAAC,CAACC,OAAO;EACzD,KAAK,MAAMS,IAAI,IAAIH,KAAK,EAAE;IAAA,IAAAI,SAAA,EAAAC,UAAA;IACxB,MAAMC,MAAM,IAAAF,SAAA,GAAGD,IAAI,CAACI,GAAG,CAAC,QAAQ,CAAC,cAAAH,SAAA,uBAAlBA,SAAA,CAAoBI,IAAI,CAAC,CAAC;IACzC,MAAMC,MAAM,IAAAJ,UAAA,GAAGF,IAAI,CAACI,GAAG,CAAC,QAAQ,CAAC,cAAAF,UAAA,uBAAlBA,UAAA,CAAoBG,IAAI,CAAC,CAAC;IACzC;IACA,IAAI,CAAC,CAACF,MAAM,IAAInB,QAAQ,CAACE,YAAY,CAACiB,MAAM,CAAC,CAACZ,OAAO,EAAEQ,MAAM,CAAC,EAAE;MAC9D;IACF;IACA,IAAI,CAAC,CAACO,MAAM,IAAIrB,SAAS,CAACc,MAAM,EAAEb,YAAY,CAACoB,MAAM,CAAC,CAACf,OAAO,CAAC,EAAE;MAC/D;IACF;IAEAO,GAAG,CAACS,IAAI,CAACP,IAAI,CAAC;EAChB;EACA,OAAOF,GAAG;AACZ,CAAC;AAED,MAAMU,YAAY,GAAIX,KAAe,IAAK;EACxC,IAAIC,GAAG,GAAG,EAAE;EACZ,MAAMW,KAAK,GAAGC,sBAAU,CAACD,KAAK,CAAC,CAAC;EAChC,MAAME,YAAY,GAAGD,sBAAU,CAACC,YAAY,CAAC,CAAC;EAC9C,KAAK,MAAMX,IAAI,IAAIH,KAAK,EAAE;IACxB,MAAMe,SAAS,GAAGZ,IAAI,CAACI,GAAG,CAAC,WAAW,CAAC;IACvC,IACEQ,SAAS,KAAK,CAAC,IACdA,SAAS,KAAK,CAAC,IAAI,CAACH,KAAM,IAC1BG,SAAS,KAAK,CAAC,IAAI,CAACD,YAAa,EAClC;MACAb,GAAG,CAACS,IAAI,CAACP,IAAI,CAAC;IAChB;EACF;EACA,OAAOF,GAAG;AACZ,CAAC;AAED,MAAMe,gBAAgB,GAAIhB,KAAe,IAAK;EAC5C,KAAK,MAAMG,IAAI,IAAIH,KAAK,EAAE;IACxB,IAAIiB,KAAK,GAAGd,IAAI,CAACI,GAAG,CAAC,OAAO,CAAC;IAC7B,IAAI,OAAOU,KAAK,KAAK,QAAQ,EAAE;MAC7B;MACAA,KAAK,GAAGA,KAAK,CAACT,IAAI,CAAC,CAAC;IACtB;IACAlB,OAAO,CAACa,IAAI,CAACI,GAAG,CAAC,KAAK,CAAC,CAAC,GAAGU,KAAK;EAClC;AACF,CAAC;AAED,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;EAC9B;EACA,IAAIC,GAAG,GAAG,IAAI;EACd,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;IAC7BF,GAAG,GAAG,KAAK;EACb;EACA,MAAMG,aAAa,GAAGC,eAAe,CAAChB,GAAG,CAACY,GAAG,CAAC;EAC9C,IAAIG,aAAa,EAAE;IACjB,MAAME,aAAa,GAAGnC,YAAY,CAACiC,aAAa,CAAC,CAAC5B,OAAO;IACzD;IACA,IAAIP,QAAQ,CAACqC,aAAa,EAAEjC,WAAW,CAACC,cAAc,CAAC,EAAE;MACvDD,WAAW,CAACI,aAAa,GAAG6B,aAAa;MACzCjC,WAAW,CAACM,aAAa,GAAG,IAAI;IAClC;IACA;IACA,IAAI,CAACV,QAAQ,CAACI,WAAW,CAACC,cAAc,EAAEgC,aAAa,CAAC,EAAE;MACxDjC,WAAW,CAACK,QAAQ,GAAG,KAAK;IAC9B;EACF;EAEA,IAAI6B,OAAO,EAAE;IACX,IAAIC,oBAAS,CAACC,QAAQ,CAACC,sBAAY,CAACC,SAAS,CAAC,EAAE;MAC9CtC,WAAW,CAACK,QAAQ,GAAG8B,oBAAS,CAACI,QAAQ,CAACF,sBAAY,CAACC,SAAS,CAAC;IACnE;EACF;AACF,CAAC;AAED,IAAIE,WAAW,GAAG,KAAK;AACvB,IAAIC,eAAe,GAAG,KAAK;AAC3B,IAAIC,kBAAkB,GAAG,KAAK;AAC9B,IAAIC,WAAqB,GAAG,EAAE;AAE9B,MAAMC,eAAe,GAAGA,CAAA,KAAM;EAC5B,IAAI,CAACH,eAAe,IAAI,CAACE,WAAW,CAACE,MAAM,IAAI,CAACH,kBAAkB,EAAE;IAClE;EACF;;EAEA;EACA,IAAIjC,KAAK,GAAGD,gBAAgB,CAACmC,WAAW,CAAC;EACzC;EACAlC,KAAK,GAAGW,YAAY,CAACX,KAAK,CAAC;EAC3BgB,gBAAgB,CAAChB,KAAK,CAAC;EACvB;EACAkB,iBAAiB,CAAC,CAAC;EACnBmB,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;EAC1BP,WAAW,GAAG,IAAI;EAClBQ,oCAAiB,CAACC,WAAW,CAACjB,eAAe,CAAChB,GAAG,CAAC,sBAAsB,CAAC,CAAC;EAC1EgB,eAAe,CAACkB,UAAU,CAAC,CAAC;AAC9B,CAAC;AAED,MAAMlB,eAAe,GAAAmB,OAAA,CAAAnB,eAAA,GAAG;EACtBoB,IAAI,EAAGC,aAA0B,IAAK;IACpCtD,OAAO,GAAGsD,aAAa;IACvB;;IAEAC,0BAAY,CAACC,WAAW,CAAC,cAAc,EAAEC,IAAA,IAAuB;MAAA,IAAtB;QAAEC;MAAc,CAAC,GAAAD,IAAA;MACzD;MACA,IAAI,CAACC,CAAC,IAAI,CAAChB,eAAe,EAAE;QAC1BA,eAAe,GAAG,IAAI;QACtBG,eAAe,CAAC,CAAC;MACnB;IACF,CAAC,CAAC;IACFZ,eAAe,CAAC0B,KAAK,CAAC,CAAC;EACzB,CAAC;EAEDA,KAAK,EAAEA,CAAA,KAAM;IACX;IACA,IAAIhB,kBAAkB,EAAE;MACtB;IACF;IAEA,MAAMiB,KAAK,GAAG,IAAIpD,EAAE,CAACqD,KAAK,CAAC,SAAS,CAAC;IACrCD,KAAK,CAACE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAACA,OAAO,CAAChC,qBAAQ,CAACC,EAAE,EAAE,IAAI,CAAC;IACvD6B,KAAK,CACFG,IAAI,CAAC,CAAC,CACNC,IAAI,CAAEtD,KAAe,IAAK;MACzBqC,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;MAC1BL,kBAAkB,GAAG,IAAI;MACzBC,WAAW,GAAGlC,KAAK;MACnBmC,eAAe,CAAC,CAAC;IACnB,CAAC,CAAC,CACDoB,KAAK,CAAEP,CAAM,IAAK;MACjBX,OAAO,CAACmB,KAAK,CAACR,CAAC,CAAC;IAClB,CAAC,CAAC;EACN,CAAC;EAEDS,gBAAgB,EAAEA,CAAA,KAAM;IACtB,OAAOlE,WAAW;EACpB,CAAC;EAEDgB,GAAG,EAAGY,GAAW,IAAK;IACpB,OAAO7B,OAAO,CAAC6B,GAAG,CAAC;EACrB,CAAC;EAEDsB,UAAU,EAAEA,CAAA,KAAM;IAChBvD,YAAY,CAACwE,IAAI,CAAC,QAAQ,CAAC;EAC7B,CAAC;EAEDC,eAAe,EAAGC,QAAkB,IAAK;IACvC,IAAI7B,WAAW,EAAE;MACf6B,QAAQ,IAAIA,QAAQ,CAAC,CAAC;MACtB;IACF;IACA1E,YAAY,CAAC2E,IAAI,CAAC,QAAQ,EAAED,QAAQ,CAAC;EACvC;AACF,CAAC"}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_DevConfig","_Notification","_PrefData","_VipAndroidManager","_VipManager","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","getReadableVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_updateKeyValues","value","handleVersionInfo","key","Platform","OS","configVersion","ConfigDataModel","onlineVersion","__DEV__","DevConfig","hasValue","BuildInPrefs","DevDanger","getValue","isDataReady","isVipStateReady","isNetwordDataReady","OnlineItems","_handleResponse","console","log","VipAndroidManager","setPackages","emitChange","exports","init","defaultValues","Notification","addListener","_ref","e","_ref2","isAuto","user","error","fetch","query","Query","equalTo","find","then","catch","getVersionConfig","emit","addListenerOnce","callback","once","on"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { VipManager } from './VipManager';\n\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 ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: false,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('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: Object[]) => {\n let ret = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.get('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 _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n const onlineVersion = semverCoerce(configVersion).version;\n // current < online,才有新版本\n if (semverGt(onlineVersion, VersionInfo.currentVersion)) {\n VersionInfo.latestVersion = onlineVersion;\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (!semverGt(VersionInfo.currentVersion, onlineVersion)) {\n VersionInfo.isDanger = false;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = () => {\n if (!isVipStateReady || !isNetwordDataReady) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n // 根据 VIP 状态过滤\n items = _filterByVip(items);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setPackages(ConfigDataModel.get('vip_android_products'));\n ConfigDataModel.emitChange();\n};\n\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n\n Notification.addListener('onVipRefresh', ({ e }: { e: any }) => {\n // 监听多次,直到成功,整个生命周期最多处理一次\n if (!e && !isVipStateReady) {\n isVipStateReady = true;\n _handleResponse();\n }\n });\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isVipStateReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n ConfigDataModel.fetch();\n }\n }\n );\n\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\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;\n }\n eventEmitter.on('change', callback);\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AAEA,MAAMO,YAAY,GAAGP,OAAO,CAAC,QAAQ,CAAC,CAACO,YAAY;AACnD,MAAMC,YAAY,GAAG,IAAID,YAAY,CAAC,CAAC;AACvC,MAAME,QAAQ,GAAGT,OAAO,CAAC,qBAAqB,CAAC;AAC/C,MAAMU,SAAS,GAAGV,OAAO,CAAC,sBAAsB,CAAC;AACjD,MAAMW,YAAY,GAAGX,OAAO,CAAC,yBAAyB,CAAC;AAKvD,IAAIY,OAAoB,GAAG,CAAC,CAAC;AAC7B,IAAIC,WAAW,GAAG;EAChBC,cAAc,EAAEH,YAAY,CAAC,IAAAI,yCAAkB,EAAC,CAAC,CAAC,CAACC,OAAO;EAC1DC,aAAa,EAAEN,YAAY,CAAC,IAAAI,yCAAkB,EAAC,CAAC,CAAC,CAACC,OAAO;EACzDE,QAAQ,EAAE,KAAK;EACfC,aAAa,EAAE;AACjB,CAAC;AAED,MAAMC,EAAE,GAAGpB,OAAO,CAAC,mBAAmB,CAAC;AAEvC,MAAMqB,gBAAgB,GAAIC,KAAe,IAAK;EAC5C,IAAIC,GAAG,GAAG,EAAE;EACZ,MAAMC,MAAM,GAAGb,YAAY,CAAC,IAAAI,yCAAkB,EAAC,CAAC,CAAC,CAACC,OAAO;EACzD,KAAK,MAAMS,IAAI,IAAIH,KAAK,EAAE;IAAA,IAAAI,SAAA,EAAAC,UAAA;IACxB,MAAMC,MAAM,IAAAF,SAAA,GAAGD,IAAI,CAACI,GAAG,CAAC,QAAQ,CAAC,cAAAH,SAAA,uBAAlBA,SAAA,CAAoBI,IAAI,CAAC,CAAC;IACzC,MAAMC,MAAM,IAAAJ,UAAA,GAAGF,IAAI,CAACI,GAAG,CAAC,QAAQ,CAAC,cAAAF,UAAA,uBAAlBA,UAAA,CAAoBG,IAAI,CAAC,CAAC;IACzC;IACA,IAAI,CAAC,CAACF,MAAM,IAAInB,QAAQ,CAACE,YAAY,CAACiB,MAAM,CAAC,CAACZ,OAAO,EAAEQ,MAAM,CAAC,EAAE;MAC9D;IACF;IACA,IAAI,CAAC,CAACO,MAAM,IAAIrB,SAAS,CAACc,MAAM,EAAEb,YAAY,CAACoB,MAAM,CAAC,CAACf,OAAO,CAAC,EAAE;MAC/D;IACF;IAEAO,GAAG,CAACS,IAAI,CAACP,IAAI,CAAC;EAChB;EACA,OAAOF,GAAG;AACZ,CAAC;AAED,MAAMU,YAAY,GAAIX,KAAe,IAAK;EACxC,IAAIC,GAAG,GAAG,EAAE;EACZ,MAAMW,KAAK,GAAGC,sBAAU,CAACD,KAAK,CAAC,CAAC;EAChC,MAAME,YAAY,GAAGD,sBAAU,CAACC,YAAY,CAAC,CAAC;EAC9C,KAAK,MAAMX,IAAI,IAAIH,KAAK,EAAE;IACxB,MAAMe,SAAS,GAAGZ,IAAI,CAACI,GAAG,CAAC,WAAW,CAAC;IACvC,IACEQ,SAAS,KAAK,CAAC,IACdA,SAAS,KAAK,CAAC,IAAI,CAACH,KAAM,IAC1BG,SAAS,KAAK,CAAC,IAAI,CAACD,YAAa,EAClC;MACAb,GAAG,CAACS,IAAI,CAACP,IAAI,CAAC;IAChB;EACF;EACA,OAAOF,GAAG;AACZ,CAAC;AAED,MAAMe,gBAAgB,GAAIhB,KAAe,IAAK;EAC5C,KAAK,MAAMG,IAAI,IAAIH,KAAK,EAAE;IACxB,IAAIiB,KAAK,GAAGd,IAAI,CAACI,GAAG,CAAC,OAAO,CAAC;IAC7B,IAAI,OAAOU,KAAK,KAAK,QAAQ,EAAE;MAC7B;MACAA,KAAK,GAAGA,KAAK,CAACT,IAAI,CAAC,CAAC;IACtB;IACAlB,OAAO,CAACa,IAAI,CAACI,GAAG,CAAC,KAAK,CAAC,CAAC,GAAGU,KAAK;EAClC;AACF,CAAC;AAED,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;EAC9B;EACA,IAAIC,GAAG,GAAG,IAAI;EACd,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;IAC7BF,GAAG,GAAG,KAAK;EACb;EACA,MAAMG,aAAa,GAAGC,eAAe,CAAChB,GAAG,CAACY,GAAG,CAAC;EAC9C,IAAIG,aAAa,EAAE;IACjB,MAAME,aAAa,GAAGnC,YAAY,CAACiC,aAAa,CAAC,CAAC5B,OAAO;IACzD;IACA,IAAIP,QAAQ,CAACqC,aAAa,EAAEjC,WAAW,CAACC,cAAc,CAAC,EAAE;MACvDD,WAAW,CAACI,aAAa,GAAG6B,aAAa;MACzCjC,WAAW,CAACM,aAAa,GAAG,IAAI;IAClC;IACA;IACA,IAAI,CAACV,QAAQ,CAACI,WAAW,CAACC,cAAc,EAAEgC,aAAa,CAAC,EAAE;MACxDjC,WAAW,CAACK,QAAQ,GAAG,KAAK;IAC9B;EACF;EAEA,IAAI6B,OAAO,EAAE;IACX,IAAIC,oBAAS,CAACC,QAAQ,CAACC,sBAAY,CAACC,SAAS,CAAC,EAAE;MAC9CtC,WAAW,CAACK,QAAQ,GAAG8B,oBAAS,CAACI,QAAQ,CAACF,sBAAY,CAACC,SAAS,CAAC;IACnE;EACF;AACF,CAAC;AAED,IAAIE,WAAW,GAAG,KAAK;AACvB,IAAIC,eAAe,GAAG,KAAK;AAC3B,IAAIC,kBAAkB,GAAG,KAAK;AAC9B,IAAIC,WAAqB,GAAG,EAAE;AAE9B,MAAMC,eAAe,GAAGA,CAAA,KAAM;EAC5B,IAAI,CAACH,eAAe,IAAI,CAACC,kBAAkB,EAAE;IAC3C;EACF;;EAEA;EACA,IAAIjC,KAAK,GAAGD,gBAAgB,CAACmC,WAAW,CAAC;EACzC;EACAlC,KAAK,GAAGW,YAAY,CAACX,KAAK,CAAC;EAC3BgB,gBAAgB,CAAChB,KAAK,CAAC;EACvB;EACAkB,iBAAiB,CAAC,CAAC;EACnBkB,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;EAC1BN,WAAW,GAAG,IAAI;EAClBO,oCAAiB,CAACC,WAAW,CAAChB,eAAe,CAAChB,GAAG,CAAC,sBAAsB,CAAC,CAAC;EAC1EgB,eAAe,CAACiB,UAAU,CAAC,CAAC;AAC9B,CAAC;AAED,MAAMjB,eAAe,GAAAkB,OAAA,CAAAlB,eAAA,GAAG;EACtBmB,IAAI,EAAGC,aAA0B,IAAK;IACpCrD,OAAO,GAAGqD,aAAa;IAEvBC,0BAAY,CAACC,WAAW,CAAC,cAAc,EAAEC,IAAA,IAAuB;MAAA,IAAtB;QAAEC;MAAc,CAAC,GAAAD,IAAA;MACzD;MACA,IAAI,CAACC,CAAC,IAAI,CAACf,eAAe,EAAE;QAC1BA,eAAe,GAAG,IAAI;QACtBG,eAAe,CAAC,CAAC;MACnB;IACF,CAAC,CAAC;IAEFS,0BAAY,CAACC,WAAW,CACtB,SAAS,EACTG,KAAA,IAAkD;MAAA,IAAjD;QAAEC,MAAM;QAAEC,IAAI;QAAEC;MAA2B,CAAC,GAAAH,KAAA;MAC3C,IAAI,CAACC,MAAM,IAAIC,IAAI,IAAI,CAACC,KAAK,EAAE;QAC7BpB,WAAW,GAAG,KAAK;QACnBC,eAAe,GAAG,KAAK;QACvBC,kBAAkB,GAAG,KAAK;QAC1BC,WAAW,GAAG,EAAE;QAChBX,eAAe,CAAC6B,KAAK,CAAC,CAAC;MACzB;IACF,CACF,CAAC;IAED7B,eAAe,CAAC6B,KAAK,CAAC,CAAC;EACzB,CAAC;EAEDA,KAAK,EAAEA,CAAA,KAAM;IACX;IACA,IAAInB,kBAAkB,EAAE;MACtB;IACF;IAEA,MAAMoB,KAAK,GAAG,IAAIvD,EAAE,CAACwD,KAAK,CAAC,SAAS,CAAC;IACrCD,KAAK,CAACE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAACA,OAAO,CAACnC,qBAAQ,CAACC,EAAE,EAAE,IAAI,CAAC;IACvDgC,KAAK,CACFG,IAAI,CAAC,CAAC,CACNC,IAAI,CAAEzD,KAAe,IAAK;MACzBoC,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;MAC1BJ,kBAAkB,GAAG,IAAI;MACzBC,WAAW,GAAGlC,KAAK;MACnBmC,eAAe,CAAC,CAAC;IACnB,CAAC,CAAC,CACDuB,KAAK,CAAEX,CAAM,IAAK;MACjBX,OAAO,CAACe,KAAK,CAACJ,CAAC,CAAC;IAClB,CAAC,CAAC;EACN,CAAC;EAEDY,gBAAgB,EAAEA,CAAA,KAAM;IACtB,OAAOpE,WAAW;EACpB,CAAC;EAEDgB,GAAG,EAAGY,GAAW,IAAK;IACpB,OAAO7B,OAAO,CAAC6B,GAAG,CAAC;EACrB,CAAC;EAEDqB,UAAU,EAAEA,CAAA,KAAM;IAChBtD,YAAY,CAAC0E,IAAI,CAAC,QAAQ,CAAC;EAC7B,CAAC;EAEDC,eAAe,EAAGC,QAAkB,IAAK;IACvC,IAAI/B,WAAW,EAAE;MACf+B,QAAQ,IAAIA,QAAQ,CAAC,CAAC;MACtB;IACF;IACA5E,YAAY,CAAC6E,IAAI,CAAC,QAAQ,EAAED,QAAQ,CAAC;EACvC,CAAC;EAEDjB,WAAW,EAAGiB,QAAkB,IAAK;IACnC,IAAI/B,WAAW,EAAE;MACf+B,QAAQ,IAAIA,QAAQ,CAAC,CAAC;MACtB;IACF;IACA5E,YAAY,CAAC8E,EAAE,CAAC,QAAQ,EAAEF,QAAQ,CAAC;EACrC;AACF,CAAC"}
|
|
@@ -9,6 +9,7 @@ var _reactNativeDeviceInfo = require("react-native-device-info");
|
|
|
9
9
|
var _ConfigDataModel = require("./ConfigDataModel");
|
|
10
10
|
var _Frequence = require("./Frequence");
|
|
11
11
|
var _LoginManager = require("./LoginManager");
|
|
12
|
+
var _Notification = require("./Notification");
|
|
12
13
|
var _PrefData = require("./PrefData");
|
|
13
14
|
var _Tool = require("./Tool");
|
|
14
15
|
var _VipManager = require("./VipManager");
|
|
@@ -141,17 +142,27 @@ const _handleResponse = customFilter => {
|
|
|
141
142
|
};
|
|
142
143
|
const MessageModel = exports.MessageModel = {
|
|
143
144
|
init: customFilter => {
|
|
144
|
-
_ConfigDataModel.ConfigDataModel.addListenerOnce(() => {
|
|
145
|
-
isConfigStateReady = true;
|
|
146
|
-
_handleResponse(customFilter);
|
|
147
|
-
});
|
|
148
|
-
|
|
149
145
|
// 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
146
|
+
_ConfigDataModel.ConfigDataModel.addListener(() => {
|
|
147
|
+
if (!isConfigStateReady) {
|
|
148
|
+
isConfigStateReady = true;
|
|
149
|
+
_handleResponse(customFilter);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
_Notification.Notification.addListener('onLogin', _ref => {
|
|
153
|
+
let {
|
|
154
|
+
isAuto,
|
|
155
|
+
user,
|
|
156
|
+
error
|
|
157
|
+
} = _ref;
|
|
158
|
+
if (!isAuto && user && !error) {
|
|
159
|
+
isDataReady = false;
|
|
160
|
+
isConfigStateReady = false;
|
|
161
|
+
isNetwordDataReady = false;
|
|
162
|
+
OnlineItems = [];
|
|
163
|
+
MessageModel.fetch(customFilter);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
155
166
|
MessageModel.fetch(customFilter);
|
|
156
167
|
},
|
|
157
168
|
fetch: customFilter => {
|
|
@@ -208,6 +219,17 @@ const MessageModel = exports.MessageModel = {
|
|
|
208
219
|
return;
|
|
209
220
|
}
|
|
210
221
|
eventEmitter.once('change', callback);
|
|
222
|
+
},
|
|
223
|
+
addListener: callback => {
|
|
224
|
+
if (isDataReady) {
|
|
225
|
+
callback && callback();
|
|
226
|
+
return callback;
|
|
227
|
+
}
|
|
228
|
+
eventEmitter.on('change', callback);
|
|
229
|
+
return callback;
|
|
230
|
+
},
|
|
231
|
+
removeListener: callback => {
|
|
232
|
+
eventEmitter.removeListener('change', callback);
|
|
211
233
|
}
|
|
212
234
|
};
|
|
213
235
|
//# sourceMappingURL=MessageModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeDeviceInfo","_ConfigDataModel","_Frequence","_LoginManager","_PrefData","_Tool","_VipManager","AV","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","getReadableVersion","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","VipManager","isForeverVip","vipFilter","_filterByUser","users","length","LoginManager","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","PrefData","getValue","BuildInPrefs","Messages","objectId","isRead","_item$key","key","config","ConfigDataModel","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","FrequenceManager","canRun","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","addListenerOnce","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 { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready\n // Notification.addListenerOnce('onVipRefresh', () => {\n // isVipStateReady = true;\n // _handleResponse(customFilter);\n // });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"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","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","Tool","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","exports","init","addListener","Notification","_ref","isAuto","user","error","fetch","query","Query","equalTo","Platform","OS","descending","find","then","catch","e","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","addListenerOnce","callback","once","on","removeListener"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n // 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready\n ConfigDataModel.addListener(() => {\n if (!isConfigStateReady) {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isConfigStateReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return callback;\n }\n eventEmitter.on('change', callback);\n return callback;\n },\n\n removeListener: (callback: Function) => {\n eventEmitter.removeListener('change', callback);\n },\n};\n"],"mappings":"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"}
|
|
@@ -88,7 +88,7 @@ let isVipStateReady = false;
|
|
|
88
88
|
let isNetwordDataReady = false;
|
|
89
89
|
let OnlineItems = [];
|
|
90
90
|
const _handleResponse = () => {
|
|
91
|
-
if (!isVipStateReady || !
|
|
91
|
+
if (!isVipStateReady || !isNetwordDataReady) {
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -107,8 +107,6 @@ const _handleResponse = () => {
|
|
|
107
107
|
const ConfigDataModel = {
|
|
108
108
|
init: defaultValues => {
|
|
109
109
|
MyItems = defaultValues;
|
|
110
|
-
// TODO 这里切换登录信息会复用
|
|
111
|
-
|
|
112
110
|
Notification.addListener('onVipRefresh', _ref => {
|
|
113
111
|
let {
|
|
114
112
|
e
|
|
@@ -119,6 +117,20 @@ const ConfigDataModel = {
|
|
|
119
117
|
_handleResponse();
|
|
120
118
|
}
|
|
121
119
|
});
|
|
120
|
+
Notification.addListener('onLogin', _ref2 => {
|
|
121
|
+
let {
|
|
122
|
+
isAuto,
|
|
123
|
+
user,
|
|
124
|
+
error
|
|
125
|
+
} = _ref2;
|
|
126
|
+
if (!isAuto && user && !error) {
|
|
127
|
+
isDataReady = false;
|
|
128
|
+
isVipStateReady = false;
|
|
129
|
+
isNetwordDataReady = false;
|
|
130
|
+
OnlineItems = [];
|
|
131
|
+
ConfigDataModel.fetch();
|
|
132
|
+
}
|
|
133
|
+
});
|
|
122
134
|
ConfigDataModel.fetch();
|
|
123
135
|
},
|
|
124
136
|
fetch: () => {
|
|
@@ -152,6 +164,13 @@ const ConfigDataModel = {
|
|
|
152
164
|
return;
|
|
153
165
|
}
|
|
154
166
|
eventEmitter.once('change', callback);
|
|
167
|
+
},
|
|
168
|
+
addListener: callback => {
|
|
169
|
+
if (isDataReady) {
|
|
170
|
+
callback && callback();
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
eventEmitter.on('change', callback);
|
|
155
174
|
}
|
|
156
175
|
};
|
|
157
176
|
export { ConfigDataModel };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","getReadableVersion","DevConfig","Notification","BuildInPrefs","VipAndroidManager","VipManager","EventEmitter","require","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_updateKeyValues","value","handleVersionInfo","key","OS","configVersion","ConfigDataModel","onlineVersion","__DEV__","hasValue","DevDanger","getValue","isDataReady","isVipStateReady","isNetwordDataReady","OnlineItems","_handleResponse","length","console","log","setPackages","emitChange","init","defaultValues","addListener","_ref","e","fetch","query","Query","equalTo","find","then","catch","error","getVersionConfig","emit","addListenerOnce","callback","once"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { VipManager } from './VipManager';\n\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 ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: false,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('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: Object[]) => {\n let ret = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.get('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 _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n const onlineVersion = semverCoerce(configVersion).version;\n // current < online,才有新版本\n if (semverGt(onlineVersion, VersionInfo.currentVersion)) {\n VersionInfo.latestVersion = onlineVersion;\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (!semverGt(VersionInfo.currentVersion, onlineVersion)) {\n VersionInfo.isDanger = false;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = () => {\n if (!isVipStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n // 根据 VIP 状态过滤\n items = _filterByVip(items);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setPackages(ConfigDataModel.get('vip_android_products'));\n ConfigDataModel.emitChange();\n};\n\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n // TODO 这里切换登录信息会复用\n\n Notification.addListener('onVipRefresh', ({ e }: { e: any }) => {\n // 监听多次,直到成功,整个生命周期最多处理一次\n if (!e && !isVipStateReady) {\n isVipStateReady = true;\n _handleResponse();\n }\n });\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Platform","getReadableVersion","DevConfig","Notification","BuildInPrefs","VipAndroidManager","VipManager","EventEmitter","require","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_updateKeyValues","value","handleVersionInfo","key","OS","configVersion","ConfigDataModel","onlineVersion","__DEV__","hasValue","DevDanger","getValue","isDataReady","isVipStateReady","isNetwordDataReady","OnlineItems","_handleResponse","console","log","setPackages","emitChange","init","defaultValues","addListener","_ref","e","_ref2","isAuto","user","error","fetch","query","Query","equalTo","find","then","catch","getVersionConfig","emit","addListenerOnce","callback","once","on"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { VipManager } from './VipManager';\n\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 ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: false,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('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: Object[]) => {\n let ret = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.get('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 _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n const onlineVersion = semverCoerce(configVersion).version;\n // current < online,才有新版本\n if (semverGt(onlineVersion, VersionInfo.currentVersion)) {\n VersionInfo.latestVersion = onlineVersion;\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (!semverGt(VersionInfo.currentVersion, onlineVersion)) {\n VersionInfo.isDanger = false;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = () => {\n if (!isVipStateReady || !isNetwordDataReady) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n // 根据 VIP 状态过滤\n items = _filterByVip(items);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setPackages(ConfigDataModel.get('vip_android_products'));\n ConfigDataModel.emitChange();\n};\n\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n\n Notification.addListener('onVipRefresh', ({ e }: { e: any }) => {\n // 监听多次,直到成功,整个生命周期最多处理一次\n if (!e && !isVipStateReady) {\n isVipStateReady = true;\n _handleResponse();\n }\n });\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isVipStateReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n ConfigDataModel.fetch();\n }\n }\n );\n\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\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;\n }\n eventEmitter.on('change', callback);\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { getReadableVersion } from 'react-native-device-info';
|
|
|
3
3
|
import { ConfigDataModel } from './ConfigDataModel';
|
|
4
4
|
import { FrequenceManager } from './Frequence';
|
|
5
5
|
import { LoginManager } from './LoginManager';
|
|
6
|
+
import { Notification } from './Notification';
|
|
6
7
|
import { BuildInPrefs, PrefData } from './PrefData';
|
|
7
8
|
import { Tool } from './Tool';
|
|
8
9
|
import { VipManager } from './VipManager';
|
|
@@ -135,17 +136,27 @@ const _handleResponse = customFilter => {
|
|
|
135
136
|
};
|
|
136
137
|
export const MessageModel = {
|
|
137
138
|
init: customFilter => {
|
|
138
|
-
ConfigDataModel.addListenerOnce(() => {
|
|
139
|
-
isConfigStateReady = true;
|
|
140
|
-
_handleResponse(customFilter);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
139
|
// 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
140
|
+
ConfigDataModel.addListener(() => {
|
|
141
|
+
if (!isConfigStateReady) {
|
|
142
|
+
isConfigStateReady = true;
|
|
143
|
+
_handleResponse(customFilter);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
Notification.addListener('onLogin', _ref => {
|
|
147
|
+
let {
|
|
148
|
+
isAuto,
|
|
149
|
+
user,
|
|
150
|
+
error
|
|
151
|
+
} = _ref;
|
|
152
|
+
if (!isAuto && user && !error) {
|
|
153
|
+
isDataReady = false;
|
|
154
|
+
isConfigStateReady = false;
|
|
155
|
+
isNetwordDataReady = false;
|
|
156
|
+
OnlineItems = [];
|
|
157
|
+
MessageModel.fetch(customFilter);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
149
160
|
MessageModel.fetch(customFilter);
|
|
150
161
|
},
|
|
151
162
|
fetch: customFilter => {
|
|
@@ -202,6 +213,17 @@ export const MessageModel = {
|
|
|
202
213
|
return;
|
|
203
214
|
}
|
|
204
215
|
eventEmitter.once('change', callback);
|
|
216
|
+
},
|
|
217
|
+
addListener: callback => {
|
|
218
|
+
if (isDataReady) {
|
|
219
|
+
callback && callback();
|
|
220
|
+
return callback;
|
|
221
|
+
}
|
|
222
|
+
eventEmitter.on('change', callback);
|
|
223
|
+
return callback;
|
|
224
|
+
},
|
|
225
|
+
removeListener: callback => {
|
|
226
|
+
eventEmitter.removeListener('change', callback);
|
|
205
227
|
}
|
|
206
228
|
};
|
|
207
229
|
//# sourceMappingURL=MessageModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","BuildInPrefs","PrefData","Tool","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","isDataReady","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","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 { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n });\n\n // 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready\n // Notification.addListenerOnce('onVipRefresh', () => {\n // isVipStateReady = true;\n // _handleResponse(customFilter);\n // });\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"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","isConfigStateReady","isNetwordDataReady","OnlineItems","_handleResponse","customFilter","_ConfigDataModel$getV","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListener","_ref","isAuto","user","error","fetch","query","Query","equalTo","OS","descending","find","then","catch","e","getUnreadMessages","filter","getAllMessages","markMessageRead","message","markFinishForTime","markFinishForCount","setValue","emit","slice","addListenerOnce","callback","once","on","removeListener"],"sources":["MessageModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n // 如果是带 Key 的,那么会根据 limit 或 gap 再给一次标为未读的机会\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isConfigStateReady = false;\nlet isNetwordDataReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = (customFilter?: MessageFilter) => {\n if (!isConfigStateReady || !OnlineItems.length || !isNetwordDataReady) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n if (customFilter) {\n MyMessages = customFilter(MyMessages);\n }\n\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport type MessageFilter = (oldMessage: Message[]) => Message[];\n\nexport const MessageModel = {\n init: (customFilter?: MessageFilter) => {\n // 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready\n ConfigDataModel.addListener(() => {\n if (!isConfigStateReady) {\n isConfigStateReady = true;\n _handleResponse(customFilter);\n }\n });\n\n Notification.addListener(\n 'onLogin',\n ({ isAuto, user, error }: LoginResultDataType) => {\n if (!isAuto && user && !error) {\n isDataReady = false;\n isConfigStateReady = false;\n isNetwordDataReady = false;\n OnlineItems = [];\n MessageModel.fetch(customFilter);\n }\n }\n );\n\n MessageModel.fetch(customFilter);\n },\n\n fetch: (customFilter?: MessageFilter) => {\n // 确保可重入,但如果网络一直出错的话,每次调用都会一直发\n if (isNetwordDataReady) {\n return;\n }\n\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n isNetwordDataReady = true;\n OnlineItems = items;\n _handleResponse(customFilter);\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n\n if (message.key) {\n const freConfig: FreConfigType = {\n key: message.key,\n limit: message.limit,\n gap: message.gap,\n };\n // 能被展示出来的 message 一定是符合 FrequenceManager.canRun 的\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n }\n\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n\n addListener: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return callback;\n }\n eventEmitter.on('change', callback);\n return callback;\n },\n\n removeListener: (callback: Function) => {\n eventEmitter.removeListener('change', callback);\n },\n};\n"],"mappings":"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"}
|
|
@@ -26,4 +26,6 @@ export declare const MessageModel: {
|
|
|
26
26
|
markMessageRead: (message: Message) => Promise<void>;
|
|
27
27
|
emitChange: () => void;
|
|
28
28
|
addListenerOnce: (callback: Function) => void;
|
|
29
|
+
addListener: (callback: Function) => Function;
|
|
30
|
+
removeListener: (callback: Function) => void;
|
|
29
31
|
};
|
package/package.json
CHANGED
package/src/ConfigDataModel.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Object } from 'leancloud-storage';
|
|
|
2
2
|
import { Platform } from 'react-native';
|
|
3
3
|
import { getReadableVersion } from 'react-native-device-info';
|
|
4
4
|
import { DevConfig } from './DevConfig';
|
|
5
|
+
import { LoginResultDataType } from './LoginManager';
|
|
5
6
|
import { Notification } from './Notification';
|
|
6
7
|
import { BuildInPrefs } from './PrefData';
|
|
7
8
|
import { VipAndroidManager } from './VipAndroidManager';
|
|
@@ -106,7 +107,7 @@ let isNetwordDataReady = false;
|
|
|
106
107
|
let OnlineItems: Object[] = [];
|
|
107
108
|
|
|
108
109
|
const _handleResponse = () => {
|
|
109
|
-
if (!isVipStateReady || !
|
|
110
|
+
if (!isVipStateReady || !isNetwordDataReady) {
|
|
110
111
|
return;
|
|
111
112
|
}
|
|
112
113
|
|
|
@@ -126,7 +127,6 @@ const _handleResponse = () => {
|
|
|
126
127
|
const ConfigDataModel = {
|
|
127
128
|
init: (defaultValues: ConfigsType) => {
|
|
128
129
|
MyItems = defaultValues;
|
|
129
|
-
// TODO 这里切换登录信息会复用
|
|
130
130
|
|
|
131
131
|
Notification.addListener('onVipRefresh', ({ e }: { e: any }) => {
|
|
132
132
|
// 监听多次,直到成功,整个生命周期最多处理一次
|
|
@@ -135,6 +135,20 @@ const ConfigDataModel = {
|
|
|
135
135
|
_handleResponse();
|
|
136
136
|
}
|
|
137
137
|
});
|
|
138
|
+
|
|
139
|
+
Notification.addListener(
|
|
140
|
+
'onLogin',
|
|
141
|
+
({ isAuto, user, error }: LoginResultDataType) => {
|
|
142
|
+
if (!isAuto && user && !error) {
|
|
143
|
+
isDataReady = false;
|
|
144
|
+
isVipStateReady = false;
|
|
145
|
+
isNetwordDataReady = false;
|
|
146
|
+
OnlineItems = [];
|
|
147
|
+
ConfigDataModel.fetch();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
);
|
|
151
|
+
|
|
138
152
|
ConfigDataModel.fetch();
|
|
139
153
|
},
|
|
140
154
|
|
|
@@ -178,6 +192,14 @@ const ConfigDataModel = {
|
|
|
178
192
|
}
|
|
179
193
|
eventEmitter.once('change', callback);
|
|
180
194
|
},
|
|
195
|
+
|
|
196
|
+
addListener: (callback: Function) => {
|
|
197
|
+
if (isDataReady) {
|
|
198
|
+
callback && callback();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
eventEmitter.on('change', callback);
|
|
202
|
+
},
|
|
181
203
|
};
|
|
182
204
|
|
|
183
205
|
export { ConfigDataModel };
|
package/src/MessageModel.ts
CHANGED
|
@@ -3,7 +3,8 @@ import { Platform } from 'react-native';
|
|
|
3
3
|
import { getReadableVersion } from 'react-native-device-info';
|
|
4
4
|
import { ConfigDataModel } from './ConfigDataModel';
|
|
5
5
|
import { FreConfigType, FrequenceManager } from './Frequence';
|
|
6
|
-
import { LoginManager } from './LoginManager';
|
|
6
|
+
import { LoginManager, LoginResultDataType } from './LoginManager';
|
|
7
|
+
import { Notification } from './Notification';
|
|
7
8
|
import { BuildInPrefs, PrefData } from './PrefData';
|
|
8
9
|
import { Tool } from './Tool';
|
|
9
10
|
import { VipManager } from './VipManager';
|
|
@@ -174,16 +175,26 @@ export type MessageFilter = (oldMessage: Message[]) => Message[];
|
|
|
174
175
|
|
|
175
176
|
export const MessageModel = {
|
|
176
177
|
init: (customFilter?: MessageFilter) => {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
// 不需要监听 VIP 了,因为 Config 回调意味着 VIP 信息已经 Ready
|
|
179
|
+
ConfigDataModel.addListener(() => {
|
|
180
|
+
if (!isConfigStateReady) {
|
|
181
|
+
isConfigStateReady = true;
|
|
182
|
+
_handleResponse(customFilter);
|
|
183
|
+
}
|
|
180
184
|
});
|
|
181
185
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
186
|
+
Notification.addListener(
|
|
187
|
+
'onLogin',
|
|
188
|
+
({ isAuto, user, error }: LoginResultDataType) => {
|
|
189
|
+
if (!isAuto && user && !error) {
|
|
190
|
+
isDataReady = false;
|
|
191
|
+
isConfigStateReady = false;
|
|
192
|
+
isNetwordDataReady = false;
|
|
193
|
+
OnlineItems = [];
|
|
194
|
+
MessageModel.fetch(customFilter);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
);
|
|
187
198
|
|
|
188
199
|
MessageModel.fetch(customFilter);
|
|
189
200
|
},
|
|
@@ -257,4 +268,17 @@ export const MessageModel = {
|
|
|
257
268
|
}
|
|
258
269
|
eventEmitter.once('change', callback);
|
|
259
270
|
},
|
|
271
|
+
|
|
272
|
+
addListener: (callback: Function) => {
|
|
273
|
+
if (isDataReady) {
|
|
274
|
+
callback && callback();
|
|
275
|
+
return callback;
|
|
276
|
+
}
|
|
277
|
+
eventEmitter.on('change', callback);
|
|
278
|
+
return callback;
|
|
279
|
+
},
|
|
280
|
+
|
|
281
|
+
removeListener: (callback: Function) => {
|
|
282
|
+
eventEmitter.removeListener('change', callback);
|
|
283
|
+
},
|
|
260
284
|
};
|