Fix USO update button (#555)
* Fix USO update button * Fix background & search-results * Prevent JSON parse error * Get & set currentMd5 outside of condition * fetchMd5 with API without options * Only update originalMd5 for valid styles * Always set currentMd5 & add a delay before firing USO event
This commit is contained in:
		
							parent
							
								
									b41a39d36e
								
							
						
					
					
						commit
						7261a074cd
					
				|  | @ -156,7 +156,14 @@ | ||||||
|         } |         } | ||||||
|         // USO can't handle POST requests for style json
 |         // USO can't handle POST requests for style json
 | ||||||
|         return download(style.updateUrl, {body: null}) |         return download(style.updateUrl, {body: null}) | ||||||
|           .then(text => tryJSONparse(text)); |           .then(text => { | ||||||
|  |             const style = tryJSONparse(text); | ||||||
|  |             if (style) { | ||||||
|  |               // USO may not provide a correctly updated originalMd5 (#555)
 | ||||||
|  |               style.originalMd5 = md5; | ||||||
|  |             } | ||||||
|  |             return style; | ||||||
|  |           }); | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -18,6 +18,7 @@ | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   let gotBody = false; |   let gotBody = false; | ||||||
|  |   let currentMd5; | ||||||
|   new MutationObserver(observeDOM).observe(document.documentElement, { |   new MutationObserver(observeDOM).observe(document.documentElement, { | ||||||
|     childList: true, |     childList: true, | ||||||
|     subtree: true, |     subtree: true, | ||||||
|  | @ -30,9 +31,12 @@ | ||||||
|       gotBody = true; |       gotBody = true; | ||||||
|       // TODO: remove the following statement when USO pagination title is fixed
 |       // TODO: remove the following statement when USO pagination title is fixed
 | ||||||
|       document.title = document.title.replace(/^(\d+)&\w+=/, '#$1: '); |       document.title = document.title.replace(/^(\d+)&\w+=/, '#$1: '); | ||||||
|       API.findStyle({ |       const md5Url = getMeta('stylish-md5-url') || location.href; | ||||||
|         md5Url: getMeta('stylish-md5-url') || location.href |       Promise.all([ | ||||||
|       }).then(checkUpdatability); |         API.findStyle({md5Url}), | ||||||
|  |         getResource(md5Url) | ||||||
|  |       ]) | ||||||
|  |       .then(checkUpdatability); | ||||||
|     } |     } | ||||||
|     if (document.getElementById('install_button')) { |     if (document.getElementById('install_button')) { | ||||||
|       onDOMready().then(() => { |       onDOMready().then(() => { | ||||||
|  | @ -66,11 +70,12 @@ | ||||||
|     return jsonUrl + (paramsMissing ? textUrl.replace(/^[^?]+/, '') : ''); |     return jsonUrl + (paramsMissing ? textUrl.replace(/^[^?]+/, '') : ''); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   function checkUpdatability(installedStyle) { |   function checkUpdatability([installedStyle, md5]) { | ||||||
|     // TODO: remove the following statement when USO is fixed
 |     // TODO: remove the following statement when USO is fixed
 | ||||||
|     document.dispatchEvent(new CustomEvent('stylusFixBuggyUSOsettings', { |     document.dispatchEvent(new CustomEvent('stylusFixBuggyUSOsettings', { | ||||||
|       detail: installedStyle && installedStyle.updateUrl, |       detail: installedStyle && installedStyle.updateUrl, | ||||||
|     })); |     })); | ||||||
|  |     currentMd5 = md5; | ||||||
|     if (!installedStyle) { |     if (!installedStyle) { | ||||||
|       sendEvent({type: 'styleCanBeInstalledChrome'}); |       sendEvent({type: 'styleCanBeInstalledChrome'}); | ||||||
|       return; |       return; | ||||||
|  | @ -78,11 +83,7 @@ | ||||||
|     const isCustomizable = /\?/.test(installedStyle.updateUrl); |     const isCustomizable = /\?/.test(installedStyle.updateUrl); | ||||||
|     const md5Url = getMeta('stylish-md5-url'); |     const md5Url = getMeta('stylish-md5-url'); | ||||||
|     if (md5Url && installedStyle.md5Url && installedStyle.originalMd5) { |     if (md5Url && installedStyle.md5Url && installedStyle.originalMd5) { | ||||||
|       getResource(md5Url).then(md5 => { |       reportUpdatable(isCustomizable || md5 !== installedStyle.originalMd5); | ||||||
|         reportUpdatable( |  | ||||||
|           isCustomizable || |  | ||||||
|           md5 !== installedStyle.originalMd5); |  | ||||||
|       }); |  | ||||||
|     } else { |     } else { | ||||||
|       getStyleJson().then(json => { |       getStyleJson().then(json => { | ||||||
|         reportUpdatable( |         reportUpdatable( | ||||||
|  | @ -93,6 +94,8 @@ | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function reportUpdatable(isUpdatable) { |     function reportUpdatable(isUpdatable) { | ||||||
|  |       // USO doesn't bind these listeners immediately
 | ||||||
|  |       setTimeout(() => { | ||||||
|         sendEvent({ |         sendEvent({ | ||||||
|           type: isUpdatable |           type: isUpdatable | ||||||
|             ? 'styleCanBeUpdatedChrome' |             ? 'styleCanBeUpdatedChrome' | ||||||
|  | @ -101,6 +104,7 @@ | ||||||
|             updateUrl: installedStyle.updateUrl |             updateUrl: installedStyle.updateUrl | ||||||
|           }, |           }, | ||||||
|         }); |         }); | ||||||
|  |       }, 300); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -155,7 +159,7 @@ | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   function saveStyleCode(message, name, addProps) { |   function saveStyleCode(message, name, addProps = {}) { | ||||||
|     const isNew = message === 'styleInstall'; |     const isNew = message === 'styleInstall'; | ||||||
|     const needsConfirmation = isNew || !saveStyleCode.confirmed; |     const needsConfirmation = isNew || !saveStyleCode.confirmed; | ||||||
|     if (needsConfirmation && !confirm(chrome.i18n.getMessage(message, [name]))) { |     if (needsConfirmation && !confirm(chrome.i18n.getMessage(message, [name]))) { | ||||||
|  | @ -169,7 +173,8 @@ | ||||||
|           'https://github.com/openstyles/stylus/issues/195'); |           'https://github.com/openstyles/stylus/issues/195'); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|       return API.installStyle(Object.assign(json, addProps)) |       // Update originalMd5 since USO changed it (2018-11-11) to NOT match the current md5
 | ||||||
|  |       return API.installStyle(Object.assign(json, addProps, {originalMd5: currentMd5})) | ||||||
|         .then(style => { |         .then(style => { | ||||||
|           if (!isNew && style.updateUrl.includes('?')) { |           if (!isNew && style.updateUrl.includes('?')) { | ||||||
|             enableUpdateButton(true); |             enableUpdateButton(true); | ||||||
|  |  | ||||||
|  | @ -510,7 +510,6 @@ window.addEventListener('showStyles:done', function _() { | ||||||
| 
 | 
 | ||||||
|     const installButton = $('.search-result-install', entry); |     const installButton = $('.search-result-install', entry); | ||||||
|     installButton.onclick = onInstallClicked; |     installButton.onclick = onInstallClicked; | ||||||
| 
 |  | ||||||
|     if ((result.style_settings || []).length > 0) { |     if ((result.style_settings || []).length > 0) { | ||||||
|       // Style has customizations
 |       // Style has customizations
 | ||||||
|       installButton.classList.add('customize'); |       installButton.classList.add('customize'); | ||||||
|  | @ -552,11 +551,13 @@ window.addEventListener('showStyles:done', function _() { | ||||||
|     Promise.all([ |     Promise.all([ | ||||||
|       fetchStyleJson(result), |       fetchStyleJson(result), | ||||||
|       fetchStyleSettings(result), |       fetchStyleSettings(result), | ||||||
|  |       API.download({url: UPDATE_URL.replace('%', result.id)}) | ||||||
|     ]) |     ]) | ||||||
|     .then(([style, settings]) => { |     .then(([style, settings, md5]) => { | ||||||
|       pingback(result); |       pingback(result); | ||||||
|       // show a 'config-on-homepage' icon in the popup
 |       // show a 'config-on-homepage' icon in the popup
 | ||||||
|       style.updateUrl += settings.length ? '?' : ''; |       style.updateUrl += settings.length ? '?' : ''; | ||||||
|  |       style.originalMd5 = md5; | ||||||
|       return API.installStyle(style); |       return API.installStyle(style); | ||||||
|     }) |     }) | ||||||
|     .catch(reason => { |     .catch(reason => { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user