11// ==UserScript==
22// @name 115转存助手ui优化版
33// @name :zh 115转存助手ui优化版
4- // @description 2022.08.16 更新,115转存助手ui优化版 v3.7 (143.2022.0816.1 )(based on Fake115Upload 1.4.3 @T3rry)
4+ // @description 2022.08.18 更新,115转存助手ui优化版 v3.8.1 (143.2022.0818.2 )(based on Fake115Upload 1.4.3 @T3rry)
55// @author Never4Ever
66// @namespace Fake115Upload@Never 4Ever
7- // @version 143.2022.0816.1
7+ // @version 143.2022.0818.2
88// @match https://115.com/*
99// @exclude https://115.com/s/*
1010
@@ -1782,11 +1782,58 @@ function waitForKeyElements(
17821782( function ( ) {
17831783 'use strict' ;
17841784
1785+ //types to change
1786+ //类型匹配:
1787+ //'c':['a','b'] 代表file.a, file.b中变成file.a.c, file.b.c
1788+ const FileTypes = {
1789+ 'tiff' :[ 'jpg' , 'jpeg' , 'png' , 'gif' , 'bmp' , 'webp' , 'tiff' , 'tif' , 'ico' , 'svg' , 'svgz' , 'raw' , 'cr2' , 'crw' , 'dcr' , 'dng' , 'erf' , 'fff' , 'gpr' , 'iiq' , 'k25' , 'kdc' , 'mdc' , 'mef' , 'mos' , 'mrw' , 'nef' , 'nrw' , 'orf' , 'pef' , 'ptx' , 'pxn' , 'r3d' , 'raf' , 'raw' , 'rw2' , 'rwl' , 'rwz' , 'sr2' , 'srf' , 'srw' , 'x3f' , 'xbm' , 'xif' , 'xpm' , 'xwd' ] ,
1790+ 'iso' :[ 'mp4' , 'webm' , 'ogg' , 'ogv' , 'avi' , 'mov' , 'wmv' , 'flv' , 'mkv' , 'mpeg' , 'mpg' , 'm4v' , '3gp' , '3g2' , 'ts' , 'm2v' , 'm2ts' , 'rmvb' ] ,
1791+ 'txt' :[ 'txt' ]
1792+ }
1793+
1794+
1795+ function changeType ( originType ) {
1796+ let extension = originType . toLowerCase ( ) ;
1797+ let changedType = '' ;
1798+ for ( let type in FileTypes ) {
1799+ if ( FileTypes [ type ] . includes ( extension ) ) {
1800+ changedType = type ;
1801+ break ;
1802+ }
1803+ }
1804+ //if(changedType==''){
1805+ // changedType=`${originType}`;
1806+ //}
1807+
1808+ return changedType ;
1809+ }
1810+
1811+ function changeNameBack ( fileName ) {
1812+ let name = fileName . toLowerCase ( ) ;
1813+ let originName = fileName ;
1814+ console . log ( `Name: ${ fileName } ` )
1815+ for ( let type in FileTypes ) {
1816+ for ( let ext of FileTypes [ type ] ) {
1817+ if ( name . endsWith ( `.${ ext } .${ type } ` ) ) {
1818+ console . log ( `addedType:${ type } ` )
1819+ console . log ( type . length )
1820+ originName = originName . slice ( 0 , - ( type . length + 1 ) ) ;
1821+ console . log ( `originName: ${ originName } ` )
1822+ return originName ;
1823+ }
1824+ }
1825+ }
1826+ console . log ( `originName: ${ originName } ` )
1827+ return originName ;
1828+ }
1829+
1830+
1831+
17851832 //版本信息
17861833 const TIPS = {
1787- CurrentVersion : "143.2022.0816.1 " ,
1788- LastUpdateDate : "2022.08.16 " ,
1789- VersionTips : "115转存助手ui优化版 v3.7 " ,
1834+ CurrentVersion : "143.2022.0818.2 " ,
1835+ LastUpdateDate : "2022.08.18 " ,
1836+ VersionTips : "115转存助手ui优化版 v3.8.1 " ,
17901837 UpdateUrl : "https://github.com/Nerver4Ever/SevenSha1UIAdvancedHelper" ,
17911838 Sha1FileInputDetails : "" ,
17921839 } ;
@@ -1963,12 +2010,12 @@ function waitForKeyElements(
19632010 type : 'checkbox' ,
19642011 default : true ,
19652012 } ,
1966- advancedRename : {
1967- label : '在目录的悬浮工具条处显示“遍历文件夹”选项' ,
1968- labelPos : 'right' ,
1969- type : 'checkbox' ,
1970- default : false ,
1971- } ,
2013+ // advancedRename: {
2014+ // label: '在目录的悬浮工具条处显示“遍历文件夹”选项',
2015+ // labelPos: 'right',
2016+ // type: 'checkbox',
2017+ // default: false,
2018+ // },
19722019 autoUseSeparator : {
19732020 label : '自动给文件名添加分隔符进行上传,以防文件名违规' ,
19742021 labelPos : 'right' ,
@@ -2106,6 +2153,16 @@ function waitForKeyElements(
21062153 console . log ( "set uiddiv" ) ;
21072154 }
21082155
2156+ waitForKeyElements ( '.list-contents > ul > li[ico="tiff"]' , changeImageExtensionInHtml ) ;
2157+
2158+ function changeImageExtensionInHtml ( node ) {
2159+ let title = $ ( node ) . attr ( "title" ) ;
2160+ //$(node).attr("title",`${title}.pic`);
2161+ let $a = $ ( node ) . find ( `a[title="${ title } "]` )
2162+ $a . attr ( "title" , `${ title } .pic` ) ;
2163+ //(function(){ $(".list-contents > ul > li").each(function(i, item) {if($(this).attr('title').substr(-1) == '.'){$(this).attr('iv',1);}}); })
2164+ }
2165+
21092166 //#region 20201230新的提取api相关
21102167 var pub_key = '-----BEGIN PUBLIC KEY-----\
21112168 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDR3rWmeYnRClwLBB0Rq0dlm8Mr\
@@ -2350,7 +2407,7 @@ function waitForKeyElements(
23502407 FILEDOWNLOAD : 12 ,
23512408 MSGERROR : 13 ,
23522409 JSINFO : 14 ,
2353- FATALERRORUPLOAD :15
2410+ FATALERRORUPLOAD : 15
23542411 } ;
23552412
23562413 function createMessage ( messageType , msg , id ) {
@@ -2524,7 +2581,7 @@ function waitForKeyElements(
25242581
25252582 }
25262583 } ) ;
2527- } else if ( message . messageType == MessageType . FATALERRORUPLOAD ) {
2584+ } else if ( message . messageType == MessageType . FATALERRORUPLOAD ) {
25282585 $itemContent . html ( message . msg ) ;
25292586 Swal . getTitle ( ) . textContent = "上传遇到致命错误,已主动停止!" ;
25302587 Swal . getCancelButton ( ) . style . display = "none" ;
@@ -2873,6 +2930,28 @@ function waitForKeyElements(
28732930
28742931 }
28752932
2933+ async function renameFile ( id , name ) {
2934+ let data = {
2935+ fid : id ,
2936+ file_name : name
2937+ } ;
2938+ let renameUrl = "https://webapi.115.com/files/edit" ;
2939+ const result = await $ . ajax ( {
2940+ type : 'POST' ,
2941+ url : renameUrl ,
2942+ headers : {
2943+ 'Content-Type' : 'application/x-www-form-urlencoded' ,
2944+ //'Origin': 'https://115.com'
2945+ } ,
2946+ dataType : "json" ,
2947+ xhrFields : {
2948+ withCredentials : true
2949+ } ,
2950+ data : data
2951+ } ) ;
2952+ return result ;
2953+ }
2954+
28762955 //批量重命名 fileArray [{id:id,name:ddd}]
28772956 //{"state":true,"error":"","errno":0,"data":{"2187365717527997108":"14214.mp4"}}
28782957 async function renameFiles ( fileArray ) {
@@ -3238,10 +3317,11 @@ function waitForKeyElements(
32383317
32393318 function replaceDot ( name ) {
32403319 return name . replace ( / \. / g, "_" ) ;
3320+ return name ;
32413321 }
32423322 //windows平台上限制的字符:/\|":*?<> 其他平台比windows宽泛一些
32433323 function repalceValidatedName ( name ) {
3244- return name . replace ( / < / g, '[' )
3324+ let newName = name . replace ( / < / g, '[' )
32453325 . replace ( / > / g, ']' )
32463326 . replace ( / \| / g, '_' )
32473327 . replace ( / : / g, '_' )
@@ -3250,6 +3330,11 @@ function waitForKeyElements(
32503330 . replace ( / \* / g, '_' )
32513331 . replace ( / " / g, '\'' )
32523332 . replace ( / \? / g, '_' ) ;
3333+
3334+ if ( newName . startsWith ( "." ) ) {
3335+ newName = newName . slice ( 1 ) ;
3336+ }
3337+ return newName ;
32533338 }
32543339 //格式化sha1 链接
32553340 //return type: {state:succeed,msg:""}
@@ -3258,6 +3343,8 @@ function waitForKeyElements(
32583343 function convertToSha1Link ( fileItem , isSimpleFormat ) {
32593344 var succeed = false ;
32603345 var msg = "格式生成失败!" ;
3346+ //3.8
3347+ fileItem . name = changeNameBack ( fileItem . name ) ;
32613348 if ( fileItem . name && fileItem . size && fileItem . sha1 && fileItem . preid ) {
32623349 var sha1Link = "115://" + repalceValidatedName ( fileItem . name ) + "|" + fileItem . size + "|" + fileItem . sha1 + "|" + fileItem . preid ;
32633350 if ( ! isSimpleFormat ) {
@@ -3541,7 +3628,17 @@ function waitForKeyElements(
35413628 if ( ! fLine ) continue ;
35423629 let r = convertFromSha1Link ( fLine ) ;
35433630 if ( r . state ) {
3544- //let nameStrings = r.fileItem.name.split(".");
3631+ let nameStrings = r . fileItem . name . split ( "." ) ;
3632+ let name = r . fileItem . name ;
3633+ if ( nameStrings . length > 1 ) {
3634+ let extension = nameStrings . pop ( ) ;
3635+ r . fileItem . extension = extension ;
3636+ r . fileItem . formatedExtension = changeType ( extension ) ;
3637+ console . log ( `formatedExtension:${ r . fileItem . formatedExtension } ` )
3638+ }
3639+ else {
3640+ name = r . fileItem . name ;
3641+ }
35453642 //let extension = nameStrings.pop();
35463643 //r.fileItem.extension = extension;
35473644 //let formatedExtension=reverseString(extension);
@@ -3550,7 +3647,15 @@ function waitForKeyElements(
35503647 //使用emoutils.js库来分割,带有emoji的文件名
35513648 //let fileName = emojiUtils.toArray(nameStrings.join('.')).map(c => c + nameSeparator).join("").slice(0, -1);
35523649 //r.fileItem.formatedName = fileName + "." + formatedExtension;
3553- r . fileItem . formatedName = emojiUtils . toArray ( replaceDot ( r . fileItem . name ) ) . map ( c => c + nameSeparator ) . join ( "" ) . slice ( 0 , - 1 ) ;
3650+ if ( r . fileItem . formatedExtension && r . fileItem . formatedExtension != "" ) {
3651+ r . fileItem . formatedName = emojiUtils . toArray ( r . fileItem . name ) . map ( c => c + nameSeparator ) . join ( "" ) . slice ( 0 , - 1 ) + "." + r . fileItem . formatedExtension ;
3652+ } else if ( r . fileItem . extension ) {
3653+ r . fileItem . formatedName = emojiUtils . toArray ( name ) . map ( c => c + nameSeparator ) . join ( "" ) . slice ( 0 , - 1 ) + "." + r . fileItem . extension ;
3654+ }
3655+ else {
3656+ r . fileItem . formatedName = emojiUtils . toArray ( name ) . map ( c => c + nameSeparator ) . join ( "" ) . slice ( 0 , - 1 ) ;
3657+ }
3658+ console . log ( `formatedName:${ r . fileItem . formatedName } ` )
35543659 } else {
35553660 r . fileItem . formatedName = r . fileItem . name ;
35563661 }
@@ -3682,7 +3787,7 @@ function waitForKeyElements(
36823787 promisArray . push ( r ) ;
36833788
36843789 if ( index % workingNumber == 0 ) {
3685- await delay ( sleepTime * 1.5 ) ;
3790+ await delay ( sleepTime * 1.5 ) ;
36863791 }
36873792
36883793 if ( index % 128 == 0 ) {
@@ -3750,10 +3855,53 @@ function waitForKeyElements(
37503855 //name: name.split(separator).join("")+"."+reverseString(ext)
37513856 name : f . name
37523857 } ;
3858+
3859+ if ( f . formatedExtension ) {
3860+ fo . name = `${ f . name } .${ f . formatedExtension } ` ;
3861+ }
3862+
37533863 return fo ;
37543864 } ) ;
37553865 console . log ( selectedFiles )
3756- let i , j , temporary , chunk = 115 ;
3866+
3867+ /*
3868+ let renameIndex=1;
3869+ let renameCount=selectedFiles.length;
3870+ for (const sendFile of selectedFiles) {
3871+ console.log(sendFile);
3872+ let t=await renameFile(sendFile.id,sendFile.name);
3873+ console.log(t);
3874+ if(t.state==true){
3875+ resultCallback && resultCallback({
3876+ state: true,
3877+ msg: `${renameIndex}|${renameCount}<br/>重命名${sendFile.name}成功!`
3878+ });
3879+ }
3880+ else{
3881+ resultCallback && resultCallback({
3882+ state: false,
3883+ msg: `${renameIndex}|${renameCount}<br/>重命名${sendFile.name}失败!`
3884+ });
3885+ }
3886+ await delay(300);
3887+ renameIndex++;
3888+
3889+ if (renameIndex % 128 == 0) {
3890+ let seconds = 3;
3891+ for (let i = 0; i < seconds; i++) {
3892+ resultCallback && resultCallback({
3893+ state: true,
3894+ msg: `防止115服务器限制,暂停发包。<br><br>${seconds - i}秒后继续....`
3895+ });
3896+ await delay(1000);
3897+ }
3898+ }
3899+ }
3900+ */
3901+
3902+
3903+
3904+ let i , j , temporary , chunk = 115 ;
37573905 for ( i = 0 , j = selectedFiles . length ; i < j ; i += chunk ) {
37583906 temporary = selectedFiles . slice ( i , i + chunk ) ;
37593907 resultCallback && resultCallback ( {
@@ -3778,6 +3926,8 @@ function waitForKeyElements(
37783926 }
37793927 await delay ( sleepTime ) ;
37803928 }
3929+
3930+
37813931
37823932 }
37833933
@@ -3947,23 +4097,23 @@ function waitForKeyElements(
39474097 postSha1Messgae ( createMessage ( MessageType . SHOWCANCEl ) ) ;
39484098 console . log ( files . length ) ;
39494099 //文件上传
3950- let hasFatalError = await processUpload ( files , uploadConfig . upload . workingNumber , uploadConfig . upload . sleepTime , result => {
4100+ let hasFatalError = await processUpload ( files , uploadConfig . upload . workingNumber , uploadConfig . upload . sleepTime , result => {
39514101 if ( result . state === true ) {
39524102 postSha1Messgae ( createMessage ( MessageType . PROCESSING , result . msg ) ) ;
39534103 } else {
39544104 postSha1Messgae ( createMessage ( MessageType . ERROR , result . msg ) ) ;
39554105 }
39564106 } ) ;
39574107
3958- if ( hasFatalError ) {
3959- let msg = `频繁请求,被115限制 (尝试停止操作半小时或者重新登录)<br>\
4108+ if ( hasFatalError ) {
4109+ let msg = `频繁请求,被115限制 (尝试停止操作半小时或者重新登录)<br>\
39604110 获取最新版,或者遇到问题去此反馈,感谢 !点击-> <a href="${ TIPS . UpdateUrl } " target="_blank">${ TIPS . VersionTips } </a>` ;
39614111 postSha1Messgae ( createMessage ( MessageType . FATALERRORUPLOAD , msg , newTargetCid ) ) ;
39624112 return ;
39634113 }
3964-
39654114
3966-
4115+
4116+
39674117
39684118 let isTaskCanceled = getTaskCancelFlag ( ) ;
39694119
@@ -4729,7 +4879,7 @@ function waitForKeyElements(
47294879 jNode [ 0 ] . style . left = "180px" ;
47304880 //目录,去除分隔符
47314881 if ( pItem . isFolder && GM_config . get ( currentConfig . advancedRename ) ) {
4732- renameInToolTip ( jNode [ 0 ] , pItem ) ;
4882+ // renameInToolTip(jNode[0], pItem);
47334883 }
47344884
47354885 //add: v3.4 增加设置是否显示 列表模式下获取sha1
0 commit comments