Skip to content

Commit

Permalink
feat: visual update on stream description (#40)
Browse files Browse the repository at this point in the history
Co-authored-by: hewdrey <szekeresmate36@gmail.com>
  • Loading branch information
hewdrey and hewdrey authored Feb 21, 2025
1 parent 3051584 commit 6e19fee
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 12 deletions.
3 changes: 3 additions & 0 deletions server/src/controllers/stream.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,16 @@ export class StreamController {
user,
});

const { preferredLanguage } = user;

const streams = orderedTorrents.map((torrent, i) =>
this.streamService.convertTorrentToStream({
torrent,
isRecommended: i === 0,
deviceToken,
season,
episode,
preferredLanguage,
}),
);

Expand Down
58 changes: 47 additions & 11 deletions server/src/services/stream/stream.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { formatBytes } from '@/utils/bytes';
import { ConfigService } from '../config';
import { UserService } from '../user';
import { User } from '@/types/user';
import { Language } from '@/db/schema/users';

export class StreamService {
constructor(
Expand All @@ -20,12 +21,14 @@ export class StreamService {
deviceToken,
season,
episode,
preferredLanguage,
}: {
torrent: TorrentDetails;
isRecommended: boolean;
deviceToken: string;
season: number | undefined;
episode: number | undefined;
preferredLanguage: Language;
}): Stream {
const config = this.configService.getConfig();
const torrentFileIndex = torrent.getMediaFileIndex({ season, episode });
Expand All @@ -35,10 +38,15 @@ export class StreamService {
const infoHash = encodeURIComponent(torrent.infoHash);
const fileIndex = encodeURIComponent(torrentFileIndex);

const description = this.getStreamDescription(torrent, isRecommended, {
season,
episode,
});
const description = this.getStreamDescription(
torrent,
isRecommended,
{
season,
episode,
},
preferredLanguage,
);
return {
url: `${config.addonUrl}/api/auth/${deviceToken}/stream/play/${sourceName}/${sourceId}/${infoHash}/${fileIndex}`,
description,
Expand All @@ -53,21 +61,49 @@ export class StreamService {
torrent: TorrentDetails,
isRecommended: boolean,
{ season, episode }: { season: number | undefined; episode: number | undefined },
preferredLanguage: Language,
): string {
const languageEmoji = languageEmojiMap[torrent.getLanguage()];
const fileIndex = torrent.getMediaFileIndex({ season, episode });
const file = torrent.files[fileIndex] as TorrentFileDetails;
const fileSizeString = formatBytes(file.length);

const mediaType = season && episode ? 'show' : 'movie';
const isShow = season && episode;
let mediaType = '';
switch (preferredLanguage) {
case Language.HU:
mediaType = isShow ? 'sorozat' : 'film';
break;
default:
mediaType = isShow ? 'show' : 'movie';
}

let recommendedLine = '';
if (isRecommended && !torrent.isSpeculated) {
switch (preferredLanguage) {
case Language.HU:
recommendedLine = '⭐️ Ajánlott\n';
break;
default:
recommendedLine = '⭐️ Recommended\n';
}
}

let warningLine = '';
if (torrent.isSpeculated) {
switch (preferredLanguage) {
case Language.HU:
warningLine = `⚠️ Bizonytalan forrás ⚠️\nEz lehet egy másik ${mediaType}!\n`;
break;
default:
warningLine = `⚠️ Speculated source ⚠️\nThis might be a different ${mediaType}!\n`;
}
}

const recommendedLine =
isRecommended && !torrent.isSpeculated ? '⭐️ Recommended\n' : '';
const warningLine = torrent.isSpeculated
? `⚠️ <strong>Speculated</strong> ⚠️\nThis might be a different ${mediaType}!\n`
: '';
const typeLine = `${languageEmoji} | ${torrent.displayResolution(torrent.getResolution(file.name))} | ${fileSizeString}\n`;
return warningLine + recommendedLine + typeLine + torrent.getName();
const title = isShow ? `${file.name}\n` : `${torrent.getName()}\n`;
const seeders = `⬆️ ${torrent.getSeeders()}\n`;
return warningLine + recommendedLine + typeLine + title + seeders;
}

public async orderTorrents({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export class NcoreTorrentDetails extends TorrentDetails {

private category: TorrentCategory;
private release_name: string;
private seeders: number;

constructor(ncoreTorrent: NcoreTorrent, parsedDetails: ParsedTorrentDetails) {
super();
Expand All @@ -39,6 +40,7 @@ export class NcoreTorrentDetails extends TorrentDetails {
: Resolution.R720P;
this.category = ncoreTorrent.category;
this.release_name = ncoreTorrent.release_name;
this.seeders = ncoreTorrent.seeders;
}

public displayResolution(resolution: Resolution): string {
Expand All @@ -53,6 +55,10 @@ export class NcoreTorrentDetails extends TorrentDetails {
return HUNGARIAN_CATEGORIES.includes(this.category) ? Language.HU : Language.EN;
}

public getSeeders(): number {
return this.seeders;
}

private getNcoreResolutionByCategory = (category: TorrentCategory): NcoreResolution => {
switch (category) {
case MovieCategory.SD_HUN:
Expand Down
2 changes: 1 addition & 1 deletion server/src/services/torrent-source/ncore/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export type NcoreTorrent = {
size: `${number}`;
type: 'movie' | 'show';
leechers: `${number}`;
seeders: `${number}`;
seeders: number;
};

export type NcorePageResponseJson = {
Expand Down
1 change: 1 addition & 0 deletions server/src/services/torrent-source/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export abstract class TorrentDetails implements ParsedTorrentDetails {
*/
abstract displayResolution(resolution: Resolution): string;
abstract getLanguage(): Language;
abstract getSeeders(): number;
/**
* Returns the name of the torrent. Usually the release name of the torrent.
*/
Expand Down

0 comments on commit 6e19fee

Please sign in to comment.