mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-30 14:52:59 +00:00 
			
		
		
		
	Add support for new GitHub assetes URLs in image minimizer workflow
This commit is contained in:
		
							
								
								
									
										103
									
								
								.github/workflows/image-minimizer.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										103
									
								
								.github/workflows/image-minimizer.js
									
									
									
									
										vendored
									
									
								
							| @@ -30,10 +30,12 @@ module.exports = async ({github, context}) => { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Regex for finding images (simple variant)  |     // Regex for finding images (simple variant)  | ||||||
|     const REGEX_IMAGE_LOOKUP = /\!\[(.*)\]\((https:\/\/[-a-z0-9]+\.githubusercontent\.com\/\d+\/[-0-9a-f]{32,512}\.(jpg|gif|png))\)/gm; |     const REGEX_USER_CONTENT_IMAGE_LOOKUP = /\!\[(.*)\]\((https:\/\/[-a-z0-9]+\.githubusercontent\.com\/\d+\/[-0-9a-f]{32,512}\.(jpg|gif|png))\)/gm; | ||||||
|  |     const REGEX_ASSETS_IMAGE_LOCKUP = /\!\[(.*)\]\((https:\/\/github\.com\/[-\w\d]+\/[-\w\d]+\/assets\/\d+\/[\-0-9a-f]{32,512})\)/gm; | ||||||
|  |  | ||||||
|     // Check if we found something |     // Check if we found something | ||||||
|     let foundSimpleImages = REGEX_IMAGE_LOOKUP.test(initialBody); |     let foundSimpleImages = REGEX_USER_CONTENT_IMAGE_LOOKUP.test(initialBody) | ||||||
|  |         || REGEX_ASSETS_IMAGE_LOCKUP.test(initialBody); | ||||||
|     if (!foundSimpleImages) { |     if (!foundSimpleImages) { | ||||||
|         console.log('Found no simple images to process'); |         console.log('Found no simple images to process'); | ||||||
|         return; |         return; | ||||||
| @@ -47,53 +49,8 @@ module.exports = async ({github, context}) => { | |||||||
|     var wasMatchModified = false; |     var wasMatchModified = false; | ||||||
|  |  | ||||||
|     // Try to find and replace the images with minimized ones |     // Try to find and replace the images with minimized ones | ||||||
|     let newBody = await replaceAsync(initialBody, REGEX_IMAGE_LOOKUP, async (match, g1, g2) => { |     let newBody = await replaceAsync(initialBody, REGEX_USER_CONTENT_IMAGE_LOOKUP, minimizeAsync); | ||||||
|         console.log(`Found match '${match}'`); |     newBody = await replaceAsync(newBody, REGEX_ASSETS_IMAGE_LOCKUP, minimizeAsync); | ||||||
|          |  | ||||||
|         if (g1.endsWith(IGNORE_ALT_NAME_END)) { |  | ||||||
|             console.log(`Ignoring match '${match}': IGNORE_ALT_NAME_END`); |  | ||||||
|             return match; |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         let probeAspectRatio = 0; |  | ||||||
|         let shouldModify = false; |  | ||||||
|         try { |  | ||||||
|             console.log(`Probing ${g2}`); |  | ||||||
|             let probeResult = await probe(g2); |  | ||||||
|             if (probeResult == null) { |  | ||||||
|                 throw 'No probeResult'; |  | ||||||
|             } |  | ||||||
|             if (probeResult.hUnits != 'px') { |  | ||||||
|                 throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`; |  | ||||||
|             } |  | ||||||
|             if (probeResult.height <= 0) { |  | ||||||
|                 throw `Unexpected probeResult.height (height is invalid: ${probeResult.height})`; |  | ||||||
|             } |  | ||||||
|             if (probeResult.wUnits != 'px') { |  | ||||||
|                 throw `Unexpected probeResult.wUnits (expected px but got ${probeResult.wUnits})`; |  | ||||||
|             } |  | ||||||
|             if (probeResult.width <= 0) { |  | ||||||
|                 throw `Unexpected probeResult.width (width is invalid: ${probeResult.width})`; |  | ||||||
|             } |  | ||||||
|             console.log(`Probing resulted in ${probeResult.width}x${probeResult.height}px`); |  | ||||||
|              |  | ||||||
|             probeAspectRatio = probeResult.width / probeResult.height; |  | ||||||
|             shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && probeAspectRatio < MIN_ASPECT_RATIO; |  | ||||||
|         } catch(e) { |  | ||||||
|             console.log('Probing failed:', e); |  | ||||||
|             // Immediately abort |  | ||||||
|             return match; |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         if (shouldModify) { |  | ||||||
|             wasMatchModified = true; |  | ||||||
|             console.log(`Modifying match '${match}'`); |  | ||||||
|             return `<img alt="${g1}" src="${g2}" width=${Math.min(600, (IMG_MAX_HEIGHT_PX * probeAspectRatio).toFixed(0))} />`; |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         console.log(`Match '${match}' is ok/will not be modified`); |  | ||||||
|         return match; |  | ||||||
|     }); |  | ||||||
|      |      | ||||||
|     if (!wasMatchModified) { |     if (!wasMatchModified) { | ||||||
|         console.log('Nothing was modified. Skipping update'); |         console.log('Nothing was modified. Skipping update'); | ||||||
| @@ -129,4 +86,52 @@ module.exports = async ({github, context}) => { | |||||||
|         const data = await Promise.all(promises); |         const data = await Promise.all(promises); | ||||||
|         return str.replace(regex, () => data.shift()); |         return str.replace(regex, () => data.shift()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     async function minimizeAsync(match, g1, g2) { | ||||||
|  |             console.log(`Found match '${match}'`); | ||||||
|  |  | ||||||
|  |             if (g1.endsWith(IGNORE_ALT_NAME_END)) { | ||||||
|  |                 console.log(`Ignoring match '${match}': IGNORE_ALT_NAME_END`); | ||||||
|  |                 return match; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             let probeAspectRatio = 0; | ||||||
|  |             let shouldModify = false; | ||||||
|  |             try { | ||||||
|  |                 console.log(`Probing ${g2}`); | ||||||
|  |                 let probeResult = await probe(g2); | ||||||
|  |                 if (probeResult == null) { | ||||||
|  |                     throw 'No probeResult'; | ||||||
|  |                 } | ||||||
|  |                 if (probeResult.hUnits != 'px') { | ||||||
|  |                     throw `Unexpected probeResult.hUnits (expected px but got ${probeResult.hUnits})`; | ||||||
|  |                 } | ||||||
|  |                 if (probeResult.height <= 0) { | ||||||
|  |                     throw `Unexpected probeResult.height (height is invalid: ${probeResult.height})`; | ||||||
|  |                 } | ||||||
|  |                 if (probeResult.wUnits != 'px') { | ||||||
|  |                     throw `Unexpected probeResult.wUnits (expected px but got ${probeResult.wUnits})`; | ||||||
|  |                 } | ||||||
|  |                 if (probeResult.width <= 0) { | ||||||
|  |                     throw `Unexpected probeResult.width (width is invalid: ${probeResult.width})`; | ||||||
|  |                 } | ||||||
|  |                 console.log(`Probing resulted in ${probeResult.width}x${probeResult.height}px`); | ||||||
|  |  | ||||||
|  |                 probeAspectRatio = probeResult.width / probeResult.height; | ||||||
|  |                 shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && probeAspectRatio < MIN_ASPECT_RATIO; | ||||||
|  |             } catch(e) { | ||||||
|  |                 console.log('Probing failed:', e); | ||||||
|  |                 // Immediately abort | ||||||
|  |                 return match; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (shouldModify) { | ||||||
|  |                 wasMatchModified = true; | ||||||
|  |                 console.log(`Modifying match '${match}'`); | ||||||
|  |                 return `<img alt="${g1}" src="${g2}" width=${Math.min(600, (IMG_MAX_HEIGHT_PX * probeAspectRatio).toFixed(0))} />`; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             console.log(`Match '${match}' is ok/will not be modified`); | ||||||
|  |             return match; | ||||||
|  |         } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 TobiGr
					TobiGr