Skip to content
Snippets Groups Projects
Commit d939e552 authored by syuilo's avatar syuilo
Browse files

Fix bugs

parent 76db93d6
No related branches found
No related tags found
No related merge requests found
import Vue from 'vue'; import Vue from 'vue';
import { EventEmitter } from 'eventemitter3'; import { EventEmitter } from 'eventemitter3';
import { apiUrl, swPublickey, version, lang } from '../config'; import { host, apiUrl, swPublickey, version, lang } from '../config';
import api from './scripts/api'; import api from './scripts/api';
import signout from './scripts/signout';
import Progress from './scripts/loading'; import Progress from './scripts/loading';
import HomeStreamManager from './scripts/streaming/home-stream-manager'; import HomeStreamManager from './scripts/streaming/home-stream-manager';
import DriveStreamManager from './scripts/streaming/drive-stream-manager'; import DriveStreamManager from './scripts/streaming/drive-stream-manager';
...@@ -153,7 +152,7 @@ export default class MiOS extends EventEmitter { ...@@ -153,7 +152,7 @@ export default class MiOS extends EventEmitter {
this.once('signedin', () => { this.once('signedin', () => {
// Init home stream manager // Init home stream manager
this.stream = new HomeStreamManager(this.i); this.stream = new HomeStreamManager(this, this.i);
// Init other stream manager // Init other stream manager
this.streams.driveStream = new DriveStreamManager(this.i); this.streams.driveStream = new DriveStreamManager(this.i);
...@@ -184,6 +183,12 @@ export default class MiOS extends EventEmitter { ...@@ -184,6 +183,12 @@ export default class MiOS extends EventEmitter {
console.error.apply(null, args); console.error.apply(null, args);
} }
public signout() {
localStorage.removeItem('me');
document.cookie = `i=; domain=.${host}; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
location.href = '/';
}
/** /**
* Initialize MiOS (boot) * Initialize MiOS (boot)
* @param callback A function that call when initialized * @param callback A function that call when initialized
...@@ -209,7 +214,7 @@ export default class MiOS extends EventEmitter { ...@@ -209,7 +214,7 @@ export default class MiOS extends EventEmitter {
.then(res => { .then(res => {
// When failed to authenticate user // When failed to authenticate user
if (res.status !== 200) { if (res.status !== 200) {
return signout(); return this.signout();
} }
// Parse response // Parse response
......
declare const _HOST_: string;
export default () => {
localStorage.removeItem('me');
document.cookie = `i=; domain=.${_HOST_}; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
location.href = '/';
};
import StreamManager from './stream-manager'; import StreamManager from './stream-manager';
import Connection from './home-stream'; import Connection from './home-stream';
import MiOS from '../../mios';
export default class HomeStreamManager extends StreamManager<Connection> { export default class HomeStreamManager extends StreamManager<Connection> {
private me; private me;
private os: MiOS;
constructor(me) { constructor(os: MiOS, me) {
super(); super();
this.me = me; this.me = me;
this.os = os;
} }
public getConnection() { public getConnection() {
if (this.connection == null) { if (this.connection == null) {
this.connection = new Connection(this.me); this.connection = new Connection(this.os, this.me);
} }
return this.connection; return this.connection;
......
import Stream from './stream'; import Stream from './stream';
import signout from '../signout'; import MiOS from '../../mios';
/** /**
* Home stream connection * Home stream connection
*/ */
export default class Connection extends Stream { export default class Connection extends Stream {
constructor(me) { constructor(os: MiOS, me) {
super('', { super('', {
i: me.token i: me.token
}); });
...@@ -25,7 +25,7 @@ export default class Connection extends Stream { ...@@ -25,7 +25,7 @@ export default class Connection extends Stream {
// このままではAPIが利用できないので強制的にサインアウトさせる // このままではAPIが利用できないので強制的にサインアウトさせる
this.on('my_token_regenerated', () => { this.on('my_token_regenerated', () => {
alert('%i18n:common.my-token-regenerated%'); alert('%i18n:common.my-token-regenerated%');
signout(); os.signout();
}); });
} }
} }
...@@ -23,6 +23,14 @@ export default abstract class StreamManager<T extends Connection> extends EventE ...@@ -23,6 +23,14 @@ export default abstract class StreamManager<T extends Connection> extends EventE
this.emit('disconnected'); this.emit('disconnected');
} else { } else {
this.emit('connected', this._connection); this.emit('connected', this._connection);
this._connection.on('_connected_', () => {
this.emit('_connected_');
});
this._connection.on('_disconnected_', () => {
this.emit('_disconnected_');
});
} }
} }
...@@ -37,6 +45,11 @@ export default abstract class StreamManager<T extends Connection> extends EventE ...@@ -37,6 +45,11 @@ export default abstract class StreamManager<T extends Connection> extends EventE
return this._connection != null; return this._connection != null;
} }
public get state(): string {
if (!this.hasConnection) return 'no-connection';
return this._connection.state;
}
/** /**
* コネクションを要求します * コネクションを要求します
*/ */
......
declare const _API_URL_: string;
import { EventEmitter } from 'eventemitter3'; import { EventEmitter } from 'eventemitter3';
import * as ReconnectingWebsocket from 'reconnecting-websocket'; import * as ReconnectingWebsocket from 'reconnecting-websocket';
import { apiUrl } from '../../../config';
/** /**
* Misskey stream connection * Misskey stream connection
*/ */
export default class Connection extends EventEmitter { export default class Connection extends EventEmitter {
private state: string; public state: string;
private buffer: any[]; private buffer: any[];
private socket: ReconnectingWebsocket; private socket: ReconnectingWebsocket;
...@@ -25,7 +24,7 @@ export default class Connection extends EventEmitter { ...@@ -25,7 +24,7 @@ export default class Connection extends EventEmitter {
this.state = 'initializing'; this.state = 'initializing';
this.buffer = []; this.buffer = [];
const host = _API_URL_.replace('http', 'ws'); const host = apiUrl.replace('http', 'ws');
const query = params const query = params
? Object.keys(params) ? Object.keys(params)
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k])) .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
...@@ -58,7 +57,7 @@ export default class Connection extends EventEmitter { ...@@ -58,7 +57,7 @@ export default class Connection extends EventEmitter {
*/ */
private onClose() { private onClose() {
this.state = 'reconnecting'; this.state = 'reconnecting';
this.emit('_closed_'); this.emit('_disconnected_');
} }
/** /**
......
<template> <template>
<div class="mk-stream-indicator" v-if="stream"> <div class="mk-stream-indicator">
<p v-if=" stream.state == 'initializing' "> <p v-if=" stream.state == 'initializing' ">
%fa:spinner .pulse% %fa:spinner .pulse%
<span>%i18n:common.tags.mk-stream-indicator.connecting%<mk-ellipsis/></span> <span>%i18n:common.tags.mk-stream-indicator.connecting%<mk-ellipsis/></span>
...@@ -20,16 +20,14 @@ import Vue from 'vue'; ...@@ -20,16 +20,14 @@ import Vue from 'vue';
import * as anime from 'animejs'; import * as anime from 'animejs';
export default Vue.extend({ export default Vue.extend({
data() { computed: {
return { stream() {
stream: null return (this as any).os.stream;
}; }
}, },
created() { created() {
this.stream = (this as any).os.stream.borrow(); (this as any).os.stream.on('_connected_', this.onConnected);
(this as any).os.stream.on('_disconnected_', this.onDisconnected);
(this as any).os.stream.on('connected', this.onConnected);
(this as any).os.stream.on('disconnected', this.onDisconnected);
this.$nextTick(() => { this.$nextTick(() => {
if (this.stream.state == 'connected') { if (this.stream.state == 'connected') {
...@@ -38,13 +36,11 @@ export default Vue.extend({ ...@@ -38,13 +36,11 @@ export default Vue.extend({
}); });
}, },
beforeDestroy() { beforeDestroy() {
(this as any).os.stream.off('connected', this.onConnected); (this as any).os.stream.off('_connected_', this.onConnected);
(this as any).os.stream.off('disconnected', this.onDisconnected); (this as any).os.stream.off('_disconnected_', this.onDisconnected);
}, },
methods: { methods: {
onConnected() { onConnected() {
this.stream = (this as any).os.stream.borrow();
setTimeout(() => { setTimeout(() => {
anime({ anime({
targets: this.$el, targets: this.$el,
...@@ -55,8 +51,6 @@ export default Vue.extend({ ...@@ -55,8 +51,6 @@ export default Vue.extend({
}, 1000); }, 1000);
}, },
onDisconnected() { onDisconnected() {
this.stream = null;
anime({ anime({
targets: this.$el, targets: this.$el,
opacity: 1, opacity: 1,
......
...@@ -37,13 +37,11 @@ import Vue from 'vue'; ...@@ -37,13 +37,11 @@ import Vue from 'vue';
import MkSettingsWindow from './settings-window.vue'; import MkSettingsWindow from './settings-window.vue';
import MkDriveWindow from './drive-window.vue'; import MkDriveWindow from './drive-window.vue';
import contains from '../../../common/scripts/contains'; import contains from '../../../common/scripts/contains';
import signout from '../../../common/scripts/signout';
export default Vue.extend({ export default Vue.extend({
data() { data() {
return { return {
isOpen: false, isOpen: false
signout
}; };
}, },
beforeDestroy() { beforeDestroy() {
...@@ -77,6 +75,9 @@ export default Vue.extend({ ...@@ -77,6 +75,9 @@ export default Vue.extend({
settings() { settings() {
this.close(); this.close();
(this as any).os.new(MkSettingsWindow); (this as any).os.new(MkSettingsWindow);
},
signout() {
(this as any).os.signout();
} }
} }
}); });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment