This repository has been archived on 2022-08-19. You can view files and clone it, but cannot push or open issues or pull requests.
hydrogen-web/src/main.js

85 lines
3 KiB
JavaScript
Raw Normal View History

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";
import SessionView from "./ui/web/session/SessionView.js";
2019-03-09 00:28:54 +05:30
import SessionViewModel from "./domain/session/SessionViewModel.js";
const HOST = "127.0.0.1";
const HOMESERVER = `http://${HOST}:8008`;
const USERNAME = "bruno1";
const USER_ID = `@${USERNAME}:localhost`;
const PASSWORD = "testtest";
function getSessionInfo(userId) {
2019-06-27 02:01:36 +05:30
const sessionsJson = localStorage.getItem("brawl_sessions_v1");
if (sessionsJson) {
const sessions = JSON.parse(sessionsJson);
const session = sessions.find(session => session.userId === userId);
if (session) {
return session;
}
}
}
function storeSessionInfo(loginData) {
2019-06-15 03:28:39 +05:30
const sessionsJson = localStorage.getItem("brawl_sessions_v1");
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-15 03:28:39 +05:30
localStorage.setItem("brawl_sessions_v1", JSON.stringify(sessions));
return sessionInfo;
}
2019-02-07 04:49:14 +05:30
async function login(username, password, homeserver) {
2019-06-27 02:01:36 +05:30
const hsApi = new HomeServerApi(homeserver);
const loginData = await hsApi.passwordLogin(username, password).response();
return storeSessionInfo(loginData);
2019-02-07 04:49:14 +05:30
}
function showSession(container, session, sync) {
const vm = new SessionViewModel(session, sync);
const view = new SessionView(vm);
container.appendChild(view.mount());
2019-02-27 03:15:58 +05:30
}
export default async function main(container) {
2019-06-27 02:01:36 +05:30
try {
let sessionInfo = getSessionInfo(USER_ID);
if (!sessionInfo) {
sessionInfo = await login(USERNAME, PASSWORD, HOMESERVER);
}
2019-06-15 03:28:39 +05:30
const storage = await createIdbStorage(`brawl_session_${sessionInfo.id}`);
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-28 04:08:03 +05:30
console.log("session loaded");
2019-06-27 02:01:36 +05:30
const sync = new Sync(hsApi, session, storage);
2019-02-28 04:08:03 +05:30
const needsInitialSync = !session.syncToken;
if (needsInitialSync) {
console.log("session needs initial sync");
} else {
showSession(container, session, sync);
2019-02-28 04:08:03 +05:30
}
2019-06-27 02:01:36 +05:30
await sync.start();
2019-02-28 04:08:03 +05:30
if (needsInitialSync) {
showSession(container, session, sync);
2019-02-28 04:08:03 +05:30
}
// this will start sending unsent messages
2019-07-27 02:10:39 +05:30
session.notifyNetworkAvailable();
2019-06-27 02:01:36 +05:30
} catch(err) {
2019-06-02 18:29:30 +05:30
console.error(`${err.message}:\n${err.stack}`);
2019-06-27 02:01:36 +05:30
}
}