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
|
||||
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 currentMd5;
|
||||
new MutationObserver(observeDOM).observe(document.documentElement, {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
|
@ -30,9 +31,12 @@
|
|||
gotBody = true;
|
||||
// TODO: remove the following statement when USO pagination title is fixed
|
||||
document.title = document.title.replace(/^(\d+)&\w+=/, '#$1: ');
|
||||
API.findStyle({
|
||||
md5Url: getMeta('stylish-md5-url') || location.href
|
||||
}).then(checkUpdatability);
|
||||
const md5Url = getMeta('stylish-md5-url') || location.href;
|
||||
Promise.all([
|
||||
API.findStyle({md5Url}),
|
||||
getResource(md5Url)
|
||||
])
|
||||
.then(checkUpdatability);
|
||||
}
|
||||
if (document.getElementById('install_button')) {
|
||||
onDOMready().then(() => {
|
||||
|
@ -66,11 +70,12 @@
|
|||
return jsonUrl + (paramsMissing ? textUrl.replace(/^[^?]+/, '') : '');
|
||||
}
|
||||
|
||||
function checkUpdatability(installedStyle) {
|
||||
function checkUpdatability([installedStyle, md5]) {
|
||||
// TODO: remove the following statement when USO is fixed
|
||||
document.dispatchEvent(new CustomEvent('stylusFixBuggyUSOsettings', {
|
||||
detail: installedStyle && installedStyle.updateUrl,
|
||||
}));
|
||||
currentMd5 = md5;
|
||||
if (!installedStyle) {
|
||||
sendEvent({type: 'styleCanBeInstalledChrome'});
|
||||
return;
|
||||
|
@ -78,11 +83,7 @@
|
|||
const isCustomizable = /\?/.test(installedStyle.updateUrl);
|
||||
const md5Url = getMeta('stylish-md5-url');
|
||||
if (md5Url && installedStyle.md5Url && installedStyle.originalMd5) {
|
||||
getResource(md5Url).then(md5 => {
|
||||
reportUpdatable(
|
||||
isCustomizable ||
|
||||
md5 !== installedStyle.originalMd5);
|
||||
});
|
||||
reportUpdatable(isCustomizable || md5 !== installedStyle.originalMd5);
|
||||
} else {
|
||||
getStyleJson().then(json => {
|
||||
reportUpdatable(
|
||||
|
@ -93,14 +94,17 @@
|
|||
}
|
||||
|
||||
function reportUpdatable(isUpdatable) {
|
||||
sendEvent({
|
||||
type: isUpdatable
|
||||
? 'styleCanBeUpdatedChrome'
|
||||
: 'styleAlreadyInstalledChrome',
|
||||
detail: {
|
||||
updateUrl: installedStyle.updateUrl
|
||||
},
|
||||
});
|
||||
// USO doesn't bind these listeners immediately
|
||||
setTimeout(() => {
|
||||
sendEvent({
|
||||
type: isUpdatable
|
||||
? 'styleCanBeUpdatedChrome'
|
||||
: 'styleAlreadyInstalledChrome',
|
||||
detail: {
|
||||
updateUrl: installedStyle.updateUrl
|
||||
},
|
||||
});
|
||||
}, 300);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -155,7 +159,7 @@
|
|||
}
|
||||
|
||||
|
||||
function saveStyleCode(message, name, addProps) {
|
||||
function saveStyleCode(message, name, addProps = {}) {
|
||||
const isNew = message === 'styleInstall';
|
||||
const needsConfirmation = isNew || !saveStyleCode.confirmed;
|
||||
if (needsConfirmation && !confirm(chrome.i18n.getMessage(message, [name]))) {
|
||||
|
@ -169,7 +173,8 @@
|
|||
'https://github.com/openstyles/stylus/issues/195');
|
||||
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 => {
|
||||
if (!isNew && style.updateUrl.includes('?')) {
|
||||
enableUpdateButton(true);
|
||||
|
|
|
@ -510,7 +510,6 @@ window.addEventListener('showStyles:done', function _() {
|
|||
|
||||
const installButton = $('.search-result-install', entry);
|
||||
installButton.onclick = onInstallClicked;
|
||||
|
||||
if ((result.style_settings || []).length > 0) {
|
||||
// Style has customizations
|
||||
installButton.classList.add('customize');
|
||||
|
@ -552,11 +551,13 @@ window.addEventListener('showStyles:done', function _() {
|
|||
Promise.all([
|
||||
fetchStyleJson(result),
|
||||
fetchStyleSettings(result),
|
||||
API.download({url: UPDATE_URL.replace('%', result.id)})
|
||||
])
|
||||
.then(([style, settings]) => {
|
||||
.then(([style, settings, md5]) => {
|
||||
pingback(result);
|
||||
// show a 'config-on-homepage' icon in the popup
|
||||
style.updateUrl += settings.length ? '?' : '';
|
||||
style.originalMd5 = md5;
|
||||
return API.installStyle(style);
|
||||
})
|
||||
.catch(reason => {
|
||||
|
|
Loading…
Reference in New Issue
Block a user