mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 21:11:30 +08:00 
			
		
		
		
	
		
			
	
	
		
			47 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | const notes = await api.runOnBackend(() => { | ||
|  |     const blobSizes = api.sql.getMap(`SELECT blobId, LENGTH(content) FROM blobs`); | ||
|  |     const noteBlobIds = api.sql.getRows(`
 | ||
|  |         SELECT | ||
|  |             notes.noteId, | ||
|  |             notes.blobId, | ||
|  |             GROUP_CONCAT(revisions.blobId) AS revisions_blobIds, | ||
|  |             GROUP_CONCAT(note_attachments.blobId) AS note_attachments_blobIds, | ||
|  |             GROUP_CONCAT(revision_attachments.blobId) AS revision_attachments_blobIds | ||
|  |         FROM | ||
|  |             notes | ||
|  |             LEFT JOIN revisions USING (noteId) | ||
|  |             LEFT JOIN attachments AS note_attachments ON notes.noteId = note_attachments.ownerId | ||
|  |             LEFT JOIN attachments AS revision_attachments ON revisions.revisionId = revision_attachments.ownerId | ||
|  |         GROUP BY noteId`);
 | ||
|  |      | ||
|  |     let noteSizes = []; | ||
|  |      | ||
|  |     for (const {noteId, blobId, revisions_blobIds, note_attachments_blobIds, revision_attachments_blobIds} of noteBlobIds) { | ||
|  |        const blobIds = new Set(`${blobId},${revisions_blobIds},${note_attachments_blobIds},${revision_attachments_blobIds}`.split(',').filter(blobId => !!blobId)); | ||
|  |          | ||
|  |         const lengths = [...blobIds].map(blobId => blobSizes[blobId] || 0); | ||
|  |         const totalLength = lengths.reduce((partialSum, a) => partialSum + a, 0); | ||
|  |          | ||
|  |         noteSizes.push({ noteId, size: totalLength }); | ||
|  |     } | ||
|  |      | ||
|  |     noteSizes.sort((a, b) => a.size > b.size ? -1 : 1); | ||
|  |      | ||
|  |     noteSizes = noteSizes.splice(0, 100); | ||
|  |      | ||
|  |     return noteSizes; | ||
|  | }); | ||
|  | 
 | ||
|  | const $statsTable = api.$container.find('.stats-table'); | ||
|  | 
 | ||
|  | for (const note of notes) {      | ||
|  |     $statsTable.append( | ||
|  |         $("<tr>") | ||
|  |             .append( | ||
|  |                 $("<td>").append(await api.createNoteLink(note.noteId, {showNotePath: true})) | ||
|  |             )  | ||
|  |             .append( | ||
|  |                 $("<td nowrap>").text(note.size + " bytes") | ||
|  |             ) | ||
|  |     ); | ||
|  | } |