Update Youtube URL handling to recongnize playlist ID in URL (#1260)
* * Update Youtube URL handling to recongnize playlist ID in URL Only for format of `https://www.youtube.com/watch?v=vid&list=lid` * ! Fix vue component prop declaration A prop where the value can be undefined cannot be declared "required"
This commit is contained in:
		
							parent
							
								
									a2df781f76
								
							
						
					
					
						commit
						a3cf210fca
					
				|  | @ -304,11 +304,18 @@ export default Vue.extend({ | ||||||
|       this.getYoutubeUrlInfo(href).then((result) => { |       this.getYoutubeUrlInfo(href).then((result) => { | ||||||
|         switch (result.urlType) { |         switch (result.urlType) { | ||||||
|           case 'video': { |           case 'video': { | ||||||
|             const { videoId, timestamp } = result |             const { videoId, timestamp, playlistId } = result | ||||||
| 
 | 
 | ||||||
|  |             const query = {} | ||||||
|  |             if (timestamp) { | ||||||
|  |               query.timestamp = timestamp | ||||||
|  |             } | ||||||
|  |             if (playlistId && playlistId.length > 0) { | ||||||
|  |               query.playlistId = playlistId | ||||||
|  |             } | ||||||
|             this.$router.push({ |             this.$router.push({ | ||||||
|               path: `/watch/${videoId}`, |               path: `/watch/${videoId}`, | ||||||
|               query: timestamp ? { timestamp } : {} |               query: query | ||||||
|             }) |             }) | ||||||
|             break |             break | ||||||
|           } |           } | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ export default Vue.extend({ | ||||||
|     }, |     }, | ||||||
|     playlistId: { |     playlistId: { | ||||||
|       type: String, |       type: String, | ||||||
|       required: true |       default: '' | ||||||
|     }, |     }, | ||||||
|     getTimestamp: { |     getTimestamp: { | ||||||
|       type: Function, |       type: Function, | ||||||
|  |  | ||||||
|  | @ -109,11 +109,18 @@ export default Vue.extend({ | ||||||
|       this.getYoutubeUrlInfo(query).then((result) => { |       this.getYoutubeUrlInfo(query).then((result) => { | ||||||
|         switch (result.urlType) { |         switch (result.urlType) { | ||||||
|           case 'video': { |           case 'video': { | ||||||
|             const { videoId, timestamp } = result |             const { videoId, timestamp, playlistId } = result | ||||||
| 
 | 
 | ||||||
|  |             const query = {} | ||||||
|  |             if (timestamp) { | ||||||
|  |               query.timestamp = timestamp | ||||||
|  |             } | ||||||
|  |             if (playlistId && playlistId.length > 0) { | ||||||
|  |               query.playlistId = playlistId | ||||||
|  |             } | ||||||
|             this.$router.push({ |             this.$router.push({ | ||||||
|               path: `/watch/${videoId}`, |               path: `/watch/${videoId}`, | ||||||
|               query: timestamp ? { timestamp } : {} |               query: query | ||||||
|             }) |             }) | ||||||
|             break |             break | ||||||
|           } |           } | ||||||
|  |  | ||||||
|  | @ -84,7 +84,7 @@ export default Vue.extend({ | ||||||
|     }, |     }, | ||||||
|     playlistId: { |     playlistId: { | ||||||
|       type: String, |       type: String, | ||||||
|       required: true |       default: '' | ||||||
|     }, |     }, | ||||||
|     theatrePossible: { |     theatrePossible: { | ||||||
|       type: Boolean, |       type: Boolean, | ||||||
|  |  | ||||||
|  | @ -253,7 +253,7 @@ const actions = { | ||||||
|   getVideoParamsFromUrl (_, url) { |   getVideoParamsFromUrl (_, url) { | ||||||
|     /** @type {URL} */ |     /** @type {URL} */ | ||||||
|     let urlObject |     let urlObject | ||||||
|     const paramsObject = { videoId: null, timestamp: null } |     const paramsObject = { videoId: null, timestamp: null, playlistId: null } | ||||||
|     try { |     try { | ||||||
|       urlObject = new URL(url) |       urlObject = new URL(url) | ||||||
|     } catch (e) { |     } catch (e) { | ||||||
|  | @ -270,6 +270,7 @@ const actions = { | ||||||
|       function() { |       function() { | ||||||
|         if (urlObject.pathname === '/watch' && urlObject.searchParams.has('v')) { |         if (urlObject.pathname === '/watch' && urlObject.searchParams.has('v')) { | ||||||
|           extractParams(urlObject.searchParams.get('v')) |           extractParams(urlObject.searchParams.get('v')) | ||||||
|  |           paramsObject.playlistId = urlObject.searchParams.get('list') | ||||||
|           return paramsObject |           return paramsObject | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|  | @ -326,11 +327,12 @@ const actions = { | ||||||
|     //
 |     //
 | ||||||
|     // If `urlType` is "invalid_url"
 |     // If `urlType` is "invalid_url"
 | ||||||
|     // Nothing else
 |     // Nothing else
 | ||||||
|     const { videoId, timestamp } = actions.getVideoParamsFromUrl(null, urlStr) |     const { videoId, timestamp, playlistId } = actions.getVideoParamsFromUrl(null, urlStr) | ||||||
|     if (videoId) { |     if (videoId) { | ||||||
|       return { |       return { | ||||||
|         urlType: 'video', |         urlType: 'video', | ||||||
|         videoId, |         videoId, | ||||||
|  |         playlistId, | ||||||
|         timestamp |         timestamp | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue