It seems as a big problem to deliver your latest skin's version to a users. Sure, they always might check it on hubs or even find it unintetionaly, but what if?..
So, let's try WebParser plugin and PowerShell combo to check the latest versions, backup configs and install skins automatically.
For the beginning we have to decide where we will place our skin. I will use RM forum and GitHub (as the most convenient thing for storing projects) and show how it works on my own skin as example (but you will not find this module in current version until next release). Let's see:
Code: Select all
; --- We need some variables now. current version, new version and download URL. Also config path, path for backups and where we store updates.
[Variables]
Version = 1.2.1a
New_Version = [m.Updater_Parser_Check_Version]
Download_URL = [m.Updater_URL_1][m.Updater_URL_2]
Config = YourConfig.inc
Backup_Config = #ADDONSPATH#\YourSkin\Backup
Update_Folder = #ADDONSPATH#\YourSkin\Update
; --- Our WebParser measures. They checking which number written after "AuroraBar " in "LATEST VERSION" string and part of GitHub URL.
; - After check the parent measure comparing string that it get with current skin's version (#Version#)
; - I do not write or copy paste whole code, you able to decide yourself what you will do with this matches. In my case if match is false i just notice user and making update button available.
[m.Updater_Parser_Parent]
Measure = WebParser
URL = https://forum.rainmeter.net/viewtopic.php?f=27&p=181424#p181424
RegExp = (?siU)class="postlink">AuroraBar (.*)</a>.* <strong class="text-strong"><a href=(.*) class="postlink">.*https://github.com/deflore08/AuroraBar(.*)"
[m.Updater_Parser_Check_Version]
Measure = WebParser
URL = [m.Updater_Parser_Parent]
StringIndex = 1
DynamicVariables = 1
ifMatch = ^#Version#$
ifMatchAction = Do something
ifNotMatchAction = Do something
ifMatchMode = 1
[m.Updater_URL_1]
Measure = WebParser
URL = [m.Updater_Parser_Parent]
StringIndex = 2
[m.Updater_URL_2]
Measure = WebParser
URL = [m.Updater_Parser_Parent]
StringIndex = 3
; --- Autoupdates it is cool, but we have to remember, a skin may contain user-variables. You must care about it and store user defined settings in special file, not in one place with basic skin variables and settings. If you did, let's backup it before installing. We will use built-in RM's variable which lead us to %appdata%\Roaming\Rainmeter\Addons.
; - YOU CANNOT STORE THIS BACKUP IN SKIN FOLDER - IT WILL BE REPLACED
; - ALSO YOU CANNOT USE MERGE EACH UPDATE (but if you want, you're welcome.. :))
; - Also i recommend you always use logs everywhere it possible to catch an errors and to known what happens.
[shell.BACKUP_CONFIG]
Measure = PLUGIN
Plugin = RunCommand
Program = PowerShell
Parameter = Copy-Item -Path #@#\#Config# -Destination #Backup_Config# -Force
State = Hide
DynamicVariables = 1
OutputType = UTF8
OutputFile = your_log_file.log
[shell.RESTORE_CONFIG]
Measure = PLUGIN
Plugin = RunCommand
Program = PowerShell
Parameter = Copy-Item -Path #Backup_Config# -Destination #@#\#Config# -Force
State = Hide
DynamicVariables = 1
OutputType = UTF8
OutputFile = your_log_file.log
; --- Downloader. After download it will begin chain of actions. Backup config and then after short delay it will start installer.
[m.Updater_Downloader]
Measure = PLUGIN
Plugin = RunCommand
Program = PowerShell
Parameter = New-Item -Path #Update_Folder# -ItemType Directory #CRLF# $client = new-object System.Net.WebClient #CRLF# $client.DownloadFile(""#Download_URL#"", """#Update_Folder#\AuroraBar_#New_Version#.rmskin""")
State = Hide
DynamicVariables = 1
OutputType = UTF8
OutputFile = your_log_file.log
FinishAction = [!CommandMeasure shell.BACKUP_CONFIG "Run"][!Delay 1000][!CommandMeasure m.Updater_Skin_Installer "Run"]
[m.Updater_Skin_Installer]
Measure = PLUGIN
Plugin = RunCommand
Program = PowerShell
Parameter = #Update_Folder#\AuroraBar_#New_Version#.rmskin
State = Hide
DynamicVariables = 1
OutputType = UTF8
OutputFile = your_log_file.log
As always, glad to serve and waiting for your own improvements.
P.S. I don't think I should be saying that, it's kind of obvious, but i do not want to know how many apes you kill with that. Thanks you.