Refactoring
This commit is contained in:
@@ -2,16 +2,11 @@ import autobind from 'autobind-decorator';
|
||||
import Vue from 'vue';
|
||||
import { EventEmitter } from 'eventemitter3';
|
||||
|
||||
import initStore from './store';
|
||||
import { apiUrl, version } from './config';
|
||||
import Progress from './scripts/loading';
|
||||
|
||||
import Stream from './scripts/stream';
|
||||
|
||||
//#region api requests
|
||||
let spinner = null;
|
||||
let pending = 0;
|
||||
//#endregion
|
||||
import store from './store';
|
||||
|
||||
/**
|
||||
* Misskey Operating System
|
||||
@@ -19,7 +14,7 @@ let pending = 0;
|
||||
export default class MiOS extends EventEmitter {
|
||||
public app: Vue;
|
||||
|
||||
public store: ReturnType<typeof initStore>;
|
||||
public store: ReturnType<typeof store>;
|
||||
|
||||
/**
|
||||
* A connection manager of home stream
|
||||
@@ -31,6 +26,11 @@ export default class MiOS extends EventEmitter {
|
||||
*/
|
||||
private swRegistration: ServiceWorkerRegistration = null;
|
||||
|
||||
constructor(vuex: MiOS['store']) {
|
||||
super();
|
||||
this.store = vuex;
|
||||
}
|
||||
|
||||
@autobind
|
||||
public signout() {
|
||||
this.store.dispatch('logout');
|
||||
@@ -52,8 +52,6 @@ export default class MiOS extends EventEmitter {
|
||||
});
|
||||
};
|
||||
|
||||
this.store = initStore(this);
|
||||
|
||||
// ユーザーをフェッチしてコールバックする
|
||||
const fetchme = (token, cb) => {
|
||||
let me = null;
|
||||
@@ -187,10 +185,13 @@ export default class MiOS extends EventEmitter {
|
||||
}
|
||||
|
||||
// Register
|
||||
this.api('sw/register', {
|
||||
endpoint: subscription.endpoint,
|
||||
auth: encode(subscription.getKey('auth')),
|
||||
publickey: encode(subscription.getKey('p256dh'))
|
||||
this.store.dispatch('api', {
|
||||
endpoint: 'sw/register',
|
||||
data: {
|
||||
endpoint: subscription.endpoint,
|
||||
auth: encode(subscription.getKey('auth')),
|
||||
publickey: encode(subscription.getKey('p256dh'))
|
||||
}
|
||||
});
|
||||
})
|
||||
// When subscribe failed
|
||||
@@ -214,52 +215,6 @@ export default class MiOS extends EventEmitter {
|
||||
// Register service worker
|
||||
navigator.serviceWorker.register(sw);
|
||||
}
|
||||
|
||||
/**
|
||||
* Misskey APIにリクエストします
|
||||
* @param endpoint エンドポイント名
|
||||
* @param data パラメータ
|
||||
*/
|
||||
@autobind
|
||||
public api(endpoint: string, data: { [x: string]: any } = {}, token?): Promise<{ [x: string]: any }> {
|
||||
if (++pending === 1) {
|
||||
spinner = document.createElement('div');
|
||||
spinner.setAttribute('id', 'wait');
|
||||
document.body.appendChild(spinner);
|
||||
}
|
||||
|
||||
const onFinally = () => {
|
||||
if (--pending === 0) spinner.parentNode.removeChild(spinner);
|
||||
};
|
||||
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
// Append a credential
|
||||
if (this.store.getters.isSignedIn) (data as any).i = this.store.state.i.token;
|
||||
if (token) (data as any).i = token;
|
||||
|
||||
// Send request
|
||||
fetch(endpoint.indexOf('://') > -1 ? endpoint : `${apiUrl}/${endpoint}`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(data),
|
||||
credentials: 'omit',
|
||||
cache: 'no-cache'
|
||||
}).then(async (res) => {
|
||||
const body = res.status === 204 ? null : await res.json();
|
||||
|
||||
if (res.status === 200) {
|
||||
resolve(body);
|
||||
} else if (res.status === 204) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(body.error);
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
|
||||
promise.then(onFinally, onFinally);
|
||||
|
||||
return promise;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user