mirror of
https://github.com/KuekHaoYang/KVideo.git
synced 2026-08-22 04:03:42 +08:00
feat: add premium password protection and enhance search functionality
- Implemented a separate password for premium content access via `PREMIUM_PASSWORD` environment variable. - Added a `PremiumPasswordGate` component to manage access to premium content. - Enhanced search functionality to support Traditional Chinese to Simplified Chinese conversion for broader search compatibility. - Introduced automatic video quality labels in search results for better user experience. - Added support for IPTV sources configuration through environment variables. - Enabled merging of sources in search results based on environment variable settings. - Updated volume control logic to handle mute state more effectively in video playback. - Improved README documentation to reflect new features and configurations.
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* Traditional Chinese to Simplified Chinese conversion table.
|
||||
* Contains common character mappings for search purposes.
|
||||
*/
|
||||
|
||||
const T2S_MAP: Record<string, string> = {
|
||||
'愛': '爱', '礙': '碍', '闇': '暗', '罷': '罢', '備': '备', '貝': '贝', '筆': '笔', '畢': '毕', '邊': '边',
|
||||
'變': '变', '標': '标', '錶': '表', '別': '别', '賓': '宾', '補': '补', '佈': '布', '參': '参', '殘': '残',
|
||||
'蠶': '蚕', '倉': '仓', '層': '层', '產': '产', '長': '长', '場': '场', '廠': '厂', '車': '车', '陳': '陈',
|
||||
'稱': '称', '誠': '诚', '遲': '迟', '衝': '冲', '醜': '丑', '處': '处', '觸': '触', '辭': '辞', '從': '从',
|
||||
'達': '达', '帶': '带', '當': '当', '黨': '党', '導': '导', '燈': '灯', '敵': '敌', '點': '点', '電': '电',
|
||||
'東': '东', '動': '动', '獨': '独', '對': '对', '噸': '吨', '奪': '夺', '發': '发', '範': '范', '飛': '飞',
|
||||
'費': '费', '奮': '奋', '豐': '丰', '風': '风', '鳳': '凤', '復': '复', '負': '负', '蓋': '盖', '幹': '干',
|
||||
'鋼': '钢', '個': '个', '給': '给', '鞏': '巩', '貢': '贡', '構': '构', '購': '购', '穀': '谷', '顧': '顾',
|
||||
'關': '关', '觀': '观', '廣': '广', '歸': '归', '龜': '龟', '國': '国', '過': '过', '華': '华', '畫': '画',
|
||||
'話': '话', '壞': '坏', '歡': '欢', '環': '环', '還': '还', '匯': '汇', '會': '会', '護': '护', '壺': '壶',
|
||||
'滬': '沪', '劃': '划', '懷': '怀', '換': '换', '黃': '黄', '繪': '绘',
|
||||
'惠': '惠', '獲': '获', '機': '机', '積': '积', '極': '极', '際': '际', '濟': '济', '計': '计', '記': '记',
|
||||
'繼': '继', '紀': '纪', '夾': '夹', '價': '价', '駕': '驾', '堅': '坚', '間': '间', '簡': '简',
|
||||
'見': '见', '劍': '剑', '漸': '渐', '將': '将', '獎': '奖', '講': '讲', '醬': '酱', '節': '节', '潔': '洁',
|
||||
'結': '结', '進': '进', '盡': '尽', '經': '经', '驚': '惊', '競': '竞', '舊': '旧', '據': '据', '劇': '剧',
|
||||
'軍': '军', '開': '开', '凱': '凯', '殼': '壳', '課': '课', '懇': '恳', '誇': '夸', '塊': '块', '寬': '宽',
|
||||
'況': '况', '礦': '矿', '虧': '亏', '來': '来', '賴': '赖', '藍': '蓝', '蘭': '兰', '攔': '拦', '覽': '览',
|
||||
'懶': '懒', '爛': '烂', '撈': '捞', '勞': '劳', '樂': '乐', '類': '类', '離': '离', '裡': '里', '禮': '礼',
|
||||
'歷': '历', '勵': '励', '聯': '联', '練': '练', '糧': '粮', '兩': '两', '遼': '辽', '療': '疗', '獵': '猎',
|
||||
'臨': '临', '鄰': '邻', '靈': '灵', '領': '领', '劉': '刘', '龍': '龙', '樓': '楼', '陸': '陆', '錄': '录',
|
||||
'慮': '虑', '輪': '轮', '論': '论', '羅': '罗', '駱': '骆', '馬': '马', '買': '买', '賣': '卖', '麥': '麦',
|
||||
'滿': '满', '貓': '猫', '貿': '贸', '門': '门', '們': '们', '夢': '梦', '滅': '灭', '廟': '庙',
|
||||
'難': '难', '腦': '脑', '鬧': '闹', '釀': '酿', '鳥': '鸟', '聶': '聂', '寧': '宁', '農': '农', '歐': '欧',
|
||||
'盤': '盘', '龐': '庞', '賠': '赔', '噴': '喷', '鵬': '鹏', '騙': '骗', '蘋': '苹', '評': '评', '鋪': '铺',
|
||||
'樸': '朴', '齊': '齐', '氣': '气', '遷': '迁', '錢': '钱', '潛': '潜', '淺': '浅', '搶': '抢', '親': '亲',
|
||||
'輕': '轻', '請': '请', '慶': '庆', '瓊': '琼', '區': '区', '權': '权', '勸': '劝', '確': '确', '讓': '让',
|
||||
'擾': '扰', '熱': '热', '認': '认', '榮': '荣', '軟': '软', '銳': '锐', '賽': '赛', '傘': '伞', '喪': '丧',
|
||||
'殺': '杀', '曬': '晒', '傷': '伤', '賞': '赏', '燒': '烧', '設': '设', '審': '审', '聲': '声', '勝': '胜',
|
||||
'師': '师', '實': '实', '時': '时', '識': '识', '適': '适', '勢': '势', '釋': '释', '壽': '寿', '書': '书',
|
||||
'術': '术', '樹': '树', '雙': '双', '誰': '谁', '順': '顺', '說': '说', '絲': '丝', '鬆': '松', '蘇': '苏',
|
||||
'隨': '随', '歲': '岁', '損': '损', '鎖': '锁', '態': '态', '談': '谈', '嘆': '叹', '湯': '汤', '條': '条',
|
||||
'鐵': '铁', '聽': '听', '統': '统', '圖': '图', '團': '团', '萬': '万', '網': '网', '衛': '卫', '穩': '稳',
|
||||
'問': '问', '無': '无', '務': '务', '霧': '雾', '習': '习', '戲': '戏', '細': '细', '蝦': '虾', '險': '险',
|
||||
'現': '现', '獻': '献', '鄉': '乡', '響': '响', '項': '项', '協': '协', '寫': '写', '興': '兴', '選': '选',
|
||||
'學': '学', '壓': '压', '鴨': '鸭', '鹽': '盐', '嚴': '严', '顏': '颜', '陽': '阳', '養': '养', '樣': '样',
|
||||
'搖': '摇', '葉': '叶', '業': '业', '醫': '医', '義': '义', '藝': '艺', '億': '亿', '議': '议', '陰': '阴',
|
||||
'應': '应', '營': '营', '優': '优', '郵': '邮', '與': '与', '語': '语', '預': '预', '員': '员', '園': '园',
|
||||
'遠': '远', '願': '愿', '閱': '阅', '運': '运', '雜': '杂', '災': '灾', '贊': '赞', '髒': '脏', '棗': '枣',
|
||||
'責': '责', '戰': '战', '張': '张', '趙': '赵', '鎮': '镇', '爭': '争', '鄭': '郑', '證': '证', '織': '织',
|
||||
'質': '质', '種': '种', '眾': '众', '鑄': '铸', '專': '专', '莊': '庄', '裝': '装', '準': '准', '資': '资',
|
||||
'總': '总', '組': '组', '鑽': '钻', '嘗': '尝', '遞': '递', '豬': '猪', '傳': '传', '雲': '云',
|
||||
'訂': '订', '檔': '档', '調': '调', '詞': '词', '釘': '钉', '鍛': '锻', '隊': '队', '噁': '恶', '額': '额',
|
||||
'複': '复', '鍋': '锅', '號': '号', '鷄': '鸡', '幾': '几', '驗': '验', '薑': '姜', '膠': '胶', '階': '阶',
|
||||
'腳': '脚', '較': '较', '僅': '仅', '緊': '紧', '決': '决', '絕': '绝', '覺': '觉', '擴': '扩', '闊': '阔',
|
||||
'蠟': '蜡', '麗': '丽', '鏈': '链', '憐': '怜', '嶺': '岭', '媽': '妈', '瑪': '玛', '罵': '骂', '邁': '迈',
|
||||
'麼': '么', '黴': '霉', '謎': '谜', '鳴': '鸣', '謀': '谋', '納': '纳', '惱': '恼', '擬': '拟', '紐': '纽',
|
||||
'濃': '浓', '瘧': '疟', '拋': '抛', '貧': '贫', '頻': '频', '憑': '凭', '籤': '签', '強': '强', '竊': '窃',
|
||||
'傾': '倾', '窮': '穷', '趨': '趋', '繞': '绕', '紉': '纫', '鏽': '锈',
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert Traditional Chinese characters to Simplified Chinese.
|
||||
* Characters not in the mapping are left unchanged.
|
||||
*/
|
||||
export function traditionalToSimplified(text: string): string {
|
||||
let result = '';
|
||||
for (const char of text) {
|
||||
result += T2S_MAP[char] || char;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if text contains any Traditional Chinese characters.
|
||||
*/
|
||||
export function hasTraditionalChinese(text: string): boolean {
|
||||
for (const char of text) {
|
||||
if (T2S_MAP[char]) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
+32
-1
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Parses a video title to extract quality tags (e.g., [HD], [TS])
|
||||
* Parses a video title to extract quality tags (e.g., [HD], [TS])
|
||||
* and return a cleaned title.
|
||||
*/
|
||||
export function parseVideoTitle(title: string): { cleanTitle: string, quality?: string } {
|
||||
@@ -25,3 +25,34 @@ export function parseVideoTitle(title: string): { cleanTitle: string, quality?:
|
||||
quality
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Quality keywords and their display labels, ordered by priority (highest first).
|
||||
*/
|
||||
const QUALITY_PATTERNS: { pattern: RegExp; label: string; color: string }[] = [
|
||||
{ pattern: /4k|2160p/i, label: '4K', color: 'bg-amber-500' },
|
||||
{ pattern: /蓝光|藍光|bluray|blu-ray/i, label: '蓝光', color: 'bg-blue-500' },
|
||||
{ pattern: /1080p|1080i|full\s*hd|fhd/i, label: '1080P', color: 'bg-green-500' },
|
||||
{ pattern: /超清|超高清/i, label: '超清', color: 'bg-green-500' },
|
||||
{ pattern: /720p|hd720/i, label: '720P', color: 'bg-teal-500' },
|
||||
{ pattern: /\bhd\b|高清/i, label: 'HD', color: 'bg-teal-500' },
|
||||
{ pattern: /抢先|枪版|ts版|ts\b|cam\b|hdts/i, label: 'TS', color: 'bg-orange-500' },
|
||||
{ pattern: /标清|sd\b/i, label: 'SD', color: 'bg-gray-500' },
|
||||
];
|
||||
|
||||
/**
|
||||
* Extracts quality label from video remarks or title.
|
||||
* Returns the quality label and its associated color class.
|
||||
*/
|
||||
export function extractQualityLabel(remarks?: string, quality?: string): { label: string; color: string } | null {
|
||||
const text = `${remarks || ''} ${quality || ''}`;
|
||||
if (!text.trim()) return null;
|
||||
|
||||
for (const { pattern, label, color } of QUALITY_PATTERNS) {
|
||||
if (pattern.test(text)) {
|
||||
return { label, color };
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user