summaryrefslogtreecommitdiff
path: root/src/client/app/common/scripts/streaming/home.ts
blob: 26729507fb448f661f9270d7555f79f3429766fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import Stream from './stream';
import StreamManager from './stream-manager';
import MiOS from '../../../mios';

/**
 * Home stream connection
 */
export class HomeStream extends Stream {
	constructor(os: MiOS, me) {
		super(os, '', {
			i: me.token
		});

		// 最終利用日時を更新するため定期的にaliveメッセージを送信
		setInterval(() => {
			this.send({ type: 'alive' });
			me.lastUsedAt = new Date();
		}, 1000 * 60);

		// 自分の情報が更新されたとき
		this.on('meUpdated', i => {
			if (os.debug) {
				console.log('I updated:', i);
			}

			os.store.dispatch('mergeMe', i);
		});

		this.on('read_all_notifications', () => {
			os.store.dispatch('mergeMe', {
				hasUnreadNotification: false
			});
		});

		this.on('unread_notification', () => {
			os.store.dispatch('mergeMe', {
				hasUnreadNotification: true
			});
		});

		this.on('read_all_messaging_messages', () => {
			os.store.dispatch('mergeMe', {
				hasUnreadMessagingMessage: false
			});
		});

		this.on('unread_messaging_message', () => {
			os.store.dispatch('mergeMe', {
				hasUnreadMessagingMessage: true
			});
		});

		this.on('unreadMention', () => {
			os.store.dispatch('mergeMe', {
				hasUnreadMentions: true
			});
		});

		this.on('readAllUnreadMentions', () => {
			os.store.dispatch('mergeMe', {
				hasUnreadMentions: false
			});
		});

		this.on('unreadSpecifiedNote', () => {
			os.store.dispatch('mergeMe', {
				hasUnreadSpecifiedNotes: true
			});
		});

		this.on('readAllUnreadSpecifiedNotes', () => {
			os.store.dispatch('mergeMe', {
				hasUnreadSpecifiedNotes: false
			});
		});

		this.on('clientSettingUpdated', x => {
			os.store.commit('settings/set', {
				key: x.key,
				value: x.value
			});
		});

		this.on('home_updated', x => {
			os.store.commit('settings/setHome', x);
		});

		this.on('mobile_home_updated', x => {
			os.store.commit('settings/setMobileHome', x);
		});

		this.on('widgetUpdated', x => {
			os.store.commit('settings/setWidget', {
				id: x.id,
				data: x.data
			});
		});

		// トークンが再生成されたとき
		// このままではMisskeyが利用できないので強制的にサインアウトさせる
		this.on('my_token_regenerated', () => {
			alert('%i18n:common.my-token-regenerated%');
			os.signout();
		});
	}
}

export class HomeStreamManager extends StreamManager<HomeStream> {
	private me;
	private os: MiOS;

	constructor(os: MiOS, me) {
		super();

		this.me = me;
		this.os = os;
	}

	public getConnection() {
		if (this.connection == null) {
			this.connection = new HomeStream(this.os, this.me);
		}

		return this.connection;
	}
}