Open denilsonsa opened 1 year ago
Bonus issue: since the updateUrl
is not set, when opening the USQ page for the published style, the button says "Install" instead of "Reinstall". If you click on "Install", the confirmation page (generated by this extension) correctly says "Reinstall".
The arguments you provided didn't convince me that a purely outgoing operation should set an incoming-type relation.
Well, one more reason is that the updateUrl does not exist before-hand, and it is only created after publishing. So, should this new URL be automatically saved for the convenience of the user? Or should it be completely discarded like it is right now?
Additionally, the user is publishing to a place where only the user has write access. Thus, any changes will happen due to the user's own actions, and thus the user may expect to have those changes synced across multiple devices. And publishing the styles is the easiest way to save/sync styles.
Like I said, the current behavior is inconvenient for any user that either has multiple devices (desktop computer, laptop computer, work computer, possibly a mobile device that could potentially support extensions) and/or multiple browsers or multiple browser profiles.
I'm still not convinced, the idea still sounds very very very wrong conceptually. What's so complicated about installing the style manually?
What's so complicated about installing the style manually?
I'm already doing the workaround of "Publish → Open USW page → Install → Reinstall → Close those tabs". It's not an intuitive workaround, though. Let me try to explain:
After using Stylus for several months (maybe years) without publishing anything, I developed a mental model of how user-styles work. They can either be "local", completely disconnected from anywhere else (if I created them locally); or they can be "connected", which means they have an upstream URL and thus they get in sync with upstream as much as possible (if I installed them from some website).
Then, at some point I discovered I could publish/update remote styles directly from within the Stylus extension itself. That's extremely convenient and useful. That's when I started publishing my newer local-only styles to USW. My expectation was that those styles would become "connected" after being published. That's also in-line with how adding a git remote repository works: after a local-only repository gains a remote repository, it is now possible to push and pull changes.
Which leads to this "bug". After publishing, those styles end-up in a half-connected state: I can push more changes, but I can't pull newer changes I made in another computer/browser/profile. That feels broken. Also because the workaround is to just reinstall the styles, which means things will get initialized properly.
And that's inconvenient because when I press "Check all styles for updates", if doesn't check these half-connected styles, leading to frustration and troubleshooting as to why they are not up-to-date, culminating in just reinstalling those styles to fix them.
Sidenote: I'm no stranger to user styles. I wrote many local-only *.user.css
styles that were natively supported in Opera browser (back in the Presto engine). Later, I used Stylish and also wrote and published many styles. Fast-forward to now, and I'm using Stylus and I've imported all the old styles into USW.
Then, I can ask the question back to you: What's so wrong about letting published styles to be synced two-way?
Adding the updateUrl
will allow these styles to be checked for updates. If any local change happens, Stylus naturally warns and asks for confirmation before overwriting with the new version. (Well, at least that's the behavior with any third-party style.) Thus, there is no risk of accidentally losing local changes.
In fact, not having the most up-to-date version can lead to diverging code, as the user modifies an older version of the style because that style wasn't synced. And that can lead to waste of time and loss of changes.
The arguments you provided didn't convince me that a purely outgoing operation should set an incoming-type relation.
Publishing a style for the first time isn't just a pure outgoing operation. It's, in fact, two operations together: "connect this locally-installed style to this remote style", followed by the pure-outgoing "publish the changes over there".
I don't see it this way. To me publishing is not git, it's a purely outgoing operation, and it should remain so. Theoretically we could add an option in the publishing panel, but it doesn't make any sense to me conceptually, moreover installing the style explicitly is a trivial operation that one can perform in a matter of seconds if necessary.
Bug Report
Bug Description
When installing a style from USW (userstyles.world), Stylus will set the
updateUrl
, and thus that style will be automatically checked for updates. However, when publishing a style to USW, theupdateUrl
will never be set.As a workaround, we can visit the published style and click to reinstall it, as that will correctly fill all the needed metadata (including the
updateUrl
).Why is this useful? It's good for when one single user uses multiple computers. So this user can publish the style from computer A, later start using computer B and publish an update, and then go back to computer A to fetch the update.
How to reproduce
BUG: There is no icon/button to check for updates for this just-published style, hence it's never checked for updates.
Screenshots
When I publish a style, it gets linked to USW. But, as you can see, there is no option to update the style that has just been published:
The information under their "Publish" section looks exactly the same.
But if you open the (normally hidden) "Settings" dialog for each style, one of them doesn't have the
updateUrl
.System Information
Additional Context
I can see the install-usercss/install-usercss.js file sets up
updateUrl
(and possibly other kinds of metadata that I haven't looked), while the edit/usw-integration.js doesn't.The expected behavior is to automatically set the newly-generated USW
updateUrl
, unless the style source-code explicitly sets@updateURL
.