Skip to content

Commit

Permalink
Updated api fetch to return an object.
Browse files Browse the repository at this point in the history
  • Loading branch information
mikecao committed Sep 30, 2020
1 parent e64b35f commit e5cd162
Show file tree
Hide file tree
Showing 10 changed files with 28 additions and 28 deletions.
8 changes: 3 additions & 5 deletions components/forms/AccountEditForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,13 @@ export default function AccountEditForm({ values, onSave, onClose }) {
const [message, setMessage] = useState();

const handleSubmit = async values => {
const response = await post(`/api/account`, values);
const { ok, data } = await post(`/api/account`, values);

if (typeof response !== 'string') {
if (ok) {
onSave();
} else {
setMessage(
response || (
<FormattedMessage id="message.failure" defaultMessage="Something went wrong." />
),
data || <FormattedMessage id="message.failure" defaultMessage="Something went wrong." />,
);
}
};
Expand Down
8 changes: 3 additions & 5 deletions components/forms/ChangePasswordForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,13 @@ export default function ChangePasswordForm({ values, onSave, onClose }) {
const [message, setMessage] = useState();

const handleSubmit = async values => {
const response = await post(`/api/account/password`, values);
const { ok, data } = await post(`/api/account/password`, values);

if (typeof response !== 'string') {
if (ok) {
onSave();
} else {
setMessage(
response || (
<FormattedMessage id="message.failure" defaultMessage="Something went wrong." />
),
data || <FormattedMessage id="message.failure" defaultMessage="Something went wrong." />,
);
}
};
Expand Down
8 changes: 4 additions & 4 deletions components/forms/LoginForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,19 @@ export default function LoginForm() {
const [message, setMessage] = useState();

const handleSubmit = async ({ username, password }) => {
const response = await post('/api/auth/login', { username, password });
const { ok, status, data } = await post('/api/auth/login', { username, password });

if (typeof response !== 'string') {
if (ok) {
await Router.push('/');
} else {
setMessage(
response.startsWith('401') ? (
status === 401 ? (
<FormattedMessage
id="message.incorrect-username-password"
defaultMessage="Incorrect username/password."
/>
) : (
response
data
),
);
}
Expand Down
8 changes: 5 additions & 3 deletions components/forms/WebsiteEditForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,14 @@ export default function WebsiteEditForm({ values, onSave, onClose }) {
const [message, setMessage] = useState();

const handleSubmit = async values => {
const response = await post(`/api/website`, values);
const { ok, data } = await post(`/api/website`, values);

if (typeof response !== 'string') {
if (ok) {
onSave();
} else {
setMessage(<FormattedMessage id="message.failure" defaultMessage="Something went wrong." />);
setMessage(
data || <FormattedMessage id="message.failure" defaultMessage="Something went wrong." />,
);
}
};

Expand Down
6 changes: 4 additions & 2 deletions hooks/useFetch.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { updateQuery } from 'redux/actions/queries';
export default function useFetch(url, params = {}, options = {}) {
const dispatch = useDispatch();
const [data, setData] = useState();
const [status, setStatus] = useState();
const [error, setError] = useState();
const [loading, setLoadiing] = useState(false);
const keys = Object.keys(params)
Expand All @@ -18,11 +19,12 @@ export default function useFetch(url, params = {}, options = {}) {
setLoadiing(true);
setError(null);
const time = performance.now();
const data = await get(url, params);
const { data, status } = await get(url, params);

dispatch(updateQuery({ url, time: performance.now() - time, completed: Date.now() }));

setData(data);
setStatus(status);
onDataLoad(data);
} catch (e) {
console.error(e);
Expand All @@ -46,5 +48,5 @@ export default function useFetch(url, params = {}, options = {}) {
}
}, [url, ...keys, ...update]);

return { data, error, loading, loadData };
return { data, status, error, loading };
}
12 changes: 5 additions & 7 deletions lib/web.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
import { getQueryString } from './url';

export const apiRequest = (method, url, body) =>
export const apiRequest = (method, url, body, headers) =>
fetch(url, {
method,
cache: 'no-cache',
credentials: 'same-origin',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
...headers,
},
body,
}).then(res => {
console.log({ res });
if (res.ok) {
return res.json();
return res.json().then(data => ({ ok: res.ok, status: res.status, data }));
}

if (['post', 'put', 'delete'].includes(method)) {
return res.text();
}

return null;
return res.text().then(data => ({ ok: res.ok, status: res.status, res: res, data }));
});

export const get = (url, params) => apiRequest('get', `${url}${getQueryString(params)}`);
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "umami",
"version": "0.62.0",
"version": "0.63.0",
"description": "A simple, fast, website analytics alternative to Google Analytics. ",
"author": "Mike Cao <[email protected]>",
"license": "MIT",
Expand Down
1 change: 1 addition & 0 deletions public/country/ja-JP.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"IS":"\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9","IE":"\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9","AZ":"\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3","AF":"\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3","US":"\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd","AE":"\u30a2\u30e9\u30d6\u9996\u9577\u56fd\u9023\u90a6","DZ":"\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2","AR":"\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3","AW":"\u30a2\u30eb\u30d0","AL":"\u30a2\u30eb\u30d0\u30cb\u30a2","AM":"\u30a2\u30eb\u30e1\u30cb\u30a2","AI":"\u30a2\u30f3\u30ae\u30e9","AO":"\u30a2\u30f3\u30b4\u30e9","AG":"\u30a2\u30f3\u30c6\u30a3\u30b0\u30a2\u30fb\u30d0\u30fc\u30d6\u30fc\u30c0","AD":"\u30a2\u30f3\u30c9\u30e9","YE":"\u30a4\u30a8\u30e1\u30f3","GB":"\u30a4\u30ae\u30ea\u30b9","IL":"\u30a4\u30b9\u30e9\u30a8\u30eb","IT":"\u30a4\u30bf\u30ea\u30a2","IQ":"\u30a4\u30e9\u30af","IR":"\u30a4\u30e9\u30f3","IN":"\u30a4\u30f3\u30c9","ID":"\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2","WF":"\u30a6\u30a9\u30ea\u30b9\u30fb\u30d5\u30c4\u30ca","UG":"\u30a6\u30ac\u30f3\u30c0","UA":"\u30a6\u30af\u30e9\u30a4\u30ca","UZ":"\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3","UY":"\u30a6\u30eb\u30b0\u30a2\u30a4","EC":"\u30a8\u30af\u30a2\u30c9\u30eb","EG":"\u30a8\u30b8\u30d7\u30c8","EE":"\u30a8\u30b9\u30c8\u30cb\u30a2","SZ":"\u30a8\u30b9\u30ef\u30c6\u30a3\u30cb","ET":"\u30a8\u30c1\u30aa\u30d4\u30a2","ER":"\u30a8\u30ea\u30c8\u30ea\u30a2","SV":"\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb","AU":"\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2","AT":"\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2","AX":"\u30aa\u30fc\u30e9\u30f3\u30c9\u8af8\u5cf6","OM":"\u30aa\u30de\u30fc\u30f3","NL":"\u30aa\u30e9\u30f3\u30c0","BQ":"\u30aa\u30e9\u30f3\u30c0\u9818\u30ab\u30ea\u30d6","GH":"\u30ac\u30fc\u30ca","CV":"\u30ab\u30fc\u30dc\u30d9\u30eb\u30c7","GG":"\u30ac\u30fc\u30f3\u30b8\u30fc","GY":"\u30ac\u30a4\u30a2\u30ca","KZ":"\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3","QA":"\u30ab\u30bf\u30fc\u30eb","CA":"\u30ab\u30ca\u30c0","GA":"\u30ac\u30dc\u30f3","CM":"\u30ab\u30e1\u30eb\u30fc\u30f3","GM":"\u30ac\u30f3\u30d3\u30a2","KH":"\u30ab\u30f3\u30dc\u30b8\u30a2","GN":"\u30ae\u30cb\u30a2","GW":"\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6","CY":"\u30ad\u30d7\u30ed\u30b9","CU":"\u30ad\u30e5\u30fc\u30d0","CW":"\u30ad\u30e5\u30e9\u30bd\u30fc","GR":"\u30ae\u30ea\u30b7\u30e3","KI":"\u30ad\u30ea\u30d0\u30b9","KG":"\u30ad\u30eb\u30ae\u30b9","GT":"\u30b0\u30a2\u30c6\u30de\u30e9","GP":"\u30b0\u30a2\u30c9\u30eb\u30fc\u30d7","GU":"\u30b0\u30a2\u30e0","KW":"\u30af\u30a6\u30a7\u30fc\u30c8","CK":"\u30af\u30c3\u30af\u8af8\u5cf6","GL":"\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9","CX":"\u30af\u30ea\u30b9\u30de\u30b9\u5cf6","GD":"\u30b0\u30ec\u30ca\u30c0","HR":"\u30af\u30ed\u30a2\u30c1\u30a2","KY":"\u30b1\u30a4\u30de\u30f3\u8af8\u5cf6","KE":"\u30b1\u30cb\u30a2","CI":"\u30b3\u30fc\u30c8\u30b8\u30dc\u30ef\u30fc\u30eb","CC":"\u30b3\u30b3\u30b9(\u30ad\u30fc\u30ea\u30f3\u30b0)\u8af8\u5cf6","CR":"\u30b3\u30b9\u30bf\u30ea\u30ab","KM":"\u30b3\u30e2\u30ed","CO":"\u30b3\u30ed\u30f3\u30d3\u30a2","CG":"\u30b3\u30f3\u30b4\u5171\u548c\u56fd(\u30d6\u30e9\u30b6\u30d3\u30eb)","CD":"\u30b3\u30f3\u30b4\u6c11\u4e3b\u5171\u548c\u56fd(\u30ad\u30f3\u30b7\u30e3\u30b5)","SA":"\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2","GS":"\u30b5\u30a6\u30b9\u30b8\u30e7\u30fc\u30b8\u30a2\u30fb\u30b5\u30a6\u30b9\u30b5\u30f3\u30c9\u30a6\u30a3\u30c3\u30c1\u8af8\u5cf6","WS":"\u30b5\u30e2\u30a2","BL":"\u30b5\u30f3\u30fb\u30d0\u30eb\u30c6\u30eb\u30df\u30fc","MF":"\u30b5\u30f3\u30fb\u30de\u30eb\u30bf\u30f3","ST":"\u30b5\u30f3\u30c8\u30e1\u30fb\u30d7\u30ea\u30f3\u30b7\u30da","ZM":"\u30b6\u30f3\u30d3\u30a2","PM":"\u30b5\u30f3\u30d4\u30a8\u30fc\u30eb\u5cf6\u30fb\u30df\u30af\u30ed\u30f3\u5cf6","SM":"\u30b5\u30f3\u30de\u30ea\u30ce","SL":"\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd","DJ":"\u30b8\u30d6\u30c1","GI":"\u30b8\u30d6\u30e9\u30eb\u30bf\u30eb","JE":"\u30b8\u30e3\u30fc\u30b8\u30fc","JM":"\u30b8\u30e3\u30de\u30a4\u30ab","GE":"\u30b8\u30e7\u30fc\u30b8\u30a2","SY":"\u30b7\u30ea\u30a2","SG":"\u30b7\u30f3\u30ac\u30dd\u30fc\u30eb","SX":"\u30b7\u30f3\u30c8\u30fb\u30de\u30fc\u30eb\u30c6\u30f3","ZW":"\u30b8\u30f3\u30d0\u30d6\u30a8","CH":"\u30b9\u30a4\u30b9","SE":"\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3","SD":"\u30b9\u30fc\u30c0\u30f3","SJ":"\u30b9\u30d0\u30fc\u30eb\u30d0\u30eb\u8af8\u5cf6\u30fb\u30e4\u30f3\u30de\u30a4\u30a8\u30f3\u5cf6","ES":"\u30b9\u30da\u30a4\u30f3","SR":"\u30b9\u30ea\u30ca\u30e0","LK":"\u30b9\u30ea\u30e9\u30f3\u30ab","SK":"\u30b9\u30ed\u30d0\u30ad\u30a2","SI":"\u30b9\u30ed\u30d9\u30cb\u30a2","SC":"\u30bb\u30fc\u30b7\u30a7\u30eb","SN":"\u30bb\u30cd\u30ac\u30eb","RS":"\u30bb\u30eb\u30d3\u30a2","KN":"\u30bb\u30f3\u30c8\u30af\u30ea\u30b9\u30c8\u30d5\u30a1\u30fc\u30fb\u30cd\u30fc\u30f4\u30a3\u30b9","VC":"\u30bb\u30f3\u30c8\u30d3\u30f3\u30bb\u30f3\u30c8\u53ca\u3073\u30b0\u30ec\u30ca\u30c7\u30a3\u30fc\u30f3\u8af8\u5cf6","SH":"\u30bb\u30f3\u30c8\u30d8\u30ec\u30ca","LC":"\u30bb\u30f3\u30c8\u30eb\u30b7\u30a2","SO":"\u30bd\u30de\u30ea\u30a2","SB":"\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6","TC":"\u30bf\u30fc\u30af\u30b9\u30fb\u30ab\u30a4\u30b3\u30b9\u8af8\u5cf6","TH":"\u30bf\u30a4","TJ":"\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3","TZ":"\u30bf\u30f3\u30b6\u30cb\u30a2","CZ":"\u30c1\u30a7\u30b3","TD":"\u30c1\u30e3\u30c9","TN":"\u30c1\u30e5\u30cb\u30b8\u30a2","CL":"\u30c1\u30ea","TV":"\u30c4\u30d0\u30eb","DK":"\u30c7\u30f3\u30de\u30fc\u30af","DE":"\u30c9\u30a4\u30c4","TG":"\u30c8\u30fc\u30b4","TK":"\u30c8\u30b1\u30e9\u30a6","DO":"\u30c9\u30df\u30cb\u30ab\u5171\u548c\u56fd","DM":"\u30c9\u30df\u30cb\u30ab\u56fd","TT":"\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30fb\u30c8\u30d0\u30b4","TM":"\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3","TR":"\u30c8\u30eb\u30b3","TO":"\u30c8\u30f3\u30ac","NG":"\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2","NR":"\u30ca\u30a6\u30eb","NA":"\u30ca\u30df\u30d3\u30a2","NU":"\u30cb\u30a6\u30a8","NI":"\u30cb\u30ab\u30e9\u30b0\u30a2","NE":"\u30cb\u30b8\u30a7\u30fc\u30eb","NC":"\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2","NZ":"\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9","NP":"\u30cd\u30d1\u30fc\u30eb","NF":"\u30ce\u30fc\u30d5\u30a9\u30fc\u30af\u5cf6","NO":"\u30ce\u30eb\u30a6\u30a7\u30fc","HM":"\u30cf\u30fc\u30c9\u5cf6\u30fb\u30de\u30af\u30c9\u30ca\u30eb\u30c9\u8af8\u5cf6","BH":"\u30d0\u30fc\u30ec\u30fc\u30f3","HT":"\u30cf\u30a4\u30c1","PK":"\u30d1\u30ad\u30b9\u30bf\u30f3","VA":"\u30d0\u30c1\u30ab\u30f3\u5e02\u56fd","PA":"\u30d1\u30ca\u30de","VU":"\u30d0\u30cc\u30a2\u30c4","BS":"\u30d0\u30cf\u30de","PG":"\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2","BM":"\u30d0\u30df\u30e5\u30fc\u30c0","PW":"\u30d1\u30e9\u30aa","PY":"\u30d1\u30e9\u30b0\u30a2\u30a4","BB":"\u30d0\u30eb\u30d0\u30c9\u30b9","PS":"\u30d1\u30ec\u30b9\u30c1\u30ca\u81ea\u6cbb\u533a","HU":"\u30cf\u30f3\u30ac\u30ea\u30fc","BD":"\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5","PN":"\u30d4\u30c8\u30b1\u30a2\u30f3\u8af8\u5cf6","FJ":"\u30d5\u30a3\u30b8\u30fc","PH":"\u30d5\u30a3\u30ea\u30d4\u30f3","FI":"\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9","BT":"\u30d6\u30fc\u30bf\u30f3","BV":"\u30d6\u30fc\u30d9\u5cf6","PR":"\u30d7\u30a8\u30eb\u30c8\u30ea\u30b3","FO":"\u30d5\u30a7\u30ed\u30fc\u8af8\u5cf6","FK":"\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6","BR":"\u30d6\u30e9\u30b8\u30eb","FR":"\u30d5\u30e9\u30f3\u30b9","BG":"\u30d6\u30eb\u30ac\u30ea\u30a2","BF":"\u30d6\u30eb\u30ad\u30ca\u30d5\u30a1\u30bd","BN":"\u30d6\u30eb\u30cd\u30a4","BI":"\u30d6\u30eb\u30f3\u30b8","VN":"\u30d9\u30c8\u30ca\u30e0","BJ":"\u30d9\u30ca\u30f3","VE":"\u30d9\u30cd\u30ba\u30a8\u30e9","BY":"\u30d9\u30e9\u30eb\u30fc\u30b7","BZ":"\u30d9\u30ea\u30fc\u30ba","PE":"\u30da\u30eb\u30fc","BE":"\u30d9\u30eb\u30ae\u30fc","PL":"\u30dd\u30fc\u30e9\u30f3\u30c9","BA":"\u30dc\u30b9\u30cb\u30a2\u30fb\u30d8\u30eb\u30c4\u30a7\u30b4\u30d3\u30ca","BW":"\u30dc\u30c4\u30ef\u30ca","BO":"\u30dc\u30ea\u30d3\u30a2","PT":"\u30dd\u30eb\u30c8\u30ac\u30eb","HN":"\u30db\u30f3\u30b8\u30e5\u30e9\u30b9","MH":"\u30de\u30fc\u30b7\u30e3\u30eb\u8af8\u5cf6","MG":"\u30de\u30c0\u30ac\u30b9\u30ab\u30eb","YT":"\u30de\u30e8\u30c3\u30c8","MW":"\u30de\u30e9\u30a6\u30a4","ML":"\u30de\u30ea","MT":"\u30de\u30eb\u30bf","MQ":"\u30de\u30eb\u30c6\u30a3\u30cb\u30fc\u30af","MY":"\u30de\u30ec\u30fc\u30b7\u30a2","IM":"\u30de\u30f3\u5cf6","FM":"\u30df\u30af\u30ed\u30cd\u30b7\u30a2\u9023\u90a6","MM":"\u30df\u30e3\u30f3\u30de\u30fc (\u30d3\u30eb\u30de)","MX":"\u30e1\u30ad\u30b7\u30b3","MU":"\u30e2\u30fc\u30ea\u30b7\u30e3\u30b9","MR":"\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2","MZ":"\u30e2\u30b6\u30f3\u30d3\u30fc\u30af","MC":"\u30e2\u30ca\u30b3","MV":"\u30e2\u30eb\u30c7\u30a3\u30d6","MD":"\u30e2\u30eb\u30c9\u30d0","MA":"\u30e2\u30ed\u30c3\u30b3","MN":"\u30e2\u30f3\u30b4\u30eb","ME":"\u30e2\u30f3\u30c6\u30cd\u30b0\u30ed","MS":"\u30e2\u30f3\u30c8\u30bb\u30e9\u30c8","JO":"\u30e8\u30eb\u30c0\u30f3","LA":"\u30e9\u30aa\u30b9","LV":"\u30e9\u30c8\u30d3\u30a2","LT":"\u30ea\u30c8\u30a2\u30cb\u30a2","LY":"\u30ea\u30d3\u30a2","LI":"\u30ea\u30d2\u30c6\u30f3\u30b7\u30e5\u30bf\u30a4\u30f3","LR":"\u30ea\u30d9\u30ea\u30a2","RO":"\u30eb\u30fc\u30de\u30cb\u30a2","LU":"\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30af","RW":"\u30eb\u30ef\u30f3\u30c0","LS":"\u30ec\u30bd\u30c8","LB":"\u30ec\u30d0\u30ce\u30f3","RE":"\u30ec\u30e6\u30cb\u30aa\u30f3","RU":"\u30ed\u30b7\u30a2","IO":"\u82f1\u9818\u30a4\u30f3\u30c9\u6d0b\u5730\u57df","VG":"\u82f1\u9818\u30f4\u30a1\u30fc\u30b8\u30f3\u8af8\u5cf6","KR":"\u97d3\u56fd","UM":"\u5408\u8846\u56fd\u9818\u6709\u5c0f\u96e2\u5cf6","EH":"\u897f\u30b5\u30cf\u30e9","GQ":"\u8d64\u9053\u30ae\u30cb\u30a2","TW":"\u53f0\u6e7e","CF":"\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd","MO":"\u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u56fd\u30de\u30ab\u30aa\u7279\u5225\u884c\u653f\u533a","HK":"\u4e2d\u83ef\u4eba\u6c11\u5171\u548c\u56fd\u9999\u6e2f\u7279\u5225\u884c\u653f\u533a","CN":"\u4e2d\u56fd","TL":"\u6771\u30c6\u30a3\u30e2\u30fc\u30eb","ZA":"\u5357\u30a2\u30d5\u30ea\u30ab","SS":"\u5357\u30b9\u30fc\u30c0\u30f3","AQ":"\u5357\u6975","JP":"\u65e5\u672c","GF":"\u4ecf\u9818\u30ae\u30a2\u30ca","PF":"\u4ecf\u9818\u30dd\u30ea\u30cd\u30b7\u30a2","TF":"\u4ecf\u9818\u6975\u5357\u8af8\u5cf6","VI":"\u7c73\u9818\u30f4\u30a1\u30fc\u30b8\u30f3\u8af8\u5cf6","AS":"\u7c73\u9818\u30b5\u30e2\u30a2","MK":"\u5317\u30de\u30b1\u30c9\u30cb\u30a2","MP":"\u5317\u30de\u30ea\u30a2\u30ca\u8af8\u5cf6","KP":"\u5317\u671d\u9bae"}
Loading

0 comments on commit e5cd162

Please sign in to comment.