mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	Feature - Add upload functionality on Web (#231)
* Added file selector * Extract metadata to upload files to the web * Added request for uploading * Generate jpeg/Webp thumbnail for asset uploaded without thumbnail data * Added generating thumbnail for video and WebSocket broadcast after thumbnail is generated * Added video length extraction * Added Uploading Panel * Added upload progress store and styling the uploaded asset * Added condition to only show upload panel when there is upload in progress * Remove asset from the upload list after successfully uploading * Added WebSocket to listen to upload event on the web * Added mechanism to check for existing assets before uploading on the web * Added test workflow * Update readme
This commit is contained in:
		| @@ -12,6 +12,8 @@ import { Logger } from '@nestjs/common'; | ||||
| import axios from 'axios'; | ||||
| import { SmartInfoEntity } from '@app/database/entities/smart-info.entity'; | ||||
| import { ConfigService } from '@nestjs/config'; | ||||
| import ffmpeg from 'fluent-ffmpeg'; | ||||
| // import moment from 'moment'; | ||||
|  | ||||
| @Processor('metadata-extraction-queue') | ||||
| export class MetadataExtractionProcessor { | ||||
| @@ -129,4 +131,27 @@ export class MetadataExtractionProcessor { | ||||
|       Logger.error(`Failed to trigger object detection pipe line ${error.toString()}`); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   @Process({ name: 'extract-video-length', concurrency: 2 }) | ||||
|   async extractVideoLength(job: Job) { | ||||
|     const { asset }: { asset: AssetEntity } = job.data; | ||||
|  | ||||
|     ffmpeg.ffprobe(asset.originalPath, async (err, data) => { | ||||
|       if (!err) { | ||||
|         if (data.format.duration) { | ||||
|           const videoDurationInSecond = parseInt(data.format.duration.toString(), 0); | ||||
|  | ||||
|           const hours = Math.floor(videoDurationInSecond / 3600); | ||||
|           const minutes = Math.floor((videoDurationInSecond - hours * 3600) / 60); | ||||
|           const seconds = videoDurationInSecond - hours * 3600 - minutes * 60; | ||||
|  | ||||
|           const durationString = `${hours}:${minutes < 10 ? '0' + minutes.toString() : minutes}:${ | ||||
|             seconds < 10 ? '0' + seconds.toString() : seconds | ||||
|           }.000000`; | ||||
|  | ||||
|           await this.assetRepository.update({ id: asset.id }, { duration: durationString }); | ||||
|         } | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user