matrix-public-archive/src/main2.ts

132 lines
3.2 KiB
TypeScript
Raw Normal View History

2022-02-01 20:39:23 -07:00
import {
Platform,
createNavigation,
createRouter,
2022-02-01 22:45:09 -07:00
MediaRepository,
2022-02-01 20:39:23 -07:00
TilesCollection,
2022-02-01 20:39:23 -07:00
FragmentIdComparer,
tilesCreator as makeTilesCreator,
EventEntry,
encodeKey,
encodeEventIdKey,
Timeline,
2022-02-01 20:39:23 -07:00
TimelineView
} from "hydrogen-view-sdk";
const roomId = '!OWqptMTjnQfUWubCid:matrix.org';
2022-02-01 22:45:09 -07:00
import eventsJson from './events2.json'
2022-02-01 20:39:23 -07:00
let eventIndexCounter = 0;
2022-02-01 20:39:23 -07:00
const fragmentIdComparer = new FragmentIdComparer([]);
function makeEventEntryFromEventJson(roomId, eventJson) {
console.assert(roomId);
console.assert(eventJson);
const eventIndex = eventIndexCounter;
2022-02-01 20:39:23 -07:00
const eventEntry = new EventEntry({
"fragmentId": 0,
"eventIndex": eventIndex, // TODO: What should this be?
"roomId": roomId,
2022-02-01 20:39:23 -07:00
"event": eventJson,
"displayName": "todo",
"avatarUrl": "mxc://matrix.org/todo",
"key": encodeKey(roomId, 0, eventIndex),
"eventIdKey": encodeEventIdKey(roomId, eventJson.event_id)
2022-02-01 20:39:23 -07:00
}, fragmentIdComparer);
eventIndexCounter++;
2022-02-01 20:39:23 -07:00
return eventEntry;
}
async function asdf() {
const app = document.querySelector<HTMLDivElement>('#app2')!
const config = {};
const assetPaths = {};
const platform = new Platform(app, assetPaths, config, { development: import.meta.env.DEV });
const timeline = new Timeline({
roomId: roomId,
//storage: this._storage,
fragmentIdComparer: fragmentIdComparer,
clock: platform.clock,
logger: platform.logger,
//hsApi: this._hsApi
});
2022-02-01 20:39:23 -07:00
const tilesCreator = makeTilesCreator({
platform,
roomVM: {
room: {
2022-02-01 22:45:09 -07:00
mediaRepository: new MediaRepository({
homeserver: 'https://matrix-client.matrix.org'
})
2022-02-01 20:39:23 -07:00
}
},
timeline,
2022-02-01 20:39:23 -07:00
urlCreator: {
urlUntilSegment: () => {
return 'todo';
2022-02-01 22:45:09 -07:00
},
urlForSegments: () => {
return 'todo';
},
},
navigation: {
segment: () => {
return 'todo';
2022-02-01 20:39:23 -07:00
}
}
});
2022-02-01 22:45:09 -07:00
console.log('eventsJson', eventsJson)
const eventEntries = eventsJson.map((eventJson) => {
return makeEventEntryFromEventJson(roomId, eventJson);
2022-02-01 20:39:23 -07:00
});
console.log('eventEntries', eventEntries)
2022-02-01 21:32:59 -07:00
// We have to use `timeline._setupEntries([])` because it sets
// `this._allEntries` in `Timeline` and we don't want to use `timeline.load()`
// to request remote things.
timeline._setupEntries([]);
// Make it safe to iterate a derived observable collection
timeline.entries.subscribe({ onAdd: () => null, onUpdate: () => null });
timeline.addEntries(eventEntries);
console.log('timeline.entries', timeline.entries.length, timeline.entries);
const tiles = new TilesCollection(timeline.entries, tilesCreator);
// Trigger onSubscribeFirst -> tiles._populateTiles();
tiles.subscribe({ onAdd: () => null, onUpdate: () => null });
2022-02-01 21:32:59 -07:00
2022-02-01 22:45:09 -07:00
// Make the lazy-load images appear
for(const tile of tiles) {
2022-02-01 22:45:09 -07:00
tile.notifyVisible();
}
2022-02-01 20:39:23 -07:00
// const navigation = createNavigation();
// const urlRouter = createRouter({
// navigation: navigation,
// history: {}
// });
// urlRouter.attach();
const timelineViewModel = {
showJumpDown: false,
setVisibleTileRange: () => {},
tiles: tiles,
};
const view = new TimelineView(timelineViewModel);
app.appendChild(view.mount());
}
asdf();