I develop a commercial plugin which I've been selling for almost a year now. My licence terms are similar to what JetBrains used to use before the switch to subscription pricing - a user or a company buys a licence, the licence is perpetual but they will only get a year of updates. However I'm having problems preventing the user from updating the plugin to a version they shouldn't be using because of their licence terms. Here's what I'm doing right now:
- In an ApplicationComponent, I get the user's licence details and if they're present, I check if their year of updates is expired. If it is, I add the plugin ID to UpdateChecker.excludedFromUpdateCheckPlugins.
- Later, in a StartupActivity, I do full licence validation and send the user through various workflows. I'm not doing this yet, but this is where I will check whether their plugin version is later than they should be using. If it is, I'll disable the plugin and restart the IDE, or perhaps try to allow them to update their licence or downgrade their plugin.
#2 will probably be a fairly bad UI experience, and I'd like to avoid the user getting into that state if possible.
#1 stops my plugin being updated by the automatic checker, but I cannot seem to find a way to stop the user updating in the Browse Repositories panel, or to provide any information there that would let them know that if they do update their plugin version will be incorrect. Obviously if they install from disk they'll get #2 when they restart, but users are reasonably likely to see a possible upgrade via the Browse Repositories panel and attempt it.
Is there any way I can control this? None of this process seems to be very extensible by plugins.