From 5e6a557a44aef4046f665ad2c6dbac82ed161293 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Thu, 30 Dec 2021 19:57:29 +0300 Subject: [PATCH] Request based on filename --- .env.example | 5 ++++- README.md | 4 ++++ src/index.ts | 7 +++++-- src/interfaces.ts | 2 ++ src/streamMovies.ts | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 README.md diff --git a/.env.example b/.env.example index 9dd819e..ce1db90 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,5 @@ PORT=3000 -KEY=w2geth \ No newline at end of file +MOVIES_PORT=3001 +DB=mongodb://localhost:27017/w2g +FILES=./files +TEMP_FILES=./temp diff --git a/README.md b/README.md new file mode 100644 index 0000000..31cfd72 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# W2G API + +API for [watch2gether](https://github.com/anatolykopyl/watch2gether-front). +Also contains movie streaming server. diff --git a/src/index.ts b/src/index.ts index 6de4370..f28bb78 100644 --- a/src/index.ts +++ b/src/index.ts @@ -35,8 +35,11 @@ router.post('/room', async (ctx) => { const doc = new RoomModel(room); torrent.on('done', function () { - findInDir(torrent.path, /\.mp4$/, (filename: string) => { - mv(`./${filename}`, `${process.env.FILES}/${room.id}.mp4`, () => { + const extensionsRegEx = /(\.mp4|\.mkv)$/; + findInDir(torrent.path, extensionsRegEx, (filename: string) => { + const extension = filename.split('.').pop(); + mv(`./${filename}`, `${process.env.FILES}/${room.id}.${extension}`, () => { + doc.filename = room.id + '.' + extension; doc.downloaded = true; doc.downloadedAt = new Date(); doc.save(); diff --git a/src/interfaces.ts b/src/interfaces.ts index 936ecb1..e49cbc4 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -5,6 +5,7 @@ export interface Room { magnet: string; createdAt: Date; movie?: string; + filename?: string; downloaded?: boolean; downloadedAt?: Date; position: number; @@ -15,6 +16,7 @@ export const roomSchema = new Schema({ magnet: { type: String, required: true }, createdAt: { type: Date, required: true }, movie: { type: String, required: false }, + filename: { type: String, required: false }, downloaded: { type: Boolean, required: false }, downloadedAt: { type: Date, required: false }, position: { type: Number, required: true }, diff --git a/src/streamMovies.ts b/src/streamMovies.ts index 0e6644d..954e0c0 100644 --- a/src/streamMovies.ts +++ b/src/streamMovies.ts @@ -19,7 +19,7 @@ router.get('/', async (ctx) => { ({ status: ctx.status, body: ctx.body } = errorResponse('stream-01', 'Requires range header')); } - const videoPath = './files/' + ctx.request.query.id + '.mp4'; + const videoPath = './files/' + ctx.request.query.filename; const videoSize = fs.statSync(videoPath).size; // Parse Range