@@ -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}
0 commit comments