From 5dadd98f00e14bbf90baf18b642bf1ea5feea876 Mon Sep 17 00:00:00 2001 From: Viren070 Date: Thu, 25 Sep 2025 22:12:49 +0100 Subject: [PATCH] feat(formatters): add prism predefined format --- packages/core/src/formatters/index.ts | 3 +++ packages/core/src/formatters/predefined.ts | 21 +++++++++++++++++++++ packages/core/src/utils/constants.ts | 7 +++++++ 3 files changed, 31 insertions(+) diff --git a/packages/core/src/formatters/index.ts b/packages/core/src/formatters/index.ts index 91d5f6f3..42c4af75 100644 --- a/packages/core/src/formatters/index.ts +++ b/packages/core/src/formatters/index.ts @@ -10,6 +10,7 @@ import { GDriveFormatter, LightGDriveFormatter, MinimalisticGdriveFormatter, + PrismFormatter, } from './predefined.js'; import { CustomFormatter } from './custom.js'; import { UserData } from '../db/schemas.js'; @@ -26,6 +27,8 @@ export function createFormatter(userData: UserData): BaseFormatter { return new LightGDriveFormatter(userData); case 'minimalisticgdrive': return new MinimalisticGdriveFormatter(userData); + case 'prism': + return new PrismFormatter(userData); case 'custom': if (!userData.formatter.definition) { throw new Error('Definition is required for custom formatter'); diff --git a/packages/core/src/formatters/predefined.ts b/packages/core/src/formatters/predefined.ts index 6ee8fb0c..5a813198 100644 --- a/packages/core/src/formatters/predefined.ts +++ b/packages/core/src/formatters/predefined.ts @@ -85,6 +85,27 @@ export class LightGDriveFormatter extends BaseFormatter { } } +export class PrismFormatter extends BaseFormatter { + constructor(userData: UserData) { + super( + { + name: ` +{stream.resolution::exists["{stream.resolution::replace('2160p', 'πŸ”₯4K UHD')::replace('1440p','✨ QHD')::replace('1080p','πŸš€ FHD')::replace('720p','πŸ’Ώ HD')::replace('576p','πŸ’© Low Quality')::replace('480p','πŸ’© Low Quality')::replace('360p','πŸ’© Low Quality')::replace('240p','πŸ’© Low Quality')::replace('144p','πŸ’© Low Quality')}"||""]} +`, + description: ` +{stream.title::exists["🎬 {stream.title::title} "||""]}{stream.year::exists["({stream.year}) "||""]}{stream.season::>=0["πŸ‚ S"||""]}{stream.season::<=9["0"||""]}{stream.season::>0["{stream.season} "||""]}{stream.episode::>=0["🎞️ E"||""]}{stream.episode::<=9["0"||""]}{stream.episode::>0["{stream.episode} "||""]}{stream.regexMatched::exists["🎚️ {stream.regexMatched} "||""]} +{stream.quality::exists["πŸŽ₯ {stream.quality} "||""]}{stream.visualTags::exists["πŸ“Ί {stream.visualTags::join(' | ')} "||""]}{stream.encode::exists["🎞️ {stream.encode} "||""]}{stream.duration::>0["⏱️ {stream.duration::time} "||""]} +{stream.audioTags::exists["🎧 {stream.audioTags::join(' | ')} "||""]}{stream.audioChannels::exists["πŸ”Š {stream.audioChannels::join(' | ')} "||""]}{stream.languages::exists["πŸ—£οΈ {stream.languageEmojis::join(' / ')}"||""]} +{stream.size::>0["πŸ“¦ {stream.size::bytes} "||""]}{stream.folderSize::>0["/ πŸ“¦ {stream.folderSize::bytes} "||""]}{service.cached::isfalse::or::stream.type::=p2p::and::stream.seeders::>0["🌱 {stream.seeders} "||""]}{stream.type::=usenet::and::stream.age::exists["πŸ“… {stream.age} "||""]}{stream.releaseGroup::exists["🏷️ {stream.releaseGroup} "||""]}{stream.indexer::exists["πŸ“‘ {stream.indexer} "||""]} +{service.cached::istrue["⚑Ready "||""]}{service.cached::isfalse["❌ Not Ready "||""]}{service.id::exists["({service.shortName}) "||""]}{stream.library::istrue["πŸ“Œ Library "||""]}{stream.type::=Usenet["πŸ“° Usenet "||""]}{stream.type::=p2p["⚠️ P2P "||""]}{stream.type::=http["πŸ’» Web Link "||""]}{stream.type::=youtube["▢️ Youtube "||""]}{stream.type::=live["πŸ“Ί Live "||""]}{stream.proxied::istrue["πŸ”’ Proxied "||"πŸ”“ Not Proxied "]}πŸ”{addon.name} +{stream.message::exists["ℹ️ {stream.message}"||""]} +`, + }, + userData + ); + } +} + export class MinimalisticGdriveFormatter extends BaseFormatter { constructor(userData: UserData) { super( diff --git a/packages/core/src/utils/constants.ts b/packages/core/src/utils/constants.ts index c0fab66e..47abb90a 100644 --- a/packages/core/src/utils/constants.ts +++ b/packages/core/src/utils/constants.ts @@ -125,6 +125,7 @@ export const LIGHT_GDRIVE_FORMATTER = 'lightgdrive'; export const MINIMALISTIC_GDRIVE_FORMATTER = 'minimalisticgdrive'; export const TORRENTIO_FORMATTER = 'torrentio'; export const TORBOX_FORMATTER = 'torbox'; +export const PRISM_FORMATTER = 'prism'; export const CUSTOM_FORMATTER = 'custom'; export const FORMATTERS = [ @@ -133,6 +134,7 @@ export const FORMATTERS = [ MINIMALISTIC_GDRIVE_FORMATTER, TORRENTIO_FORMATTER, TORBOX_FORMATTER, + PRISM_FORMATTER, CUSTOM_FORMATTER, ] as const; @@ -154,6 +156,11 @@ export const FORMATTER_DETAILS: Record = { description: 'A lighter version of the GDrive formatter, focused on asthetics', }, + [PRISM_FORMATTER]: { + id: PRISM_FORMATTER, + name: 'Prism', + description: 'An aesthetic formatter with every detail within 5 lines.', + }, [MINIMALISTIC_GDRIVE_FORMATTER]: { id: MINIMALISTIC_GDRIVE_FORMATTER, name: 'Minimalistic Google Drive',