28 Commits
v1.1 ... 1.4.1

Author SHA1 Message Date
96c178b310 v1.4.1 2024-06-17 16:56:08 +02:00
bbac69b79e support urls 2024-06-17 16:55:31 +02:00
97b38ed90c update nuget packages 2024-06-17 16:24:06 +02:00
c0fb1e3904 minor code improvements 2024-04-21 11:40:49 +02:00
fd701f3615 update structure 2024-04-21 09:36:33 +02:00
34fa5fbffe v1.4 2023-08-26 21:40:19 +02:00
0776611de4 add automatic in-app-updater 2023-08-26 21:40:15 +02:00
0e9667ab59 add product version to app title 2023-08-26 21:39:54 +02:00
8692c40323 update Pilz deps 2023-08-26 20:38:35 +02:00
69c5de7e42 update nuget packages 2023-08-26 19:57:28 +02:00
f1dc55c63f v1.3.3 2023-08-26 16:32:03 +02:00
7e814b37c3 catch errors on update/install 2023-08-26 16:31:36 +02:00
9407f3fed6 v1.3.2 2023-05-05 14:26:59 +02:00
5925836736 add IsDirectory and support Delete actions 2023-05-05 14:26:55 +02:00
461efe7d14 v1.3.1 2023-05-05 08:14:43 +02:00
b74cc0d633 create dest directory if not exists 2023-05-05 08:14:29 +02:00
52943e03be add update url to settings form 2023-05-04 11:22:02 +02:00
2c69c3eb1b delete SupportedOSPlatform again 2023-05-04 11:18:00 +02:00
60c625ae08 v1.3 2023-05-04 11:17:00 +02:00
0c1ffd82c5 v1.3 2023-05-04 11:13:39 +02:00
0d7e570676 use new system via an update info 2023-05-04 11:12:21 +02:00
6dd6721667 d 2023-02-26 16:41:56 +01:00
a7c31d6086 revertsadfasdf 2023-02-26 16:30:08 +01:00
cc558ab274 allow remove 2023-02-26 15:50:03 +01:00
ad18e33a6b v1.2.1 2023-02-20 17:25:26 +01:00
fa9bb19e79 v1.2 2023-02-17 19:35:11 +01:00
c0c8878bc3 do not ignore removed files by default via AppConfig 2023-02-17 19:34:36 +01:00
2be12d0630 update nugets 2023-01-13 12:33:58 +01:00
32 changed files with 1140 additions and 593 deletions

View File

@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RootNamespace>ModpackUpdater.GitLab</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ModpackUpdater.Model\ModpackUpdater.Model.vbproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,33 @@
Imports System.Net.Http
Imports ModpackUpdater.Model
Imports Newtonsoft.Json
Public Class UpdateConfigExt
'<Extension>
'Public Sub SaveToSnippet(config As UpdateConfig, gitlabUrl As String, gitlabToken As String, projectId As Integer, snippetId As Integer, snippetFilePath As String)
' Dim client As New GitLabClient(gitlabUrl, gitlabToken)
' Dim update As New SnippetProjectUpdate With {
' .Visibility = VisibilityLevel.Public,
' .ProjectId = projectId,
' .SnippetId = snippetId,
' .Files = {
' New SnippetUpdateFile With {
' .Action = SnippetUpdateFileAction.Update.Create,
' .FilePath = snippetFilePath,
' .Content = JsonConvert.SerializeObject(config)
' }
' }
' }
' client.Snippets.Update(update)
'End Sub
Public Shared Function LoadFromSnippet(url As String) As UpdateConfig
Dim client As New HttpClient
Dim result = client.GetStringAsync(url).Result
Return JsonConvert.DeserializeObject(Of UpdateConfig)(result)
End Function
End Class

View File

@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RootNamespace>ModpackUpdater.Manager</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="WebDav.Client" Version="2.8.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ModpackUpdater.Model\ModpackUpdater.Model.vbproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,23 @@
Imports ModpackUpdater.Model
Public Class UpdateCheckResult
Public Property IsLegacy As Boolean
Public ReadOnly Property SyncFiles As New List(Of UpdateSyncFile)
Public Property CurrentVersion As Version
Public Property LatestVersion As Version
Public ReadOnly Property UpdateActions As New List(Of UpdateAction)
Public Property HasError As Boolean
Public ReadOnly Property HasUpdates As Boolean
Get
If IsLegacy Then
Return SyncFiles.Where(Function(n) n.SyncAction <> UpdateSyncAction.None).Any
Else
Return CurrentVersion < LatestVersion
End If
End Get
End Property
End Class

View File

