- Some queries are faster due to better index ordering - Database is smaller thanks to splitting message_channel table and adding WITHOUT ROWID where helpful
		
			
				
	
	
		
			31 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// @ts-check
 | 
						|
 | 
						|
const sqlite = require("better-sqlite3")
 | 
						|
const HeatSync = require("heatsync")
 | 
						|
 | 
						|
const passthrough = require("../passthrough")
 | 
						|
const db = new sqlite("db/ooye.db")
 | 
						|
 | 
						|
const sync = new HeatSync({watchFS: false})
 | 
						|
 | 
						|
Object.assign(passthrough, {sync, db})
 | 
						|
 | 
						|
const api = require("../matrix/api")
 | 
						|
 | 
						|
/** @type {{event_id: string, room_id: string, event_type: string}[]} */ // @ts-ignore
 | 
						|
const rows = db.prepare("SELECT event_id, room_id, event_type FROM event_message INNER JOIN message_channel USING (message_id) INNER JOIN channel_room USING (channel_id)").all()
 | 
						|
 | 
						|
const preparedUpdate = db.prepare("UPDATE event_message SET event_type = ?, event_subtype = ? WHERE event_id = ?")
 | 
						|
 | 
						|
;(async () => {
 | 
						|
	for (const row of rows) {
 | 
						|
		if (row.event_type == null) {
 | 
						|
			const event = await api.getEvent(row.room_id, row.event_id)
 | 
						|
			const type = event.type
 | 
						|
			const subtype = event.content.msgtype || null
 | 
						|
			preparedUpdate.run(type, subtype, row.event_id)
 | 
						|
			console.log(`Updated ${row.event_id} -> ${type} + ${subtype}`)
 | 
						|
		}
 | 
						|
	}
 | 
						|
})()
 |