@@ -65,7 +65,7 @@ function _attachEvents () {
6565
6666function ContentRoute ( app , routeName ) {
6767
68- let manifestFolderPath = { } ;
68+ let manifestInfo = { } ;
6969
7070 _attachEvents ( ) ;
7171
@@ -89,8 +89,8 @@ function ContentRoute (app, routeName) {
8989 }
9090 res . sendFile ( file , options , function ( err ) {
9191 if ( err && err . status ) {
92- // error to open file => remove saved folder (maybe moved)
93- delete manifestFolderPath [ manifestId ] ;
92+ // error to open file => remove saved info (maybe moved)
93+ delete manifestInfo [ manifestId ] ;
9494 res . status ( err . status ) . end ( ) ;
9595 }
9696 } )
@@ -100,7 +100,7 @@ function ContentRoute (app, routeName) {
100100 let file = folder + '/' + manifestId + '/' + req . params [ 0 ] ;
101101 fs . exists ( file , ( exists ) => {
102102 if ( exists ) {
103- // no cached folder for manifest id, asks main process for folder
103+ // fragment exists on disk, let's check if it is not being downloaded
104104 processCmd ( 'is_downloading' , { manifest : manifestId , file : file } )
105105 . then ( ( ) => {
106106 sendFile ( file )
@@ -109,32 +109,50 @@ function ContentRoute (app, routeName) {
109109 return res . status ( 404 ) . end ( ) ;
110110 } ) ;
111111 } else {
112- // ask to perform seek
112+ // fragment doesn't on disk, ask to download it
113113 processCmd ( 'perform_seek' , { manifest : manifestId , file : file } )
114114 . then ( ( ) => {
115115 sendFile ( file )
116116 } )
117- . catch ( function ( ) {
117+ . catch ( function ( ) {
118118 return res . status ( 404 ) . end ( ) ;
119119 } ) ;
120120 }
121121 } )
122122 }
123123
124- // check if a folder has been already saved for the manifest
125- if ( manifestFolderPath [ manifestId ] ) {
126- seekIfNeeded ( manifestFolderPath [ manifestId ] ) ;
124+ let getFile = function ( info ) {
125+ if ( info && info . status === 'FINISHED' ) {
126+ // if file has status finished, no need to check if fragment is being downloaded
127+ let file = info . folder + '/' + manifestId + '/' + req . params [ 0 ] ;
128+ fs . exists ( file , ( exists ) => {
129+ if ( exists ) {
130+ // fragment exists => send data
131+ sendFile ( file )
132+ } else {
133+ // fragment doesn't exists => 404 and remove cached data
134+ delete manifestInfo [ manifestId ] ;
135+ return res . status ( 404 ) . end ( ) ;
136+ }
137+ } ) ;
138+ } else {
139+ // file is not finished, let's perform seek if needed
140+ seekIfNeeded ( info . folder ) ;
141+ }
142+ }
143+
144+ // check if info have been already saved for the manifest
145+ if ( manifestInfo [ manifestId ] ) {
146+ getFile ( manifestInfo [ manifestId ] ) ;
127147 } else {
128- // no cached folder for manifest id, asks main process for folder
129- processCmd ( 'get_folder ' , { manifest : manifestId } )
148+ // no info for manifest id, asks main process to get manifest info
149+ processCmd ( 'get_info ' , { manifest : manifestId } )
130150 . then ( ( result ) => {
131- let downloadFolder = result . folder ;
132- // save folder location for manifest and then send file
133- manifestFolderPath [ manifestId ] = downloadFolder ;
134- seekIfNeeded ( manifestFolderPath [ manifestId ] ) ;
151+ manifestInfo [ manifestId ] = result ;
152+ getFile ( manifestInfo [ manifestId ] ) ;
135153 } )
136154 . catch ( function ( ) {
137- delete manifestFolderPath [ manifestId ] ;
155+ delete manifestInfo [ manifestId ] ;
138156 return res . status ( 404 ) . send ( 'Cannot find manifest' ) ;
139157 } ) ;
140158 }
0 commit comments