@@ -1,5 +1,8 @@
Imports System.IO
Imports System.Net
Imports System.Net.Http
Imports ModpackUpdater.Model
Imports WebDav
@@ -11,12 +14,18 @@ Public Class UpdateInstaller
Private ReadOnly updateConfig As UpdateConfig
Private ReadOnly localPath As String
Private webdavClient As WebDavClient = Nothing
Private httpClient As New HttpClient
Public Sub New(updateConfig As UpdateConfig, localPath As String)
Me.updateConfig = updateConfig
Me.localPath = localPath
End Sub
Protected Overrides Sub Finalize()
httpClient.Dispose()
MyBase.Finalize()
End Sub
Private Function CreateClient() As WebDavClient
If webdavClient Is Nothing Then
Dim params As New WebDavClientParams With {
@@ -29,13 +38,57 @@ Public Class UpdateInstaller
Return webdavClient
End Function
Private Async Function DownloadUpdateInfos() As Task(Of UpdateInfos)
Dim content As String = Await httpClient.GetStringAsync(updateConfig.UpdateUrl)
Return UpdateInfos.Parse(content)
End Function
Public Async Function CheckForUpdates(ignoreRevmoedFiles As Boolean) As Task(Of UpdateCheckResult)
Dim infos As UpdateInfos = Await DownloadUpdateInfos()
Dim result As New UpdateCheckResult
If infos IsNot Nothing AndAlso infos.Updates.Any Then
Dim updatesOrderes = infos.Updates.OrderByDescending(Function(n) n.Version)
result.LatestVersion = updatesOrderes.First.Version
If ModpackInfo.HasModpackInfo(localPath) Then
Dim modpackInfo As ModpackInfo = ModpackInfo.Load(localPath)
result.CurrentVersion = modpackInfo.Version
Dim checkingVersionIndex As Integer = 0
Dim checkingVersion As UpdateInfo = updatesOrderes(checkingVersionIndex)
Do While checkingVersion IsNot Nothing AndAlso checkingVersion.Version > result.CurrentVersion
Dim actionsToAdd As New List(Of UpdateAction)
For Each action In checkingVersion.Actions
If Not result.UpdateActions.Any(Function(n) n.DestPath = action.DestPath) Then
actionsToAdd.Add(action)
End If
Next
result.UpdateActions.InsertRange(0, actionsToAdd)
checkingVersionIndex += 1
checkingVersion = updatesOrderes.ElementAtOrDefault(checkingVersionIndex)
Loop
Else
Await CheckForUpdatesLegacy(result, ignoreRevmoedFiles)
End If
End If
Return result
End Function
Private Async Function CheckForUpdatesLegacy(result As UpdateCheckResult, ignoreRevmoedFiles As Boolean) As Task
Dim client As WebDavClient = CreateClient()
Dim resTopFolder As WebDavResource = Nothing
Dim checkedFiles = New List(Of String)()
Dim responseSuccessfull As Boolean = False
result.CurrentVersion = New Version("0.0.0.0")
result.IsLegacy = True
'Check for new & updated files
Dim response = Await client.Propfind(String.Empty, New PropfindParameters() With {.ApplyTo = ApplyTo.Propfind.ResourceAndAncestors})
If resTopFolder Is Nothing AndAlso response.IsSuccessful AndAlso response.Resources.Any() Then
@@ -101,11 +154,73 @@ Public Class UpdateInstaller
End If
Next
End If
Return result
End Function
Public Async Function InstallUpdates(checkResult As UpdateCheckResult, Optional ignoreActions As UpdateSyncAction = UpdateSyncAction.None) As Task(Of Boolean?)
Dim isSuccessfully As Boolean
Dim modpackInfo As ModpackInfo
If ModpackInfo.HasModpackInfo(localPath) Then
modpackInfo = ModpackInfo.Load(localPath)
Else
modpackInfo = New ModpackInfo
End If
If checkResult.IsLegacy Then
isSuccessfully = Await InstallUpdatesLegacy(checkResult, ignoreActions)
Else
Dim processed As Integer = 0
For Each action As UpdateAction In checkResult.UpdateActions
Dim destFilePath As String = Path.Combine(localPath, action.DestPath)
Select Case action.Type
Case UpdateActionType.Update
Directory.CreateDirectory(Path.GetDirectoryName(destFilePath))
Dim sRemote As Stream = Await httpClient.GetStreamAsync(action.DownloadUrl)
Dim fs As New FileStream(destFilePath, FileMode.Create, FileAccess.ReadWrite)
Await sRemote.CopyToAsync(fs)
sRemote.Close()
fs.Close()
Case UpdateActionType.Delete
If action.IsDirectory Then
If Directory.Exists(destFilePath) Then
Directory.Delete(destFilePath, True)
End If
Else
If File.Exists(destFilePath) Then
File.Delete(destFilePath)
End If
End If
Case UpdateActionType.Copy
Dim srcFilePath As String = Path.Combine(localPath, action.SrcPath)
If File.Exists(srcFilePath) Then
Directory.CreateDirectory(Path.GetDirectoryName(destFilePath))
File.Copy(srcFilePath, destFilePath, True)
End If
Case UpdateActionType.Move
Dim srcFilePath As String = Path.Combine(localPath, action.SrcPath)
If File.Exists(srcFilePath) Then
Directory.CreateDirectory(Path.GetDirectoryName(destFilePath))
File.Move(srcFilePath, destFilePath, True)
End If
End Select
processed += 1
RaiseEvent InstallProgessUpdated(checkResult, processed)
Next
isSuccessfully = True
End If
If isSuccessfully Then
modpackInfo.Version = checkResult.LatestVersion
modpackInfo.Save(localPath)
End If
Return isSuccessfully
End Function
Private Async Function InstallUpdatesLegacy(checkResult As UpdateCheckResult, Optional ignoreActions As UpdateSyncAction = UpdateSyncAction.None) As Task(Of Boolean?)
Dim client As WebDavClient = CreateClient()
Dim success As Boolean? = False
Dim processed As Integer = 0

View File

@@ -0,0 +1,11 @@
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Converters
<JsonConverter(GetType(StringEnumConverter))>
<Flags>
Public Enum UpdateSyncAction
None
NewFile
RemovedFile
UpdatedFile = 4
End Enum

View File

@@ -0,0 +1,29 @@
Imports System.IO
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Converters
Public Class ModpackInfo
Private Const FILENAME_MODPACKINFO = "modpack-info.json"
<JsonConverter(GetType(VersionConverter))>
Public Property Version As Version
Public Sub Save(mcRoot As String)
File.WriteAllText(GetFilePath(mcRoot), JsonConvert.SerializeObject(Me))
End Sub
Public Shared Function Load(mcRoot As String) As ModpackInfo
Return JsonConvert.DeserializeObject(Of ModpackInfo)(File.ReadAllText(GetFilePath(mcRoot)))
End Function
Public Shared Function HasModpackInfo(mcRoot As String) As Boolean
Return File.Exists(GetFilePath(mcRoot))
End Function
Private Shared Function GetFilePath(mcRoot As String)
Return Path.Combine(mcRoot, FILENAME_MODPACKINFO)
End Function
End Class

View File

@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RootNamespace>ModpackUpdater.Model</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Pilz.Cryptography" Version="2.0.1" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,13 @@
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Converters
Public Class UpdateAction
<JsonConverter(GetType(StringEnumConverter))>
Public Property Type As UpdateActionType
Public Property DestPath As String
Public Property SrcPath As String
Public Property DownloadUrl As String
Public Property IsDirectory As Boolean
End Class

View File

@@ -0,0 +1,7 @@
Public Enum UpdateActionType
None
Update
Delete
Move
Copy
End Enum

View File

@@ -0,0 +1,22 @@
Imports System.IO
Imports Newtonsoft.Json
Imports Pilz.Cryptography
Public Class UpdateConfig
Public Property UpdateUrl As String
Public Property WebdavURL As SecureString
Public Property WebdavUsername As SecureString
Public Property WebdavPassword As SecureString
Public Sub SaveToFile(filePath As String)
File.WriteAllText(filePath, JsonConvert.SerializeObject(Me))
End Sub
Public Shared Function LoadFromFile(filePath As String) As UpdateConfig
Return JsonConvert.DeserializeObject(Of UpdateConfig)(File.ReadAllText(filePath))
End Function
End Class

View File

@@ -0,0 +1,10 @@
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Converters
Public Class UpdateInfo
<JsonConverter(GetType(VersionConverter))>
Public Property Version As Version
Public ReadOnly Property Actions As New List(Of UpdateAction)
End Class

View File

@@ -0,0 +1,11 @@
Imports Newtonsoft.Json
Public Class UpdateInfos
Public ReadOnly Property Updates As New List(Of UpdateInfo)
Public Shared Function Parse(content As String) As UpdateInfos
Return JsonConvert.DeserializeObject(Of UpdateInfos)(content)
End Function
End Class

View File

@@ -5,6 +5,12 @@ VisualStudioVersion = 17.2.32526.322
MinimumVisualStudioVersion = 10.0.40219.1
Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "ModpackUpdater", "ModpackUpdater\ModpackUpdater.vbproj", "{33DD239C-1F33-40F9-908F-54BC02FBA420}"
EndProject
Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "ModpackUpdater.Model", "ModpackUpdater.Model\ModpackUpdater.Model.vbproj", "{BC4FE51B-4045-432C-B4D9-8C6CF5372DC0}"
EndProject
Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "ModpackUpdater.Manager", "ModpackUpdater.Manager\ModpackUpdater.Manager.vbproj", "{618DAFD6-3336-4621-82F9-EA5C783D2D2E}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ModpackUpdater.GitLab", "ModpackUpdater.GitLab\ModpackUpdater.GitLab.vbproj", "{65D44991-EB3B-4AC4-9166-3E8D0BADD402}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +21,18 @@ Global
{33DD239C-1F33-40F9-908F-54BC02FBA420}.Debug|Any CPU.Build.0 = Debug|Any CPU
{33DD239C-1F33-40F9-908F-54BC02FBA420}.Release|Any CPU.ActiveCfg = Release|Any CPU
{33DD239C-1F33-40F9-908F-54BC02FBA420}.Release|Any CPU.Build.0 = Release|Any CPU
{BC4FE51B-4045-432C-B4D9-8C6CF5372DC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BC4FE51B-4045-432C-B4D9-8C6CF5372DC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC4FE51B-4045-432C-B4D9-8C6CF5372DC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC4FE51B-4045-432C-B4D9-8C6CF5372DC0}.Release|Any CPU.Build.0 = Release|Any CPU
{618DAFD6-3336-4621-82F9-EA5C783D2D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{618DAFD6-3336-4621-82F9-EA5C783D2D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{618DAFD6-3336-4621-82F9-EA5C783D2D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{618DAFD6-3336-4621-82F9-EA5C783D2D2E}.Release|Any CPU.Build.0 = Release|Any CPU
{65D44991-EB3B-4AC4-9166-3E8D0BADD402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{65D44991-EB3B-4AC4-9166-3E8D0BADD402}.Debug|Any CPU.Build.0 = Debug|Any CPU
{65D44991-EB3B-4AC4-9166-3E8D0BADD402}.Release|Any CPU.ActiveCfg = Release|Any CPU
{65D44991-EB3B-4AC4-9166-3E8D0BADD402}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -4,8 +4,16 @@ Imports Newtonsoft.Json.Linq
Public Class AppConfig
Public Property LastMinecraftProfilePath As string
Public Property LastConfigFilePath As string
Public Property LastMinecraftProfilePath As String
Public Property LastConfigFilePath As String
Public Property KeepLocalFiles As New List(Of String)
Public Property AllowRemoveLocalFiles As Boolean
Public Sub Reset()
KeepLocalFiles.Clear()
KeepLocalFiles.Add("OptiFine_1.7.10_HD_U_E7.jar")
AllowRemoveLocalFiles = False
End Sub
Public Shared ReadOnly Property Instance As AppConfig
Get
@@ -16,6 +24,7 @@ Public Class AppConfig
myInstance = LoadConfig(SettingsPath)
Else
myInstance = New AppConfig
myInstance.Reset()
End If
End If

View File

@@ -0,0 +1,70 @@
Imports System.IO
Imports System.Net
Imports System.Net.Http
Imports WebDav
Public Class AppUpdater
Private Const WEBDAV_URL As String = "https://cloud.pilzinsel64.de/public.php/webdav"
Private Const WEBDAV_KEY As String = "z4dGicDYmG2neG9"
Private Const DOWNLOAD_URL As String = "https://cloud.pilzinsel64.de/s/z4dGicDYmG2neG9/download"
Public Shared Async Function Check() As Task(Of Boolean)
Dim appFileName = Pilz.IO.Extensions.GetExecutablePath()
Dim hasUpdate As Boolean = False
Dim params As New WebDavClientParams With {
.BaseAddress = New Uri(WEBDAV_URL),
.Credentials = New NetworkCredential(WEBDAV_KEY, String.Empty)
}
Try
Using client As New WebDavClient(params)
Dim result = Await client.Propfind(String.Empty)
If result.IsSuccessful AndAlso result.Resources.Count <> 0 Then
Dim resource = result.Resources(0)
Dim appModificationDate = File.GetLastWriteTimeUtc(appFileName)
Dim remoteModificationDate = resource.LastModifiedDate?.ToUniversalTime
If remoteModificationDate > appModificationDate Then
hasUpdate = True
End If
End If
End Using
Catch ex As Exception
End Try
Return hasUpdate
End Function
Public Shared Async Function Install() As Task
Dim client As New HttpClient
Dim tempFileName = Path.GetTempFileName
Dim appFileName = Pilz.IO.Extensions.GetExecutablePath()
Dim oldFileName = appFileName & ".old"
'Delete old file
Try
File.Delete(oldFileName)
Catch ex As Exception
End Try
'Download the new file
Using tempFileStream As New FileStream(tempFileName, FileMode.Create, FileAccess.ReadWrite)
Dim downloadStream As Stream = Nothing
Try
downloadStream = Await client.GetStreamAsync(DOWNLOAD_URL)
Await downloadStream.CopyToAsync(tempFileStream)
Catch
Finally
downloadStream?.Dispose()
End Try
End Using
'Replace current application file with new file
File.Move(appFileName, oldFileName, True)
File.Move(tempFileName, appFileName)
End Function
End Class

View File

@@ -24,207 +24,217 @@ Partial Class Form1
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
Me.RadLabel1 = New Telerik.WinControls.UI.RadLabel()
Me.RadLabel2 = New Telerik.WinControls.UI.RadLabel()
Me.RadLabel3 = New Telerik.WinControls.UI.RadLabel()
Me.RadLabel_Status = New Telerik.WinControls.UI.RadLabel()
Me.RadTextBoxControl_MinecraftProfileFolder = New Telerik.WinControls.UI.RadTextBoxControl()
Me.RadTextBoxControl_ModpackConfig = New Telerik.WinControls.UI.RadTextBoxControl()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.RadButton_Install = New Telerik.WinControls.UI.RadButton()
Me.RadButton_CheckForUpdates = New Telerik.WinControls.UI.RadButton()
Me.RadButton_EditModpackConfig = New Telerik.WinControls.UI.RadButton()
Me.RadButton_SearchModpackConfig = New Telerik.WinControls.UI.RadButton()
Me.RadButton_SearchMinecraftProfileFolder = New Telerik.WinControls.UI.RadButton()
CType(Me.RadLabel1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadLabel2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadLabel3, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadLabel_Status, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadTextBoxControl_MinecraftProfileFolder, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadTextBoxControl_ModpackConfig, System.ComponentModel.ISupportInitialize).BeginInit()
Me.Panel1.SuspendLayout()
CType(Me.RadButton_Install, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadButton_CheckForUpdates, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadButton_EditModpackConfig, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadButton_SearchModpackConfig, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadButton_SearchMinecraftProfileFolder, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'RadLabel1
'
Me.RadLabel1.Location = New System.Drawing.Point(3, 5)
Me.RadLabel1.Name = "RadLabel1"
Me.RadLabel1.Size = New System.Drawing.Size(135, 19)
Me.RadLabel1.TabIndex = 0
Me.RadLabel1.Text = "Minecraft profile folder:"
'
'RadLabel2
'
Me.RadLabel2.Location = New System.Drawing.Point(3, 63)
Me.RadLabel2.Name = "RadLabel2"
Me.RadLabel2.Size = New System.Drawing.Size(98, 19)
Me.RadLabel2.TabIndex = 1
Me.RadLabel2.Text = "Modpack config:"
'
'RadLabel3
'
Me.RadLabel3.Location = New System.Drawing.Point(3, 121)
Me.RadLabel3.Name = "RadLabel3"
Me.RadLabel3.Size = New System.Drawing.Size(43, 19)
Me.RadLabel3.TabIndex = 2
Me.RadLabel3.Text = "Status:"
'
'RadLabel_Status
'
Me.RadLabel_Status.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.RadLabel_Status.AutoSize = False
Me.RadLabel_Status.Location = New System.Drawing.Point(144, 119)
Me.RadLabel_Status.Name = "RadLabel_Status"
Me.RadLabel_Status.Size = New System.Drawing.Size(273, 22)
Me.RadLabel_Status.TabIndex = 3
Me.RadLabel_Status.Text = "-"
Me.RadLabel_Status.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
'
'RadTextBoxControl_MinecraftProfileFolder
'
Me.RadTextBoxControl_MinecraftProfileFolder.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.RadTextBoxControl_MinecraftProfileFolder.IsReadOnly = True
Me.RadTextBoxControl_MinecraftProfileFolder.Location = New System.Drawing.Point(144, 3)
Me.RadTextBoxControl_MinecraftProfileFolder.Name = "RadTextBoxControl_MinecraftProfileFolder"
Me.RadTextBoxControl_MinecraftProfileFolder.NullText = "No file loaded!"
Me.RadTextBoxControl_MinecraftProfileFolder.Size = New System.Drawing.Size(273, 22)
Me.RadTextBoxControl_MinecraftProfileFolder.TabIndex = 4
'
'RadTextBoxControl_ModpackConfig
'
Me.RadTextBoxControl_ModpackConfig.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.RadTextBoxControl_ModpackConfig.IsReadOnly = True
Me.RadTextBoxControl_ModpackConfig.Location = New System.Drawing.Point(144, 61)
Me.RadTextBoxControl_ModpackConfig.Name = "RadTextBoxControl_ModpackConfig"
Me.RadTextBoxControl_ModpackConfig.NullText = "No file loaded!"
Me.RadTextBoxControl_ModpackConfig.Size = New System.Drawing.Size(273, 22)
Me.RadTextBoxControl_ModpackConfig.TabIndex = 5
'
'Panel1
'
Me.Panel1.BackColor = System.Drawing.Color.Transparent
Me.Panel1.Controls.Add(Me.RadButton_Install)
Me.Panel1.Controls.Add(Me.RadButton_CheckForUpdates)
Me.Panel1.Controls.Add(Me.RadButton_EditModpackConfig)
Me.Panel1.Controls.Add(Me.RadButton_SearchModpackConfig)
Me.Panel1.Controls.Add(Me.RadButton_SearchMinecraftProfileFolder)
Me.Panel1.Controls.Add(Me.RadLabel1)
Me.Panel1.Controls.Add(Me.RadTextBoxControl_ModpackConfig)
Me.Panel1.Controls.Add(Me.RadLabel2)
Me.Panel1.Controls.Add(Me.RadTextBoxControl_MinecraftProfileFolder)
Me.Panel1.Controls.Add(Me.RadLabel3)
Me.Panel1.Controls.Add(Me.RadLabel_Status)
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel1.Location = New System.Drawing.Point(0, 0)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(420, 176)
Me.Panel1.TabIndex = 6
'
'RadButton_Install
'
Me.RadButton_Install.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.RadButton_Install.Image = Global.ModpackUpdater.My.Resources.MySymbols.icons8_software_installer_16px
Me.RadButton_Install.ImageAlignment = System.Drawing.ContentAlignment.MiddleRight
Me.RadButton_Install.Location = New System.Drawing.Point(337, 149)
Me.RadButton_Install.Name = "RadButton_Install"
Me.RadButton_Install.Size = New System.Drawing.Size(80, 24)
Me.RadButton_Install.TabIndex = 10
Me.RadButton_Install.Text = "Install"
Me.RadButton_Install.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft
Me.RadButton_Install.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
'
'RadButton_CheckForUpdates
'
Me.RadButton_CheckForUpdates.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.RadButton_CheckForUpdates.Image = Global.ModpackUpdater.My.Resources.MySymbols.icons8_update_16px
Me.RadButton_CheckForUpdates.ImageAlignment = System.Drawing.ContentAlignment.MiddleRight
Me.RadButton_CheckForUpdates.Location = New System.Drawing.Point(191, 149)
Me.RadButton_CheckForUpdates.Name = "RadButton_CheckForUpdates"
Me.RadButton_CheckForUpdates.Size = New System.Drawing.Size(140, 24)
Me.RadButton_CheckForUpdates.TabIndex = 0
Me.RadButton_CheckForUpdates.Text = "Check for Updates"
Me.RadButton_CheckForUpdates.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft
Me.RadButton_CheckForUpdates.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
'
'RadButton_EditModpackConfig
'
Me.RadButton_EditModpackConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.RadButton_EditModpackConfig.Image = Global.ModpackUpdater.My.Resources.MySymbols.icons8_wrench_16px
Me.RadButton_EditModpackConfig.ImageAlignment = System.Drawing.ContentAlignment.MiddleRight
Me.RadButton_EditModpackConfig.Location = New System.Drawing.Point(3, 149)
Me.RadButton_EditModpackConfig.Name = "RadButton_EditModpackConfig"
Me.RadButton_EditModpackConfig.Size = New System.Drawing.Size(150, 24)
Me.RadButton_EditModpackConfig.TabIndex = 8
Me.RadButton_EditModpackConfig.Text = "Edit modpack config"
Me.RadButton_EditModpackConfig.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft
Me.RadButton_EditModpackConfig.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
'
'RadButton_SearchModpackConfig
'
Me.RadButton_SearchModpackConfig.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.RadButton_SearchModpackConfig.Image = CType(resources.GetObject("RadButton_SearchModpackConfig.Image"), System.Drawing.Image)
Me.RadButton_SearchModpackConfig.ImageAlignment = System.Drawing.ContentAlignment.MiddleRight
Me.RadButton_SearchModpackConfig.Location = New System.Drawing.Point(327, 89)
Me.RadButton_SearchModpackConfig.Name = "RadButton_SearchModpackConfig"
Me.RadButton_SearchModpackConfig.Size = New System.Drawing.Size(90, 24)
Me.RadButton_SearchModpackConfig.TabIndex = 7
Me.RadButton_SearchModpackConfig.Text = "Search"
Me.RadButton_SearchModpackConfig.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft
Me.RadButton_SearchModpackConfig.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
'
'RadButton_SearchMinecraftProfileFolder
'
Me.RadButton_SearchMinecraftProfileFolder.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.RadButton_SearchMinecraftProfileFolder.Image = CType(resources.GetObject("RadButton_SearchMinecraftProfileFolder.Image"), System.Drawing.Image)
Me.RadButton_SearchMinecraftProfileFolder.ImageAlignment = System.Drawing.ContentAlignment.MiddleRight
Me.RadButton_SearchMinecraftProfileFolder.Location = New System.Drawing.Point(327, 31)
Me.RadButton_SearchMinecraftProfileFolder.Name = "RadButton_SearchMinecraftProfileFolder"
Me.RadButton_SearchMinecraftProfileFolder.Size = New System.Drawing.Size(90, 24)
Me.RadButton_SearchMinecraftProfileFolder.TabIndex = 6
Me.RadButton_SearchMinecraftProfileFolder.Text = "Search"
Me.RadButton_SearchMinecraftProfileFolder.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft
Me.RadButton_SearchMinecraftProfileFolder.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(7, 15)
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(420, 176)
Me.Controls.Add(Me.Panel1)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.Name = "Form1"
'
'
'
Me.RootElement.ApplyShapeToControl = True
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Minecraft Modpack Updater"
CType(Me.RadLabel1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadLabel2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadLabel3, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadLabel_Status, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadTextBoxControl_MinecraftProfileFolder, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadTextBoxControl_ModpackConfig, System.ComponentModel.ISupportInitialize).EndInit()
Me.Panel1.ResumeLayout(False)
Me.Panel1.PerformLayout()
CType(Me.RadButton_Install, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadButton_CheckForUpdates, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadButton_EditModpackConfig, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadButton_SearchModpackConfig, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadButton_SearchMinecraftProfileFolder, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
RadLabel1 = New Telerik.WinControls.UI.RadLabel()
RadLabel2 = New Telerik.WinControls.UI.RadLabel()
RadLabel3 = New Telerik.WinControls.UI.RadLabel()
RadLabel_Status = New Telerik.WinControls.UI.RadLabel()
RadTextBoxControl_MinecraftProfileFolder = New Telerik.WinControls.UI.RadTextBoxControl()
RadTextBoxControl_ModpackConfig = New Telerik.WinControls.UI.RadTextBoxControl()
Panel1 = New Panel()
RadButton_Install = New Telerik.WinControls.UI.RadButton()
RadButton_CheckForUpdates = New Telerik.WinControls.UI.RadButton()
RadButton_EditModpackConfig = New Telerik.WinControls.UI.RadButton()
RadButton_SearchModpackConfig = New Telerik.WinControls.UI.RadButton()
RadButton_SearchMinecraftProfileFolder = New Telerik.WinControls.UI.RadButton()
RadButton_PasteModpackConfig = New Telerik.WinControls.UI.RadButton()
CType(RadLabel1, ComponentModel.ISupportInitialize).BeginInit()
CType(RadLabel2, ComponentModel.ISupportInitialize).BeginInit()
CType(RadLabel3, ComponentModel.ISupportInitialize).BeginInit()
CType(RadLabel_Status, ComponentModel.ISupportInitialize).BeginInit()
CType(RadTextBoxControl_MinecraftProfileFolder, ComponentModel.ISupportInitialize).BeginInit()
CType(RadTextBoxControl_ModpackConfig, ComponentModel.ISupportInitialize).BeginInit()
Panel1.SuspendLayout()
CType(RadButton_Install, ComponentModel.ISupportInitialize).BeginInit()
CType(RadButton_CheckForUpdates, ComponentModel.ISupportInitialize).BeginInit()
CType(RadButton_EditModpackConfig, ComponentModel.ISupportInitialize).BeginInit()
CType(RadButton_SearchModpackConfig, ComponentModel.ISupportInitialize).BeginInit()
CType(RadButton_SearchMinecraftProfileFolder, ComponentModel.ISupportInitialize).BeginInit()
CType(RadButton_PasteModpackConfig, ComponentModel.ISupportInitialize).BeginInit()
CType(Me, ComponentModel.ISupportInitialize).BeginInit()
SuspendLayout()
'
' RadLabel1
'
RadLabel1.Location = New Point(3, 5)
RadLabel1.Name = "RadLabel1"
RadLabel1.Size = New Size(124, 18)
RadLabel1.TabIndex = 0
RadLabel1.Text = "Minecraft profile folder:"
'
' RadLabel2
'
RadLabel2.Location = New Point(3, 63)
RadLabel2.Name = "RadLabel2"
RadLabel2.Size = New Size(90, 18)
RadLabel2.TabIndex = 1
RadLabel2.Text = "Modpack config:"
'
' RadLabel3
'
RadLabel3.Location = New Point(3, 121)
RadLabel3.Name = "RadLabel3"
RadLabel3.Size = New Size(39, 18)
RadLabel3.TabIndex = 2
RadLabel3.Text = "Status:"
'
' RadLabel_Status
'
RadLabel_Status.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right
RadLabel_Status.AutoSize = False
RadLabel_Status.Location = New Point(144, 119)
RadLabel_Status.Name = "RadLabel_Status"
RadLabel_Status.Size = New Size(273, 22)
RadLabel_Status.TabIndex = 3
RadLabel_Status.Text = "-"
RadLabel_Status.TextImageRelation = TextImageRelation.ImageBeforeText
'
' RadTextBoxControl_MinecraftProfileFolder
'
RadTextBoxControl_MinecraftProfileFolder.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right
RadTextBoxControl_MinecraftProfileFolder.IsReadOnly = True
RadTextBoxControl_MinecraftProfileFolder.Location = New Point(144, 3)
RadTextBoxControl_MinecraftProfileFolder.Name = "RadTextBoxControl_MinecraftProfileFolder"
RadTextBoxControl_MinecraftProfileFolder.NullText = "No file loaded!"
RadTextBoxControl_MinecraftProfileFolder.Size = New Size(273, 22)
RadTextBoxControl_MinecraftProfileFolder.TabIndex = 4
'
' RadTextBoxControl_ModpackConfig
'
RadTextBoxControl_ModpackConfig.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right
RadTextBoxControl_ModpackConfig.IsReadOnly = True
RadTextBoxControl_ModpackConfig.Location = New Point(144, 61)
RadTextBoxControl_ModpackConfig.Name = "RadTextBoxControl_ModpackConfig"
RadTextBoxControl_ModpackConfig.NullText = "No file loaded!"
RadTextBoxControl_ModpackConfig.Size = New Size(273, 22)
RadTextBoxControl_ModpackConfig.TabIndex = 5
'
' Panel1
'
Panel1.BackColor = Color.Transparent
Panel1.Controls.Add(RadButton_Install)
Panel1.Controls.Add(RadButton_CheckForUpdates)
Panel1.Controls.Add(RadButton_EditModpackConfig)
Panel1.Controls.Add(RadButton_PasteModpackConfig)
Panel1.Controls.Add(RadButton_SearchModpackConfig)
Panel1.Controls.Add(RadButton_SearchMinecraftProfileFolder)
Panel1.Controls.Add(RadLabel1)
Panel1.Controls.Add(RadTextBoxControl_ModpackConfig)
Panel1.Controls.Add(RadLabel2)
Panel1.Controls.Add(RadTextBoxControl_MinecraftProfileFolder)
Panel1.Controls.Add(RadLabel3)
Panel1.Controls.Add(RadLabel_Status)
Panel1.Dock = DockStyle.Fill
Panel1.Location = New Point(0, 0)
Panel1.Name = "Panel1"
Panel1.Size = New Size(420, 176)
Panel1.TabIndex = 6
'
' RadButton_Install
'
RadButton_Install.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right
RadButton_Install.Image = My.Resources.MySymbols.icons8_software_installer_16px
RadButton_Install.ImageAlignment = ContentAlignment.MiddleRight
RadButton_Install.Location = New Point(337, 149)
RadButton_Install.Name = "RadButton_Install"
RadButton_Install.Size = New Size(80, 24)
RadButton_Install.TabIndex = 10
RadButton_Install.Text = "Install"
RadButton_Install.TextAlignment = ContentAlignment.MiddleLeft
RadButton_Install.TextImageRelation = TextImageRelation.ImageBeforeText
'
' RadButton_CheckForUpdates
'
RadButton_CheckForUpdates.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right
RadButton_CheckForUpdates.Image = My.Resources.MySymbols.icons8_update_16px
RadButton_CheckForUpdates.ImageAlignment = ContentAlignment.MiddleRight
RadButton_CheckForUpdates.Location = New Point(191, 149)
RadButton_CheckForUpdates.Name = "RadButton_CheckForUpdates"
RadButton_CheckForUpdates.Size = New Size(140, 24)
RadButton_CheckForUpdates.TabIndex = 0
RadButton_CheckForUpdates.Text = "Check for Updates"
RadButton_CheckForUpdates.TextAlignment = ContentAlignment.MiddleLeft
RadButton_CheckForUpdates.TextImageRelation = TextImageRelation.ImageBeforeText
'
' RadButton_EditModpackConfig
'
RadButton_EditModpackConfig.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left
RadButton_EditModpackConfig.Image = My.Resources.MySymbols.icons8_wrench_16px
RadButton_EditModpackConfig.ImageAlignment = ContentAlignment.MiddleRight
RadButton_EditModpackConfig.Location = New Point(3, 149)
RadButton_EditModpackConfig.Name = "RadButton_EditModpackConfig"
RadButton_EditModpackConfig.Size = New Size(150, 24)
RadButton_EditModpackConfig.TabIndex = 8
RadButton_EditModpackConfig.Text = "Edit modpack config"
RadButton_EditModpackConfig.TextAlignment = ContentAlignment.MiddleLeft
RadButton_EditModpackConfig.TextImageRelation = TextImageRelation.ImageBeforeText
'
' RadButton_SearchModpackConfig
'
RadButton_SearchModpackConfig.Anchor = AnchorStyles.Top Or AnchorStyles.Right
RadButton_SearchModpackConfig.Image = CType(resources.GetObject("RadButton_SearchModpackConfig.Image"), Image)
RadButton_SearchModpackConfig.ImageAlignment = ContentAlignment.MiddleRight
RadButton_SearchModpackConfig.Location = New Point(327, 89)
RadButton_SearchModpackConfig.Name = "RadButton_SearchModpackConfig"
RadButton_SearchModpackConfig.Size = New Size(90, 24)
RadButton_SearchModpackConfig.TabIndex = 7
RadButton_SearchModpackConfig.Text = "Search"
RadButton_SearchModpackConfig.TextAlignment = ContentAlignment.MiddleLeft
RadButton_SearchModpackConfig.TextImageRelation = TextImageRelation.ImageBeforeText
'
' RadButton_SearchMinecraftProfileFolder
'
RadButton_SearchMinecraftProfileFolder.Anchor = AnchorStyles.Top Or AnchorStyles.Right
RadButton_SearchMinecraftProfileFolder.Image = CType(resources.GetObject("RadButton_SearchMinecraftProfileFolder.Image"), Image)
RadButton_SearchMinecraftProfileFolder.ImageAlignment = ContentAlignment.MiddleRight
RadButton_SearchMinecraftProfileFolder.Location = New Point(327, 31)
RadButton_SearchMinecraftProfileFolder.Name = "RadButton_SearchMinecraftProfileFolder"
RadButton_SearchMinecraftProfileFolder.Size = New Size(90, 24)
RadButton_SearchMinecraftProfileFolder.TabIndex = 6
RadButton_SearchMinecraftProfileFolder.Text = "Search"
RadButton_SearchMinecraftProfileFolder.TextAlignment = ContentAlignment.MiddleLeft
RadButton_SearchMinecraftProfileFolder.TextImageRelation = TextImageRelation.ImageBeforeText
'
' RadButton_PasteModpackConfig
'
RadButton_PasteModpackConfig.Anchor = AnchorStyles.Top Or AnchorStyles.Right
RadButton_PasteModpackConfig.Image = CType(resources.GetObject("RadButton_PasteModpackConfig.Image"), Image)
RadButton_PasteModpackConfig.ImageAlignment = ContentAlignment.MiddleRight
RadButton_PasteModpackConfig.Location = New Point(231, 89)
RadButton_PasteModpackConfig.Name = "RadButton_PasteModpackConfig"
RadButton_PasteModpackConfig.Size = New Size(90, 24)
RadButton_PasteModpackConfig.TabIndex = 7
RadButton_PasteModpackConfig.Text = "Paste"
RadButton_PasteModpackConfig.TextAlignment = ContentAlignment.MiddleLeft
RadButton_PasteModpackConfig.TextImageRelation = TextImageRelation.ImageBeforeText
'
' Form1
'
AutoScaleBaseSize = New Size(7, 15)
AutoScaleDimensions = New SizeF(7F, 15F)
AutoScaleMode = AutoScaleMode.Font
ClientSize = New Size(420, 176)
Controls.Add(Panel1)
Icon = CType(resources.GetObject("$this.Icon"), Icon)
MaximizeBox = False
Name = "Form1"
StartPosition = FormStartPosition.CenterScreen
Text = "Minecraft Modpack Updater"
CType(RadLabel1, ComponentModel.ISupportInitialize).EndInit()
CType(RadLabel2, ComponentModel.ISupportInitialize).EndInit()
CType(RadLabel3, ComponentModel.ISupportInitialize).EndInit()
CType(RadLabel_Status, ComponentModel.ISupportInitialize).EndInit()
CType(RadTextBoxControl_MinecraftProfileFolder, ComponentModel.ISupportInitialize).EndInit()
CType(RadTextBoxControl_ModpackConfig, ComponentModel.ISupportInitialize).EndInit()
Panel1.ResumeLayout(False)
Panel1.PerformLayout()
CType(RadButton_Install, ComponentModel.ISupportInitialize).EndInit()
CType(RadButton_CheckForUpdates, ComponentModel.ISupportInitialize).EndInit()
CType(RadButton_EditModpackConfig, ComponentModel.ISupportInitialize).EndInit()
CType(RadButton_SearchModpackConfig, ComponentModel.ISupportInitialize).EndInit()
CType(RadButton_SearchMinecraftProfileFolder, ComponentModel.ISupportInitialize).EndInit()
CType(RadButton_PasteModpackConfig, ComponentModel.ISupportInitialize).EndInit()
CType(Me, ComponentModel.ISupportInitialize).EndInit()
ResumeLayout(False)
End Sub
Friend WithEvents RadLabel1 As Telerik.WinControls.UI.RadLabel
@@ -239,4 +249,5 @@ Partial Class Form1
Friend WithEvents RadButton_EditModpackConfig As Telerik.WinControls.UI.RadButton
Friend WithEvents RadButton_SearchModpackConfig As Telerik.WinControls.UI.RadButton
Friend WithEvents RadButton_SearchMinecraftProfileFolder As Telerik.WinControls.UI.RadButton
Friend WithEvents RadButton_PasteModpackConfig As Telerik.WinControls.UI.RadButton
End Class

View File

@@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@@ -58,6 +118,16 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="RadButton_PasteModpackConfig.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAADvSURBVDhPY8AFJixbowfCUC5pYNLidfoTlqxbBcJ9SzboQoXxA9eolHlA/BOo6T8I9y5a87Jv
4ZpXMD5IDojnQJVjAqDk3x8/f/2fu247WAMynrt+x3+QHFDNH6hyTACU/E8IgNRAlWMCZAM+//z3/9bb
vxg4rn7a/wknf4aCMFQbAiAbAFI84dRPvBiqDQFoYoDDpPsYOHrpC+INyFj3BgXDbKefARR7AV0zzHas
BrhEpXzaffjY/4MnTv/feOIWimJsGKoNAVwiU4Ndo1NWukalrkrrWnoMmyZkDNWGHUw68cti4smfq/Fh
iEoGBgDk9v/D66ccygAAAABJRU5ErkJggg==
</value>
</data>
<data name="RadButton_SearchModpackConfig.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAMhJREFUOE9j

View File

@@ -1,23 +1,32 @@
Imports System.IO
Imports ModpackUpdater.GitLab
Imports ModpackUpdater.Manager
Imports ModpackUpdater.Model
Imports ModpackUpdater.My.Resources
Imports Telerik.WinControls
Imports Telerik.WinControls.UI
Public Class Form1
Private updateConfig As New UpdateConfig
Private currentUpdating As Boolean = False
Private lastUpdateCheckResult As UpdateCheckResult = Nothing
Public Sub New()
InitializeComponent()
Text = $"{Text} (v{Application.ProductVersion})"
End Sub
Private Function IsMinecaftProfileLoaded() As Boolean
Return Not String.IsNullOrEmpty(GetMinecraftProfilePath)
End Function
Private Function GetMinecraftProfilePath() As string
Private Function GetMinecraftProfilePath() As String
Return RadTextBoxControl_MinecraftProfileFolder.Text.Trim
End Function
@@ -25,7 +34,7 @@ Public Class Form1
Return Not String.IsNullOrEmpty(GetUpdateconfigPath)
End Function
Private Function GetUpdateconfigPath() As string
Private Function GetUpdateconfigPath() As String
Return RadTextBoxControl_ModpackConfig.Text.Trim
End Function
@@ -41,7 +50,7 @@ Public Class Form1
End If
End Function
Private Sub SetStatus(statusText As string, image As Image)
Private Sub SetStatus(statusText As String, image As Image)
RadLabel_Status.Text = statusText
RadLabel_Status.Image = image
End Sub
@@ -51,7 +60,7 @@ Public Class Form1
RadLabel_Status.Image = Nothing
End Sub
Private Sub LoadMinecraftProfile(folderPath As string)
Private Sub LoadMinecraftProfile(folderPath As String)
RadTextBoxControl_MinecraftProfileFolder.Text = folderPath
If IsUpdateConfigLoaded() Then
@@ -61,12 +70,19 @@ Public Class Form1
End If
End Sub
Private Sub LoadUpdateConfigFile(filePath As string)
Private Sub LoadUpdateConfigFile(filePath As String)
RadTextBoxControl_ModpackConfig.Text = filePath
If IsUpdateConfigLoaded() Then
updateConfig = UpdateConfig.LoadFromFile(filePath)
End If
Try
If IsUpdateConfigLoaded() Then
If filePath.StartsWith("http") Then
updateConfig = UpdateConfigExt.LoadFromSnippet(filePath)
Else
updateConfig = UpdateConfig.LoadFromFile(filePath)
End If
End If
Catch ex As Exception
RadTextBoxControl_ModpackConfig.Text = String.Empty
End Try
If IsMinecaftProfileLoaded() Then
RadButton_CheckForUpdates.PerformClick()
@@ -75,42 +91,53 @@ Public Class Form1
End If
End Sub
Private Async Function ExecuteUpdate(allowInstall As Boolean) As Task
SetStatus(LangRes.StatusText_CheckingForUpdates, MySymbols.icons8_update_16px)
Private Async Function ExecuteUpdate(doInstall As Boolean) As Task
Dim updater As New UpdateInstaller(updateConfig, GetMinecraftProfilePath)
AddHandler updater.InstallProgessUpdated, AddressOf Update_InstallProgessUpdated
AddHandler updater.CheckingProgressUpdated, AddressOf Updated_CheckingProgresssUpdated
Dim result As UpdateCheckResult = Await updater.CheckForUpdates(True)
Dim everytingOk As Boolean = False
'Check only if not pressed "install", not really needed otherwise.
If lastUpdateCheckResult Is Nothing OrElse Not doInstall Then
SetStatus(LangRes.StatusText_CheckingForUpdates, MySymbols.icons8_update_16px)
If result Is Nothing Then
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px)
ElseIf result.HasUpdates Then
SetStatus(LangRes.StatusText_UpdateAvailable, MySymbols.icons8_software_installer_16px)
If allowInstall Then
currentUpdating = True
SetStatus(LangRes.StatusText_Installing, MySymbols.icons8_software_installer_16px)
If Await updater.InstallUpdates(result) Then
everytingOk = True
End If
currentUpdating = False
End If
Else
everytingOk = True
Try
lastUpdateCheckResult = Await updater.CheckForUpdates(Not AppConfig.Instance.AllowRemoveLocalFiles)
Catch ex As Exception
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px)
Finally
End Try
End If
If everytingOk Then
If lastUpdateCheckResult Is Nothing OrElse lastUpdateCheckResult.HasError Then
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px)
ElseIf lastUpdateCheckResult.HasUpdates Then
If doInstall Then
SetStatus(LangRes.StatusText_Installing, MySymbols.icons8_software_installer_16px)
currentUpdating = True
Try
If Await updater.InstallUpdates(lastUpdateCheckResult) Then
lastUpdateCheckResult = Nothing 'Reset last update check, a new one would be needed now.
SetStatus(LangRes.StatusTest_EverythingOk, MySymbols.icons8_checkmark_16px)
Else
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px)
End If
Catch
SetStatus(LangRes.StatusText_ErrorWhileUpdateCheckOrUpdate, MySymbols.icons8_delete_16px)
Finally
currentUpdating = False
End Try
Else
SetStatus(LangRes.StatusText_UpdateAvailable, MySymbols.icons8_software_installer_16px)
End If
Else
SetStatus(LangRes.StatusTest_EverythingOk, MySymbols.icons8_checkmark_16px)
End If
End Function
Private Sub Update_InstallProgessUpdated(result As UpdateCheckResult, processedSyncs As Integer)
SetStatus(Math.Round(processedSyncs / result.SyncFiles.Count * 100, 1) & "%", MySymbols.icons8_software_installer_16px)
Dim actionCount = If(result.IsLegacy, result.SyncFiles.Count, result.UpdateActions.Count)
SetStatus(Math.Round(processedSyncs / actionCount * 100, 1) & "%", MySymbols.icons8_software_installer_16px)
End Sub
Private Sub Updated_CheckingProgresssUpdated(toCheck As Integer, processed As Integer)
@@ -126,14 +153,22 @@ Public Class Form1
End Sub
Private Sub ButtonX_SearchUpdateConfig_Click(sender As Object, e As EventArgs) Handles RadButton_SearchModpackConfig.Click
Dim ofd As New RadOpenFileDialog
ofd.Filter = FiledialogFilters.JSON_Display & "|" & FiledialogFilters.JSON_Filter
Dim ofd As New RadOpenFileDialog With {
.Filter = FiledialogFilters.JSON_Display & "|" & FiledialogFilters.JSON_Filter
}
If ofd.ShowDialog(Me) = DialogResult.OK Then
LoadUpdateConfigFile(ofd.FileName)
End If
End Sub
Private Sub RadButton_PasteModpackConfig_Click(sender As Object, e As EventArgs) Handles RadButton_PasteModpackConfig.Click
Dim text = Clipboard.GetText
If text.StartsWith("http") Then
LoadUpdateConfigFile(text)
End If
End Sub
Private Sub ButtonX_EditUpdateConfig_Click(sender As Object, e As EventArgs) Handles RadButton_EditModpackConfig.Click
Dim frm As New FormSettings(updateConfig)
frm.ShowDialog(Me)
@@ -165,8 +200,15 @@ Public Class Form1
If Directory.Exists(AppConfig.Instance.LastMinecraftProfilePath) Then
LoadMinecraftProfile(AppConfig.Instance.LastMinecraftProfilePath)
End If
If File.Exists(AppConfig.Instance.LastConfigFilePath) Then
LoadUpdateConfigFile(AppConfig.Instance.LastConfigFilePath)
LoadUpdateConfigFile(AppConfig.Instance.LastConfigFilePath)
End Sub
Private Async Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
If Await AppUpdater.Check AndAlso RadMessageBox.Show(LangRes.MsgBox_UpdateAvailable, LangRes.MsgBox_UpdateAvailable_Title, MessageBoxButtons.YesNo, RadMessageIcon.Info) = DialogResult.Yes Then
SetStatus(LangRes.StatusText_InstallingAppUpdate, MySymbols.icons8_software_installer_16px)
Enabled = False
Await AppUpdater.Install()
Application.Restart()
End If
End Sub

View File

@@ -32,6 +32,8 @@ Partial Class FormSettings
Me.RadLabel3 = New Telerik.WinControls.UI.RadLabel()
Me.RadLabel2 = New Telerik.WinControls.UI.RadLabel()
Me.RadLabel1 = New Telerik.WinControls.UI.RadLabel()
Me.RadTextBoxControl_UpdateUrl = New Telerik.WinControls.UI.RadTextBoxControl()
Me.RadLabel4 = New Telerik.WinControls.UI.RadLabel()
Me.Panel1.SuspendLayout()
CType(Me.RadTextBoxControl_WebdavPassword, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadTextBoxControl_WebdavUsername, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -41,13 +43,16 @@ Partial Class FormSettings
CType(Me.RadLabel3, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadLabel2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadLabel1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadTextBoxControl_UpdateUrl, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.RadLabel4, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Panel1
'
resources.ApplyResources(Me.Panel1, "Panel1")
Me.Panel1.BackColor = System.Drawing.Color.Transparent
Me.Panel1.Controls.Add(Me.RadTextBoxControl_UpdateUrl)
Me.Panel1.Controls.Add(Me.RadLabel4)
Me.Panel1.Controls.Add(Me.RadTextBoxControl_WebdavPassword)
Me.Panel1.Controls.Add(Me.RadTextBoxControl_WebdavUsername)
Me.Panel1.Controls.Add(Me.RadTextBoxControl_WebdavURL)
@@ -56,6 +61,7 @@ Partial Class FormSettings
Me.Panel1.Controls.Add(Me.RadLabel3)
Me.Panel1.Controls.Add(Me.RadLabel2)
Me.Panel1.Controls.Add(Me.RadLabel1)
resources.ApplyResources(Me.Panel1, "Panel1")
Me.Panel1.Name = "Panel1"
'
'RadTextBoxControl_WebdavPassword
@@ -100,6 +106,16 @@ Partial Class FormSettings
resources.ApplyResources(Me.RadLabel1, "RadLabel1")
Me.RadLabel1.Name = "RadLabel1"
'
'RadTextBoxControl_UpdateUrl
'
resources.ApplyResources(Me.RadTextBoxControl_UpdateUrl, "RadTextBoxControl_UpdateUrl")
Me.RadTextBoxControl_UpdateUrl.Name = "RadTextBoxControl_UpdateUrl"
'
'RadLabel4
'
resources.ApplyResources(Me.RadLabel4, "RadLabel4")
Me.RadLabel4.Name = "RadLabel4"
'
'FormSettings
'
resources.ApplyResources(Me, "$this")
@@ -107,10 +123,6 @@ Partial Class FormSettings
Me.Controls.Add(Me.Panel1)
Me.MaximizeBox = False
Me.Name = "FormSettings"
'
'
'
Me.RootElement.ApplyShapeToControl = True
Me.Panel1.ResumeLayout(False)
Me.Panel1.PerformLayout()
CType(Me.RadTextBoxControl_WebdavPassword, System.ComponentModel.ISupportInitialize).EndInit()
@@ -121,6 +133,8 @@ Partial Class FormSettings
CType(Me.RadLabel3, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadLabel2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadLabel1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadTextBoxControl_UpdateUrl, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.RadLabel4, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
@@ -135,4 +149,6 @@ Partial Class FormSettings
Friend WithEvents RadButton_SaveAs As Telerik.WinControls.UI.RadButton
Friend WithEvents RadLabel3 As Telerik.WinControls.UI.RadLabel
Friend WithEvents RadLabel2 As Telerik.WinControls.UI.RadLabel
Friend WithEvents RadTextBoxControl_UpdateUrl As Telerik.WinControls.UI.RadTextBoxControl
Friend WithEvents RadLabel4 As Telerik.WinControls.UI.RadLabel
End Class

View File

@@ -1,64 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@@ -117,60 +57,318 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="&gt;&gt;RadLabel2.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="RadButton_SaveAs.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageBeforeText</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Panel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavURL.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="RadButton_SaveAndClose.Text" xml:space="preserve">
<value>Save &amp;&amp; Close</value>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="RadTextBoxControl_UpdateUrl.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="RadButton_SaveAndClose.TextAlignment" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
<data name="RadTextBoxControl_UpdateUrl.Location" type="System.Drawing.Point, System.Drawing">
<value>118, 87</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadForm, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
<data name="RadTextBoxControl_UpdateUrl.Size" type="System.Drawing.Size, System.Drawing">
<value>389, 22</value>
</data>
<data name="&gt;&gt;RadButton_SaveAndClose.Parent" xml:space="preserve">
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="RadTextBoxControl_UpdateUrl.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_UpdateUrl.Name" xml:space="preserve">
<value>RadTextBoxControl_UpdateUrl</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_UpdateUrl.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadTextBoxControl, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_UpdateUrl.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavPassword.Name" xml:space="preserve">
<value>RadTextBoxControl_WebdavPassword</value>
<data name="&gt;&gt;RadTextBoxControl_UpdateUrl.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="RadButton_SaveAs.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
<data name="RadLabel4.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 89</value>
</data>
<data name="RadLabel4.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 18</value>
</data>
<data name="RadLabel4.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="RadLabel4.Text" xml:space="preserve">
<value>Update-URL:</value>
</data>
<data name="&gt;&gt;RadLabel4.Name" xml:space="preserve">
<value>RadLabel4</value>
</data>
<data name="&gt;&gt;RadLabel4.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadLabel, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadLabel4.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadLabel4.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="RadTextBoxControl_WebdavPassword.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="RadTextBoxControl_WebdavPassword.Location" type="System.Drawing.Point, System.Drawing">
<value>118, 59</value>
</data>
<data name="RadTextBoxControl_WebdavPassword.NullText" xml:space="preserve">
<value>Obsulete! Do not use for new Modpack Configs!</value>
</data>
<data name="RadTextBoxControl_WebdavPassword.Size" type="System.Drawing.Size, System.Drawing">
<value>389, 22</value>
</data>
<data name="RadTextBoxControl_WebdavPassword.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavPassword.Name" xml:space="preserve">
<value>RadTextBoxControl_WebdavPassword</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavPassword.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadTextBoxControl, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavPassword.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavPassword.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.Location" type="System.Drawing.Point, System.Drawing">
<value>118, 31</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.NullText" xml:space="preserve">
<value>Obsulete! Do not use for new Modpack Configs!</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.Size" type="System.Drawing.Size, System.Drawing">
<value>389, 22</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavUsername.Name" xml:space="preserve">
<value>RadTextBoxControl_WebdavUsername</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavUsername.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadTextBoxControl, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
<value>Telerik.WinControls.UI.RadTextBoxControl, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavUsername.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavUsername.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="RadTextBoxControl_WebdavURL.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="RadTextBoxControl_WebdavURL.Location" type="System.Drawing.Point, System.Drawing">
<value>118, 3</value>
</data>
<data name="RadTextBoxControl_WebdavURL.NullText" xml:space="preserve">
<value>Obsulete! Do not use for new Modpack Configs!</value>
</data>
<data name="RadTextBoxControl_WebdavURL.Size" type="System.Drawing.Size, System.Drawing">
<value>389, 22</value>
</data>
<data name="RadTextBoxControl_WebdavURL.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavURL.Name" xml:space="preserve">
<value>RadTextBoxControl_WebdavURL</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavURL.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadTextBoxControl, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavURL.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavURL.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="RadButton_SaveAndClose.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="RadButton_SaveAndClose.ImageAlignment" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="RadButton_SaveAndClose.Location" type="System.Drawing.Point, System.Drawing">
<value>387, 115</value>
</data>
<data name="RadButton_SaveAndClose.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 24</value>
</data>
<data name="RadButton_SaveAndClose.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="RadButton_SaveAndClose.Text" xml:space="preserve">
<value>Save &amp;&amp; Close</value>
</data>
<data name="RadButton_SaveAndClose.TextAlignment" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="RadButton_SaveAndClose.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageBeforeText</value>
</data>
<data name="&gt;&gt;RadButton_SaveAndClose.Name" xml:space="preserve">
<value>RadButton_SaveAndClose</value>
</data>
<data name="&gt;&gt;RadButton_SaveAndClose.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadButton, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadButton_SaveAndClose.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadButton_SaveAndClose.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="RadButton_SaveAs.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="RadButton_SaveAs.ImageAlignment" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="RadButton_SaveAs.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 115</value>
</data>
<data name="RadButton_SaveAs.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 24</value>
</data>
<data name="RadButton_SaveAs.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="RadButton_SaveAs.Text" xml:space="preserve">
<value>Save as ...</value>
</data>
<data name="&gt;&gt;RadLabel1.ZOrder" xml:space="preserve">
<data name="RadButton_SaveAs.TextAlignment" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="RadButton_SaveAs.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageBeforeText</value>
</data>
<data name="&gt;&gt;RadButton_SaveAs.Name" xml:space="preserve">
<value>RadButton_SaveAs</value>
</data>
<data name="&gt;&gt;RadButton_SaveAs.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadButton, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadButton_SaveAs.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadButton_SaveAs.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="RadLabel3.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 61</value>
</data>
<data name="RadLabel3.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 18</value>
</data>
<data name="RadLabel3.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="RadLabel3.Text" xml:space="preserve">
<value>Webdav Password:</value>
</data>
<data name="&gt;&gt;RadLabel3.Name" xml:space="preserve">
<value>RadLabel3</value>
</data>
<data name="&gt;&gt;RadLabel3.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadLabel, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadLabel3.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadLabel3.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="RadLabel2.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 33</value>
</data>
<data name="RadLabel2.Size" type="System.Drawing.Size, System.Drawing">
<value>103, 18</value>
</data>
<data name="RadLabel2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
<data name="RadLabel2.Text" xml:space="preserve">
<value>Webdav Username:</value>
</data>
<data name="&gt;&gt;RadLabel2.Name" xml:space="preserve">
<value>RadLabel2</value>
</data>
<data name="&gt;&gt;RadLabel2.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadLabel, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadLabel2.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadLabel2.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="RadLabel1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 5</value>
</data>
<data name="RadLabel1.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 18</value>
</data>
<data name="RadLabel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="RadLabel1.Text" xml:space="preserve">
<value>Webdav URL:</value>
</data>
<data name="&gt;&gt;RadLabel1.Name" xml:space="preserve">
<value>RadLabel1</value>
</data>
<data name="&gt;&gt;RadLabel1.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadLabel, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadLabel1.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadLabel1.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="Panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="Panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="Panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>510, 142</value>
</data>
<data name="Panel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;Panel1.Name" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;Panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;Panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleBaseSize" type="System.Drawing.Size, System.Drawing">
<value>7, 15</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 15</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>510, 142</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAYAEBAAAAEAIABoBAAAZgAAACAgAAABACAAqBAAAM4EAAAwMAAAAQAgAKglAAB2FQAAQEAAAAEA
@@ -1940,214 +2138,16 @@
AAAAAAAAAAAAAAAAAAAAAAAA2Aul/h9Vn+BP9E5eXwAAAABJRU5ErkJggg==
</value>
</data>
<data name="Panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>510, 114</value>
</data>
<data name="&gt;&gt;RadLabel3.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadLabel, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="RadLabel1.Text" xml:space="preserve">
<value>Webdav URL:</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="RadButton_SaveAs.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 24</value>
</data>
<data name="&gt;&gt;RadLabel2.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="RadButton_SaveAndClose.TextImageRelation" type="System.Windows.Forms.TextImageRelation, System.Windows.Forms">
<value>ImageBeforeText</value>
</data>
<data name="&gt;&gt;Panel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="RadTextBoxControl_WebdavPassword.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="RadButton_SaveAndClose.ImageAlignment" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="RadLabel2.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 33</value>
</data>
<data name="&gt;&gt;Panel1.Name" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="RadLabel1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 5</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavUsername.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="RadButton_SaveAndClose.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="&gt;&gt;RadLabel1.Name" xml:space="preserve">
<value>RadLabel1</value>
</data>
<data name="&gt;&gt;RadLabel2.Name" xml:space="preserve">
<value>RadLabel2</value>
</data>
<data name="&gt;&gt;RadButton_SaveAs.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadButton_SaveAndClose.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadButton, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="Panel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavPassword.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;RadButton_SaveAndClose.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.Location" type="System.Drawing.Point, System.Drawing">
<value>118, 31</value>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Modpack Configs</value>
</data>
<data name="RadTextBoxControl_WebdavPassword.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="RadTextBoxControl_WebdavPassword.Location" type="System.Drawing.Point, System.Drawing">
<value>118, 59</value>
</data>
<data name="RadLabel2.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 19</value>
</data>
<data name="&gt;&gt;RadButton_SaveAs.Name" xml:space="preserve">
<value>RadButton_SaveAs</value>
</data>
<data name="&gt;&gt;RadButton_SaveAs.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavURL.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadTextBoxControl, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavURL.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadLabel3.Name" xml:space="preserve">
<value>RadLabel3</value>
</data>
<data name="&gt;&gt;RadLabel1.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavUsername.Name" xml:space="preserve">
<value>RadTextBoxControl_WebdavUsername</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavPassword.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="RadButton_SaveAndClose.Location" type="System.Drawing.Point, System.Drawing">
<value>387, 87</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>510, 114</value>
</data>
<data name="&gt;&gt;RadButton_SaveAndClose.Name" xml:space="preserve">
<value>RadButton_SaveAndClose</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="RadTextBoxControl_WebdavURL.Size" type="System.Drawing.Size, System.Drawing">
<value>389, 22</value>
</data>
<data name="RadButton_SaveAndClose.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 24</value>
</data>
<data name="RadButton_SaveAs.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="RadLabel3.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;RadLabel1.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadLabel, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="RadLabel1.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 19</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.Size" type="System.Drawing.Size, System.Drawing">
<value>389, 22</value>
</data>
<data name="RadTextBoxControl_WebdavURL.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormSettings</value>
</data>
<data name="&gt;&gt;RadLabel3.ZOrder" xml:space="preserve">
<value>5</value>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadForm, Telerik.WinControls.UI, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="RadButton_SaveAs.TextAlignment" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="RadLabel3.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 19</value>
</data>
<data name="RadLabel3.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 61</value>
</data>
<data name="RadLabel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavUsername.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="RadLabel3.Text" xml:space="preserve">
<value>Webdav Password:</value>
</data>
<data name="RadButton_SaveAs.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 87</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavURL.Name" xml:space="preserve">
<value>RadTextBoxControl_WebdavURL</value>
</data>
<data name="&gt;&gt;RadLabel2.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadLabel, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="RadTextBoxControl_WebdavURL.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="&gt;&gt;RadTextBoxControl_WebdavPassword.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadTextBoxControl, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="&gt;&gt;Panel1.Type" xml:space="preserve">
<value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;RadButton_SaveAs.Type" xml:space="preserve">
<value>Telerik.WinControls.UI.RadButton, Telerik.WinControls.UI, Version=2022.2.510.40, Culture=neutral, PublicKeyToken=5bb2a467cbec794e</value>
</data>
<data name="RadButton_SaveAndClose.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="RadTextBoxControl_WebdavUsername.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="&gt;&gt;Panel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;RadLabel3.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="RadButton_SaveAs.ImageAlignment" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleRight</value>
</data>
<data name="RadTextBoxControl_WebdavURL.Location" type="System.Drawing.Point, System.Drawing">
<value>118, 3</value>
</data>
<data name="RadLabel2.Text" xml:space="preserve">
<value>Webdav Username:</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -1,4 +1,5 @@
Imports ModpackUpdater.My.Resources
Imports ModpackUpdater.Model
Imports ModpackUpdater.My.Resources
Imports Telerik.WinControls.UI
@@ -15,12 +16,14 @@ Public Class FormSettings
RadTextBoxControl_WebdavURL.Text = updateConfig.WebdavURL
RadTextBoxControl_WebdavUsername.Text = updateConfig.WebdavUsername
RadTextBoxControl_WebdavPassword.Text = updateConfig.WebdavPassword
RadTextBoxControl_UpdateUrl.Text = updateConfig.UpdateUrl
End Sub
Private Sub SaveConfig()
updateConfig.WebdavURL = RadTextBoxControl_WebdavURL.Text.Trim
updateConfig.WebdavUsername = RadTextBoxControl_WebdavUsername.Text.Trim
updateConfig.WebdavPassword = RadTextBoxControl_WebdavPassword.Text
updateConfig.UpdateUrl = RadTextBoxControl_UpdateUrl.Text
End Sub
Private Sub ButtonX_SaveAs_Click(sender As Object, e As EventArgs) Handles RadButton_SaveAs.Click

View File

@@ -64,6 +64,24 @@ Namespace My.Resources
End Set
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die A new version of this program is available. If you confirm, the update will be installed automatically. It takes just a few seconds. Continue? ähnelt.
'''</summary>
Friend Shared ReadOnly Property MsgBox_UpdateAvailable() As String
Get
Return ResourceManager.GetString("MsgBox_UpdateAvailable", resourceCulture)
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die New program version available ähnelt.
'''</summary>
Friend Shared ReadOnly Property MsgBox_UpdateAvailable_Title() As String
Get
Return ResourceManager.GetString("MsgBox_UpdateAvailable_Title", resourceCulture)
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Everything is right and up-to-date. ähnelt.
'''</summary>
@@ -109,6 +127,15 @@ Namespace My.Resources
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Downloading program update... ähnelt.
'''</summary>
Friend Shared ReadOnly Property StatusText_InstallingAppUpdate() As String
Get
Return ResourceManager.GetString("StatusText_InstallingAppUpdate", resourceCulture)
End Get
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Minecraft profile folder seems to be not valid. ähnelt.
'''</summary>

View File

@@ -117,6 +117,12 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="MsgBox_UpdateAvailable" xml:space="preserve">
<value>A new version of this program is available. If you confirm, the update will be installed automatically. It takes just a few seconds. Continue?</value>
</data>
<data name="MsgBox_UpdateAvailable_Title" xml:space="preserve">
<value>New program version available</value>
</data>
<data name="StatusTest_EverythingOk" xml:space="preserve">
<value>Everything is right and up-to-date.</value>
</data>
@@ -132,6 +138,9 @@
<data name="StatusText_Installing" xml:space="preserve">
<value>Installing...</value>
</data>
<data name="StatusText_InstallingAppUpdate" xml:space="preserve">
<value>Downloading program update...</value>
</data>
<data name="StatusText_MinecraftProfileWarning" xml:space="preserve">
<value>Minecraft profile folder seems to be not valid.</value>
</data>

View File

@@ -1,14 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<TargetFramework>net8.0-windows</TargetFramework>
<StartupObject>Sub Main</StartupObject>
<UseWindowsForms>true</UseWindowsForms>
<MyType>WindowsForms</MyType>
<ApplicationIcon>icons8_download_from_ftp.ico</ApplicationIcon>
<AssemblyName>Minecraft Modpack Updater</AssemblyName>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<Version>1.1.0.0</Version>
<Version>1.4.1.0</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
@@ -71,15 +71,15 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="UI.for.WinForms.AllControls.Net60">
<Version>2022.2.510</Version>
</PackageReference>
<PackageReference Include="WebDav.Client" Version="2.8.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Pilz.Cryptography" Version="2.0.1" />
<PackageReference Include="Pilz.IO" Version="2.0.0" />
<PackageReference Include="Pilz.Win32" Version="2.0.0" />
<PackageReference Include="UI.for.WinForms.Common" Version="2024.2.514" />
</ItemGroup>
<ItemGroup>
<Reference Include="Pilz.Cryptography">
<HintPath>..\SharedLibs\Pilz.Cryptography.dll</HintPath>
</Reference>
<ProjectReference Include="..\ModpackUpdater.GitLab\ModpackUpdater.GitLab.vbproj" />
<ProjectReference Include="..\ModpackUpdater.Manager\ModpackUpdater.Manager.vbproj" />
<ProjectReference Include="..\ModpackUpdater.Model\ModpackUpdater.Model.vbproj" />
</ItemGroup>
</Project>

View File

@@ -1,11 +0,0 @@
Public Class UpdateCheckResult
Public ReadOnly Property SyncFiles As New List(Of UpdateSyncFile)
Public ReadOnly Property HasUpdates As Boolean
Get
Return SyncFiles.Where(Function(n) n.SyncAction <> UpdateSyncAction.None).Any
End Get
End Property
End Class

View File

@@ -1,21 +0,0 @@
Imports System.IO
Imports Newtonsoft.Json.Linq
Imports Pilz.Cryptography
Public Class UpdateConfig
Public Property WebdavURL As SecureString
Public Property WebdavUsername As SecureString
Public Property WebdavPassword As SecureString
Public Sub SaveToFile(filePath As string)
File.WriteAllText(filePath, JObject.FromObject(Me).ToString)
End Sub
Public Shared Function LoadFromFile(filePath As string)
Return JObject.Parse(File.ReadAllText(filePath)).ToObject(Of UpdateConfig)
End Function
End Class

View File

@@ -1,6 +0,0 @@
Public Enum UpdateSyncAction
None
NewFile
RemovedFile
UpdatedFile = 4
End Enum

View File

@@ -1,7 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="Telerik UI for WinForms 2022.2.510.0" value="C:\Program Files (x86)\Progress\Telerik UI for WinForms R2 2022\Bin60\NuGet" />
<add key="Telerik UI for WinForms UI.for.WinForms.AllControls.Net60.2022.2.510" value="C:\Program Files (x86)\Progress\Telerik UI for WinForms R2 2022\Bin60\NuGet" />
</packageSources>
</configuration>

Binary file not shown.