Skip to content

Commit bb168e5

Browse files
authored
Merge pull request #1695 from chsami/development
Notify once for outdated Microbot plugins
2 parents 5771671 + bf5dd8c commit bb168e5

2 files changed

Lines changed: 103 additions & 0 deletions

File tree

runelite-client/src/main/java/net/runelite/client/plugins/microbot/externalplugins/MicrobotPluginManager.java

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ public class MicrobotPluginManager {
8787
private static final File PLUGIN_DIR = new File(RuneLite.RUNELITE_DIR, "microbot-plugins");
8888
private static final String INSTALLED_VERSION_GROUP = "microbotPluginVersions";
8989
private static final String INSTALLED_VERSION_KEY_PREFIX = "plugin.";
90+
private static final String UPDATE_NOTIFICATION_GROUP = "microbotPluginUpdateNotifications";
91+
private static final String UPDATE_NOTIFICATION_KEY_PREFIX = "plugin.";
9092

9193
private final OkHttpClient okHttpClient;
9294
private final MicrobotPluginClient microbotPluginClient;
@@ -1244,6 +1246,54 @@ public Optional<String> getInstalledPluginVersion(String internalName) {
12441246
return lookupInstalledPluginVersion(internalName).map(InstalledPluginVersion::getVersion);
12451247
}
12461248

1249+
public Optional<OutdatedPluginUpdate> getOutdatedPluginUpdate(Plugin plugin) {
1250+
MicrobotPluginManifest manifest = getPluginManifest(plugin);
1251+
if (manifest == null) {
1252+
return Optional.empty();
1253+
}
1254+
1255+
String internalName = manifest.getInternalName();
1256+
String latestVersion = manifest.getVersion();
1257+
String installedVersion = getInstalledPluginVersion(internalName)
1258+
.orElseGet(() -> {
1259+
PluginDescriptor descriptor = plugin.getClass().getAnnotation(PluginDescriptor.class);
1260+
return descriptor == null ? null : descriptor.version();
1261+
});
1262+
1263+
if (Strings.isNullOrEmpty(internalName)
1264+
|| Strings.isNullOrEmpty(installedVersion)
1265+
|| Strings.isNullOrEmpty(latestVersion)
1266+
|| latestVersion.equals(installedVersion)) {
1267+
return Optional.empty();
1268+
}
1269+
1270+
String notificationKey = UPDATE_NOTIFICATION_KEY_PREFIX + internalName;
1271+
String notifiedVersion = configManager.getConfiguration(UPDATE_NOTIFICATION_GROUP, notificationKey);
1272+
if (latestVersion.equals(notifiedVersion)) {
1273+
return Optional.empty();
1274+
}
1275+
1276+
return Optional.of(new OutdatedPluginUpdate(
1277+
internalName,
1278+
Strings.isNullOrEmpty(manifest.getDisplayName()) ? internalName : manifest.getDisplayName(),
1279+
installedVersion,
1280+
latestVersion
1281+
));
1282+
}
1283+
1284+
public void rememberOutdatedPluginUpdateNotification(OutdatedPluginUpdate outdatedPluginUpdate) {
1285+
if (outdatedPluginUpdate == null || Strings.isNullOrEmpty(outdatedPluginUpdate.getInternalName())
1286+
|| Strings.isNullOrEmpty(outdatedPluginUpdate.getLatestVersion())) {
1287+
return;
1288+
}
1289+
1290+
configManager.setConfiguration(
1291+
UPDATE_NOTIFICATION_GROUP,
1292+
UPDATE_NOTIFICATION_KEY_PREFIX + outdatedPluginUpdate.getInternalName(),
1293+
outdatedPluginUpdate.getLatestVersion()
1294+
);
1295+
}
1296+
12471297
private void rememberInstalledPluginVersion(String internalName, String version, String sha256) {
12481298
if (Strings.isNullOrEmpty(internalName) || Strings.isNullOrEmpty(version) || Strings.isNullOrEmpty(sha256)) {
12491299
return;
@@ -1280,4 +1330,34 @@ public String getSha256() {
12801330
return sha256;
12811331
}
12821332
}
1333+
1334+
public static final class OutdatedPluginUpdate {
1335+
private final String internalName;
1336+
private final String displayName;
1337+
private final String installedVersion;
1338+
private final String latestVersion;
1339+
1340+
private OutdatedPluginUpdate(String internalName, String displayName, String installedVersion, String latestVersion) {
1341+
this.internalName = internalName;
1342+
this.displayName = displayName;
1343+
this.installedVersion = installedVersion;
1344+
this.latestVersion = latestVersion;
1345+
}
1346+
1347+
public String getInternalName() {
1348+
return internalName;
1349+
}
1350+
1351+
public String getDisplayName() {
1352+
return displayName;
1353+
}
1354+
1355+
public String getInstalledVersion() {
1356+
return installedVersion;
1357+
}
1358+
1359+
public String getLatestVersion() {
1360+
return latestVersion;
1361+
}
1362+
}
12831363
}

runelite-client/src/main/java/net/runelite/client/plugins/microbot/ui/MicrobotPluginListPanel.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package net.runelite.client.plugins.microbot.ui;
2626

2727
import com.google.common.collect.ImmutableList;
28+
import com.google.common.html.HtmlEscapers;
2829
import lombok.Getter;
2930
import lombok.extern.slf4j.Slf4j;
3031
import net.runelite.client.config.Config;
@@ -282,6 +283,9 @@ void openConfigurationPanel(MicrobotPluginConfigurationDescriptor plugin) {
282283
}
283284

284285
void startPlugin(Plugin plugin) {
286+
microbotPluginManager.getOutdatedPluginUpdate(plugin)
287+
.ifPresent(this::showOutdatedPluginNotification);
288+
285289
pluginManager.setPluginEnabled(plugin, true);
286290

287291
try {
@@ -311,6 +315,25 @@ private List<String> getPinnedPluginNames() {
311315
return Text.fromCSV(config);
312316
}
313317

318+
private void showOutdatedPluginNotification(MicrobotPluginManager.OutdatedPluginUpdate outdatedPluginUpdate) {
319+
String message = "<html>\""
320+
+ HtmlEscapers.htmlEscaper().escape(outdatedPluginUpdate.getDisplayName())
321+
+ "\" is out of date.<br><br>Installed version: "
322+
+ HtmlEscapers.htmlEscaper().escape(outdatedPluginUpdate.getInstalledVersion())
323+
+ "<br>Latest version: "
324+
+ HtmlEscapers.htmlEscaper().escape(outdatedPluginUpdate.getLatestVersion())
325+
+ "<br><br>Update it from the <strong>Microbot Plugin Hub</strong> to get the latest fixes.</html>";
326+
327+
JOptionPane.showMessageDialog(
328+
this,
329+
message,
330+
"Microbot Plugin Update Available",
331+
JOptionPane.INFORMATION_MESSAGE
332+
);
333+
334+
microbotPluginManager.rememberOutdatedPluginUpdateNotification(outdatedPluginUpdate);
335+
}
336+
314337
void savePinnedPlugins() {
315338
final String value = pluginList.stream()
316339
.filter(MicrobotPluginListItem::isPinned)

0 commit comments

Comments
 (0)