Skip to content

Commit

Permalink
Synchronous modification t3 module
Browse files Browse the repository at this point in the history
  • Loading branch information
Hiram committed Apr 27, 2024
1 parent d30943f commit 130d7d2
Showing 1 changed file with 80 additions and 72 deletions.
152 changes: 80 additions & 72 deletions src/renderer/src/utils/drpy/drpy3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ const pre = () => {
let rule = {};
// @ts-ignore
let vercode = typeof pdfl === 'function' ? 'drpy3.1' : 'drpy3';
const VERSION = `${vercode} 3.9.50beta1 202400426`;
const VERSION = `${vercode} 3.9.50beta2 202400427`;
/** 已知问题记录
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
Expand Down Expand Up @@ -781,77 +781,85 @@ const fixAdM3u8 = (m3u8_text: string, m3u8_url: string, ad_remove: string) => {
const fixAdM3u8Ai = (m3u8_url: string) => {
let ts = new Date().getTime();

const b = (s1, s2) => {
let i = 0;
while (i < s1.length) {
if (s1[i] !== s2[i]) {
break
}
i++
}
return i;
}

const reverseString = (str: string | undefined) => {
return str!.split('').reverse().join('');
}

//log('播放的地址:' + m3u8_url);
let m3u8 = request(m3u8_url);
//log('m3u8处理前:' + m3u8);
m3u8 = m3u8.trim().split('\n').map(it => it.startsWith('#') ? it : urljoin(m3u8_url, it)).join('\n');
//log('m3u8处理后:============:' + m3u8);
// 获取嵌套m3u8地址
let last_url = m3u8.split('\n').slice(-1)[0];
if (last_url.includes('.m3u8') && last_url !== m3u8_url) {
m3u8_url = last_url;
//log('嵌套的m3u8_url:' + m3u8_url);
m3u8 = request(m3u8_url);
};
//log('----处理有广告的地址----');
let s = m3u8.trim().split('\n').filter(it => it.trim()).join('\n');
let ss = s.split('\n');
//找出第一条播放地址
let firststr = ss.find(x => !x.startsWith('#'));
let maxl = 0;//最大相同字符
let firststrlen = firststr!.length;
//log('字符串长度:' + firststrlen);
let ml = Math.round(ss.length / 2).toString().length;//取数据的长度的位数
//log('数据条数的长度:' + ml);
//找出最后一条播放地址
let laststr = ss.toReversed().find((x) => {
if (!x.startsWith('#')) {
let k = b(reverseString(firststr), reverseString(x));
maxl = b(firststr, x);
if (firststrlen - maxl <= ml + k) {
return true;
};
};
return false;
});
log(`[t3][fixAdM3u8Ai]最后一条切片:${laststr}`);
//log('最小相同字符长度:' + maxl);
let ad_urls: string[] = [];
for (let i = 0; i < ss.length; i++) {
let s = ss[i];
if (!s.startsWith('#')) {
if (b(firststr, s) < maxl) {
ad_urls.push(s); // 广告地址加入列表
ss.splice(i - 1, 2);
i = i - 2;
} else {
ss[i] = urljoin(m3u8_url, s);
};
} else {
ss[i] = s.replace(/URI=\"(.*)\"/, 'URI=\"' + urljoin(m3u8_url, '$1') + '\"');
};
};
log(`[t3][fixAdM3u8Ai]处理的m3u8地址:${m3u8_url}`);
log(`[t3][fixAdM3u8Ai]广告地址:${ad_urls}`);
m3u8 = ss.join('\n');
//log('处理完成');
log(`[t3][fixAdM3u8Ai]处理耗时:${(new Date().getTime() - ts).toString()}`);
return m3u8;
function b(s1, s2) {
let i = 0;
while (i < s1.length) {
if (s1[i] !== s2[i]) {
break
}
i++
}
return i;
}

function reverseString(str) {
return str.split('').reverse().join('');
}

//log('播放的地址:' + m3u8_url);
let m3u8 = request(m3u8_url);
//log('m3u8处理前:' + m3u8);
m3u8 = m3u8.trim().split('\n').map(it => it.startsWith('#') ? it : urljoin(m3u8_url, it)).join('\n');
//log('m3u8处理后:============:' + m3u8);
// 获取嵌套m3u8地址
m3u8=m3u8.replace(/\n\n/ig,'\n');//删除多余的换行符
let last_url= m3u8.split('\n').slice(-1)[0];
if (last_url.length<5){
last_url= m3u8.split('\n').slice(-2)[0];
}

if (last_url.includes('.m3u8') && last_url !== m3u8_url) {
m3u8_url = urljoin2(m3u8_url,last_url);
log('嵌套的m3u8_url:' + m3u8_url);
m3u8 = request(m3u8_url);
}
//log('----处理有广告的地址----');
let s = m3u8.trim().split('\n').filter(it => it.trim()).join('\n');
let ss = s.split('\n')
//找出第一条播放地址
let firststr = ss.find(x => !x.startsWith('#'));
let maxl = 0;//最大相同字符
let firststrlen = firststr!.length;
//log('字符串长度:' + firststrlen);
let ml = Math.round(ss.length / 2).toString().length;//取数据的长度的位数
//log('数据条数的长度:' + ml);
//找出最后一条播放地址
let maxc=0;
let laststr = ss.toReversed().find((x) => {
if (!x.startsWith('#')) {
let k = b(reverseString(firststr), reverseString(x));
maxl = b(firststr, x);
maxc++;
if (firststrlen - maxl <= ml + k || maxc>10) {
return true
}
}
return false
});
log('最后一条切片:' + laststr);
//log('最小相同字符长度:' + maxl);
let ad_urls: string[] = [];
for (let i = 0; i < ss.length; i++) {
let s = ss[i];
if (!s.startsWith('#')) {
if (b(firststr, s) < maxl) {
ad_urls.push(s); // 广告地址加入列表
ss.splice(i - 1, 2);
i = i - 2;
} else {
ss[i] = urljoin(m3u8_url, s);
}
} else {
ss[i] = s.replace(/URI=\"(.*)\"/, 'URI=\"' + urljoin(m3u8_url, '$1') + '\"');
}
}
log('处理的m3u8地址:' + m3u8_url);
log('----广告地址----');
log(ad_urls);
m3u8 = ss.join('\n');
//log('处理完成');
log('处理耗时:' + (new Date().getTime() - ts).toString());
return m3u8;
};

/**
Expand Down

0 comments on commit 130d7d2

Please sign in to comment.