Skip to content

Commit 51a001c

Browse files
authored
feat(Util): add queryGlobalUserGroup (qiuwenbaike#1671)
* feat(Util): add queryGlobalUserGroup
1 parent 03b4c9f commit 51a001c

File tree

5 files changed

+111
-3
lines changed

5 files changed

+111
-3
lines changed

dist/Util/Util.js

Lines changed: 50 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Util/Util.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export {initMwApi} from './modules/initMwApi';
1111
export {isValidKey} from './modules/isValidKey';
1212
export {MwUri} from './modules/mwUri';
1313
export {oouiConfirmWithStyle} from './modules/oouiConfirmWithStyle';
14+
export {queryGlobalUserGroups} from './modules/queryGlobalUserGroups';
1415
export {queryUserGroups} from './modules/queryUserGroups';
1516
export {scrollTop} from './modules/scrollTop';
1617
export {userIsInGroup} from './modules/userIsInGroup';

src/Util/modules/global.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type InitMwApi = import('./initMwApi').InitMwApi;
1414
type IsValidKey = import('./isValidKey').IsValidKey;
1515
type ClassMwUri = import('./mwUri').ClassMwUri;
1616
type OouiConfirmWithStyle = import('./oouiConfirmWithStyle').OouiConfirmWithStyle;
17+
type QueryGlobalUserGroups = import('./queryGlobalUserGroups').QueryGlobalUserGroups;
1718
type QueryUserGroups = import('./queryUserGroups').QueryUserGroups;
1819
type ScrollTop = import('./scrollTop').ScrollTop;
1920
type SetWpSummaryContent = import('./wpSummaryContent').SetWpSummaryContent;
@@ -37,6 +38,7 @@ declare module 'ext.gadget.Util' {
3738
export const isValidKey: IsValidKey;
3839
export const MwUri: ClassMwUri;
3940
export const oouiConfirmWithStyle: OouiConfirmWithStyle;
41+
export const queryGlobalUserGroups: QueryGlobalUserGroups;
4042
export const queryUserGroups: QueryUserGroups;
4143
export const scrollTop: ScrollTop;
4244
export const setWpSummaryContent: SetWpSummaryContent;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import {initMwApi} from './initMwApi';
2+
3+
type QueryGlobalUserGroups = typeof queryGlobalUserGroups;
4+
5+
// eslint-disable-next-line func-style
6+
async function queryGlobalUserGroups(guiuser: string) {
7+
const api: mw.Api = initMwApi('Util-QueryGlobalUserGroups');
8+
9+
const CACHE_KEY_PREFIX = 'ext.gadget.Util_queryGlobalUserGroups-';
10+
11+
let groups: string[] = [];
12+
13+
// Query from cache
14+
// Check if user group info is cached in LocalStroage
15+
// If cached, get them from LocalStroage
16+
if (mw.storage.getObject(CACHE_KEY_PREFIX + guiuser)) {
17+
groups = mw.storage.getObject(CACHE_KEY_PREFIX + guiuser) as string[];
18+
// Remove '*' from groups
19+
groups = groups.filter((element) => {
20+
return element !== '*';
21+
});
22+
} else {
23+
// Query from web
24+
// Query params
25+
const params = {
26+
action: 'query',
27+
format: 'json',
28+
formatversion: '2',
29+
meta: 'globaluserinfo',
30+
guiuser,
31+
guiprop: 'groups',
32+
smaxage: 600,
33+
maxage: 600,
34+
};
35+
const response = await api.get(params);
36+
37+
// De-construct the response object
38+
const query = response['query'] as {
39+
globaluserinfo: {groups: string[]; name: string};
40+
};
41+
42+
if (query?.globaluserinfo) {
43+
groups = query.globaluserinfo?.groups ?? [];
44+
// Remove '*' from groups
45+
groups = groups.filter((element) => {
46+
return element !== '*';
47+
});
48+
// Cache for 10 minutes
49+
mw.storage.setObject(CACHE_KEY_PREFIX + guiuser, groups, 10 * 60);
50+
}
51+
}
52+
53+
return {query: {globaluserinfo: {name: guiuser, groups}}};
54+
}
55+
56+
export {type QueryGlobalUserGroups, queryGlobalUserGroups};

src/Util/modules/queryUserGroups.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ async function queryUserGroups(users: string[]) {
88

99
const CACHE_KEY_PREFIX = 'ext.gadget.Util_queryUserGroups-';
1010

11-
// Query from cache
1211
const cachedQueryUsers: {groups: string[]; name: string}[] = [];
12+
13+
// Query from cache
1314
for (const user of users) {
1415
// Check if user group info is cached in LocalStroage
1516
// If cached, get them from LocalStroage

0 commit comments

Comments
 (0)