parent
4129dce95a
commit
c614e6f5d7
|
@ -55,7 +55,7 @@
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
import Progress from '../../common/scripts/loading';
|
import Progress from '../../common/scripts/loading';
|
||||||
import ChannelStream from '../../common/scripts/channel-stream';
|
import ChannelStream from '../../common/scripts/streaming/channel-stream';
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { EventEmitter } from 'eventemitter3';
|
||||||
import * as riot from 'riot';
|
import * as riot from 'riot';
|
||||||
import signout from './scripts/signout';
|
import signout from './scripts/signout';
|
||||||
import Progress from './scripts/loading';
|
import Progress from './scripts/loading';
|
||||||
import Connection from './scripts/home-stream';
|
import HomeStreamManager from './scripts/streaming/home-stream-manager';
|
||||||
import CONFIG from './scripts/config';
|
import CONFIG from './scripts/config';
|
||||||
import api from './scripts/api';
|
import api from './scripts/api';
|
||||||
|
|
||||||
|
@ -33,9 +33,9 @@ export default class MiOS extends EventEmitter {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A connection of home stream
|
* A connection manager of home stream
|
||||||
*/
|
*/
|
||||||
public stream: Connection;
|
public stream: HomeStreamManager;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
|
@ -67,21 +67,27 @@ export default class MiOS extends EventEmitter {
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
i: token
|
i: token
|
||||||
})
|
})
|
||||||
}).then(res => { // When success
|
})
|
||||||
|
// When success
|
||||||
|
.then(res => {
|
||||||
// When failed to authenticate user
|
// When failed to authenticate user
|
||||||
if (res.status !== 200) {
|
if (res.status !== 200) {
|
||||||
return signout();
|
return signout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parse response
|
||||||
res.json().then(i => {
|
res.json().then(i => {
|
||||||
me = i;
|
me = i;
|
||||||
me.token = token;
|
me.token = token;
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}, () => { // When failure
|
})
|
||||||
|
// When failure
|
||||||
|
.catch(() => {
|
||||||
// Render the error screen
|
// Render the error screen
|
||||||
document.body.innerHTML = '<mk-error />';
|
document.body.innerHTML = '<mk-error />';
|
||||||
riot.mount('*');
|
riot.mount('*');
|
||||||
|
|
||||||
Progress.done();
|
Progress.done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -104,6 +110,7 @@ export default class MiOS extends EventEmitter {
|
||||||
// ローカルストレージにキャッシュ
|
// ローカルストレージにキャッシュ
|
||||||
localStorage.setItem('me', JSON.stringify(me));
|
localStorage.setItem('me', JSON.stringify(me));
|
||||||
|
|
||||||
|
// 自分の情報が更新されたとき
|
||||||
me.on('updated', () => {
|
me.on('updated', () => {
|
||||||
// キャッシュ更新
|
// キャッシュ更新
|
||||||
localStorage.setItem('me', JSON.stringify(me));
|
localStorage.setItem('me', JSON.stringify(me));
|
||||||
|
@ -112,8 +119,10 @@ export default class MiOS extends EventEmitter {
|
||||||
|
|
||||||
this.i = me;
|
this.i = me;
|
||||||
|
|
||||||
// Init home stream connection
|
// Init home stream manager
|
||||||
this.stream = this.i ? new Connection(this.i) : null;
|
this.stream = this.isSignedin
|
||||||
|
? new HomeStreamManager(this.i)
|
||||||
|
: null;
|
||||||
|
|
||||||
// Finish init
|
// Finish init
|
||||||
callback();
|
callback();
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import * as riot from 'riot';
|
import * as riot from 'riot';
|
||||||
|
|
||||||
import MiOS from './mios';
|
import MiOS from './mios';
|
||||||
import ServerStreamManager from './scripts/server-stream-manager';
|
import ServerStreamManager from './scripts/streaming/server-stream-manager';
|
||||||
import RequestsStreamManager from './scripts/requests-stream-manager';
|
import RequestsStreamManager from './scripts/streaming/requests-stream-manager';
|
||||||
import MessagingIndexStreamManager from './scripts/messaging-index-stream-manager';
|
import MessagingIndexStreamManager from './scripts/streaming/messaging-index-stream-manager';
|
||||||
import DriveStreamManager from './scripts/drive-stream-manager';
|
import DriveStreamManager from './scripts/streaming/drive-stream-manager';
|
||||||
|
|
||||||
export default (mios: MiOS) => {
|
export default (mios: MiOS) => {
|
||||||
(riot as any).mixin('os', {
|
(riot as any).mixin('os', {
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
import * as uuid from 'uuid';
|
|
||||||
import Connection from './stream';
|
|
||||||
|
|
||||||
export default abstract class StreamManager<T extends Connection> {
|
|
||||||
protected connection: T = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* コネクションを必要としているユーザー
|
|
||||||
*/
|
|
||||||
private users = [];
|
|
||||||
|
|
||||||
public abstract getConnection(): T;
|
|
||||||
|
|
||||||
public use() {
|
|
||||||
// ユーザーID生成
|
|
||||||
const userId = uuid();
|
|
||||||
|
|
||||||
this.users.push(userId);
|
|
||||||
|
|
||||||
return userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public dispose(userId) {
|
|
||||||
this.users = this.users.filter(id => id != userId);
|
|
||||||
|
|
||||||
// 誰もコネクションの利用者がいなくなったら
|
|
||||||
if (this.users.length == 0) {
|
|
||||||
// コネクションを切断する
|
|
||||||
this.connection.close();
|
|
||||||
this.connection = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,12 +3,10 @@ import Stream from './stream';
|
||||||
/**
|
/**
|
||||||
* Channel stream connection
|
* Channel stream connection
|
||||||
*/
|
*/
|
||||||
class Connection extends Stream {
|
export default class Connection extends Stream {
|
||||||
constructor(channelId) {
|
constructor(channelId) {
|
||||||
super('channel', {
|
super('channel', {
|
||||||
channel: channelId
|
channel: channelId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
|
|
@ -3,12 +3,10 @@ import Stream from './stream';
|
||||||
/**
|
/**
|
||||||
* Drive stream connection
|
* Drive stream connection
|
||||||
*/
|
*/
|
||||||
class Connection extends Stream {
|
export default class Connection extends Stream {
|
||||||
constructor(me) {
|
constructor(me) {
|
||||||
super('drive', {
|
super('drive', {
|
||||||
i: me.token
|
i: me.token
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
|
20
src/web/app/common/scripts/streaming/home-stream-manager.ts
Normal file
20
src/web/app/common/scripts/streaming/home-stream-manager.ts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
import StreamManager from './stream-manager';
|
||||||
|
import Connection from './home-stream';
|
||||||
|
|
||||||
|
export default class HomeStreamManager extends StreamManager<Connection> {
|
||||||
|
private me;
|
||||||
|
|
||||||
|
constructor(me) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.me = me;
|
||||||
|
}
|
||||||
|
|
||||||
|
public getConnection() {
|
||||||
|
if (this.connection == null) {
|
||||||
|
this.connection = new Connection(this.me);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.connection;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
import Stream from './stream';
|
import Stream from './stream';
|
||||||
import signout from './signout';
|
import signout from '../signout';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Home stream connection
|
* Home stream connection
|
||||||
*/
|
*/
|
||||||
class Connection extends Stream {
|
export default class Connection extends Stream {
|
||||||
constructor(me) {
|
constructor(me) {
|
||||||
super('', {
|
super('', {
|
||||||
i: me.token
|
i: me.token
|
||||||
|
@ -15,13 +15,14 @@ class Connection extends Stream {
|
||||||
this.send({ type: 'alive' });
|
this.send({ type: 'alive' });
|
||||||
}, 1000 * 60);
|
}, 1000 * 60);
|
||||||
|
|
||||||
|
// 自分の情報が更新されたとき
|
||||||
(this as any).on('i_updated', me.update);
|
(this as any).on('i_updated', me.update);
|
||||||
|
|
||||||
|
// トークンが再生成されたとき
|
||||||
|
// このままではAPIが利用できないので強制的にサインアウトさせる
|
||||||
(this as any).on('my_token_regenerated', () => {
|
(this as any).on('my_token_regenerated', () => {
|
||||||
alert('%i18n:common.my-token-regenerated%');
|
alert('%i18n:common.my-token-regenerated%');
|
||||||
signout();
|
signout();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
|
|
@ -3,12 +3,10 @@ import Stream from './stream';
|
||||||
/**
|
/**
|
||||||
* Messaging index stream connection
|
* Messaging index stream connection
|
||||||
*/
|
*/
|
||||||
class Connection extends Stream {
|
export default class Connection extends Stream {
|
||||||
constructor(me) {
|
constructor(me) {
|
||||||
super('messaging-index', {
|
super('messaging-index', {
|
||||||
i: me.token
|
i: me.token
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
|
|
@ -3,7 +3,7 @@ import Stream from './stream';
|
||||||
/**
|
/**
|
||||||
* Messaging stream connection
|
* Messaging stream connection
|
||||||
*/
|
*/
|
||||||
class Connection extends Stream {
|
export default class Connection extends Stream {
|
||||||
constructor(me, otherparty) {
|
constructor(me, otherparty) {
|
||||||
super('messaging', {
|
super('messaging', {
|
||||||
i: me.token,
|
i: me.token,
|
||||||
|
@ -17,5 +17,3 @@ class Connection extends Stream {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
|
|
@ -3,10 +3,8 @@ import Stream from './stream';
|
||||||
/**
|
/**
|
||||||
* Requests stream connection
|
* Requests stream connection
|
||||||
*/
|
*/
|
||||||
class Connection extends Stream {
|
export default class Connection extends Stream {
|
||||||
constructor() {
|
constructor() {
|
||||||
super('requests');
|
super('requests');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
|
|
@ -3,10 +3,8 @@ import Stream from './stream';
|
||||||
/**
|
/**
|
||||||
* Server stream connection
|
* Server stream connection
|
||||||
*/
|
*/
|
||||||
class Connection extends Stream {
|
export default class Connection extends Stream {
|
||||||
constructor() {
|
constructor() {
|
||||||
super('server');
|
super('server');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
|
73
src/web/app/common/scripts/streaming/stream-manager.ts
Normal file
73
src/web/app/common/scripts/streaming/stream-manager.ts
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
import { EventEmitter } from 'eventemitter3';
|
||||||
|
import * as uuid from 'uuid';
|
||||||
|
import Connection from './stream';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ストリーム接続を管理するクラス
|
||||||
|
* 複数の場所から同じストリームを利用する際、接続をまとめたりする
|
||||||
|
*/
|
||||||
|
export default abstract class StreamManager<T extends Connection> extends EventEmitter {
|
||||||
|
protected _connection: T = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* コネクションを必要としているユーザー
|
||||||
|
*/
|
||||||
|
private users = [];
|
||||||
|
|
||||||
|
protected set connection(connection: T) {
|
||||||
|
this._connection = connection;
|
||||||
|
|
||||||
|
if (this._connection == null) {
|
||||||
|
this.emit('disconnected');
|
||||||
|
} else {
|
||||||
|
this.emit('connected', this._connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected get connection() {
|
||||||
|
return this._connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* コネクションを持っているか否か
|
||||||
|
*/
|
||||||
|
public get hasConnection() {
|
||||||
|
return this._connection != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* コネクションを要求します
|
||||||
|
*/
|
||||||
|
public abstract getConnection(): T;
|
||||||
|
|
||||||
|
public borrow() {
|
||||||
|
return this._connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* コネクションを要求するためのユーザーIDを発行します
|
||||||
|
*/
|
||||||
|
public use() {
|
||||||
|
// ユーザーID生成
|
||||||
|
const userId = uuid();
|
||||||
|
|
||||||
|
this.users.push(userId);
|
||||||
|
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* コネクションを利用し終わってもう必要ないことを通知します
|
||||||
|
* @param userId use で発行したユーザーID
|
||||||
|
*/
|
||||||
|
public dispose(userId) {
|
||||||
|
this.users = this.users.filter(id => id != userId);
|
||||||
|
|
||||||
|
// 誰もコネクションの利用者がいなくなったら
|
||||||
|
if (this.users.length == 0) {
|
||||||
|
// コネクションを切断する
|
||||||
|
this.connection.close();
|
||||||
|
this.connection = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,25 +1,25 @@
|
||||||
|
import { EventEmitter } from 'eventemitter3';
|
||||||
import * as ReconnectingWebsocket from 'reconnecting-websocket';
|
import * as ReconnectingWebsocket from 'reconnecting-websocket';
|
||||||
import * as riot from 'riot';
|
import CONFIG from '../config';
|
||||||
import CONFIG from './config';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Misskey stream connection
|
* Misskey stream connection
|
||||||
*/
|
*/
|
||||||
class Connection {
|
export default class Connection extends EventEmitter {
|
||||||
private state: string;
|
private state: string;
|
||||||
private buffer: any[];
|
private buffer: any[];
|
||||||
private socket: ReconnectingWebsocket;
|
private socket: ReconnectingWebsocket;
|
||||||
|
|
||||||
constructor(endpoint, params?) {
|
constructor(endpoint, params?) {
|
||||||
// BIND -----------------------------------
|
super();
|
||||||
|
|
||||||
|
//#region BIND
|
||||||
this.onOpen = this.onOpen.bind(this);
|
this.onOpen = this.onOpen.bind(this);
|
||||||
this.onClose = this.onClose.bind(this);
|
this.onClose = this.onClose.bind(this);
|
||||||
this.onMessage = this.onMessage.bind(this);
|
this.onMessage = this.onMessage.bind(this);
|
||||||
this.send = this.send.bind(this);
|
this.send = this.send.bind(this);
|
||||||
this.close = this.close.bind(this);
|
this.close = this.close.bind(this);
|
||||||
// ----------------------------------------
|
//#endregion
|
||||||
|
|
||||||
riot.observable(this);
|
|
||||||
|
|
||||||
this.state = 'initializing';
|
this.state = 'initializing';
|
||||||
this.buffer = [];
|
this.buffer = [];
|
||||||
|
@ -42,7 +42,7 @@ class Connection {
|
||||||
*/
|
*/
|
||||||
private onOpen() {
|
private onOpen() {
|
||||||
this.state = 'connected';
|
this.state = 'connected';
|
||||||
(this as any).trigger('_connected_');
|
this.emit('_connected_');
|
||||||
|
|
||||||
// バッファーを処理
|
// バッファーを処理
|
||||||
const _buffer = [].concat(this.buffer); // Shallow copy
|
const _buffer = [].concat(this.buffer); // Shallow copy
|
||||||
|
@ -57,7 +57,7 @@ class Connection {
|
||||||
*/
|
*/
|
||||||
private onClose() {
|
private onClose() {
|
||||||
this.state = 'reconnecting';
|
this.state = 'reconnecting';
|
||||||
(this as any).trigger('_closed_');
|
this.emit('_closed_');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,7 +66,7 @@ class Connection {
|
||||||
private onMessage(message) {
|
private onMessage(message) {
|
||||||
try {
|
try {
|
||||||
const msg = JSON.parse(message.data);
|
const msg = JSON.parse(message.data);
|
||||||
if (msg.type) (this as any).trigger(msg.type, msg.body);
|
if (msg.type) this.emit(msg.type, msg.body);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// noop
|
// noop
|
||||||
}
|
}
|
||||||
|
@ -93,5 +93,3 @@ class Connection {
|
||||||
this.socket.removeEventListener('message', this.onMessage);
|
this.socket.removeEventListener('message', this.onMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
|
|
@ -162,7 +162,7 @@
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
import MessagingStreamConnection from '../../scripts/messaging-stream';
|
import MessagingStreamConnection from '../../scripts/streaming/messaging-stream';
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
|
@ -50,7 +50,10 @@
|
||||||
<script>
|
<script>
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.history = [];
|
this.history = [];
|
||||||
this.fetching = true;
|
this.fetching = true;
|
||||||
|
@ -63,11 +66,12 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.stream.on('signin', this.onSignin);
|
this.connection.on('signin', this.onSignin);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('signin', this.onSignin);
|
this.connection.off('signin', this.onSignin);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.onSignin = signin => {
|
this.onSignin = signin => {
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<mk-stream-indicator>
|
<mk-stream-indicator>
|
||||||
<p if={ stream.state == 'initializing' }>
|
<p if={ connection.state == 'initializing' }>
|
||||||
<i class="fa fa-spinner fa-spin"></i>
|
<i class="fa fa-spinner fa-spin"></i>
|
||||||
<span>%i18n:common.tags.mk-stream-indicator.connecting%<mk-ellipsis/></span>
|
<span>%i18n:common.tags.mk-stream-indicator.connecting%<mk-ellipsis/></span>
|
||||||
</p>
|
</p>
|
||||||
<p if={ stream.state == 'reconnecting' }>
|
<p if={ connection.state == 'reconnecting' }>
|
||||||
<i class="fa fa-spinner fa-spin"></i>
|
<i class="fa fa-spinner fa-spin"></i>
|
||||||
<span>%i18n:common.tags.mk-stream-indicator.reconnecting%<mk-ellipsis/></span>
|
<span>%i18n:common.tags.mk-stream-indicator.reconnecting%<mk-ellipsis/></span>
|
||||||
</p>
|
</p>
|
||||||
<p if={ stream.state == 'connected' }>
|
<p if={ connection.state == 'connected' }>
|
||||||
<i class="fa fa-check"></i>
|
<i class="fa fa-check"></i>
|
||||||
<span>%i18n:common.tags.mk-stream-indicator.connected%</span>
|
<span>%i18n:common.tags.mk-stream-indicator.connected%</span>
|
||||||
</p>
|
</p>
|
||||||
|
@ -38,15 +38,17 @@
|
||||||
import anime from 'animejs';
|
import anime from 'animejs';
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.on('before-mount', () => {
|
this.on('before-mount', () => {
|
||||||
if (this.stream.state == 'connected') {
|
if (this.connection.state == 'connected') {
|
||||||
this.root.style.opacity = 0;
|
this.root.style.opacity = 0;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
this.stream.on('_connected_', () => {
|
this.connection.on('_connected_', () => {
|
||||||
this.update();
|
this.update();
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
anime({
|
anime({
|
||||||
|
@ -58,7 +60,7 @@
|
||||||
}, 1000);
|
}, 1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.stream.on('_closed_', () => {
|
this.connection.on('_closed_', () => {
|
||||||
this.update();
|
this.update();
|
||||||
anime({
|
anime({
|
||||||
targets: this.root,
|
targets: this.root,
|
||||||
|
@ -67,5 +69,10 @@
|
||||||
duration: 100
|
duration: 100
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.on('unmount', () => {
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
</mk-stream-indicator>
|
</mk-stream-indicator>
|
||||||
|
|
|
@ -13,6 +13,7 @@ import route from './router';
|
||||||
import fuckAdBlock from './scripts/fuck-ad-block';
|
import fuckAdBlock from './scripts/fuck-ad-block';
|
||||||
import getPostSummary from '../../../common/get-post-summary';
|
import getPostSummary from '../../../common/get-post-summary';
|
||||||
import MiOS from '../common/mios';
|
import MiOS from '../common/mios';
|
||||||
|
import HomeStreamManager from '../common/scripts/streaming/home-stream-manager';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init
|
* init
|
||||||
|
@ -41,10 +42,19 @@ init(async (mios: MiOS) => {
|
||||||
route(mios);
|
route(mios);
|
||||||
});
|
});
|
||||||
|
|
||||||
function registerNotifications(stream) {
|
function registerNotifications(stream: HomeStreamManager) {
|
||||||
if (stream == null) return;
|
if (stream == null) return;
|
||||||
|
|
||||||
stream.on('drive_file_created', file => {
|
if (stream.hasConnection) {
|
||||||
|
attach(stream.borrow());
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.on('connected', connection => {
|
||||||
|
attach(connection);
|
||||||
|
});
|
||||||
|
|
||||||
|
function attach(connection) {
|
||||||
|
connection.on('drive_file_created', file => {
|
||||||
const n = new Notification('ファイルがアップロードされました', {
|
const n = new Notification('ファイルがアップロードされました', {
|
||||||
body: file.name,
|
body: file.name,
|
||||||
icon: file.url + '?thumbnail&size=64'
|
icon: file.url + '?thumbnail&size=64'
|
||||||
|
@ -52,7 +62,7 @@ function registerNotifications(stream) {
|
||||||
setTimeout(n.close.bind(n), 5000);
|
setTimeout(n.close.bind(n), 5000);
|
||||||
});
|
});
|
||||||
|
|
||||||
stream.on('mention', post => {
|
connection.on('mention', post => {
|
||||||
const n = new Notification(`${post.user.name}さんから:`, {
|
const n = new Notification(`${post.user.name}さんから:`, {
|
||||||
body: getPostSummary(post),
|
body: getPostSummary(post),
|
||||||
icon: post.user.avatar_url + '?thumbnail&size=64'
|
icon: post.user.avatar_url + '?thumbnail&size=64'
|
||||||
|
@ -60,7 +70,7 @@ function registerNotifications(stream) {
|
||||||
setTimeout(n.close.bind(n), 6000);
|
setTimeout(n.close.bind(n), 6000);
|
||||||
});
|
});
|
||||||
|
|
||||||
stream.on('reply', post => {
|
connection.on('reply', post => {
|
||||||
const n = new Notification(`${post.user.name}さんから返信:`, {
|
const n = new Notification(`${post.user.name}さんから返信:`, {
|
||||||
body: getPostSummary(post),
|
body: getPostSummary(post),
|
||||||
icon: post.user.avatar_url + '?thumbnail&size=64'
|
icon: post.user.avatar_url + '?thumbnail&size=64'
|
||||||
|
@ -68,7 +78,7 @@ function registerNotifications(stream) {
|
||||||
setTimeout(n.close.bind(n), 6000);
|
setTimeout(n.close.bind(n), 6000);
|
||||||
});
|
});
|
||||||
|
|
||||||
stream.on('quote', post => {
|
connection.on('quote', post => {
|
||||||
const n = new Notification(`${post.user.name}さんが引用:`, {
|
const n = new Notification(`${post.user.name}さんが引用:`, {
|
||||||
body: getPostSummary(post),
|
body: getPostSummary(post),
|
||||||
icon: post.user.avatar_url + '?thumbnail&size=64'
|
icon: post.user.avatar_url + '?thumbnail&size=64'
|
||||||
|
@ -76,7 +86,7 @@ function registerNotifications(stream) {
|
||||||
setTimeout(n.close.bind(n), 6000);
|
setTimeout(n.close.bind(n), 6000);
|
||||||
});
|
});
|
||||||
|
|
||||||
stream.on('unread_messaging_message', message => {
|
connection.on('unread_messaging_message', message => {
|
||||||
const n = new Notification(`${message.user.name}さんからメッセージ:`, {
|
const n = new Notification(`${message.user.name}さんからメッセージ:`, {
|
||||||
body: message.text, // TODO: getMessagingMessageSummary(message),
|
body: message.text, // TODO: getMessagingMessageSummary(message),
|
||||||
icon: message.user.avatar_url + '?thumbnail&size=64'
|
icon: message.user.avatar_url + '?thumbnail&size=64'
|
||||||
|
@ -90,3 +100,4 @@ function registerNotifications(stream) {
|
||||||
setTimeout(n.close.bind(n), 7000);
|
setTimeout(n.close.bind(n), 7000);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -74,7 +74,10 @@
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.user = null;
|
this.user = null;
|
||||||
this.userPromise = isPromise(this.opts.user)
|
this.userPromise = isPromise(this.opts.user)
|
||||||
|
@ -89,14 +92,15 @@
|
||||||
init: false,
|
init: false,
|
||||||
user: user
|
user: user
|
||||||
});
|
});
|
||||||
this.stream.on('follow', this.onStreamFollow);
|
this.connection.on('follow', this.onStreamFollow);
|
||||||
this.stream.on('unfollow', this.onStreamUnfollow);
|
this.connection.on('unfollow', this.onStreamUnfollow);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('follow', this.onStreamFollow);
|
this.connection.off('follow', this.onStreamFollow);
|
||||||
this.stream.off('unfollow', this.onStreamUnfollow);
|
this.connection.off('unfollow', this.onStreamUnfollow);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.onStreamFollow = user => {
|
this.onStreamFollow = user => {
|
||||||
|
|
|
@ -71,7 +71,10 @@
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.user = null;
|
this.user = null;
|
||||||
this.userPromise = isPromise(this.opts.user)
|
this.userPromise = isPromise(this.opts.user)
|
||||||
|
@ -86,14 +89,15 @@
|
||||||
init: false,
|
init: false,
|
||||||
user: user
|
user: user
|
||||||
});
|
});
|
||||||
this.stream.on('follow', this.onStreamFollow);
|
this.connection.on('follow', this.onStreamFollow);
|
||||||
this.stream.on('unfollow', this.onStreamUnfollow);
|
this.connection.on('unfollow', this.onStreamUnfollow);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('follow', this.onStreamFollow);
|
this.connection.off('follow', this.onStreamFollow);
|
||||||
this.stream.off('unfollow', this.onStreamUnfollow);
|
this.connection.off('unfollow', this.onStreamUnfollow);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.onStreamFollow = user => {
|
this.onStreamFollow = user => {
|
||||||
|
|
|
@ -138,7 +138,7 @@
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
import ChannelStream from '../../../common/scripts/channel-stream';
|
import ChannelStream from '../../../common/scripts/streaming/channel-stream';
|
||||||
|
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
|
|
|
@ -75,13 +75,16 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
this.mixin('widget');
|
this.mixin('widget');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.images = [];
|
this.images = [];
|
||||||
this.initializing = true;
|
this.initializing = true;
|
||||||
|
|
||||||
this.on('mount', () => {
|
this.on('mount', () => {
|
||||||
this.stream.on('drive_file_created', this.onStreamDriveFileCreated);
|
this.connection.on('drive_file_created', this.onStreamDriveFileCreated);
|
||||||
|
|
||||||
this.api('drive/stream', {
|
this.api('drive/stream', {
|
||||||
type: 'image/*',
|
type: 'image/*',
|
||||||
|
@ -95,7 +98,8 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('drive_file_created', this.onStreamDriveFileCreated);
|
this.connection.off('drive_file_created', this.onStreamDriveFileCreated);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.onStreamDriveFileCreated = file => {
|
this.onStreamDriveFileCreated = file => {
|
||||||
|
|
|
@ -40,7 +40,10 @@
|
||||||
<script>
|
<script>
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.isLoading = true;
|
this.isLoading = true;
|
||||||
this.isEmpty = false;
|
this.isEmpty = false;
|
||||||
|
@ -48,9 +51,9 @@
|
||||||
this.noFollowing = this.I.following_count == 0;
|
this.noFollowing = this.I.following_count == 0;
|
||||||
|
|
||||||
this.on('mount', () => {
|
this.on('mount', () => {
|
||||||
this.stream.on('post', this.onStreamPost);
|
this.connection.on('post', this.onStreamPost);
|
||||||
this.stream.on('follow', this.onStreamFollow);
|
this.connection.on('follow', this.onStreamFollow);
|
||||||
this.stream.on('unfollow', this.onStreamUnfollow);
|
this.connection.on('unfollow', this.onStreamUnfollow);
|
||||||
|
|
||||||
document.addEventListener('keydown', this.onDocumentKeydown);
|
document.addEventListener('keydown', this.onDocumentKeydown);
|
||||||
window.addEventListener('scroll', this.onScroll);
|
window.addEventListener('scroll', this.onScroll);
|
||||||
|
@ -59,9 +62,10 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('post', this.onStreamPost);
|
this.connection.off('post', this.onStreamPost);
|
||||||
this.stream.off('follow', this.onStreamFollow);
|
this.connection.off('follow', this.onStreamFollow);
|
||||||
this.stream.off('unfollow', this.onStreamUnfollow);
|
this.connection.off('unfollow', this.onStreamUnfollow);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
|
|
||||||
document.removeEventListener('keydown', this.onDocumentKeydown);
|
document.removeEventListener('keydown', this.onDocumentKeydown);
|
||||||
window.removeEventListener('scroll', this.onScroll);
|
window.removeEventListener('scroll', this.onScroll);
|
||||||
|
|
|
@ -212,9 +212,12 @@
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
this.mixin('stream');
|
|
||||||
this.mixin('user-preview');
|
this.mixin('user-preview');
|
||||||
|
|
||||||
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.notifications = [];
|
this.notifications = [];
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
|
||||||
|
@ -235,11 +238,12 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.stream.on('notification', this.onNotification);
|
this.connection.on('notification', this.onNotification);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('notification', this.onNotification);
|
this.connection.off('notification', this.onNotification);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('update', () => {
|
this.on('update', () => {
|
||||||
|
@ -253,7 +257,7 @@
|
||||||
|
|
||||||
this.onNotification = notification => {
|
this.onNotification = notification => {
|
||||||
// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
|
// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
|
||||||
this.stream.send({
|
this.connection.send({
|
||||||
type: 'read_notification',
|
type: 'read_notification',
|
||||||
id: notification.id
|
id: notification.id
|
||||||
});
|
});
|
||||||
|
|
|
@ -12,10 +12,12 @@
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.unreadCount = 0;
|
this.unreadCount = 0;
|
||||||
|
|
||||||
this.page = this.opts.mode || 'timeline';
|
this.page = this.opts.mode || 'timeline';
|
||||||
|
|
||||||
this.on('mount', () => {
|
this.on('mount', () => {
|
||||||
|
@ -24,12 +26,14 @@
|
||||||
});
|
});
|
||||||
document.title = 'Misskey';
|
document.title = 'Misskey';
|
||||||
Progress.start();
|
Progress.start();
|
||||||
this.stream.on('post', this.onStreamPost);
|
|
||||||
|
this.connection.on('post', this.onStreamPost);
|
||||||
document.addEventListener('visibilitychange', this.windowOnVisibilitychange, false);
|
document.addEventListener('visibilitychange', this.windowOnVisibilitychange, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('post', this.onStreamPost);
|
this.connection.off('post', this.onStreamPost);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
document.removeEventListener('visibilitychange', this.windowOnVisibilitychange);
|
document.removeEventListener('visibilitychange', this.windowOnVisibilitychange);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -430,9 +430,12 @@
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
this.mixin('stream');
|
|
||||||
this.mixin('user-preview');
|
this.mixin('user-preview');
|
||||||
|
|
||||||
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.isDetailOpened = false;
|
this.isDetailOpened = false;
|
||||||
|
|
||||||
this.set = post => {
|
this.set = post => {
|
||||||
|
@ -468,21 +471,21 @@
|
||||||
|
|
||||||
this.capture = withHandler => {
|
this.capture = withHandler => {
|
||||||
if (this.SIGNIN) {
|
if (this.SIGNIN) {
|
||||||
this.stream.send({
|
this.connection.send({
|
||||||
type: 'capture',
|
type: 'capture',
|
||||||
id: this.post.id
|
id: this.post.id
|
||||||
});
|
});
|
||||||
if (withHandler) this.stream.on('post-updated', this.onStreamPostUpdated);
|
if (withHandler) this.connection.on('post-updated', this.onStreamPostUpdated);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.decapture = withHandler => {
|
this.decapture = withHandler => {
|
||||||
if (this.SIGNIN) {
|
if (this.SIGNIN) {
|
||||||
this.stream.send({
|
this.connection.send({
|
||||||
type: 'decapture',
|
type: 'decapture',
|
||||||
id: this.post.id
|
id: this.post.id
|
||||||
});
|
});
|
||||||
if (withHandler) this.stream.off('post-updated', this.onStreamPostUpdated);
|
if (withHandler) this.connection.off('post-updated', this.onStreamPostUpdated);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -490,7 +493,7 @@
|
||||||
this.capture(true);
|
this.capture(true);
|
||||||
|
|
||||||
if (this.SIGNIN) {
|
if (this.SIGNIN) {
|
||||||
this.stream.on('_connected_', this.onStreamConnected);
|
this.connection.on('_connected_', this.onStreamConnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.p.text) {
|
if (this.p.text) {
|
||||||
|
@ -515,7 +518,8 @@
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.decapture(true);
|
this.decapture(true);
|
||||||
this.stream.off('_connected_', this.onStreamConnected);
|
this.connection.off('_connected_', this.onStreamConnected);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.reply = () => {
|
this.reply = () => {
|
||||||
|
|
|
@ -423,14 +423,17 @@
|
||||||
<script>
|
<script>
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.page = this.opts.page;
|
this.page = this.opts.page;
|
||||||
|
|
||||||
this.on('mount', () => {
|
this.on('mount', () => {
|
||||||
if (this.SIGNIN) {
|
if (this.SIGNIN) {
|
||||||
this.stream.on('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
this.connection.on('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
||||||
this.stream.on('unread_messaging_message', this.onUnreadMessagingMessage);
|
this.connection.on('unread_messaging_message', this.onUnreadMessagingMessage);
|
||||||
|
|
||||||
// Fetch count of unread messaging messages
|
// Fetch count of unread messaging messages
|
||||||
this.api('messaging/unread').then(res => {
|
this.api('messaging/unread').then(res => {
|
||||||
|
@ -445,8 +448,9 @@
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
if (this.SIGNIN) {
|
if (this.SIGNIN) {
|
||||||
this.stream.off('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
this.connection.off('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
||||||
this.stream.off('unread_messaging_message', this.onUnreadMessagingMessage);
|
this.connection.off('unread_messaging_message', this.onUnreadMessagingMessage);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,10 @@
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.user = null;
|
this.user = null;
|
||||||
this.userPromise = isPromise(this.opts.user)
|
this.userPromise = isPromise(this.opts.user)
|
||||||
|
@ -67,14 +70,15 @@
|
||||||
init: false,
|
init: false,
|
||||||
user: user
|
user: user
|
||||||
});
|
});
|
||||||
this.stream.on('follow', this.onStreamFollow);
|
this.connection.on('follow', this.onStreamFollow);
|
||||||
this.stream.on('unfollow', this.onStreamUnfollow);
|
this.connection.on('unfollow', this.onStreamUnfollow);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('follow', this.onStreamFollow);
|
this.connection.off('follow', this.onStreamFollow);
|
||||||
this.stream.off('unfollow', this.onStreamUnfollow);
|
this.connection.off('unfollow', this.onStreamUnfollow);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.onStreamFollow = user => {
|
this.onStreamFollow = user => {
|
||||||
|
|
|
@ -12,7 +12,10 @@
|
||||||
<script>
|
<script>
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.noFollowing = this.I.following_count == 0;
|
this.noFollowing = this.I.following_count == 0;
|
||||||
|
|
||||||
|
@ -30,15 +33,16 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
this.on('mount', () => {
|
this.on('mount', () => {
|
||||||
this.stream.on('post', this.onStreamPost);
|
this.connection.on('post', this.onStreamPost);
|
||||||
this.stream.on('follow', this.onStreamFollow);
|
this.connection.on('follow', this.onStreamFollow);
|
||||||
this.stream.on('unfollow', this.onStreamUnfollow);
|
this.connection.on('unfollow', this.onStreamUnfollow);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('post', this.onStreamPost);
|
this.connection.off('post', this.onStreamPost);
|
||||||
this.stream.off('follow', this.onStreamFollow);
|
this.connection.off('follow', this.onStreamFollow);
|
||||||
this.stream.off('unfollow', this.onStreamUnfollow);
|
this.connection.off('unfollow', this.onStreamUnfollow);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.more = () => {
|
this.more = () => {
|
||||||
|
|
|
@ -82,7 +82,10 @@
|
||||||
this.getPostSummary = getPostSummary;
|
this.getPostSummary = getPostSummary;
|
||||||
|
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.notifications = [];
|
this.notifications = [];
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
@ -106,11 +109,12 @@
|
||||||
this.trigger('fetched');
|
this.trigger('fetched');
|
||||||
});
|
});
|
||||||
|
|
||||||
this.stream.on('notification', this.onNotification);
|
this.connection.on('notification', this.onNotification);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('notification', this.onNotification);
|
this.connection.off('notification', this.onNotification);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('update', () => {
|
this.on('update', () => {
|
||||||
|
@ -124,7 +128,7 @@
|
||||||
|
|
||||||
this.onNotification = notification => {
|
this.onNotification = notification => {
|
||||||
// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
|
// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
|
||||||
this.stream.send({
|
this.connection.send({
|
||||||
type: 'read_notification',
|
type: 'read_notification',
|
||||||
id: notification.id
|
id: notification.id
|
||||||
});
|
});
|
||||||
|
|
|
@ -13,7 +13,10 @@
|
||||||
import openPostForm from '../../scripts/open-post-form';
|
import openPostForm from '../../scripts/open-post-form';
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.unreadCount = 0;
|
this.unreadCount = 0;
|
||||||
|
|
||||||
|
@ -28,7 +31,7 @@
|
||||||
|
|
||||||
Progress.start();
|
Progress.start();
|
||||||
|
|
||||||
this.stream.on('post', this.onStreamPost);
|
this.connection.on('post', this.onStreamPost);
|
||||||
document.addEventListener('visibilitychange', this.onVisibilitychange, false);
|
document.addEventListener('visibilitychange', this.onVisibilitychange, false);
|
||||||
|
|
||||||
this.refs.ui.refs.home.on('loaded', () => {
|
this.refs.ui.refs.home.on('loaded', () => {
|
||||||
|
@ -37,7 +40,8 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('post', this.onStreamPost);
|
this.connection.off('post', this.onStreamPost);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
document.removeEventListener('visibilitychange', this.onVisibilitychange);
|
document.removeEventListener('visibilitychange', this.onVisibilitychange);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -473,7 +473,10 @@
|
||||||
|
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.set = post => {
|
this.set = post => {
|
||||||
this.post = post;
|
this.post = post;
|
||||||
|
@ -508,21 +511,21 @@
|
||||||
|
|
||||||
this.capture = withHandler => {
|
this.capture = withHandler => {
|
||||||
if (this.SIGNIN) {
|
if (this.SIGNIN) {
|
||||||
this.stream.send({
|
this.connection.send({
|
||||||
type: 'capture',
|
type: 'capture',
|
||||||
id: this.post.id
|
id: this.post.id
|
||||||
});
|
});
|
||||||
if (withHandler) this.stream.on('post-updated', this.onStreamPostUpdated);
|
if (withHandler) this.connection.on('post-updated', this.onStreamPostUpdated);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.decapture = withHandler => {
|
this.decapture = withHandler => {
|
||||||
if (this.SIGNIN) {
|
if (this.SIGNIN) {
|
||||||
this.stream.send({
|
this.connection.send({
|
||||||
type: 'decapture',
|
type: 'decapture',
|
||||||
id: this.post.id
|
id: this.post.id
|
||||||
});
|
});
|
||||||
if (withHandler) this.stream.off('post-updated', this.onStreamPostUpdated);
|
if (withHandler) this.connection.off('post-updated', this.onStreamPostUpdated);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -530,7 +533,7 @@
|
||||||
this.capture(true);
|
this.capture(true);
|
||||||
|
|
||||||
if (this.SIGNIN) {
|
if (this.SIGNIN) {
|
||||||
this.stream.on('_connected_', this.onStreamConnected);
|
this.connection.on('_connected_', this.onStreamConnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.p.text) {
|
if (this.p.text) {
|
||||||
|
@ -555,7 +558,8 @@
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.decapture(true);
|
this.decapture(true);
|
||||||
this.stream.off('_connected_', this.onStreamConnected);
|
this.connection.off('_connected_', this.onStreamConnected);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.reply = () => {
|
this.reply = () => {
|
||||||
|
|
|
@ -12,16 +12,20 @@
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.isDrawerOpening = false;
|
this.isDrawerOpening = false;
|
||||||
|
|
||||||
this.on('mount', () => {
|
this.on('mount', () => {
|
||||||
this.stream.on('notification', this.onStreamNotification);
|
this.connection.on('notification', this.onStreamNotification);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('notification', this.onStreamNotification);
|
this.connection.off('notification', this.onStreamNotification);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.toggleDrawer = () => {
|
this.toggleDrawer = () => {
|
||||||
|
@ -31,7 +35,7 @@
|
||||||
|
|
||||||
this.onStreamNotification = notification => {
|
this.onStreamNotification = notification => {
|
||||||
// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
|
// TODO: ユーザーが画面を見てないと思われるとき(ブラウザやタブがアクティブじゃないなど)は送信しない
|
||||||
this.stream.send({
|
this.connection.send({
|
||||||
type: 'read_notification',
|
type: 'read_notification',
|
||||||
id: notification.id
|
id: notification.id
|
||||||
});
|
});
|
||||||
|
@ -145,15 +149,18 @@
|
||||||
import ui from '../scripts/ui-event';
|
import ui from '../scripts/ui-event';
|
||||||
|
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.func = null;
|
this.func = null;
|
||||||
this.funcIcon = null;
|
this.funcIcon = null;
|
||||||
|
|
||||||
this.on('mount', () => {
|
this.on('mount', () => {
|
||||||
this.stream.on('read_all_notifications', this.onReadAllNotifications);
|
this.connection.on('read_all_notifications', this.onReadAllNotifications);
|
||||||
this.stream.on('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
this.connection.on('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
||||||
this.stream.on('unread_messaging_message', this.onUnreadMessagingMessage);
|
this.connection.on('unread_messaging_message', this.onUnreadMessagingMessage);
|
||||||
|
|
||||||
// Fetch count of unread notifications
|
// Fetch count of unread notifications
|
||||||
this.api('notifications/get_unread_count').then(res => {
|
this.api('notifications/get_unread_count').then(res => {
|
||||||
|
@ -175,9 +182,10 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('read_all_notifications', this.onReadAllNotifications);
|
this.connection.off('read_all_notifications', this.onReadAllNotifications);
|
||||||
this.stream.off('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
this.connection.off('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
||||||
this.stream.off('unread_messaging_message', this.onUnreadMessagingMessage);
|
this.connection.off('unread_messaging_message', this.onUnreadMessagingMessage);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
|
|
||||||
ui.off('title', this.setTitle);
|
ui.off('title', this.setTitle);
|
||||||
ui.off('func', this.setFunc);
|
ui.off('func', this.setFunc);
|
||||||
|
@ -348,12 +356,15 @@
|
||||||
this.mixin('i');
|
this.mixin('i');
|
||||||
this.mixin('page');
|
this.mixin('page');
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
this.mixin('stream');
|
this.mixin('stream');
|
||||||
|
this.connection = this.stream.getConnection();
|
||||||
|
this.connectionId = this.stream.use();
|
||||||
|
|
||||||
this.on('mount', () => {
|
this.on('mount', () => {
|
||||||
this.stream.on('read_all_notifications', this.onReadAllNotifications);
|
this.connection.on('read_all_notifications', this.onReadAllNotifications);
|
||||||
this.stream.on('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
this.connection.on('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
||||||
this.stream.on('unread_messaging_message', this.onUnreadMessagingMessage);
|
this.connection.on('unread_messaging_message', this.onUnreadMessagingMessage);
|
||||||
|
|
||||||
// Fetch count of unread notifications
|
// Fetch count of unread notifications
|
||||||
this.api('notifications/get_unread_count').then(res => {
|
this.api('notifications/get_unread_count').then(res => {
|
||||||
|
@ -375,9 +386,10 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on('unmount', () => {
|
this.on('unmount', () => {
|
||||||
this.stream.off('read_all_notifications', this.onReadAllNotifications);
|
this.connection.off('read_all_notifications', this.onReadAllNotifications);
|
||||||
this.stream.off('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
this.connection.off('read_all_messaging_messages', this.onReadAllMessagingMessages);
|
||||||
this.stream.off('unread_messaging_message', this.onUnreadMessagingMessage);
|
this.connection.off('unread_messaging_message', this.onUnreadMessagingMessage);
|
||||||
|
this.stream.dispose(this.connectionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.onReadAllNotifications = () => {
|
this.onReadAllNotifications = () => {
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
color #546567
|
color #546567
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
import Connection from '../../common/scripts/server-stream';
|
import Connection from '../../common/scripts/streaming/server-stream';
|
||||||
|
|
||||||
this.mixin('api');
|
this.mixin('api');
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue