2019-02-10 21:33:18 +01:00
|
|
|
import HomeServerApi from "./matrix/hs-api.js";
|
|
|
|
import Session from "./matrix/session.js";
|
|
|
|
import createIdbStorage from "./matrix/storage/idb/create.js";
|
|
|
|
import Sync from "./matrix/sync.js";
|
2019-06-16 10:54:16 +02:00
|
|
|
import SessionView from "./ui/web/session/SessionView.js";
|
2019-03-08 19:58:54 +01:00
|
|
|
import SessionViewModel from "./domain/session/SessionViewModel.js";
|
2019-02-07 01:50:23 +01:00
|
|
|
|
2019-06-26 22:08:40 +02:00
|
|
|
const HOST = "192.168.2.108";
|
2019-02-07 01:50:23 +01:00
|
|
|
const HOMESERVER = `http://${HOST}:8008`;
|
|
|
|
const USERNAME = "bruno1";
|
2019-06-26 22:08:40 +02:00
|
|
|
const USER_ID = `@${USERNAME}:localhost`;
|
2019-02-07 01:50:23 +01:00
|
|
|
const PASSWORD = "testtest";
|
2019-02-04 23:31:08 +01:00
|
|
|
|
2019-03-08 20:00:37 +01:00
|
|
|
function getSessionInfo(userId) {
|
2019-06-14 23:58:39 +02:00
|
|
|
const sessionsJson = localStorage.getItem("brawl_sessions_v1");
|
2019-02-07 00:19:14 +01:00
|
|
|
if (sessionsJson) {
|
|
|
|
const sessions = JSON.parse(sessionsJson);
|
|
|
|
const session = sessions.find(session => session.userId === userId);
|
|
|
|
if (session) {
|
2019-03-08 20:00:37 +01:00
|
|
|
return session;
|
2019-02-07 00:19:14 +01:00
|
|
|
}
|
2019-02-04 23:31:08 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-08 20:00:37 +01:00
|
|
|
function storeSessionInfo(loginData) {
|
2019-06-14 23:58:39 +02:00
|
|
|
const sessionsJson = localStorage.getItem("brawl_sessions_v1");
|
2019-03-08 20:00:37 +01:00
|
|
|
const sessions = sessionsJson ? JSON.parse(sessionsJson) : [];
|
|
|
|
const sessionId = (Math.floor(Math.random() * Number.MAX_SAFE_INTEGER)).toString();
|
|
|
|
const sessionInfo = {
|
|
|
|
id: sessionId,
|
|
|
|
deviceId: loginData.device_id,
|
|
|
|
userId: loginData.user_id,
|
|
|
|
homeServer: loginData.home_server,
|
|
|
|
accessToken: loginData.access_token,
|
|
|
|
};
|
|
|
|
sessions.push(sessionInfo);
|
2019-06-14 23:58:39 +02:00
|
|
|
localStorage.setItem("brawl_sessions_v1", JSON.stringify(sessions));
|
2019-03-08 20:00:37 +01:00
|
|
|
return sessionInfo;
|
|
|
|
}
|
|
|
|
|
2019-02-07 00:19:14 +01:00
|
|
|
async function login(username, password, homeserver) {
|
2019-02-07 01:25:12 +01:00
|
|
|
const hsApi = new HomeServerApi(homeserver);
|
|
|
|
const loginData = await hsApi.passwordLogin(username, password).response();
|
2019-03-08 20:00:37 +01:00
|
|
|
return storeSessionInfo(loginData);
|
2019-02-07 00:19:14 +01:00
|
|
|
}
|
|
|
|
|
2019-06-16 10:54:16 +02:00
|
|
|
function showSession(container, session, sync) {
|
|
|
|
const vm = new SessionViewModel(session, sync);
|
2019-02-27 22:50:08 +01:00
|
|
|
const view = new SessionView(vm);
|
2019-06-16 10:54:16 +02:00
|
|
|
container.appendChild(view.mount());
|
2019-02-26 22:45:58 +01:00
|
|
|
}
|
|
|
|
|
2019-06-16 10:54:16 +02:00
|
|
|
export default async function main(container) {
|
2019-02-10 21:25:29 +01:00
|
|
|
try {
|
2019-03-08 20:00:37 +01:00
|
|
|
let sessionInfo = getSessionInfo(USER_ID);
|
|
|
|
if (!sessionInfo) {
|
|
|
|
sessionInfo = await login(USERNAME, PASSWORD, HOMESERVER);
|
2019-02-10 21:25:29 +01:00
|
|
|
}
|
2019-06-14 23:58:39 +02:00
|
|
|
const storage = await createIdbStorage(`brawl_session_${sessionInfo.id}`);
|
2019-03-08 20:00:37 +01:00
|
|
|
const hsApi = new HomeServerApi(HOMESERVER, sessionInfo.accessToken);
|
|
|
|
const session = new Session({storage, hsApi, sessionInfo: {
|
|
|
|
deviceId: sessionInfo.deviceId,
|
|
|
|
userId: sessionInfo.userId,
|
|
|
|
homeServer: sessionInfo.homeServer, //only pass relevant fields to Session
|
|
|
|
}});
|
|
|
|
await session.load();
|
2019-02-27 23:38:03 +01:00
|
|
|
console.log("session loaded");
|
2019-06-16 10:54:16 +02:00
|
|
|
const sync = new Sync(hsApi, session, storage);
|
2019-02-27 23:38:03 +01:00
|
|
|
const needsInitialSync = !session.syncToken;
|
|
|
|
if (needsInitialSync) {
|
|
|
|
console.log("session needs initial sync");
|
|
|
|
} else {
|
2019-06-16 10:54:16 +02:00
|
|
|
showSession(container, session, sync);
|
2019-02-27 23:38:03 +01:00
|
|
|
}
|
2019-02-10 21:25:29 +01:00
|
|
|
await sync.start();
|
2019-02-27 23:38:03 +01:00
|
|
|
if (needsInitialSync) {
|
2019-06-16 10:54:16 +02:00
|
|
|
showSession(container, session, sync);
|
2019-02-27 23:38:03 +01:00
|
|
|
}
|
2019-02-10 21:25:29 +01:00
|
|
|
} catch(err) {
|
2019-06-02 14:59:30 +02:00
|
|
|
console.error(`${err.message}:\n${err.stack}`);
|
2019-02-07 01:50:47 +01:00
|
|
|
}
|
2019-02-04 23:31:08 +01:00
|
|
|
}
|