mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	wip
This commit is contained in:
		
							parent
							
								
									1c7a194950
								
							
						
					
					
						commit
						6183262037
					
				
					 7 changed files with 23 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -16,7 +16,7 @@
 | 
			
		|||
		<p>%i18n:@banner%</p>
 | 
			
		||||
	</div>
 | 
			
		||||
	<div class="thumbnail" ref="thumbnail" :style="`background-color: ${ background }`">
 | 
			
		||||
		<img :src="file.url" alt="" @load="onThumbnailLoaded"/>
 | 
			
		||||
		<img :src="file.thumbnailUrl" alt="" @load="onThumbnailLoaded"/>
 | 
			
		||||
	</div>
 | 
			
		||||
	<p class="name">
 | 
			
		||||
		<span>{{ file.name.lastIndexOf('.') != -1 ? file.name.substr(0, file.name.lastIndexOf('.')) : file.name }}</span>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ export default Vue.extend({
 | 
			
		|||
		style(): any {
 | 
			
		||||
			return {
 | 
			
		||||
				'background-color': this.image.properties.avgColor && this.image.properties.avgColor.length == 3 ? `rgb(${this.image.properties.avgColor.join(',')})` : 'transparent',
 | 
			
		||||
				'background-image': this.raw ? `url(${this.image.url})` : `url(${this.image.url})`
 | 
			
		||||
				'background-image': this.raw ? `url(${this.image.url})` : `url(${this.image.thumbnailUrl})`
 | 
			
		||||
			};
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@ export default Vue.extend({
 | 
			
		|||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
		style(): any {
 | 
			
		||||
			let url = `url(${this.image.url})`;
 | 
			
		||||
			let url = `url(${this.image.thumbnailUrl})`;
 | 
			
		||||
 | 
			
		||||
			if (this.$store.state.device.loadRemoteMedia || this.$store.state.device.lightmode) {
 | 
			
		||||
				url = null;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,6 +31,7 @@ export type IMetadata = {
 | 
			
		|||
	comment: string;
 | 
			
		||||
	uri?: string;
 | 
			
		||||
	url?: string;
 | 
			
		||||
	thumbnailUrl?: string;
 | 
			
		||||
	src?: string;
 | 
			
		||||
	deletedAt?: Date;
 | 
			
		||||
	withoutChunks?: boolean;
 | 
			
		||||
| 
						 | 
				
			
			@ -164,6 +165,7 @@ export const pack = (
 | 
			
		|||
	_target = Object.assign(_target, _file.metadata);
 | 
			
		||||
 | 
			
		||||
	_target.url = _file.metadata.url ? _file.metadata.url : `${config.drive_url}/${_target.id}/${encodeURIComponent(_target.name)}`;
 | 
			
		||||
	_target.thumbnailUrl = _file.metadata.thumbnailUrl ? _file.metadata.thumbnailUrl : `${config.drive_url}/${_target.id}/${encodeURIComponent(_target.name)}?thumbnail`;
 | 
			
		||||
	_target.isRemote = _file.metadata.isRemote;
 | 
			
		||||
 | 
			
		||||
	if (_target.properties == null) _target.properties = {};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,3 @@
 | 
			
		|||
import * as fs from 'fs';
 | 
			
		||||
 | 
			
		||||
import * as Koa from 'koa';
 | 
			
		||||
import * as send from 'koa-send';
 | 
			
		||||
import * as mongodb from 'mongodb';
 | 
			
		||||
| 
						 | 
				
			
			@ -51,16 +49,10 @@ export default async function(ctx: Koa.Context) {
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	if ('thumbnail' in ctx.query) {
 | 
			
		||||
		// 画像以外
 | 
			
		||||
		if (!file.contentType.startsWith('image/')) {
 | 
			
		||||
			const readable = fs.createReadStream(`${__dirname}/assets/thumbnail-not-available.png`);
 | 
			
		||||
			ctx.set('Content-Type', 'image/png');
 | 
			
		||||
			ctx.body = readable;
 | 
			
		||||
		} else if (file.contentType == 'image/gif') {
 | 
			
		||||
			// GIF
 | 
			
		||||
			await sendRaw();
 | 
			
		||||
		} else {
 | 
			
		||||
			const thumb = await DriveFileThumbnail.findOne({ 'metadata.originalId': fileId });
 | 
			
		||||
		const thumb = await DriveFileThumbnail.findOne({
 | 
			
		||||
			'metadata.originalId': fileId
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		if (thumb != null) {
 | 
			
		||||
			ctx.set('Content-Type', 'image/jpeg');
 | 
			
		||||
			const bucket = await getDriveFileThumbnailBucket();
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +60,6 @@ export default async function(ctx: Koa.Context) {
 | 
			
		|||
		} else {
 | 
			
		||||
			await sendRaw();
 | 
			
		||||
		}
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		if ('download' in ctx.query) {
 | 
			
		||||
			ctx.set('Content-Disposition', 'attachment');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
import { Buffer } from 'buffer';
 | 
			
		||||
import * as fs from 'fs';
 | 
			
		||||
import * as stream from 'stream';
 | 
			
		||||
 | 
			
		||||
import * as mongodb from 'mongodb';
 | 
			
		||||
import * as crypto from 'crypto';
 | 
			
		||||
| 
						 | 
				
			
			@ -26,9 +25,9 @@ async function save(path: string, name: string, type: string, hash: string, size
 | 
			
		|||
 | 
			
		||||
	if (['image/jpeg', 'image/png', 'image/webp'].includes(type)) {
 | 
			
		||||
		thumbnail = await sharp(path)
 | 
			
		||||
			.resize(500)
 | 
			
		||||
			.resize(300)
 | 
			
		||||
			.jpeg({
 | 
			
		||||
				quality: 70,
 | 
			
		||||
				quality: 50,
 | 
			
		||||
				progressive: true
 | 
			
		||||
			})
 | 
			
		||||
			.toBuffer();
 | 
			
		||||
| 
						 | 
				
			
			@ -104,8 +103,7 @@ async function save(path: string, name: string, type: string, hash: string, size
 | 
			
		|||
 | 
			
		||||
				writeStream.once('finish', resolve);
 | 
			
		||||
				writeStream.on('error', reject);
 | 
			
		||||
 | 
			
		||||
				fs.createReadStream(path).pipe(writeStream);
 | 
			
		||||
				writeStream.end(thumbnail);
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,8 +6,14 @@ import config from '../../config';
 | 
			
		|||
export default async function(file: IDriveFile, isExpired = false) {
 | 
			
		||||
	if (file.metadata.storage == 'minio') {
 | 
			
		||||
		const minio = new Minio.Client(config.drive.config);
 | 
			
		||||
 | 
			
		||||
		const obj = `${config.drive.prefix}/${file.metadata.storageProps.id}`;
 | 
			
		||||
		await minio.removeObject(config.drive.bucket, obj);
 | 
			
		||||
 | 
			
		||||
		if (file.metadata.thumbnailUrl) {
 | 
			
		||||
			const thumbnailObj = `${config.drive.prefix}/${file.metadata.storageProps.id}-thumbnail`;
 | 
			
		||||
			await minio.removeObject(config.drive.bucket, thumbnailObj);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// チャンクをすべて削除
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue