@@ -37,6 +37,7 @@ const SharedownAPI = (() => {
37
37
const _logsFolderPath = _path . normalize ( _sharedownAppDataPath + '/logs' ) ;
38
38
const _logFilePath = _path . normalize ( _logsFolderPath + '/sharedownLog.log' ) ;
39
39
const _ytdlpLogFilePath = _path . normalize ( _logsFolderPath + '/ytdlp.log' ) ;
40
+ let _puppyBrowser = null ;
40
41
let _showDownlInfo = false ;
41
42
let _runningProcess = null ;
42
43
let _stoppingProcess = false ;
@@ -609,6 +610,11 @@ const SharedownAPI = (() => {
609
610
_fs . unlinkSync ( path ) ;
610
611
}
611
612
613
+ function _browserDisconnectedEvt ( ) {
614
+ _puppyBrowser ?. close ( ) ;
615
+ _puppyBrowser = null ;
616
+ }
617
+
612
618
function _sortURLsFromFolder ( vURLsList , sortType ) {
613
619
const sorted = [ ] ;
614
620
const ret = [ ] ;
@@ -707,21 +713,20 @@ const SharedownAPI = (() => {
707
713
await kt . deletePassword ( 'sharedown' , 'loginmodule' ) ;
708
714
}
709
715
710
- api . runPuppeteerGetVideoData = async ( video , loginData , tmout , enableUserdataFold , customChromePath , isDirect = false ) => {
716
+ api . runPuppeteerGetVideoData = async ( video , loginData , tmout , enableUserdataFold , customChromePath , keepBrowserOpen , isDirect = false ) => {
711
717
const knownResponses = [
712
718
'RenderListDataAsStream?@a1=' , 'RenderListDataAsStream?@listUrl' ,
713
719
'SP.List.GetListDataAsStream?listFullUrl'
714
720
] ;
715
721
const puppy = require ( 'puppeteer' ) ;
716
722
const puppyTimeout = tmout * 1000 ;
717
- let browser = null ;
718
723
let ret = null ;
719
724
720
725
_startCatchResponse = false ;
721
726
722
-
723
727
try {
724
- browser = await puppy . launch ( _getPuppeteerArgs ( customChromePath , enableUserdataFold ) ) ;
728
+ if ( _puppyBrowser === null )
729
+ _puppyBrowser = await puppy . launch ( _getPuppeteerArgs ( customChromePath , enableUserdataFold ) ) ;
725
730
726
731
const responseList = [ ] ;
727
732
const catchResponse = function ( resp ) {
@@ -735,7 +740,7 @@ const SharedownAPI = (() => {
735
740
if ( ( resType === 'fetch' || resType === 'xhr' ) && ( method === 'post' || method === 'get' ) )
736
741
responseList . push ( resp ) ;
737
742
}
738
- const page = ( await browser . pages ( ) ) [ 0 ] ;
743
+ const page = ( await _puppyBrowser . pages ( ) ) [ 0 ] ;
739
744
let matchedResponse = null ;
740
745
let donorRespData = null ;
741
746
let videoUrl ;
@@ -744,6 +749,11 @@ const SharedownAPI = (() => {
744
749
let dlData ;
745
750
let vID ;
746
751
752
+ if ( keepBrowserOpen ) {
753
+ _puppyBrowser . off ( 'disconnected' , _browserDisconnectedEvt )
754
+ _puppyBrowser . on ( 'disconnected' , _browserDisconnectedEvt ) ;
755
+ }
756
+
747
757
if ( customChromePath )
748
758
api . writeLog ( 'WARNING: custom chrome executable, Sharedown may not work as expected!' ) ;
749
759
@@ -813,13 +823,18 @@ const SharedownAPI = (() => {
813
823
cookies = null ;
814
824
}
815
825
816
- await browser . close ( ) ;
826
+ if ( ! keepBrowserOpen ) {
827
+ await _puppyBrowser . close ( ) ;
828
+ _puppyBrowser = null ;
829
+ }
817
830
818
831
ret = { m : videoUrl , t : title , c : cookies } ;
819
832
820
833
} catch ( e ) {
821
- if ( browser )
822
- await browser . close ( ) ;
834
+ if ( ! keepBrowserOpen && _puppyBrowser ) {
835
+ await _puppyBrowser . close ( ) ;
836
+ _puppyBrowser = null ;
837
+ }
823
838
824
839
api . writeLog ( `runPuppeteerGetVideoData: error\n${ e . message } ` ) ;
825
840
api . showMessage ( 'error' , e . message , 'Puppeteer Error' ) ;
@@ -828,19 +843,24 @@ const SharedownAPI = (() => {
828
843
return ret ;
829
844
}
830
845
831
- api . runPuppeteerGetURLListFromFolder = async ( folderURLsList , includeSubFolds , sortType , loginData , tmout , enableUserdataFold ) => {
846
+ api . runPuppeteerGetURLListFromFolder = async ( folderURLsList , includeSubFolds , sortType , loginData , tmout , keepBrowserOpen , enableUserdataFold ) => {
832
847
const puppy = require ( 'puppeteer' ) ;
833
848
const puppyTimeout = tmout * 1000 ;
834
- let browser = null ;
835
849
836
850
try {
837
- browser = await puppy . launch ( _getPuppeteerArgs ( '' , enableUserdataFold ) ) ;
851
+ if ( _puppyBrowser === null )
852
+ _puppyBrowser = await puppy . launch ( _getPuppeteerArgs ( '' , enableUserdataFold ) ) ;
838
853
839
- const page = ( await browser . pages ( ) ) [ 0 ] ;
854
+ const page = ( await _puppyBrowser . pages ( ) ) [ 0 ] ;
840
855
const regex = new RegExp ( / \/ s i t e s \/ ( [ ^ \/ ] + ) / ) ;
841
856
const match = folderURLsList [ 0 ] . match ( regex ) ;
842
857
const ret = { list : [ ] } ;
843
858
859
+ if ( keepBrowserOpen ) {
860
+ _puppyBrowser . off ( 'disconnected' , _browserDisconnectedEvt )
861
+ _puppyBrowser . on ( 'disconnected' , _browserDisconnectedEvt ) ;
862
+ }
863
+
844
864
api . writeLog ( "runPuppeteerGetURLListFromFolder: start" ) ;
845
865
page . setDefaultTimeout ( puppyTimeout ) ;
846
866
page . setDefaultNavigationTimeout ( puppyTimeout ) ;
@@ -860,13 +880,18 @@ const SharedownAPI = (() => {
860
880
await _getVideoURLsInFold ( ret , page , `${ urlObj . origin } ${ urlObj . pathname } ` , includeSubFolds ) ;
861
881
}
862
882
863
- await browser . close ( ) ;
883
+ if ( ! keepBrowserOpen ) {
884
+ await _puppyBrowser . close ( ) ;
885
+ _puppyBrowser = null ;
886
+ }
864
887
865
888
return _sortURLsFromFolder ( ret . list , sortType ) ;
866
889
867
890
} catch ( e ) {
868
- if ( browser )
869
- await browser . close ( ) ;
891
+ if ( ! keepBrowserOpen && _puppyBrowser ) {
892
+ await _puppyBrowser . close ( ) ;
893
+ _puppyBrowser = null ;
894
+ }
870
895
871
896
api . writeLog ( `runPuppeteerGetURLListFromFolder: error\n${ e . message } ` ) ;
872
897
api . showMessage ( 'error' , e . message , 'Puppeteer Error' ) ;
0 commit comments