diff --git a/.gitignore b/.gitignore index 1c193dc..6c8b391 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ Kaju Admin App/Builds - Kaju Admin.xojo_project Kaju Admin CLI/kaju.debug Kaju Admin CLI/Builds - Kaju Admin CLI.xojo_project *.gz +Update Test App/Builds - Kaju Update Test +Kaju Admin App/Builds - Kaju Admin +Kaju Admin CLI/Builds - Kaju Admin CLI diff --git a/Admin Classes/KajuFile.xojo_code b/Admin Classes/KajuFile.xojo_code index 7be415e..b36edf8 100644 --- a/Admin Classes/KajuFile.xojo_code +++ b/Admin Classes/KajuFile.xojo_code @@ -43,13 +43,6 @@ Protected Class KajuFile binaryData.Value( Kaju.BinaryInformation.kKeyURL ) = url end if next - - // - // Add a security token - // - dim rawKey as string = Crypto.GenerateRandomBytes( 8 ) - dim encodedKey as string = EncodeBase64( rawKey, 0 ) - thisVersionData.Value( Kaju.kNameSecurityToken ) = encodedKey next dim dataString as string = data.ToString @@ -268,6 +261,7 @@ Protected Class KajuFile Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -275,18 +269,23 @@ Protected Class KajuFile Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -294,6 +293,7 @@ Protected Class KajuFile Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Admin App/Controls/BinaryInformationControl.xojo_window b/Kaju Admin App/Controls/BinaryInformationControl.xojo_window index d5687de..391d066 100644 --- a/Kaju Admin App/Controls/BinaryInformationControl.xojo_window +++ b/Kaju Admin App/Controls/BinaryInformationControl.xojo_window @@ -5,7 +5,6 @@ Begin ContainerControl BinaryInformationControl AutoDeactivate = True BackColor = &cFFFFFF00 Backdrop = 0 - Compatibility = "" DoubleBuffer = False Enabled = True EraseBackground = True @@ -29,7 +28,7 @@ Begin ContainerControl BinaryInformationControl Begin PushButton btnHashFromURL AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = False Caption = "From URL" Default = False @@ -429,14 +428,13 @@ End hashField.Text = "" - dim http as new Kaju.HTTPSSocket - url = http.GetRedirectAddress( url, 5 ) + dim http as new Kaju.HTTPSocketAsync dim file as FolderItem = GetTemporaryFolderItem - dim r as boolean = http.Get( url, file, 30 ) - if not r or http.LastErrorCode <> 0 then + http.GetSync( url, file, 30 ) + if http.HTTPStatusCode <> 200 then - MsgBox "Could not get the executable from that url: " + str( http.LastErrorCode ) + MsgBox "Could not get the executable from that url: " + str( http.HTTPStatusCode ) else @@ -560,54 +558,82 @@ End #tag EndEvents #tag ViewBehavior #tag ViewProperty - Name="DoubleBuffer" + Name="AllowAutoDeactivate" Visible=true - Group="Windows Behavior" + Group="Appearance" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Tooltip" + Visible=true + Group="Appearance" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="AllowFocusRing" + Visible=true + Group="Appearance" InitialValue="False" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="AcceptFocus" + Name="BackgroundColor" Visible=true - Group="Behavior" + Group="Background" + InitialValue="&hFFFFFF" + Type="Color" + EditorType="Color" + #tag EndViewProperty + #tag ViewProperty + Name="HasBackgroundColor" + Visible=true + Group="Background" InitialValue="False" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="AcceptTabs" + Name="AllowFocus" Visible=true Group="Behavior" - InitialValue="True" + InitialValue="False" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="AutoDeactivate" + Name="AllowTabs" Visible=true - Group="Appearance" + Group="Behavior" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="BackColor" + Name="DoubleBuffer" Visible=true - Group="Background" - InitialValue="&hFFFFFF" - Type="Color" + Group="Windows Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Backdrop" Visible=true Group="Background" + InitialValue="" Type="Picture" - EditorType="Picture" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="BinaryName" Visible=true Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -617,7 +643,7 @@ End Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="EraseBackground" @@ -625,14 +651,7 @@ End Group="Behavior" InitialValue="True" Type="Boolean" - EditorType="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="HasBackColor" - Visible=true - Group="Background" - InitialValue="False" - Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Height" @@ -640,66 +659,79 @@ End Group="Size" InitialValue="300" Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="HelpTag" - Visible=true - Group="Appearance" - Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="InitialParent" + Visible=false Group="Position" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="IsChecked" + Visible=false Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockBottom" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockLeft" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockRight" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockTop" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabIndex" @@ -707,12 +739,15 @@ End Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabPanelIndex" + Visible=false Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabStop" @@ -720,13 +755,15 @@ End Group="Position" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Transparent" @@ -734,15 +771,7 @@ End Group="Behavior" InitialValue="True" Type="Boolean" - EditorType="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="UseFocusRing" - Visible=true - Group="Appearance" - InitialValue="False" - Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Visible" @@ -750,7 +779,7 @@ End Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Width" @@ -758,5 +787,6 @@ End Group="Size" InitialValue="300" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior diff --git a/Kaju Admin App/Controls/CheckBoxChanger.xojo_code b/Kaju Admin App/Controls/CheckBoxChanger.xojo_code index 3b7b931..8a05e74 100644 --- a/Kaju Admin App/Controls/CheckBoxChanger.xojo_code +++ b/Kaju Admin App/Controls/CheckBoxChanger.xojo_code @@ -16,25 +16,80 @@ Inherits CheckBox #tag ViewBehavior #tag ViewProperty - Name="Transparent" + Name="AllowAutoDeactivate" Visible=true Group="Appearance" - InitialValue="False" + InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="AutoDeactivate" + Name="Tooltip" Visible=true Group="Appearance" - InitialValue="True" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="FontName" + Visible=true + Group="Font" + InitialValue="System" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontSize" + Visible=true + Group="Font" + InitialValue="0" + Type="Single" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontUnit" + Visible=true + Group="Font" + InitialValue="0" + Type="FontUnits" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Pixel" + "2 - Point" + "3 - Inch" + "4 - Millimeter" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="VisualState" + Visible=true + Group="Initial State" + InitialValue="0" + Type="VisualStates" + EditorType="Enum" + #tag EnumValues + "0 - Unchecked" + "1 - Checked" + "2 - Indeterminate" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Transparent" + Visible=true + Group="Appearance" + InitialValue="False" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Bold" Visible=true Group="Font" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Caption" @@ -42,11 +97,13 @@ Inherits CheckBox Group="Appearance" InitialValue="Untitled" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="DataField" Visible=true Group="Database Binding" + InitialValue="" Type="String" EditorType="DataField" #tag EndViewProperty @@ -54,6 +111,7 @@ Inherits CheckBox Name="DataSource" Visible=true Group="Database Binding" + InitialValue="" Type="String" EditorType="DataSource" #tag EndViewProperty @@ -63,6 +121,7 @@ Inherits CheckBox Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Height" @@ -70,87 +129,87 @@ Inherits CheckBox Group="Position" InitialValue="20" Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="HelpTag" - Visible=true - Group="Appearance" - Type="String" - EditorType="MultiLineEditor" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Index" Visible=true Group="ID" + InitialValue="" Type="Integer" - EditorType="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="InitialParent" + Visible=false + Group="" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Italic" Visible=true Group="Font" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockBottom" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockLeft" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockRight" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockTop" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" - #tag EndViewProperty - #tag ViewProperty - Name="State" - Visible=true - Group="Initial State" - InitialValue="0" - Type="CheckedStates" - EditorType="Enum" - #tag EnumValues - "0 - Unchecked" - "1 - Checked" - "2 - Indeterminate" - #tag EndEnumValues + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabIndex" @@ -158,12 +217,15 @@ Inherits CheckBox Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabPanelIndex" + Visible=false Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabStop" @@ -171,53 +233,31 @@ Inherits CheckBox Group="Position" InitialValue="True" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="TextFont" - Visible=true - Group="Font" - InitialValue="System" - Type="String" - #tag EndViewProperty - #tag ViewProperty - Name="TextSize" - Visible=true - Group="Font" - InitialValue="0" - Type="Single" - #tag EndViewProperty - #tag ViewProperty - Name="TextUnit" - Visible=true - Group="Font" - InitialValue="0" - Type="FontUnits" - EditorType="Enum" - #tag EnumValues - "0 - Default" - "1 - Pixel" - "2 - Point" - "3 - Inch" - "4 - Millimeter" - #tag EndEnumValues + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Underline" Visible=true Group="Font" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Value" + Visible=false Group="Initial State" InitialValue="False" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Visible" @@ -225,6 +265,7 @@ Inherits CheckBox Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Width" @@ -232,6 +273,7 @@ Inherits CheckBox Group="Position" InitialValue="100" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Admin App/Controls/PopupMenuChanger.xojo_code b/Kaju Admin App/Controls/PopupMenuChanger.xojo_code index 831f399..181ee81 100644 --- a/Kaju Admin App/Controls/PopupMenuChanger.xojo_code +++ b/Kaju Admin App/Controls/PopupMenuChanger.xojo_code @@ -16,38 +16,100 @@ Inherits PopupMenu #tag ViewBehavior + #tag ViewProperty + Name="AllowAutoDeactivate" + Visible=true + Group="Appearance" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Tooltip" + Visible=true + Group="Appearance" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="SelectedRowIndex" + Visible=true + Group="Appearance" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontName" + Visible=true + Group="Font" + InitialValue="System" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontSize" + Visible=true + Group="Font" + InitialValue="0" + Type="Single" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontUnit" + Visible=true + Group="Font" + InitialValue="0" + Type="FontUnits" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Pixel" + "2 - Point" + "3 - Inch" + "4 - Millimeter" + #tag EndEnumValues + #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Index" Visible=true Group="ID" + InitialValue="" Type="Integer" - EditorType="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Width" @@ -55,6 +117,7 @@ Inherits PopupMenu Group="Position" InitialValue="80" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Height" @@ -62,36 +125,47 @@ Inherits PopupMenu Group="Position" InitialValue="20" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockLeft" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockTop" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockRight" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockBottom" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabPanelIndex" + Visible=false Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabIndex" @@ -99,6 +173,7 @@ Inherits PopupMenu Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabStop" @@ -106,6 +181,7 @@ Inherits PopupMenu Group="Position" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Enabled" @@ -113,41 +189,23 @@ Inherits PopupMenu Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="InitialValue" Visible=true Group="Appearance" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty - #tag ViewProperty - Name="ListIndex" - Visible=true - Group="Appearance" - InitialValue="0" - Type="Integer" - #tag EndViewProperty #tag ViewProperty Name="Visible" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="HelpTag" - Visible=true - Group="Appearance" - Type="String" - EditorType="MultiLineEditor" - #tag EndViewProperty - #tag ViewProperty - Name="AutoDeactivate" - Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Transparent" @@ -155,59 +213,37 @@ Inherits PopupMenu Group="Appearance" InitialValue="False" Type="Boolean" - EditorType="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="TextFont" - Visible=true - Group="Font" - InitialValue="System" - Type="String" - #tag EndViewProperty - #tag ViewProperty - Name="TextSize" - Visible=true - Group="Font" - InitialValue="0" - Type="Single" - #tag EndViewProperty - #tag ViewProperty - Name="TextUnit" - Visible=true - Group="Font" - InitialValue="0" - Type="FontUnits" - EditorType="Enum" - #tag EnumValues - "0 - Default" - "1 - Pixel" - "2 - Point" - "3 - Inch" - "4 - Millimeter" - #tag EndEnumValues + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Bold" Visible=true Group="Font" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Italic" Visible=true Group="Font" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Underline" Visible=true Group="Font" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="DataSource" Visible=true Group="Database Binding" + InitialValue="" Type="String" EditorType="DataSource" #tag EndViewProperty @@ -215,12 +251,17 @@ Inherits PopupMenu Name="DataField" Visible=true Group="Database Binding" + InitialValue="" Type="String" EditorType="DataField" #tag EndViewProperty #tag ViewProperty Name="InitialParent" + Visible=false + Group="" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Admin App/Controls/TextAreaChanger.xojo_code b/Kaju Admin App/Controls/TextAreaChanger.xojo_code index e2d7c70..b9592ad 100644 --- a/Kaju Admin App/Controls/TextAreaChanger.xojo_code +++ b/Kaju Admin App/Controls/TextAreaChanger.xojo_code @@ -16,17 +16,130 @@ Inherits TextArea #tag ViewBehavior #tag ViewProperty - Name="AcceptTabs" + Name="AllowAutoDeactivate" + Visible=true + Group="Appearance" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="BackgroundColor" + Visible=true + Group="Appearance" + InitialValue="&hFFFFFF" + Type="Color" + EditorType="Color" + #tag EndViewProperty + #tag ViewProperty + Name="HasBorder" + Visible=true + Group="Appearance" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Tooltip" + Visible=true + Group="Appearance" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="HasHorizontalScrollbar" + Visible=true + Group="Appearance" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="HasVerticalScrollbar" + Visible=true + Group="Appearance" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="AllowStyledText" + Visible=true + Group="Appearance" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Transparent" + Visible=true + Group="Appearance" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="AllowFocusRing" + Visible=true + Group="Appearance" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontName" + Visible=true + Group="Font" + InitialValue="System" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontSize" + Visible=true + Group="Font" + InitialValue="0" + Type="Single" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontUnit" + Visible=true + Group="Font" + InitialValue="0" + Type="FontUnits" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Pixel" + "2 - Point" + "3 - Inch" + "4 - Millimeter" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="Value" + Visible=true + Group="Initial State" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="AllowTabs" Visible=true Group="Behavior" + InitialValue="False" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Alignment" + Name="TextAlignment" Visible=true Group="Behavior" InitialValue="0" - Type="Integer" + Type="TextAlignments" EditorType="Enum" #tag EnumValues "0 - Default" @@ -36,43 +149,42 @@ Inherits TextArea #tag EndEnumValues #tag EndViewProperty #tag ViewProperty - Name="AutoDeactivate" + Name="AllowSpellChecking" Visible=true - Group="Appearance" + Group="Behavior" InitialValue="True" - Type="Boolean" + Type="boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="AutomaticallyCheckSpelling" + Name="MaximumCharactersAllowed" Visible=true Group="Behavior" - InitialValue="True" - Type="boolean" + InitialValue="0" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="BackColor" + Name="ValidationMask" Visible=true - Group="Appearance" - InitialValue="&hFFFFFF" - Type="Color" + Group="Behavior" + InitialValue="" + Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Bold" Visible=true Group="Font" + InitialValue="" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="Border" - Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="DataField" Visible=true Group="Database Binding" + InitialValue="" Type="String" EditorType="DataField" #tag EndViewProperty @@ -80,6 +192,7 @@ Inherits TextArea Name="DataSource" Visible=true Group="Database Binding" + InitialValue="" Type="String" EditorType="DataSource" #tag EndViewProperty @@ -89,12 +202,15 @@ Inherits TextArea Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Format" Visible=true Group="Appearance" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Height" @@ -102,13 +218,7 @@ Inherits TextArea Group="Position" InitialValue="100" Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="HelpTag" - Visible=true - Group="Appearance" - Type="String" - EditorType="MultiLineEditor" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="HideSelection" @@ -116,32 +226,31 @@ Inherits TextArea Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Index" Visible=true Group="ID" + InitialValue="" Type="Integer" - EditorType="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Italic" Visible=true Group="Font" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" + InitialValue="" Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="LimitText" - Visible=true - Group="Behavior" - InitialValue="0" - Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LineHeight" @@ -149,6 +258,7 @@ Inherits TextArea Group="Appearance" InitialValue="0" Type="Double" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LineSpacing" @@ -156,36 +266,39 @@ Inherits TextArea Group="Appearance" InitialValue="1" Type="Double" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockBottom" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockLeft" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockRight" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockTop" Visible=true Group="Position" + InitialValue="" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="Mask" - Visible=true - Group="Behavior" - Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Multiline" @@ -193,46 +306,31 @@ Inherits TextArea Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="ReadOnly" Visible=true Group="Behavior" + InitialValue="" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="ScrollbarHorizontal" - Visible=true - Group="Appearance" - Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="ScrollbarVertical" - Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="Styled" - Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabIndex" @@ -240,12 +338,15 @@ Inherits TextArea Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabPanelIndex" + Visible=false Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabStop" @@ -253,13 +354,7 @@ Inherits TextArea Group="Position" InitialValue="True" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="Text" - Visible=true - Group="Initial State" - Type="String" - EditorType="MultiLineEditor" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TextColor" @@ -267,54 +362,23 @@ Inherits TextArea Group="Appearance" InitialValue="&h000000" Type="Color" - #tag EndViewProperty - #tag ViewProperty - Name="TextFont" - Visible=true - Group="Font" - InitialValue="System" - Type="String" - #tag EndViewProperty - #tag ViewProperty - Name="TextSize" - Visible=true - Group="Font" - InitialValue="0" - Type="Single" - #tag EndViewProperty - #tag ViewProperty - Name="TextUnit" - Visible=true - Group="Font" - InitialValue="0" - Type="FontUnits" - EditorType="Enum" - #tag EnumValues - "0 - Default" - "1 - Pixel" - "2 - Point" - "3 - Inch" - "4 - Millimeter" - #tag EndEnumValues + EditorType="Color" #tag EndViewProperty #tag ViewProperty Name="Top" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Underline" Visible=true Group="Font" + InitialValue="" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="UseFocusRing" - Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Visible" @@ -322,6 +386,7 @@ Inherits TextArea Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Width" @@ -329,6 +394,7 @@ Inherits TextArea Group="Position" InitialValue="100" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Admin App/Controls/TextFieldChanger.xojo_code b/Kaju Admin App/Controls/TextFieldChanger.xojo_code index 217ac83..8c603cd 100644 --- a/Kaju Admin App/Controls/TextFieldChanger.xojo_code +++ b/Kaju Admin App/Controls/TextFieldChanger.xojo_code @@ -16,70 +16,159 @@ Inherits TextField #tag ViewBehavior #tag ViewProperty - Name="AcceptTabs" + Name="AllowAutoDeactivate" Visible=true - Group="Behavior" + Group="Appearance" + InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Alignment" + Name="BackgroundColor" Visible=true - Group="Behavior" - InitialValue="0" - Type="Integer" - EditorType="Enum" - #tag EnumValues - "0 - Default" - "1 - Left" - "2 - Center" - "3 - Right" - #tag EndEnumValues + Group="Appearance" + InitialValue="&hFFFFFF" + Type="Color" + EditorType="Color" #tag EndViewProperty #tag ViewProperty - Name="AutoDeactivate" + Name="HasBorder" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="AutomaticallyCheckSpelling" + Name="Tooltip" Visible=true - Group="Behavior" + Group="Appearance" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="Transparent" + Visible=true + Group="Appearance" InitialValue="False" - Type="boolean" + Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="BackColor" + Name="AllowFocusRing" Visible=true Group="Appearance" - InitialValue="&hFFFFFF" - Type="Color" + InitialValue="True" + Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Bold" + Name="FontName" Visible=true Group="Font" - Type="Boolean" + InitialValue="System" + Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Border" + Name="FontSize" Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" + Group="Font" + InitialValue="0" + Type="Single" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FontUnit" + Visible=true + Group="Font" + InitialValue="0" + Type="FontUnits" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Pixel" + "2 - Point" + "3 - Inch" + "4 - Millimeter" + #tag EndEnumValues #tag EndViewProperty #tag ViewProperty - Name="CueText" + Name="Hint" Visible=true Group="Initial State" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty + #tag ViewProperty + Name="Value" + Visible=true + Group="Initial State" + InitialValue="" + Type="String" + EditorType="MultiLineEditor" + #tag EndViewProperty + #tag ViewProperty + Name="AllowTabs" + Visible=true + Group="Behavior" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="TextAlignment" + Visible=true + Group="Behavior" + InitialValue="0" + Type="TextAlignments" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Left" + "2 - Center" + "3 - Right" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="AllowSpellChecking" + Visible=true + Group="Behavior" + InitialValue="False" + Type="boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="MaximumCharactersAllowed" + Visible=true + Group="Behavior" + InitialValue="0" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="ValidationMask" + Visible=true + Group="Behavior" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Bold" + Visible=true + Group="Font" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty #tag ViewProperty Name="DataField" Visible=true Group="Database Binding" + InitialValue="" Type="String" EditorType="DataField" #tag EndViewProperty @@ -87,6 +176,7 @@ Inherits TextField Name="DataSource" Visible=true Group="Database Binding" + InitialValue="" Type="String" EditorType="DataSource" #tag EndViewProperty @@ -96,12 +186,15 @@ Inherits TextField Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Format" Visible=true Group="Appearance" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Height" @@ -109,95 +202,95 @@ Inherits TextField Group="Position" InitialValue="22" Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="HelpTag" - Visible=true - Group="Appearance" - Type="String" - EditorType="MultiLineEditor" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Index" Visible=true Group="ID" + InitialValue="" Type="Integer" - EditorType="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Italic" Visible=true Group="Font" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" + InitialValue="" Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="LimitText" - Visible=true - Group="Behavior" - InitialValue="0" - Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockBottom" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockLeft" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockRight" Visible=true Group="Position" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="LockTop" Visible=true Group="Position" + InitialValue="" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="Mask" - Visible=true - Group="Behavior" - Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Password" Visible=true Group="Appearance" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="ReadOnly" Visible=true Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabIndex" @@ -205,12 +298,15 @@ Inherits TextField Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabPanelIndex" + Visible=false Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TabStop" @@ -218,13 +314,7 @@ Inherits TextField Group="Position" InitialValue="True" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="Text" - Visible=true - Group="Initial State" - Type="String" - EditorType="MultiLineEditor" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TextColor" @@ -232,54 +322,23 @@ Inherits TextField Group="Appearance" InitialValue="&h000000" Type="Color" - #tag EndViewProperty - #tag ViewProperty - Name="TextFont" - Visible=true - Group="Font" - InitialValue="System" - Type="String" - #tag EndViewProperty - #tag ViewProperty - Name="TextSize" - Visible=true - Group="Font" - InitialValue="0" - Type="Single" - #tag EndViewProperty - #tag ViewProperty - Name="TextUnit" - Visible=true - Group="Font" - InitialValue="0" - Type="FontUnits" - EditorType="Enum" - #tag EnumValues - "0 - Default" - "1 - Pixel" - "2 - Point" - "3 - Inch" - "4 - Millimeter" - #tag EndEnumValues + EditorType="Color" #tag EndViewProperty #tag ViewProperty Name="Top" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Underline" Visible=true Group="Font" + InitialValue="" Type="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="UseFocusRing" - Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Visible" @@ -287,6 +346,7 @@ Inherits TextField Group="Appearance" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Width" @@ -294,6 +354,7 @@ Inherits TextField Group="Position" InitialValue="80" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Admin App/Kaju Admin.xojo_project b/Kaju Admin App/Kaju Admin.xojo_project index f54986b..83d5685 100644 --- a/Kaju Admin App/Kaju Admin.xojo_project +++ b/Kaju Admin App/Kaju Admin.xojo_project @@ -1,7 +1,9 @@ Type=Desktop -RBProjectVersion=2018.011 +RBProjectVersion=2019.031 MinIDEVersion=20070100 +OrigIDEVersion=00000000 Folder=Kaju Classes;../Kaju Classes;&h000000002570CF64;&h0000000000000000;false +Folder=Custom Plist;../Custom Plist;&h00000000721CD7FF;&h0000000000000000;false Class=App;App.xojo_code;&h0000000007955649;&h0000000000000000;false MenuBar=MainMenuBar;MainMenuBar.xojo_menu;&h000000004AB8FF74;&h0000000000000000;false FileTypeSet=FileTypes1;FileTypes1.xojo_filetypeset;&h00000000352FB9F5;&h0000000000000000;false @@ -28,6 +30,7 @@ Class=FolderItemAlias;Other Classes/FolderItemAlias.xojo_code;&h0000000053EF1AE5 Class=HTTPSSocket;../Kaju Classes/Kaju/HTTPSSocket.xojo_code;&h000000005ACDFAEB;&h0000000011400316;false Class=KajuFile;../Admin Classes/KajuFile.xojo_code;&h000000001A7FF7FF;&h0000000000000000;false Window=BinaryInformationControl;Controls/BinaryInformationControl.xojo_window;&h000000005D6E5FFF;&h000000000E8B14E5;false +Plist=Info;../Custom Plist/Info.plist;&h000000001F6587FF;&h00000000721CD7FF;false AppMenuBar=MainMenuBar MajorVersion=2 MinorVersion=1 diff --git a/Kaju Admin App/Other Classes/FolderItemAlias.xojo_code b/Kaju Admin App/Other Classes/FolderItemAlias.xojo_code index 5abee10..5d9168b 100644 --- a/Kaju Admin App/Other Classes/FolderItemAlias.xojo_code +++ b/Kaju Admin App/Other Classes/FolderItemAlias.xojo_code @@ -16,9 +16,9 @@ Protected Class FolderItemAlias #tag Method, Flags = &h0 Sub Operator_Convert(f As FolderItem) - if f IsA FolderItem then me.Constructor( f ) - - + if f IsA FolderItem then + me.Constructor( f ) + end if End Sub #tag EndMethod @@ -81,6 +81,7 @@ Protected Class FolderItemAlias Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -88,18 +89,23 @@ Protected Class FolderItemAlias Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -107,6 +113,7 @@ Protected Class FolderItemAlias Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Admin App/WndAdmin.xojo_window b/Kaju Admin App/WndAdmin.xojo_window index 3dd0ef6..5bc0346 100644 --- a/Kaju Admin App/WndAdmin.xojo_window +++ b/Kaju Admin App/WndAdmin.xojo_window @@ -3,7 +3,6 @@ Begin Window WndAdmin BackColor = &cFFFFFF00 Backdrop = 0 CloseButton = True - Compatibility = "" Composite = True Frame = 0 FullScreen = False @@ -11,7 +10,7 @@ Begin Window WndAdmin HasBackColor = False Height = 680 ImplicitInstance= True - LiveResize = True + LiveResize = "True" MacProcID = 0 MaxHeight = 32000 MaximizeButton = True @@ -81,7 +80,7 @@ Begin Window WndAdmin Begin PushButton btnNew AutoDeactivate = True Bold = True - ButtonStyle = "6" + ButtonStyle = 6 Cancel = False Caption = "+" Default = False @@ -93,7 +92,7 @@ Begin Window WndAdmin Italic = False Left = 20 LockBottom = True - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = False @@ -113,7 +112,7 @@ Begin Window WndAdmin Begin PushButton btnDelete AutoDeactivate = True Bold = True - ButtonStyle = "6" + ButtonStyle = 6 Cancel = False Caption = "-" Default = False @@ -125,7 +124,7 @@ Begin Window WndAdmin Italic = False Left = 39 LockBottom = True - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = False @@ -555,7 +554,6 @@ Begin Window WndAdmin LockLeft = False LockRight = True LockTop = True - MenuValue = 0 Scope = 2 TabIndex = 7 TabPanelIndex = 1 @@ -600,7 +598,6 @@ Begin Window WndAdmin LockLeft = False LockRight = True LockTop = True - MenuValue = 0 Scope = 2 TabIndex = 8 TabPanelIndex = 1 @@ -645,7 +642,6 @@ Begin Window WndAdmin LockLeft = False LockRight = True LockTop = True - MenuValue = 0 Scope = 2 TabIndex = 9 TabPanelIndex = 1 @@ -690,7 +686,6 @@ Begin Window WndAdmin LockLeft = False LockRight = True LockTop = True - MenuValue = 0 Scope = 2 TabIndex = 2 TabPanelIndex = 1 @@ -735,7 +730,6 @@ Begin Window WndAdmin LockLeft = False LockRight = True LockTop = True - MenuValue = 0 Scope = 2 TabIndex = 3 TabPanelIndex = 1 @@ -780,7 +774,6 @@ Begin Window WndAdmin LockLeft = False LockRight = True LockTop = True - MenuValue = 0 Scope = 2 TabIndex = 4 TabPanelIndex = 1 @@ -825,7 +818,6 @@ Begin Window WndAdmin LockLeft = False LockRight = True LockTop = True - MenuValue = 0 Scope = 2 TabIndex = 5 TabPanelIndex = 1 @@ -870,7 +862,6 @@ Begin Window WndAdmin LockLeft = False LockRight = True LockTop = True - MenuValue = 0 Scope = 2 TabIndex = 6 TabPanelIndex = 1 @@ -1201,7 +1192,7 @@ Begin Window WndAdmin Begin PushButton btnCopyPublicKey AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = False Caption = "Copy RSA Public Key" Default = False @@ -1213,7 +1204,7 @@ Begin Window WndAdmin Italic = False Left = 251 LockBottom = True - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = False @@ -1312,7 +1303,7 @@ Begin Window WndAdmin Begin PushButton btnExport AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = False Caption = "Export..." Default = False @@ -1324,7 +1315,7 @@ Begin Window WndAdmin Italic = False Left = 819 LockBottom = True - LockedInPosition= False + LockedInPosition= True LockLeft = False LockRight = True LockTop = False @@ -1344,7 +1335,7 @@ Begin Window WndAdmin Begin PushButton btnDuplicate AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = False Caption = "Dupe" Default = False @@ -1356,7 +1347,7 @@ Begin Window WndAdmin Italic = False Left = 158 LockBottom = True - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = False @@ -1398,11 +1389,10 @@ Begin Window WndAdmin Italic = False Left = 684 LockBottom = True - LockedInPosition= False + LockedInPosition= True LockLeft = False LockRight = True LockTop = False - MenuValue = -1 Scope = 2 TabIndex = 9 TabPanelIndex = 0 @@ -1517,6 +1507,14 @@ Begin Window WndAdmin Version = "" VersionAsDouble = 0.0 End + Begin Timer tmrAdjustControls + Index = -2147483648 + LockedInPosition= False + Mode = 0 + Period = 20 + Scope = 2 + TabPanelIndex = 0 + End End #tag EndWindow @@ -1558,13 +1556,6 @@ End #tag Event Sub Close() - if RelativeToFolderItem isa FolderItem then - if RelativeToFolderItem.Exists then - RelativeToFolderItem.Delete - end if - RelativeToFolderItem = nil - end if - // // Tear down the BinaryInformationControls // @@ -1580,8 +1571,6 @@ End #tag Event Sub Open() - RelativeToFolderItem = GetTemporaryFolderItem - // // Create binary controls // @@ -1650,8 +1639,9 @@ End #tag Method, Flags = &h21 - Private Sub AdjustControls() - if self.Loading then + Private Sub AdjustControls(immediate As Boolean = False) + if not immediate or self.Loading then + tmrAdjustControls.Mode = Timer.ModeSingle return end if @@ -1762,8 +1752,8 @@ End bc.Clear next - hvReleaseNotesPreview.LoadPage( kNoDataHTML, RelativeToFolderItem ) - hvImagePreview.LoadPage( kNoDataHTML, RelativeToFolderItem ) + hvReleaseNotesPreview.LoadPage( kNoDataHTML, nil ) + hvImagePreview.LoadPage( kNoDataHTML, nil ) self.Loading = false @@ -1896,10 +1886,13 @@ End #tag EndMethod #tag Method, Flags = &h21 - Private Function DoSave() As Boolean + Private Function DoSave(f As FolderItem = Nil) As Boolean StoreFieldsToVersionRow() - dim f as FolderItem = Document + if f is nil then + f = Document + end if + if f is nil then return DoSaveAs() end if @@ -1909,6 +1902,7 @@ End dim r as boolean MyKajuFile.SaveTo( f ) r = true + Document = f ContentsChanged = false Exception err as KajuException @@ -1954,8 +1948,7 @@ End end if end if - Document = f - r = DoSave() + r = DoSave( f ) end if UpdateWindowTitle @@ -2282,10 +2275,6 @@ End Private Platforms() As String #tag EndProperty - #tag Property, Flags = &h21 - Private RelativeToFolderItem As FolderItem - #tag EndProperty - #tag Constant, Name = kNoDataHTML, Type = String, Dynamic = False, Default = \"
", Scope = Private #tag EndConstant @@ -2350,10 +2339,11 @@ End tmrUpdateReleaseNotesPreview.Reset #if TargetWindows then - hvReleaseNotesPreview.LoadPage( kNoDataHTML, RelativeToFolderItem ) + hvReleaseNotesPreview.LoadPage( kNoDataHTML, nil ) dim releaseNotes as string = ControlValue( fldReleaseNotes ).StringValue - hvReleaseNotesPreview.LoadPage releaseNotes, RelativeToFolderItem + hvReleaseNotesPreview.LoadPage releaseNotes, nil + me.SetFocus #endif End Sub @@ -2361,7 +2351,7 @@ End #tag EndEvents #tag Events hvReleaseNotesPreview #tag Event - Function NewWindow() As HTMLViewer + Function NewWindow() As Object return hvNewWindow End Function #tag EndEvent @@ -2373,7 +2363,7 @@ End End Function #tag EndEvent #tag Event - Sub DocumentComplete(URL as String) + Sub DocumentComplete(url as String) #pragma unused URL self.Loading = false @@ -2395,14 +2385,14 @@ End tmrUpdateImagePreview.Reset #if TargetWindows then - hvImagePreview.LoadPage kNoDataHTML, RelativeToFolderItem + hvImagePreview.LoadPage kNoDataHTML, nil #endif End Sub #tag EndEvent #tag EndEvents #tag Events hvImagePreview #tag Event - Function NewWindow() As HTMLViewer + Function NewWindow() As Object return hvNewWindow End Function #tag EndEvent @@ -2414,7 +2404,7 @@ End End Function #tag EndEvent #tag Event - Sub DocumentComplete(URL as String) + Sub DocumentComplete(url as String) #pragma unused URL self.Loading = false @@ -2475,8 +2465,10 @@ End else releaseNotes = objReleaseNotesProcessor.DisplayReleaseNotes end if - hvReleaseNotesPreview.LoadPage( releaseNotes, RelativeToFolderItem ) + dim saveControl as RectControl = self.Focus + hvReleaseNotesPreview.LoadPage( releaseNotes, nil ) + self.Focus = saveControl // // The htmlViewer will set Loading to false // @@ -2594,42 +2586,53 @@ End End Sub #tag EndEvent #tag EndEvents +#tag Events tmrAdjustControls + #tag Event + Sub Action() + AdjustControls true + + End Sub + #tag EndEvent +#tag EndEvents #tag ViewBehavior #tag ViewProperty - Name="BackColor" + Name="MinimumWidth" Visible=true - Group="Appearance" - InitialValue="&hFFFFFF" - Type="Color" + Group="Size" + InitialValue="64" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Backdrop" + Name="MinimumHeight" Visible=true - Group="Appearance" - Type="Picture" - EditorType="Picture" + Group="Size" + InitialValue="64" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="CloseButton" + Name="MaximumWidth" Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" - EditorType="Boolean" + Group="Size" + InitialValue="32000" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Composite" + Name="MaximumHeight" Visible=true - Group="Appearance" - InitialValue="False" - Type="Boolean" + Group="Size" + InitialValue="32000" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Frame" + Name="Type" Visible=true - Group="Appearance" + Group="Frame" InitialValue="0" - Type="Integer" + Type="Types" EditorType="Enum" #tag EnumValues "0 - Document" @@ -2646,148 +2649,155 @@ End #tag EndEnumValues #tag EndViewProperty #tag ViewProperty - Name="FullScreen" - Group="Appearance" - InitialValue="False" + Name="HasCloseButton" + Visible=true + Group="Frame" + InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="FullScreenButton" + Name="HasMaximizeButton" Visible=true - Group="Appearance" - InitialValue="False" + Group="Frame" + InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="HasBackColor" + Name="HasMinimizeButton" Visible=true - Group="Appearance" + Group="Frame" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="HasFullScreenButton" + Visible=true + Group="Frame" InitialValue="False" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Height" + Name="DefaultLocation" Visible=true - Group="Position" - InitialValue="400" - Type="Integer" + Group="Behavior" + InitialValue="0" + Type="Locations" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Parent Window" + "2 - Main Screen" + "3 - Parent Window Screen" + "4 - Stagger" + #tag EndEnumValues #tag EndViewProperty #tag ViewProperty - Name="ImplicitInstance" + Name="HasBackgroundColor" Visible=true - Group="Appearance" - InitialValue="True" + Group="Background" + InitialValue="False" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Interfaces" + Name="BackgroundColor" Visible=true - Group="ID" - Type="String" - EditorType="String" + Group="Background" + InitialValue="&hFFFFFF" + Type="Color" + EditorType="Color" #tag EndViewProperty #tag ViewProperty - Name="LiveResize" + Name="Backdrop" Visible=true Group="Appearance" - InitialValue="True" - Type="Boolean" - EditorType="Boolean" + InitialValue="" + Type="Picture" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Loading" - Group="Behavior" + Name="Composite" + Visible=true + Group="Appearance" + InitialValue="False" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MacProcID" - Visible=true + Name="FullScreen" + Visible=false Group="Appearance" - InitialValue="0" - Type="Integer" + InitialValue="False" + Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MaxHeight" + Name="Height" Visible=true Group="Position" - InitialValue="32000" + InitialValue="400" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MaximizeButton" + Name="ImplicitInstance" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="MaxWidth" - Visible=true - Group="Position" - InitialValue="32000" - Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MenuBar" + Name="Interfaces" Visible=true - Group="Appearance" - Type="MenuBar" - EditorType="MenuBar" + Group="ID" + InitialValue="" + Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MenuBarVisible" - Group="Appearance" - InitialValue="True" + Name="Loading" + Visible=false + Group="Behavior" + InitialValue="" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MinHeight" + Name="MacProcID" Visible=true - Group="Position" - InitialValue="64" + Group="Appearance" + InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MinimizeButton" + Name="MenuBar" Visible=true Group="Appearance" - InitialValue="True" - Type="Boolean" - EditorType="Boolean" + InitialValue="" + Type="MenuBar" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MinWidth" - Visible=true - Group="Position" - InitialValue="64" - Type="Integer" + Name="MenuBarVisible" + Visible=false + Group="Appearance" + InitialValue="True" + Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" - #tag EndViewProperty - #tag ViewProperty - Name="Placement" - Visible=true - Group="Position" - InitialValue="0" - Type="Integer" - EditorType="Enum" - #tag EnumValues - "0 - Default" - "1 - Parent Window" - "2 - Main Screen" - "3 - Parent Window Screen" - "4 - Stagger" - #tag EndEnumValues + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Resizeable" @@ -2795,14 +2805,15 @@ End Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Title" @@ -2810,6 +2821,7 @@ End Group="Appearance" InitialValue="Untitled" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Visible" @@ -2817,7 +2829,7 @@ End Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Width" @@ -2825,5 +2837,6 @@ End Group="Position" InitialValue="600" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior diff --git a/Kaju Admin CLI/FileHandlerSubApplication.xojo_code b/Kaju Admin CLI/FileHandlerSubApplication.xojo_code index d91b316..bba9add 100644 --- a/Kaju Admin CLI/FileHandlerSubApplication.xojo_code +++ b/Kaju Admin CLI/FileHandlerSubApplication.xojo_code @@ -27,13 +27,17 @@ Inherits SubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -43,6 +47,7 @@ Inherits SubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -50,18 +55,23 @@ Inherits SubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -69,10 +79,13 @@ Inherits SubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/Kaju Admin CLI.xojo_project b/Kaju Admin CLI/Kaju Admin CLI.xojo_project index 2bc8634..feda6b3 100644 --- a/Kaju Admin CLI/Kaju Admin CLI.xojo_project +++ b/Kaju Admin CLI/Kaju Admin CLI.xojo_project @@ -1,7 +1,9 @@ Type=Console -RBProjectVersion=2018.011 +RBProjectVersion=2019.031 MinIDEVersion=20070100 +OrigIDEVersion=00000000 Class=App;App.xojo_code;&h0000000031FD87FF;&h0000000000000000;false +Folder=Custom Plist;../Custom Plist;&h00000000291C0FFF;&h0000000000000000;false Module=FormatCodePreferences;FormatCodePreferences.xojo_code;&h000000002977F6F1;&h0000000000000000;false BuildSteps=Build Automation;Build Automation.xojo_code;&h0000000028989FFF;&h0000000000000000;false Folder=Kaju Classes;../Kaju Classes;&h000000002570CF64;&h0000000000000000;false @@ -32,6 +34,7 @@ Class=OptionMissingKeyException;../Other Classes/OptionParser/OptionMissingKeyEx Class=OptionParser;../Other Classes/OptionParser/OptionParser.xojo_code;&h0000000025CD9122;&h00000000797A37FF;false Class=OptionParserException;../Other Classes/OptionParser/OptionParserException.xojo_code;&h000000005CB2B525;&h00000000797A37FF;false Class=OptionUnrecognizedKeyException;../Other Classes/OptionParser/OptionUnrecognizedKeyException.xojo_code;&h0000000012104F75;&h00000000797A37FF;false +Plist=Info;../Custom Plist/Info.plist;&h000000006407F7FF;&h00000000291C0FFF;false MajorVersion=2 MinorVersion=1 SubVersion=0 diff --git a/Kaju Admin CLI/Sub Applications/AddVersionApp.xojo_code b/Kaju Admin CLI/Sub Applications/AddVersionApp.xojo_code index 0180ba3..f3d3080 100644 --- a/Kaju Admin CLI/Sub Applications/AddVersionApp.xojo_code +++ b/Kaju Admin CLI/Sub Applications/AddVersionApp.xojo_code @@ -62,13 +62,17 @@ Inherits VersionHandlerSubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -78,6 +82,7 @@ Inherits VersionHandlerSubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -85,18 +90,23 @@ Inherits VersionHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -104,10 +114,13 @@ Inherits VersionHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/Sub Applications/CreateApp.xojo_code b/Kaju Admin CLI/Sub Applications/CreateApp.xojo_code index a6bd54f..409016c 100644 --- a/Kaju Admin CLI/Sub Applications/CreateApp.xojo_code +++ b/Kaju Admin CLI/Sub Applications/CreateApp.xojo_code @@ -54,13 +54,17 @@ Inherits SubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -70,6 +74,7 @@ Inherits SubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -77,18 +82,23 @@ Inherits SubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -96,10 +106,13 @@ Inherits SubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/Sub Applications/DeleteVersionApp.xojo_code b/Kaju Admin CLI/Sub Applications/DeleteVersionApp.xojo_code index 2e5d3f6..f5d1c2e 100644 --- a/Kaju Admin CLI/Sub Applications/DeleteVersionApp.xojo_code +++ b/Kaju Admin CLI/Sub Applications/DeleteVersionApp.xojo_code @@ -39,13 +39,17 @@ Inherits VersionHandlerSubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -55,6 +59,7 @@ Inherits VersionHandlerSubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -62,18 +67,23 @@ Inherits VersionHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -81,10 +91,13 @@ Inherits VersionHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/Sub Applications/EditVersionApp.xojo_code b/Kaju Admin CLI/Sub Applications/EditVersionApp.xojo_code index eddb87c..f8b9cc3 100644 --- a/Kaju Admin CLI/Sub Applications/EditVersionApp.xojo_code +++ b/Kaju Admin CLI/Sub Applications/EditVersionApp.xojo_code @@ -279,13 +279,17 @@ Inherits VersionHandlerSubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -295,6 +299,7 @@ Inherits VersionHandlerSubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -302,18 +307,23 @@ Inherits VersionHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -321,10 +331,13 @@ Inherits VersionHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/Sub Applications/ExportApp.xojo_code b/Kaju Admin CLI/Sub Applications/ExportApp.xojo_code index e9c1724..5a8f570 100644 --- a/Kaju Admin CLI/Sub Applications/ExportApp.xojo_code +++ b/Kaju Admin CLI/Sub Applications/ExportApp.xojo_code @@ -46,13 +46,17 @@ Inherits FileHandlerSubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -62,6 +66,7 @@ Inherits FileHandlerSubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -69,18 +74,23 @@ Inherits FileHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -88,10 +98,13 @@ Inherits FileHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/Sub Applications/GetKeyApp.xojo_code b/Kaju Admin CLI/Sub Applications/GetKeyApp.xojo_code index 9456a0e..bac3fcb 100644 --- a/Kaju Admin CLI/Sub Applications/GetKeyApp.xojo_code +++ b/Kaju Admin CLI/Sub Applications/GetKeyApp.xojo_code @@ -34,13 +34,17 @@ Inherits FileHandlerSubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -50,6 +54,7 @@ Inherits FileHandlerSubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -57,18 +62,23 @@ Inherits FileHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -76,10 +86,13 @@ Inherits FileHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/Sub Applications/ListVersionsApp.xojo_code b/Kaju Admin CLI/Sub Applications/ListVersionsApp.xojo_code index 7dad2c2..9338911 100644 --- a/Kaju Admin CLI/Sub Applications/ListVersionsApp.xojo_code +++ b/Kaju Admin CLI/Sub Applications/ListVersionsApp.xojo_code @@ -121,13 +121,17 @@ Inherits FileHandlerSubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -137,6 +141,7 @@ Inherits FileHandlerSubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -144,18 +149,23 @@ Inherits FileHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -163,10 +173,13 @@ Inherits FileHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/Sub Applications/VersionInfoApp.xojo_code b/Kaju Admin CLI/Sub Applications/VersionInfoApp.xojo_code index ef7e319..f0eda5a 100644 --- a/Kaju Admin CLI/Sub Applications/VersionInfoApp.xojo_code +++ b/Kaju Admin CLI/Sub Applications/VersionInfoApp.xojo_code @@ -79,13 +79,17 @@ Inherits VersionHandlerSubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -95,6 +99,7 @@ Inherits VersionHandlerSubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -102,18 +107,23 @@ Inherits VersionHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -121,10 +131,13 @@ Inherits VersionHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Admin CLI/VersionHandlerSubApplication.xojo_code b/Kaju Admin CLI/VersionHandlerSubApplication.xojo_code index c454991..86d5c22 100644 --- a/Kaju Admin CLI/VersionHandlerSubApplication.xojo_code +++ b/Kaju Admin CLI/VersionHandlerSubApplication.xojo_code @@ -46,13 +46,17 @@ Inherits FileHandlerSubApplication #tag ViewBehavior #tag ViewProperty Name="AdditionalHelp" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Description" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -62,6 +66,7 @@ Inherits FileHandlerSubApplication Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -69,18 +74,23 @@ Inherits FileHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -88,10 +98,13 @@ Inherits FileHandlerSubApplication Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Usage" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Classes/Kaju.xojo_code b/Kaju Classes/Kaju.xojo_code index c916e36..53fddb0 100644 --- a/Kaju Classes/Kaju.xojo_code +++ b/Kaju Classes/Kaju.xojo_code @@ -231,6 +231,23 @@ Protected Module Kaju End Sub #tag EndMethod + #tag Method, Flags = &h21 + Private Function StripURLCredentials(url As String) As String + // + // Strips credentials from the given url + // + + dim rx as new RegEx + rx.SearchPattern = "(://|^)(\w+:\w*)@" + rx.ReplacementPattern = "$1" + + url = rx.Replace( url ) + + return url + + End Function + #tag EndMethod + #tag Method, Flags = &h1 Protected Function TrueExecutableFile() As FolderItem dim r as FolderItem = App.ExecutableFile @@ -427,6 +444,7 @@ Protected Module Kaju Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -434,18 +452,23 @@ Protected Module Kaju Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -453,6 +476,7 @@ Protected Module Kaju Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Module diff --git a/Kaju Classes/Kaju/BinaryInformation.xojo_code b/Kaju Classes/Kaju/BinaryInformation.xojo_code index fbfe64a..eac7cda 100644 --- a/Kaju Classes/Kaju/BinaryInformation.xojo_code +++ b/Kaju Classes/Kaju/BinaryInformation.xojo_code @@ -110,19 +110,25 @@ Inherits Kaju.Information #tag ViewBehavior #tag ViewProperty Name="ExecutableName" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="FileName" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Hash" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -132,11 +138,15 @@ Inherits Kaju.Information Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="IsValid" + Visible=false Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -144,18 +154,23 @@ Inherits Kaju.Information Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -163,10 +178,13 @@ Inherits Kaju.Information Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="URL" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Classes/Kaju/HTTPSSocket.xojo_code b/Kaju Classes/Kaju/HTTPSSocket.xojo_code index 75c900d..66029c5 100644 --- a/Kaju Classes/Kaju/HTTPSSocket.xojo_code +++ b/Kaju Classes/Kaju/HTTPSSocket.xojo_code @@ -61,40 +61,6 @@ Inherits HTTPSecureSocket End Function #tag EndMethod - #tag Method, Flags = &h0 - Function GetRedirectAddress(url As String, timeout As Integer, maximumIterations As Integer = kDefaultMaximumIterations) As String - // Gets the redirect address for a url - // Will give up after maximumIterations interations. - // Put a 0 (or less) in there for infinite - - if url = "" then - return url - end if - - dim isFinite as boolean = true - if maximumIterations < 1 then - isFinite = false - end if - - do - dim headers as InternetHeaders = GetHeaders( url, timeout ) - if headers is nil then - exit - elseif headers.Value( "Location" ) <> "" then - url = headers.Value( "Location" ) - else - exit - end if - if isFinite then - maximumIterations = maximumIterations - 1 - end if - loop until isFinite and maximumIterations = 0 // Will never end if maxiumIterations < 0 to start - - return url.Trim - - End Function - #tag EndMethod - #tag Method, Flags = &h0 Sub SendRequest(method As String, url As String) SetSecure( url ) @@ -179,71 +145,83 @@ Inherits HTTPSecureSocket #tag ViewBehavior + #tag ViewProperty + Name="SSLConnectionType" + Visible=true + Group="Behavior" + InitialValue="3" + Type="SSLConnectionTypes" + EditorType="Enum" + #tag EnumValues + "1 - SSLv23" + "3 - TLSv1" + "4 - TLSv11" + "5 - TLSv12" + #tag EndEnumValues + #tag EndViewProperty #tag ViewProperty Name="CertificateFile" Visible=true Group="Behavior" + InitialValue="" Type="FolderItem" - EditorType="File" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="CertificatePassword" Visible=true Group="Behavior" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="CertificateRejectionFile" Visible=true Group="Behavior" + InitialValue="" Type="FolderItem" - EditorType="File" - #tag EndViewProperty - #tag ViewProperty - Name="ConnectionType" - Visible=true - Group="Behavior" - InitialValue="3" - Type="Integer" - EditorType="Enum" - #tag EnumValues - "1 - SSLv23" - "3 - TLSv1" - "4 - TLSv11" - "5 - TLSv12" - #tag EndEnumValues + EditorType="" #tag EndViewProperty #tag ViewProperty Name="ForceSecure" + Visible=false Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Index" Visible=true Group="ID" + InitialValue="" Type="Integer" - EditorType="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Secure" Visible=true Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Classes/Kaju/HTTPSocketAsync.xojo_code b/Kaju Classes/Kaju/HTTPSocketAsync.xojo_code index 5da1859..89d55fd 100644 --- a/Kaju Classes/Kaju/HTTPSocketAsync.xojo_code +++ b/Kaju Classes/Kaju/HTTPSocketAsync.xojo_code @@ -1,15 +1,15 @@ #tag Class Protected Class HTTPSocketAsync -Inherits Xojo.Net.HTTPSocket +Inherits URLConnection #tag Event - Function AuthenticationRequired(Realm as Text, ByRef Name as Text, ByRef Password as Text) As Boolean - if RaiseEvent AuthenticationRequired( Realm, Name, Password ) then + Function AuthenticationRequested(realm As String, ByRef name As String, ByRef password As String) As Boolean + if RaiseEvent AuthenticationRequested( realm, name, password ) then return true end if if Username <> "" then - Name = Username.ToText - Password = self.Password.ToText + name = Username.ToText + password = self.Password.ToText return true else return false @@ -18,48 +18,75 @@ Inherits Xojo.Net.HTTPSocket #tag EndEvent #tag Event - Sub FileReceived(URL as Text, HTTPStatus as Integer, File as xojo.IO.FolderItem) - dim f as new FolderItem( file.Path, FolderItem.PathTypeNative ) - RaiseEvent FileReceived( url, httpStatus, f ) - End Sub - #tag EndEvent - - #tag Event - Sub PageReceived(URL as Text, HTTPStatus as Integer, Content as xojo.Core.MemoryBlock) - dim mb as MemoryBlock = content.Data - dim contentString as string = mb.StringValue( 0, content.Size ) + Sub ContentReceived(URL As String, HTTPStatus As Integer, content As String) + url = Kaju.StripURLCredentials( url ) - if Encodings.UTF8.IsValidData( contentString ) then - contentString = contentString.DefineEncoding( Encodings.UTF8 ) + if not AllowRedirection and url <> RequestedURL then + content = "" + httpStatus = 302 + + elseif content.Encoding is nil and Encodings.UTF8.IsValidData( content ) then + content = content.DefineEncoding( Encodings.UTF8 ) + end if - RaiseEvent PageReceived( url, httpStatus, contentString ) + RaiseEvent ContentReceived( url, httpStatus, content ) End Sub #tag EndEvent #tag Method, Flags = &h0 - Sub Get(url As String) + Sub Get(url As String, allowRedirect As Boolean) + self.AllowRedirection = allowRedirect + Disconnect SetSecure url - super.Send "GET", url.ToText + super.Send "GET", url End Sub #tag EndMethod #tag Method, Flags = &h0 - Sub Get(url As String, file As FolderItem) + Sub Get(url As String, file As FolderItem, allowRedirect As Boolean) + self.AllowRedirection = allowRedirect + Disconnect SetSecure url + super.Send "GET", url, file + + End Sub + #tag EndMethod + + #tag Method, Flags = &h0 + Sub GetSync(url As String, file As FolderItem, timeout As Integer = 0) + self.AllowRedirection = true + + Disconnect - dim path as string = file.NativePath.DefineEncoding( Encodings.UTF8 ) - dim f as new Xojo.IO.FolderItem( path.ToText ) - super.Send "GET", url.ToText, f + SetSecure url + super.SendSync "GET", url, file, timeout End Sub #tag EndMethod + #tag Method, Flags = &h0 + Function GetSync(url As String, timeout As Integer = 0) As String + self.AllowRedirection = true + + Disconnect + + SetSecure url + return super.SendSync( "GET", url, timeout ) + End Function + #tag EndMethod + + #tag Method, Flags = &h21 + Private Sub Send(method As String, url As String, File As FolderItem) + super.Send Method, URL, File + End Sub + #tag EndMethod + #tag Method, Flags = &h21 Private Sub Send(method as Text, url as Text) super.Send method, url @@ -67,14 +94,22 @@ Inherits Xojo.Net.HTTPSocket #tag EndMethod #tag Method, Flags = &h21 - Private Sub Send(Method as Text, URL as Text, File as xojo.IO.FolderItem) - super.Send Method, URL, File + Private Sub SendSync(method As String, URL As String, file As FolderItem, timeout As Integer = 0) + super.SendSync method, URL, file, timeout + End Sub #tag EndMethod + #tag Method, Flags = &h21 + Private Function SendSync(method As String, URL As String, timeout As Integer = 0) As String + return super.SendSync( method, URL, timeout ) + + End Function + #tag EndMethod + #tag Method, Flags = &h21 Private Sub SetSecure(ByRef url As String) - ValidateCertificates = true + AllowCertificateValidation = true Username = "" Password = "" ClearRequestHeaders @@ -83,6 +118,7 @@ Inherits Xojo.Net.HTTPSocket RequestHeader( "Pragma" ) = "no-cache" url = url.ConvertEncoding( Encodings.UTF8 ) + RequestedURL = Kaju.StripURLCredentials( url ) #if not TargetMacOS then @@ -112,34 +148,55 @@ Inherits Xojo.Net.HTTPSocket #tag Hook, Flags = &h0 - Event AuthenticationRequired(Realm as Text, ByRef Name as Text, ByRef Password as Text) As Boolean + Event AuthenticationRequested(realm As String, ByRef name As String, ByRef password As String) As Boolean #tag EndHook #tag Hook, Flags = &h0 - Event FileReceived(url As String, httpStatus As Integer, file As FolderItem) + Event ContentReceived(url As String, httpStatus As Integer, content As String) #tag EndHook - #tag Hook, Flags = &h0 - Event PageReceived(url As String, httpStatus As Integer, content As String) - #tag EndHook + #tag Property, Flags = &h21 + Private AllowRedirection As Boolean = False + #tag EndProperty #tag Property, Flags = &h21 Private Password As String #tag EndProperty + #tag Property, Flags = &h21 + Private RequestedURL As String + #tag EndProperty + #tag Property, Flags = &h21 Private Username As String #tag EndProperty #tag ViewBehavior + #tag ViewProperty + Name="AllowCertificateValidation" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="HTTPStatusCode" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty #tag ViewProperty Name="Index" Visible=true Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -147,18 +204,23 @@ Inherits Xojo.Net.HTTPSocket Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -166,11 +228,7 @@ Inherits Xojo.Net.HTTPSocket Group="Position" InitialValue="0" Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="ValidateCertificates" - Group="Behavior" - Type="Boolean" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Classes/Kaju/Information.xojo_code b/Kaju Classes/Kaju/Information.xojo_code index 72beac4..dce5980 100644 --- a/Kaju Classes/Kaju/Information.xojo_code +++ b/Kaju Classes/Kaju/Information.xojo_code @@ -203,11 +203,15 @@ Protected Class Information Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="IsValid" + Visible=false Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -215,18 +219,23 @@ Protected Class Information Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -234,6 +243,7 @@ Protected Class Information Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Classes/Kaju/KajuException.xojo_code b/Kaju Classes/Kaju/KajuException.xojo_code index 4205df8..e8d69fd 100644 --- a/Kaju Classes/Kaju/KajuException.xojo_code +++ b/Kaju Classes/Kaju/KajuException.xojo_code @@ -35,9 +35,11 @@ Inherits RuntimeException #tag ViewBehavior #tag ViewProperty Name="ErrorNumber" + Visible=false Group="Behavior" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Index" @@ -45,6 +47,7 @@ Inherits RuntimeException Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -52,10 +55,13 @@ Inherits RuntimeException Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Message" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -63,18 +69,25 @@ Inherits RuntimeException Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Reason" + Visible=false Group="Behavior" + InitialValue="" Type="Text" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -82,6 +95,7 @@ Inherits RuntimeException Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Classes/Kaju/UpdateChecker.xojo_code b/Kaju Classes/Kaju/UpdateChecker.xojo_code index 20bcd10..7721a3c 100644 --- a/Kaju Classes/Kaju/UpdateChecker.xojo_code +++ b/Kaju Classes/Kaju/UpdateChecker.xojo_code @@ -1,54 +1,52 @@ #tag Class Protected Class UpdateChecker #tag Method, Flags = &h21 - Private Sub AsyncHTTP_Error(sender As HTTPSocketAsync, err As RuntimeException) + Private Sub AsyncHTTP_ContentReceived(sender As HTTPSocketAsync, url As String, httpStatus As Integer, content As String) #pragma unused sender + #pragma unused url - dim index as integer = AsyncCheckers.IndexOf( self ) - if index <> -1 then - AsyncCheckers.Remove index - end if - - dim errMsg as string = err.Message - if errMsg = "" then - err.Message = "An exception of type " + Introspection.GetType( err ).Name + " has occurred" - end if + RemoveInstance self - LastError = err + dim statusCode as integer = httpStatus + dim raw as string = content - if HandleError( errMsg ) then - FetchAsync + if statusCode >= 400 and statusCode <= 499 then // Not found + mResult = ResultType.PageNotFound + RaiseEvent ExecuteAsyncComplete + + elseif statusCode >= 300 and statusCode <= 399 then + mResult = ResultType.PageRedirected + RaiseEvent ExecuteAsyncComplete + + elseif ProcessRaw( raw ) then + FetchAsync true // Immediate because the socket is already set up + else RaiseEvent ExecuteAsyncComplete + end if + End Sub #tag EndMethod #tag Method, Flags = &h21 - Private Sub AsyncHTTP_PageReceived(sender As HTTPSocketAsync, url As String, httpStatus As Integer, content As String) + Private Sub AsyncHTTP_Error(sender As HTTPSocketAsync, err As RuntimeException) #pragma unused sender - #pragma unused url - dim index as integer = AsyncCheckers.IndexOf( self ) - if index <> -1 then - AsyncCheckers.Remove index + RemoveInstance self + + dim errMsg as string = err.Message + if errMsg = "" then + err.Message = "An exception of type " + Introspection.GetType( err ).Name + " has occurred" end if - dim statusCode as integer = httpStatus - dim raw as string = content + LastError = err - if statusCode = 404 then // Not found - mResult = ResultType.PageNotFound - RaiseEvent ExecuteAsyncComplete - - elseif ProcessRaw( raw ) then - FetchAsync() - + if HandleError( errMsg ) then + FetchAsync true // Immediate because the socket is already set up else RaiseEvent ExecuteAsyncComplete - end if - End Sub #tag EndMethod @@ -65,10 +63,12 @@ Protected Class UpdateChecker Private Sub Destructor() SavePrefs() - if AsyncHTTP isa object then - RemoveHandler AsyncHTTP.PageReceived, WeakAddressOf AsyncHTTP_PageReceived - RemoveHandler AsyncHTTP.Error, WeakAddressOf AsyncHTTP_Error - AsyncHTTP = nil + TeardownAsyncHTTP + + if FetchAsyncTimer isa object then + FetchAsyncTimer.Mode = Timer.ModeOff + RemoveHandler FetchAsyncTimer.Action, WeakAddressOf FetchAsyncTimer_Action + FetchAsyncTimer = nil end if End Sub @@ -81,7 +81,7 @@ Protected Class UpdateChecker #tag EndMethod #tag Method, Flags = &h0 - Sub Execute() + Attributes( Deprecated = "ExecuteAsync" ) Sub Execute() // Pull the data from the URL, check it, and preset the window if needed // Returns true if the app should quit in preparation of the update. // @@ -109,8 +109,7 @@ Protected Class UpdateChecker return end if - FetchAsync - + FetchAsync false End Sub #tag EndMethod @@ -120,24 +119,40 @@ Protected Class UpdateChecker // Look for redirection // dim url as string = self.UpdateURL - if AllowRedirection then - dim redirector as new Kaju.HTTPSSocket - url = redirector.GetRedirectAddress( url, 5 ) - end if // // Repeat the check until we get data or the user gives up // do + const kTimeout as integer = 5 - dim http as new Kaju.HTTPSSocket + dim raw as string + dim statusCode as integer - dim raw as string = http.Get( url, 5 ) - dim statusCode as integer = http.HTTPStatusCode + // + // Note: + // + // If Xojo ever disallows redirection in URLConnection + // we can delete HTTPSSocket and simplify this + // code. + // + if AllowRedirection then + dim http as new Kaju.HTTPSocketAsync // Follows redirects anyway + raw = http.GetSync( url, kTimeout ) + statusCode = http.HTTPStatusCode + else + dim http as new Kaju.HTTPSSocket + raw = http.Get( url, kTimeout ) // Does not follow redirects + statusCode = http.HTTPStatusCode + end if if statusCode = 404 then // Not found mResult = ResultType.PageNotFound exit do + + elseif statusCode >= 300 and statusCode <= 399 then + mResult = ResultType.PageRedirected + exit do end if if not ProcessRaw( raw ) then @@ -149,49 +164,62 @@ Protected Class UpdateChecker #tag EndMethod #tag Method, Flags = &h21 - Private Sub FetchAsync() - // - // The new socket will always redirect so - // AllowRedirection must be set to true. - // If it isn't, we will let the consumer know through - // an exception. - // - - if not AllowRedirection then - const kErrorString = _ - "AllowRedirection must be set to True when using asynchrous operations" - raise new Kaju.KajuException( kErrorString, CurrentMethodName ) - end if - - dim url as string = UpdateURL - dim http as Kaju.HTTPSocketAsync = GetAsyncHTTPSocket - http.Get url + Private Sub FetchAsync(immediate As Boolean) + dim http as Kaju.HTTPSocketAsync = GetNewAsyncHTTPSocket // Set up the socket mResult = ResultType.FetchingUpdateInfo // - // Processing will resume in the events + // We have to hold a reference to this object in case the consumer decided to use + // a temporary variable // + StoreInstance self // - // But we have to hold a reference to this object in case the consumer decided to use - // a temporary variable + // If not immediate, start a timer to do this // - - if AsyncCheckers.IndexOf( self ) = -1 then - AsyncCheckers.Append self + // This is to counter a potential timing issue reported by a user + // so we set up the socket first, then call it later + // + if immediate then + + dim url as string = UpdateURL + http.Get url, AllowRedirection + + // + // Processing will resume in the events + // + + else + + if FetchAsyncTimer is nil then + FetchAsyncTimer = new Timer + FetchAsyncTimer.Period = 10 + AddHandler FetchAsyncTimer.Action, WeakAddressOf FetchAsyncTimer_Action + end if + + FetchAsyncTimer.Mode = Timer.ModeSingle + end if End Sub #tag EndMethod #tag Method, Flags = &h21 - Private Function GetAsyncHTTPSocket() As Kaju.HTTPSocketAsync - if AsyncHTTP is nil then - AsyncHTTP = new HTTPSocketAsync - AddHandler AsyncHTTP.PageReceived, WeakAddressOf AsyncHTTP_PageReceived - AddHandler AsyncHTTP.Error, WeakAddressOf AsyncHTTP_Error - end if + Private Sub FetchAsyncTimer_Action(sender As Timer) + #pragma unused sender + FetchAsync true + + End Sub + #tag EndMethod + + #tag Method, Flags = &h21 + Private Function GetNewAsyncHTTPSocket() As Kaju.HTTPSocketAsync + TeardownAsyncHTTP + + AsyncHTTP = new HTTPSocketAsync + AddHandler AsyncHTTP.ContentReceived, WeakAddressOf AsyncHTTP_ContentReceived + AddHandler AsyncHTTP.Error, WeakAddressOf AsyncHTTP_Error return AsyncHTTP End Function @@ -431,7 +459,7 @@ Protected Class UpdateChecker // // Processes the raw packet // - // Returns True if the process should contine, False if it's done + // Returns True if the process should continue, False if it's done // or was cancelled // @@ -471,6 +499,10 @@ Protected Class UpdateChecker if isValid then exit for eol end if + isValid = Crypto.RSAVerifySignature( tester.Trim, sig, ServerPublicRSAKey ) + if isValid then + exit for eol + end if next if not isValid then @@ -497,14 +529,7 @@ Protected Class UpdateChecker dim info() as Kaju.UpdateInformation dim updateIsRequired as boolean for i as integer = 0 to ub - // - // Make sure it has a Security Token - // dim thisElement as JSONItem = j( i ) - if thisElement.Lookup( kNameSecurityToken, "" ) = "" then - raise new KajuException( KajuLocale.kMissingReason + " security token", CurrentMethodName ) - end if - dim thisInfo as new Kaju.UpdateInformation( thisElement ) // @@ -583,6 +608,16 @@ Protected Class UpdateChecker End Function #tag EndMethod + #tag Method, Flags = &h21 + Private Shared Sub RemoveInstance(o As UpdateChecker) + dim i as integer = AsyncCheckers.IndexOf( o ) + if i <> -1 then + AsyncCheckers.Remove i + end if + + End Sub + #tag EndMethod + #tag Method, Flags = &h0 Sub ResetIgnored() redim IgnoreVersionsPref( -1 ) @@ -650,6 +685,15 @@ Protected Class UpdateChecker End Sub #tag EndMethod + #tag Method, Flags = &h21 + Private Shared Sub StoreInstance(o As UpdateChecker) + if AsyncCheckers.IndexOf( o ) = -1 then + AsyncCheckers.Append o + end if + + End Sub + #tag EndMethod + #tag Method, Flags = &h21 Private Function StringArrayToJSON(arr() As String) As JSONItem dim j as new JSONItem( "[]" ) @@ -661,6 +705,17 @@ Protected Class UpdateChecker End Function #tag EndMethod + #tag Method, Flags = &h21 + Private Sub TeardownAsyncHTTP() + if AsyncHTTP isa object then + RemoveHandler AsyncHTTP.ContentReceived, WeakAddressOf AsyncHTTP_ContentReceived + RemoveHandler AsyncHTTP.Error, WeakAddressOf AsyncHTTP_Error + AsyncHTTP = nil + end if + + End Sub + #tag EndMethod + #tag Method, Flags = &h0 Sub TestUpdate(jsonString As String) // Allows a dry run with the update information that would otherwise be obtained @@ -723,6 +778,10 @@ Protected Class UpdateChecker DefaultUseTransparency As Boolean = True #tag EndProperty + #tag Property, Flags = &h21 + Private FetchAsyncTimer As Timer + #tag EndProperty + #tag Property, Flags = &h0 HonorIgnored As Boolean = True #tag EndProperty @@ -815,6 +874,7 @@ Protected Class UpdateChecker UpdateAvailable RequiredUpdateAvailable FetchingUpdateInfo + PageRedirected = 302 PageNotFound = 404 #tag EndEnum @@ -822,44 +882,59 @@ Protected Class UpdateChecker #tag ViewBehavior #tag ViewProperty Name="Allow32bitTo64bitUpdates" + Visible=false Group="Behavior" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="AllowedInteraction" + Visible=false Group="Behavior" InitialValue="kAllowAll" Type="UInt32" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="AllowedStage" + Visible=false Group="Behavior" InitialValue="App.Development" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="AllowRedirection" + Visible=false Group="Behavior" InitialValue="False" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="DefaultImage" + Visible=false Group="Behavior" + InitialValue="" Type="Picture" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="DefaultUseTransparency" + Visible=false Group="Behavior" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="HonorIgnored" + Visible=false Group="Behavior" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Index" @@ -867,6 +942,7 @@ Protected Class UpdateChecker Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -874,22 +950,29 @@ Protected Class UpdateChecker Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="QuitOnCancelIfRequired" + Visible=false Group="Behavior" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="ServerPublicRSAKey" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -897,7 +980,9 @@ Protected Class UpdateChecker Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -905,21 +990,29 @@ Protected Class UpdateChecker Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="UpdateURL" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="UpdateWindowIsOpen" + Visible=false Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Result" + Visible=false Group="Behavior" + InitialValue="" Type="ResultType" EditorType="Enum" #tag EnumValues @@ -933,6 +1026,7 @@ Protected Class UpdateChecker "2 - UpdateAvailable" "3 - RequiredUpdateAvailable" "4 - FetchingUpdateInfo" + "302 - PageRedirected" "404 - PageNotFound" #tag EndEnumValues #tag EndViewProperty diff --git a/Kaju Classes/Kaju/UpdateInformation.xojo_code b/Kaju Classes/Kaju/UpdateInformation.xojo_code index 76c75f4..0a6471b 100644 --- a/Kaju Classes/Kaju/UpdateInformation.xojo_code +++ b/Kaju Classes/Kaju/UpdateInformation.xojo_code @@ -115,6 +115,13 @@ Inherits Kaju.Information Function ConvertToJSON() As JSONItem dim j as JSONItem = super.ConvertToJSON + // + // Add a security token + // + dim rawKey as string = Crypto.GenerateRandomBytes( 8 ) + dim encodedKey as string = EncodeBase64( rawKey, 0 ) + j.Value( Kaju.kNameSecurityToken ) = encodedKey + for each binaryName as string in BinaryNames dim b as Kaju.BinaryInformation = Binaries.Lookup( binaryName, nil ) if b isa Kaju.BinaryInformation then @@ -131,13 +138,13 @@ Inherits Kaju.Information #if not TargetConsole then if ImageSocket isa object then ImageSocket.Disconnect - RemoveHandler ImageSocket.PageReceived, WeakAddressOf ImageSocket_PageReceived + RemoveHandler ImageSocket.ContentReceived, WeakAddressOf ImageSocket_ContentReceived ImageSocket = nil end if if ReleaseNotesSocket isa object then ReleaseNotesSocket.Disconnect - RemoveHandler ReleaseNotesSocket.PageReceived, WeakAddressOf ReleaseNotesSocket_PageReceived + RemoveHandler ReleaseNotesSocket.ContentReceived, WeakAddressOf ReleaseNotesSocket_ContentReceived ReleaseNotesSocket = nil end if #endif @@ -166,7 +173,7 @@ Inherits Kaju.Information #tag EndMethod #tag Method, Flags = &h21, CompatibilityFlags = (TargetWeb and (Target32Bit or Target64Bit)) or (TargetDesktop and (Target32Bit or Target64Bit)) or (TargetIOS and (Target32Bit or Target64Bit)) - Private Sub ImageSocket_PageReceived(sender As Kaju.HTTPSocketAsync, url As String, httpStatus As Integer, content As String) + Private Sub ImageSocket_ContentReceived(sender As Kaju.HTTPSocketAsync, url As String, httpStatus As Integer, content As String) #pragma unused sender #pragma unused url @@ -185,7 +192,7 @@ Inherits Kaju.Information #tag EndMethod #tag Method, Flags = &h21, CompatibilityFlags = (TargetWeb and (Target32Bit or Target64Bit)) or (TargetDesktop and (Target32Bit or Target64Bit)) or (TargetIOS and (Target32Bit or Target64Bit)) - Private Sub ReleaseNotesSocket_PageReceived(sender As Kaju.HTTPSocketAsync, url As String, httpStatus As Integer, content As String) + Private Sub ReleaseNotesSocket_ContentReceived(sender As Kaju.HTTPSocketAsync, url As String, httpStatus As Integer, content As String) #pragma unused sender #pragma unused url @@ -305,12 +312,12 @@ Inherits Kaju.Information if ImageSocket is nil then ImageSocket = new Kaju.HTTPSocketAsync - AddHandler ImageSocket.PageReceived, WeakAddressOf ImageSocket_PageReceived + AddHandler ImageSocket.ContentReceived, WeakAddressOf ImageSocket_ContentReceived end if dim http as Kaju.HTTPSocketAsync = ImageSocket - http.Get( url ) + http.Get( url, true ) Exception err as RuntimeException mImage = nil @@ -520,11 +527,11 @@ Inherits Kaju.Information if ReleaseNotesSocket is nil then ReleaseNotesSocket = new Kaju.HTTPSocketAsync - AddHandler ReleaseNotesSocket.PageReceived, WeakAddressOf ReleaseNotesSocket_PageReceived + AddHandler ReleaseNotesSocket.ContentReceived, WeakAddressOf ReleaseNotesSocket_ContentReceived end if dim http as Kaju.HTTPSocketAsync = ReleaseNotesSocket - http.Get url + http.Get url, true mReleaseNotes = alternateNotes end if @@ -635,18 +642,25 @@ Inherits Kaju.Information #tag ViewBehavior #tag ViewProperty Name="AppName" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="Image" + Visible=false Group="Behavior" + InitialValue="" Type="Picture" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="ImageURL" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -656,11 +670,15 @@ Inherits Kaju.Information Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="IsValid" + Visible=false Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -668,10 +686,13 @@ Inherits Kaju.Information Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="MinimumRequiredVersion" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -679,23 +700,33 @@ Inherits Kaju.Information Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="RequiresPayment" + Visible=false Group="Behavior" + InitialValue="" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="StageCode" + Visible=false Group="Behavior" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -703,45 +734,61 @@ Inherits Kaju.Information Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="UseTransparency" + Visible=false Group="Behavior" InitialValue="True" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Version" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="VersionAsDouble" + Visible=false Group="Behavior" + InitialValue="" Type="Double" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="ReleaseNotes" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="ImageScale" + Visible=false Group="Behavior" InitialValue="1" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="ReleaseNotesFromURL" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty Name="DisplayReleaseNotes" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty diff --git a/Kaju Classes/Kaju/UpdateInitiater.xojo_code b/Kaju Classes/Kaju/UpdateInitiater.xojo_code index f8728f0..3179a9a 100644 --- a/Kaju Classes/Kaju/UpdateInitiater.xojo_code +++ b/Kaju Classes/Kaju/UpdateInitiater.xojo_code @@ -366,14 +366,22 @@ Protected Class UpdateInitiater dim scriptFile as FolderItem = tempFolder.Child( scriptName ) dim bs as BinaryStream = BinaryStream.Create( scriptFile, true ) bs.Write( script ) - if bs.LastErrorCode <> 0 then - MsgBox "Error writing script file: " + str( bs.LastErrorCode ) - scriptFile = nil - end if + #if XojoVersion < 2019.02 + if bs.LastErrorCode <> 0 then + dim ex as new IOException + ex.ErrorNumber = bs.LastErrorCode + raise ex + end if + #endif bs.Close bs = nil return scriptFile + + exception err as IOException + MsgBox "Error writing script file: " + str( err.ErrorNumber ) + return nil + End Function #tag EndMethod @@ -485,7 +493,7 @@ Protected Class UpdateInitiater #tag Constant, Name = kUpdaterScript, Type = String, Dynamic = False, Default = \"", Scope = Private #Tag Instance, Platform = Mac OS, Language = Default, Definition = \"#!/bin/bash\n\n#\n# FUNCTIONS\n#\n\nfunction log_cmd {\n /usr/bin/logger -t \"Kaju Update Script\" $@\n}\n\n# END FUNCTIONS\n\n#\n# These will be filled in by the calling app\n#\n\nAPP_NAME\x3D@@APP_NAME@@\nAPP_PARENT\x3D@@APP_PARENT@@\nAPP_VERSION\x3D@@APP_VERSION@@\nNEW_APP_NAME\x3D@@NEW_APP_NAME@@\nNEW_APP_PARENT\x3D@@NEW_APP_PARENT@@\nTEMP_FOLDER_PATH\x3D@@TEMP_FOLDER@@\nPID_FILE\x3D@@PID_FILE_PATH@@\n\n#\n# -----------------\n#\n\nreadonly true\x3D1\nreadonly false\x3D0\n\nAPP_PATH\x3D$APP_PARENT/$APP_NAME\nNEW_APP_PATH\x3D$NEW_APP_PARENT/$NEW_APP_NAME\n\nRENAMED_APP_NAME\x3D`echo \"$APP_NAME\" | /usr/bin/sed -E s/\\.[aA][pP]{2}//`-`date +%Y%m%d%H%M%S`.app\nRENAMED_APP_PATH\x3D$APP_PARENT/$RENAMED_APP_NAME\n\nlog_cmd \"STARTING UPDATE OF $APP_NAME\"\n\ncounter\x3D10\nwhile [ -f \"$PID_FILE\" ]\ndo\n log_cmd \"Checking to see if $PIDFILE exists\x2C $counter\"\n sleep 1\n \n let counter\x3Dcounter-1\n \n if [ $counter \x3D\x3D 0 ]\n then\n \tlog_cmd \'ERROR: Could not update app\x2C it never quit\'\n \texit 1\n fi\ndone\n\nPROCEED\x3D$true\n\n#\n# Rename the old application\n#\nlog_cmd \"Renaming old application $APP_NAME to $RENAMED_APP_NAME\"\nmv \"$APP_PATH\" \"$RENAMED_APP_PATH\"\n\n#\n# Make sure that succeeded\n#\nif [ $\? \x3D\x3D 0 ]\nthen\n log_cmd \'...confirmed\'\nelse\n log_cmd \"Could not rename old application to $RENAMED_APP_PATH\"\n PROCEED\x3D0\nfi\n\n#\n# Move in the replacement app\n#\nif [ $PROCEED \x3D\x3D $true ]\nthen\n log_cmd \"Moving new application $NEW_APP_PATH to folder $APP_PARENT\"\n mv \"$NEW_APP_PATH\" \"$APP_PARENT\"\n\n #\n # Make sure that worked\n #\n if [ $\? \x3D\x3D 0 ]\n then\n log_cmd \'...confirmed\'\n else\n log_cmd \"Could not move in new application\"\n log_cmd \"Attempting to restore old application and launch it\"\n mv \"$RENAMED_APP_PATH\" \"$APP_PATH\"\n open \"$APP_PATH\" --args --kaju-fail\n PROCEED\x3D$false\n fi\nfi\n\nif [ $PROCEED \x3D\x3D $true ]\nthen\n log_cmd \"Removing old application $RENAMED_APP_NAME\"\n rm -fr \"$RENAMED_APP_PATH\"\n \n APP_PATH\x3D$APP_PARENT/$NEW_APP_NAME\n log_cmd \"Starting new application at $APP_PATH\"\n \n open \"$APP_PATH\" --args --kaju-success \"$APP_VERSION\"\nfi\n\nif [ $PROCEED \x3D\x3D $true ]\nthen\n log_cmd \'Removing temp folder\'\n rm -fr \"$TEMP_FOLDER_PATH\"\nfi\n" #Tag Instance, Platform = Linux, Language = Default, Definition = \"#!/bin/bash\n\n#\n# FUNCTIONS\n#\n\nfunction log_cmd {\n\t/usr/bin/logger -t \"Kaju Update Script\" $@\n}\n\n# END FUNCTIONS\n\n#\n# These will be filled in by the calling app\n#\n\nAPP_NAME\x3D@@APP_NAME@@\nAPP_PARENT\x3D@@APP_PARENT@@\nAPP_VERSION\x3D@@APP_VERSION@@\nNEW_APP_NAME\x3D@@NEW_APP_NAME@@\nNEW_APP_PARENT\x3D@@NEW_APP_PARENT@@\nTEMP_FOLDER_PATH\x3D@@TEMP_FOLDER@@\nPID_FILE\x3D@@PID_FILE_PATH@@\n\n#\n# This array will store the names of the items next to the executable\n# under the variable NEW_APP_OTHER_NAME\n#\nNEW_APP_OTHER_UB\x3D@@NEW_APP_OTHER_UB@@\n\n@@NEW_APP_OTHER_ARRAY@@\n\n#\n# -----------------\n#\n\nreadonly true\x3D1\nreadonly false\x3D0\n\nAPP_PATH\x3D$APP_PARENT/$APP_NAME\n\nBACKUP_PARENT\x3D$APP_PARENT/${APP_NAME}-`date +%Y%m%d%H%M%S`\nmkdir \"$BACKUP_PARENT\"\n\nlog_cmd \"STARTING UPDATE OF $APP_NAME\"\n\ncounter\x3D10\nwhile [ -f \"$PID_FILE\" ]\ndo\n\tlog_cmd \"Checking to see if $PIDFILE exists\x2C $counter\"\n\tsleep 1\n\t\n\tlet counter\x3Dcounter-1\n\t\n\tif [ $counter \x3D\x3D 0 ]\n\tthen\n\t\tlog_cmd \'ERROR: Could not update app\x2C it never quit\'\n\t\texit 1\n\tfi\ndone\n\nPROCEED\x3D$true\n\n#\n# Move the other items\n#\nlog_cmd \"Copying other items to backup $BACKUP_PARENT\"\n\ncounter\x3D0\nwhile [ $counter -le $NEW_APP_OTHER_UB ]\ndo\n\tthis_item\x3D${NEW_APP_OTHER_NAME[$counter]}\n\tlog_cmd \"Looking for item $this_item in $APP_PARENT\"\n\t\n\tthis_path\x3D$APP_PARENT/$this_item\n\tif [ -d \"$this_path\" ] || [ -f \"$this_path\" ]\n\tthen\n\t\tlog_cmd \"...found\x2C copying\"\n\t\tcp -pr \"$this_path\" \"$BACKUP_PARENT\"\n\t\tif [ $\? \x3D\x3D 0 ]\n\t\tthen\n\t\t\tlog_cmd \"...confirmed\"\n\t\telse\n\t\t\t log_cmd \"...FAILED!\"\n\t\t\t PROCEED\x3D$false\n\t\t\t break\n\t\tfi\n\tfi\n\t(( counter++ ))\ndone\n\n#\n# Move the executable\n#\nif [ $PROCEED \x3D\x3D $true ]\nthen\n\tlog_cmd \"Moving the executable $APP_NAME to backup\"\n\tmv \"$APP_PARENT/$APP_NAME\" \"$BACKUP_PARENT\"\n\tif [ $\? \x3D\x3D 0 ]\n\tthen\n\t\tlog_cmd \"...confirmed\"\n\telse\n\t\tlog_cmd \"...FAILED! (Error $\?)\"\n\t\tPROCEED\x3D$false\n\tfi\nfi\n\n#\n# Make sure there wasn\'t an error during the backup\n#\nif [ $PROCEED \x3D\x3D $true ]\nthen\n\tlog_cmd \'All items backed up\'\nelse\n\tlog_cmd \'Attempting to copy items back to parent\'\n\trsync -a --exclude\x3D\'.DS_Store\' \"${BACKUP_PARENT}/\" \"$APP_PARENT\"\nfi\n\n#\n# Move in the replacement files\n#\nif [ $PROCEED \x3D\x3D $true ]\nthen\n\tlog_cmd \"Copying files from $NEW_APP_PARENT to folder $APP_PARENT\"\n\trsync -a --exclude\x3D\'.DS_Store\' \"${NEW_APP_PARENT}/\" \"$APP_PARENT\"\n\t\n\tif [ $\? \x3D\x3D 0 ]\n\tthen\n\t\tlog_cmd \'...confirmed\'\n\telse\n\t\tlog_cmd \"...FAILED! (Error $\?)\"\n\t\tlog_cmd \"Attempting to restore old application\"\n\t\trsync -a --exclude\x3D\'.DS_Store\' \"${BACKUP_PARENT}/\" \"$APP_PARENT\"\n\t\tPROCEED\x3D$false\n\t\tbreak\n\tfi\nfi\n\n#\n# Removed the backup folder if everything has gone swimmingly so\n#\nif [ $PROCEED \x3D\x3D $true ]\nthen\n\tlog_cmd \'Removing backup\'\n\trm -r \"$BACKUP_PARENT\"\nfi\n\n#\n# Launch the application\n#\nif [ $PROCEED \x3D $true ]\nthen\n\tlog_cmd \'Making the new app executable\'\n\tchmod +x \"$APP_PARENT/$NEW_APP_NAME\"\n\tlog_cmd \'Launching new app\'\n\t\"$APP_PARENT/$NEW_APP_NAME\" --kaju-success \"$APP_VERSION\"\nelse\n\tlog_cmd \'Launching old app\'\n\t\"$APP_PARENT/$APP_NAME\" --kaju-fail\nfi\n\nlog_cmd \'Removing temp folder\'\nrm -fr \"$TEMP_FOLDER_PATH\"\n" - #Tag Instance, Platform = Windows, Language = Default, Definition = \"@ECHO OFF \n\nREM\nREM These will be filled in by the calling app\nREM\n\nSET APP_NAME\x3D@@APP_NAME@@\nSET APP_PARENT\x3D@@APP_PARENT@@\nSET APP_VERSION\x3D@@APP_VERSION@@\nSET NEW_APP_NAME\x3D@@NEW_APP_NAME@@\nSET NEW_APP_PARENT\x3D@@NEW_APP_PARENT@@\nSET TEMP_FOLDER_PATH\x3D@@TEMP_FOLDER@@\nSET DECOMPRESSED_FOLDER_PATH\x3D@@DECOMPRESSED_FOLDER@@\nSET PID_FILE\x3D@@PID_FILE_PATH@@\n\nREM\nREM -----------------\nREM\n\nSET TODAY_DATE\x3D%DATE:~10\x2C4%-%DATE:~4\x2C2%-%DATE:~7\x2C2% %TIME:~0\x2C2%:%TIME:~3\x2C2%:%TIME:~6\x2C2%\nSET APP_PATH\x3D%APP_PARENT%\\%APP_NAME%\n\nSET BACKUP_PARENT\x3D%APP_PATH%-%DATE:~10\x2C4%%DATE:~4\x2C2%%DATE:~7\x2C2%%TIME:~0\x2C2%%TIME:~3\x2C2%%TIME:~6\x2C2%\n\nSET LOGGER\x3D%APP_PARENT%\\%NEW_APP_NAME% Update Log.txt\nECHO \"STARTED ON %TODAY_DATE%\" >> \"%LOGGER%\" 2>&1\n\nFOR /L %%i IN (1\x2C1\x2C10) DO (\n\tIF NOT EXIST \"%PID_FILE%\" (\n\t\tGOTO :program_exited\n\t)\n\n\tREM Windows version of sleep 1. Starting in Windows Vista\x2C the sleep command was removed.\n\tping -n 2 127.0.0.1 >nul\n\n\tIF %%i \x3D\x3D 10 (\n\t\tECHO ERROR: Could not update app\x2C it never quit >> \"%LOGGER%\" 2>&1\n\t\tEXIT /B 1\n\t)\n)\n:program_exited\n\nmkdir \"%BACKUP_PARENT%\"\n\nSET PROCEED\x3D1\n\nREM\nREM Move the other items\nREM\nECHO \"Copying items to backup %BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\nREM We will need to manually populate these move commands. Windows Batch doesn\'t really handle arrays\x2C\nREM only looping through space delimited elements of a string. Below is a template for moving one such file.\n\nREM BEGIN PSEUDO-ARRAY\nSET THIS_ITEM\x3D@@OTHER_NAME@@\nSET THIS_PATH\x3D%APP_PARENT%\\%THIS_ITEM%\nECHO \"Looking for item %THIS_PATH%\" >> \"%LOGGER%\" 2>&1\nIF EXIST \"%THIS_PATH%\" (\n\tGOTO :copy_@@OTHER_NAME_WO_SPACES@@\n)\nECHO \"...not found as file\x2C trying as directory\" >> \"%LOGGER%\" 2>&1\nIF EXIST \"%THIS_PATH%\\NUL\" (\n\tGOTO :copy_@@OTHER_NAME_WO_SPACES@@\n) ELSE (\n\tECHO \"...NOT FOUND!\" >> \"%LOGGER%\" 2>&1\n\tGOTO :finished_with_@@OTHER_NAME_WO_SPACES@@\n)\n\n:copy_@@OTHER_NAME_WO_SPACES@@\n\nECHO \"...found\x2C copying\" >> \"%LOGGER%\" 2>&1\nCOPY \"%THIS_PATH%\" \"%BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\nIF %ERRORLEVEL% NEQ 0 (\n\tECHO \"...FAILED! (Error %ERRORLEVEL%)\" >> \"%LOGGER%\" 2>&1\n\tSET PROCEED\x3D0\n\tGOTO :restore_from_backup\n) ELSE (\n\tECHO \"...confirmed\" >> \"%LOGGER%\" 2>&1\n)\n\n:finished_with_@@OTHER_NAME_WO_SPACES@@\n\nREM END PSEUDO-ARRAY\n\nREM\nREM Move the executable to backup\nREM\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"Moving the executable %APP_NAME% to backup\" >> \"%LOGGER%\" 2>&1\n\tMOVE \"%APP_PATH%\" \"%BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tIF %ERRORLEVEL% NEQ 0 (\n\t\tECHO \"...FAILED! (Error %ERRORLEVEL%)\" >> \"%LOGGER%\" 2>&1\n\t\tSET PROCEED\x3D0\n\t\tGOTO :restore_from_backup\n\t) ELSE (\n\t\tECHO \"...confirmed\" >> \"%LOGGER%\" 2>&1\n\t)\n)\n\nREM\nREM Make sure there wasn\'t an error during the move\nREM\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"All items moved to backup\" >> \"%LOGGER%\" 2>&1\n)\n\nREM\nREM Copy in the replacement files\nREM\n\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"Copying files from %NEW_APP_PARENT% to folder %APP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tXCOPY /g /y /e /k \"%NEW_APP_PARENT%\" \"%APP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tIF %ERRORLEVEL% NEQ 0 (\n\t\tECHO \"...FAILED! (Error %ERRORLEVEL%)\" >> \"%LOGGER%\" 2>&1\n\t\tSET PROCEED\x3D0\n\t\tGOTO :restore_from_backup\n\t) ELSE (\n\t\tECHO \"...confirmed\" >> \"%LOGGER%\" 2>&1\n\t)\n)\n\nREM\nREM If we get here\x2C it all worked\nREM\nIF %PROCEED% \x3D\x3D 1 (\n\tGOTO :all_succeeded\n)\n\n:restore_from_backup\nIF %PROCEED% \x3D\x3D 0 (\n\tECHO \"Attempting to restore old application\" >> \"%LOGGER%\" 2>&1\n\n\tXCOPY /g /y /e /k \"%BACKUP_PARENT%\" \"%APP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tIF %ERRORLEVEL% EQU 0 (\n\t\tRMDIR /S /Q \"%BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\t)\n)\nGOTO :launch_application\n\n:all_succeeded\nREM\nREM Remove the backup and decompressed folders if everything has gone swimmingly so far\nREM\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"Removing backup\" >> \"%LOGGER%\" 2>&1\n\tRMDIR /S /Q \"%BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tECHO \"Removing decompressed folder\" >> \"%LOGGER%\" 2>&1\n\tRMDIR /S /Q \"%DECOMPRESSED_FOLDER_PATH%\" >> \"%LOGGER%\" 2>&1\n)\n\nREM\nREM Launch the application\nREM\n:launch_application\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"Launching new app\" >> \"%LOGGER%\" 2>&1\n\tSTART \"\" \"%APP_PARENT%\\%NEW_APP_NAME%\" --kaju-success %APP_VERSION%\n\tGOTO :remove_backup_folder\n) ELSE (\n\tECHO \"Launching old app\" >> \"%LOGGER%\" 2>&1\n\tSTART \"\" \"%APP_PATH%\" --kaju-fail\n)\n\n:remove_backup_folder\nECHO \"Removing temp folder\" >> \"%LOGGER%\" 2>&1\nRMDIR /S /Q \"%TEMP_FOLDER_PATH%\" >> \"%LOGGER%\" 2>&1\n" + #Tag Instance, Platform = Windows, Language = Default, Definition = \"@ECHO OFF \n\nREM\nREM These will be filled in by the calling app\nREM\n\nSET APP_NAME\x3D@@APP_NAME@@\nSET APP_PARENT\x3D@@APP_PARENT@@\nSET APP_VERSION\x3D@@APP_VERSION@@\nSET NEW_APP_NAME\x3D@@NEW_APP_NAME@@\nSET NEW_APP_PARENT\x3D@@NEW_APP_PARENT@@\nSET TEMP_FOLDER_PATH\x3D@@TEMP_FOLDER@@\nSET DECOMPRESSED_FOLDER_PATH\x3D@@DECOMPRESSED_FOLDER@@\nSET PID_FILE\x3D@@PID_FILE_PATH@@\n\nREM\nREM -----------------\nREM\n\nSET TODAY_DATE\x3D%DATE:~10\x2C4%-%DATE:~4\x2C2%-%DATE:~7\x2C2% %TIME:~0\x2C2%:%TIME:~3\x2C2%:%TIME:~6\x2C2%\nSET APP_PATH\x3D%APP_PARENT%\\%APP_NAME%\n\nSET BACKUP_PARENT\x3D%APP_PATH%-%DATE:~10\x2C4%%DATE:~4\x2C2%%DATE:~7\x2C2%%TIME:~0\x2C2%%TIME:~3\x2C2%%TIME:~6\x2C2%\n\nSET LOGGER\x3D%APP_PARENT%\\%NEW_APP_NAME% Update Log.txt\nECHO \"STARTED ON %TODAY_DATE%\" >> \"%LOGGER%\" 2>&1\n\nFOR /L %%i IN (1\x2C1\x2C10) DO (\n\tIF NOT EXIST \"%PID_FILE%\" (\n\t\tGOTO :program_exited\n\t)\n\n\tREM Windows version of sleep 1. Starting in Windows Vista\x2C the sleep command was removed.\n\tping -n 2 127.0.0.1 >nul\n\n\tIF %%i \x3D\x3D 10 (\n\t\tECHO ERROR: Could not update app\x2C it never quit >> \"%LOGGER%\" 2>&1\n\t\tEXIT /B 1\n\t)\n)\n:program_exited\n\nmkdir \"%BACKUP_PARENT%\"\n\nSET PROCEED\x3D1\n\nREM\nREM Move the other items\nREM\nECHO \"Copying items to backup %BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\nREM We will need to manually populate these move commands. Windows Batch doesn\'t really handle arrays\x2C\nREM only looping through space delimited elements of a string. Below is a template for moving one such file.\n\nREM BEGIN PSEUDO-ARRAY\nSET THIS_ITEM\x3D@@OTHER_NAME@@\nSET THIS_PATH\x3D%APP_PARENT%\\%THIS_ITEM%\nECHO \"Looking for item %THIS_PATH%\" >> \"%LOGGER%\" 2>&1\nIF EXIST \"%THIS_PATH%\" (\n\tGOTO :copy_@@OTHER_NAME_WO_SPACES@@\n)\nECHO \"...not found as file\x2C trying as directory\" >> \"%LOGGER%\" 2>&1\nIF EXIST \"%THIS_PATH%\\NUL\" (\n\tGOTO :copy_@@OTHER_NAME_WO_SPACES@@\n) ELSE (\n\tECHO \"...NOT FOUND!\" >> \"%LOGGER%\" 2>&1\n\tGOTO :finished_with_@@OTHER_NAME_WO_SPACES@@\n)\n\n:copy_@@OTHER_NAME_WO_SPACES@@\n\nECHO \"...found\x2C copying\" >> \"%LOGGER%\" 2>&1\nCOPY \"%THIS_PATH%\" \"%BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\nIF %ERRORLEVEL% NEQ 0 (\n\tECHO \"...FAILED! (Error %ERRORLEVEL%)\" >> \"%LOGGER%\" 2>&1\n\tSET PROCEED\x3D0\n\tGOTO :restore_from_backup\n) ELSE (\n\tECHO \"...confirmed\" >> \"%LOGGER%\" 2>&1\n)\n\n:finished_with_@@OTHER_NAME_WO_SPACES@@\n\nREM END PSEUDO-ARRAY\n\nREM\nREM Move the executable to backup\nREM\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"Moving the executable %APP_NAME% to backup\" >> \"%LOGGER%\" 2>&1\n\tMOVE \"%APP_PATH%\" \"%BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tIF %ERRORLEVEL% NEQ 0 (\n\t\tECHO \"...FAILED! (Error %ERRORLEVEL%)\" >> \"%LOGGER%\" 2>&1\n\t\tSET PROCEED\x3D0\n\t\tGOTO :restore_from_backup\n\t) ELSE (\n\t\tECHO \"...confirmed\" >> \"%LOGGER%\" 2>&1\n\t)\n)\n\nREM\nREM Make sure there wasn\'t an error during the move\nREM\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"All items moved to backup\" >> \"%LOGGER%\" 2>&1\n)\n\nREM\nREM Copy in the replacement files\nREM\n\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"Copying files from %NEW_APP_PARENT% to folder %APP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tXCOPY /g /y /e /k \"%NEW_APP_PARENT%\" \"%APP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tIF %ERRORLEVEL% NEQ 0 (\n\t\tECHO \"...FAILED! (Error %ERRORLEVEL%)\" >> \"%LOGGER%\" 2>&1\n\t\tSET PROCEED\x3D0\n\t\tGOTO :restore_from_backup\n\t) ELSE (\n\t\tECHO \"...confirmed\" >> \"%LOGGER%\" 2>&1\n\t)\n)\n\nREM\nREM If we get here\x2C it all worked\nREM\nIF %PROCEED% \x3D\x3D 1 (\n\tGOTO :all_succeeded\n)\n\n:restore_from_backup\nIF %PROCEED% \x3D\x3D 0 (\n\tECHO \"Attempting to restore old application\" >> \"%LOGGER%\" 2>&1\n\n\tXCOPY /g /y /e /k \"%BACKUP_PARENT%\" \"%APP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tIF %ERRORLEVEL% EQU 0 (\n\t\tRMDIR /S /Q \"%BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\t)\n)\nGOTO :launch_application\n\n:all_succeeded\nREM\nREM Remove the backup and decompressed folders if everything has gone swimmingly so far\nREM\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"Removing backup...\" >> \"%LOGGER%\" 2>&1\n\tRMDIR /S /Q \"%BACKUP_PARENT%\" >> \"%LOGGER%\" 2>&1\n\tECHO \"... removed\" >> \"%LOGGER%\" 2>&1\n\tECHO \"Removing decompressed folder...\" >> \"%LOGGER%\" 2>&1\n\tRMDIR /S /Q \"%DECOMPRESSED_FOLDER_PATH%\" >> \"%LOGGER%\" 2>&1\n\tECHO \"... removed\" >> \"%LOGGER%\" 2>&1\n\tGOTO :launch_application\n)\n\nREM\nREM Launch the application\nREM\n:launch_application\nECHO \"Launching application...\" >> \"%LOGGER%\" 2>&1\nIF %PROCEED% \x3D\x3D 1 (\n\tECHO \"... new app\" >> \"%LOGGER%\" 2>&1\n\tSTART \"\" \"%APP_PARENT%\\%NEW_APP_NAME%\" --kaju-success \"%APP_VERSION%\"\n\tGOTO :remove_backup_folder\n) ELSE (\n\tECHO \"... OLD app\" >> \"%LOGGER%\" 2>&1\n\tSTART \"\" \"%APP_PATH%\" --kaju-fail\n)\n\n:remove_backup_folder\nECHO \"Removing temp folder...\" >> \"%LOGGER%\" 2>&1\nRMDIR /S /Q \"%TEMP_FOLDER_PATH%\" >> \"%LOGGER%\" 2>&1 && ( ECHO \"... removed\" >> \"%LOGGER%\" 2>&1 && ( ECHO \"DONE\" >> \"%LOGGER%\" 2>&1 ) ) || ( ECHO \"... FAILED!\" >> \"%LOGGER%\" 2>&1 )\n" #tag EndConstant @@ -496,6 +504,7 @@ Protected Class UpdateInitiater Group="ID" InitialValue="-2147483648" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" @@ -503,16 +512,21 @@ Protected Class UpdateInitiater Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="ReplacementExecutableName" + Visible=false Group="Behavior" + InitialValue="" Type="String" EditorType="MultiLineEditor" #tag EndViewProperty @@ -520,7 +534,9 @@ Protected Class UpdateInitiater Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Top" @@ -528,6 +544,7 @@ Protected Class UpdateInitiater Group="Position" InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Classes/Kaju/ZipShell.xojo_code b/Kaju Classes/Kaju/ZipShell.xojo_code index 965be52..7fec7a3 100644 --- a/Kaju Classes/Kaju/ZipShell.xojo_code +++ b/Kaju Classes/Kaju/ZipShell.xojo_code @@ -256,21 +256,72 @@ Inherits Shell #tag ViewBehavior + #tag ViewProperty + Name="ExecuteMode" + Visible=true + Group="" + InitialValue="" + Type="ExecuteModes" + EditorType="Enum" + #tag EnumValues + "0 - Synchronous" + "1 - Asynchronous" + "2 - Interactive" + #tag EndEnumValues + #tag EndViewProperty + #tag ViewProperty + Name="ExitCode" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Result" + Visible=false + Group="Behavior" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="PID" + Visible=false + Group="Behavior" + InitialValue="" + Type="Integer" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="IsRunning" + Visible=false + Group="Behavior" + InitialValue="" + Type="Boolean" + EditorType="" + #tag EndViewProperty #tag ViewProperty Name="Arguments" Visible=true + Group="" + InitialValue="" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="Backend" Visible=true + Group="" + InitialValue="" Type="String" EditorType="String" #tag EndViewProperty #tag ViewProperty Name="Canonical" Visible=true + Group="" + InitialValue="" Type="Boolean" EditorType="Boolean" #tag EndViewProperty @@ -278,35 +329,39 @@ Inherits Shell Name="Index" Visible=true Group="ID" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Left" Visible=true Group="Position" + InitialValue="" Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="Mode" - Visible=true - Type="Integer" - EditorType="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="TimeOut" Visible=true + Group="" + InitialValue="" Type="Integer" EditorType="Integer" #tag EndViewProperty @@ -314,7 +369,9 @@ Inherits Shell Name="Top" Visible=true Group="Position" + InitialValue="" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior End Class diff --git a/Kaju Classes/KajuUpdateWindow.xojo_window b/Kaju Classes/KajuUpdateWindow.xojo_window index ee402a9..24e855e 100644 --- a/Kaju Classes/KajuUpdateWindow.xojo_window +++ b/Kaju Classes/KajuUpdateWindow.xojo_window @@ -3,7 +3,6 @@ Begin Window KajuUpdateWindow BackColor = &cFFFFFF00 Backdrop = 0 CloseButton = False - Compatibility = "" Composite = True Frame = 0 FullScreen = False @@ -11,7 +10,7 @@ Begin Window KajuUpdateWindow HasBackColor = False Height = 600 ImplicitInstance= True - LiveResize = False + LiveResize = "False" MacProcID = 0 MaxHeight = 32000 MaximizeButton = False @@ -26,31 +25,10 @@ Begin Window KajuUpdateWindow Title = "#KajuLocale.kWindowTitle" Visible = True Width = 800 - Begin HTMLViewer hvNotes - AutoDeactivate = True - Enabled = True - Height = 445 - HelpTag = "" - Index = -2147483648 - Left = 149 - LockBottom = False - LockedInPosition= False - LockLeft = True - LockRight = False - LockTop = True - Renderer = 1 - Scope = 2 - TabIndex = 1 - TabPanelIndex = 0 - TabStop = True - Top = 84 - Visible = True - Width = 631 - End Begin PushButton btnOK AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = False Caption = "#KajuLocale.kInstallButton" Default = True @@ -62,7 +40,7 @@ Begin Window KajuUpdateWindow Italic = False Left = 630 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -82,7 +60,7 @@ Begin Window KajuUpdateWindow Begin PushButton btnCancel AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = True Caption = "#KajuLocale.kRemindMeLaterButton" Default = False @@ -94,7 +72,7 @@ Begin Window KajuUpdateWindow Italic = False Left = 468 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -114,7 +92,7 @@ Begin Window KajuUpdateWindow Begin PushButton btnSkipVersion AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = False Caption = "#KajuLocale.kSkipVersionButton" Default = False @@ -126,7 +104,7 @@ Begin Window KajuUpdateWindow Italic = False Left = 149 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -156,7 +134,7 @@ Begin Window KajuUpdateWindow Italic = False Left = 149 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -191,7 +169,7 @@ Begin Window KajuUpdateWindow Italic = False Left = 149 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -226,7 +204,7 @@ Begin Window KajuUpdateWindow Italic = False Left = 149 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -261,7 +239,7 @@ Begin Window KajuUpdateWindow Italic = False Left = 149 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -288,11 +266,12 @@ Begin Window KajuUpdateWindow Enabled = True Height = 20 HelpTag = "" + Indeterminate = False Index = -2147483648 InitialParent = "" Left = 20 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -302,7 +281,7 @@ Begin Window KajuUpdateWindow TabPanelIndex = 0 Top = 555 Transparent = False - Value = 0 + Value = 0.0 Visible = False Width = 117 End @@ -330,11 +309,11 @@ Begin Window KajuUpdateWindow Index = -2147483648 Left = -345 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True - Renderer = 0 + Renderer = 1 Scope = 2 TabIndex = 9 TabPanelIndex = 0 @@ -356,7 +335,7 @@ Begin Window KajuUpdateWindow Italic = False Left = 20 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -388,12 +367,12 @@ Begin Window KajuUpdateWindow HelpTag = "" Index = -2147483648 InitialParent = "" - InitialValue = "" + InitialValue = "updates" Italic = False Left = 36 ListIndex = 0 LockBottom = False - LockedInPosition= False + LockedInPosition= True LockLeft = True LockRight = False LockTop = True @@ -420,11 +399,33 @@ Begin Window KajuUpdateWindow TabPanelIndex = 0 End Begin Kaju.HTTPSocketAsync hsSocket + AllowCertificateValidation= False + HTTPStatusCode = 0 Index = -2147483648 LockedInPosition= False Scope = 2 TabPanelIndex = 0 - ValidateCertificates= False + End + Begin HTMLViewer hvNotes + AutoDeactivate = True + Enabled = True + Height = 445 + HelpTag = "" + Index = -2147483648 + Left = 149 + LockBottom = False + LockedInPosition= True + LockLeft = True + LockRight = False + LockTop = True + Renderer = 1 + Scope = 2 + TabIndex = 1 + TabPanelIndex = 0 + TabStop = True + Top = 84 + Visible = True + Width = 631 End End #tag EndWindow @@ -449,9 +450,6 @@ End #tag Event Sub Open() - RelativeToFolderItem = GetTemporaryFolderItem - DeleteOnClose.Append RelativeToFolderItem - #if not TargetMacOS then // // Switch the buttons around for other platforms @@ -588,6 +586,11 @@ End // Set up the menu with the available updates. // It will set up the rest of the controls. // + // NOTE: Linux requires there to be an initial value in + // the pop-up menu or the Window won't draw + // correctly. + // + pumUpdates.DeleteAllRows for i as integer = 0 to Updates.Ubound dim update as Kaju.UpdateInformation = updates( i ) @@ -659,7 +662,7 @@ End // Show the release notes // dim source as string = update.DisplayReleaseNotes - hvNotes.LoadPage( source, RelativeToFolderItem ) + hvNotes.LoadPage( source, nil ) // // hvNotes.CancelLoad will set self.Loading back to false @@ -725,7 +728,7 @@ End // // Start the download // - hsSocket.Get( url, DownloadFile ) + hsSocket.Get( url, DownloadFile, true ) // // Start the timeout timer @@ -990,10 +993,6 @@ End Attributes( hidden ) Private mCurrentUpdate As Kaju.UpdateInformation #tag EndProperty - #tag Property, Flags = &h21 - Private RelativeToFolderItem As FolderItem - #tag EndProperty - #tag Property, Flags = &h21 Private SelectedBinary As Kaju.BinaryInformation #tag EndProperty @@ -1014,40 +1013,6 @@ End #tag EndWindowCode -#tag Events hvNotes - #tag Event - Function NewWindow() As HTMLViewer - return hvNewWindow - End Function - #tag EndEvent - #tag Event - Function CancelLoad(URL as String) As Boolean - #pragma unused URL - - dim r as boolean = not Loading - Loading = false - return r - - End Function - #tag EndEvent - #tag Event - Sub Error(errorNumber as Integer, errorMessage as String) - #pragma unused errorMessage - - #if TargetMacOS then - const kCancelledCode as integer = -999 - #else - const kCancelledCode as integer = -9999999999 - #endif - - if errorNumber <> kCancelledCode then - break - end if - - - End Sub - #tag EndEvent -#tag EndEvents #tag Events btnOK #tag Event Sub Action() @@ -1132,7 +1097,7 @@ End dim f as FolderItem = containingFolder.Item( i ) dim name as string = f.Name dim leftChars as string = name.Left( 1 ) - if leftChars <> "." and leftChars <> "_" then + if leftChars <> "." and leftChars <> "_" and f.Directory then item = f exit end if @@ -1148,6 +1113,15 @@ End Initiater.ReplacementAppFolder = item Initiater.ReplacementExecutableName = SelectedBinary.ExecutableName + #if not TargetMacOS then + if Initiater.ReplacementExecutableName = "" then + // + // We will assume it's the same name + // + Initiater.ReplacementExecutableName = App.ExecutableFile.Name + end if + #endif + btnOK.Enabled = true btnOK.Caption = KajuLocale.kQuitButton btnCancel.Visible = true @@ -1222,51 +1196,20 @@ End #tag EndEvents #tag Events hsSocket #tag Event - Sub ReceiveProgress(BytesReceived as Int64, TotalBytes as Int64, NewData as xojo.Core.MemoryBlock) - #pragma unused newData - - if CurrentStage = Stage.Cancelled then - // - // Do nothing - // - return - end if - - // - // Have to get the value below 65536 - // - - const kMaxAllowed = 1000 - - if totalBytes > kMaxAllowed then - dim mult as integer = totalBytes \ kMaxAllowed - totalBytes = totalBytes \ mult - bytesReceived = bytesReceived \ mult - end if - - pbProgress.Maximum = totalBytes - pbProgress.Value = bytesReceived - - tmrTimeout.Reset - - - End Sub - #tag EndEvent - #tag Event - Sub Error(err as RuntimeException) + Sub Error(e As RuntimeException) tmrTimeout.Mode = Timer.ModeOff - dim errMsg as string = err.Message + dim errMsg as string = e.Message if errMsg = "" then errMsg = KajuLocale.kGenericErrorMessage end if - ShowError( errMsg + " (" + str( err.ErrorNumber ) + ")" ) + ShowError( errMsg + " (" + str( e.ErrorNumber ) + ")" ) End Sub #tag EndEvent #tag Event - Sub FileReceived(url As String, httpStatus As Integer, file As FolderItem) + Sub FileReceived(URL As String, HTTPStatus As Integer, file As FolderItem) #pragma unused url if CurrentStage = Stage.Cancelled then @@ -1309,51 +1252,114 @@ End shZipper.Decompress( file, targetFolder ) end if + End Sub + #tag EndEvent + #tag Event + Sub ReceivingProgressed(bytesReceived As Int64, totalBytes As Int64, newData As String) + #pragma unused newData + + if CurrentStage = Stage.Cancelled then + // + // Do nothing + // + return + end if + + // + // Have to get the value below 65536 + // + + const kMaxAllowed = 1000 + + if totalBytes > kMaxAllowed then + dim mult as integer = totalBytes \ kMaxAllowed + totalBytes = totalBytes \ mult + bytesReceived = bytesReceived \ mult + end if + + pbProgress.Maximum = totalBytes + pbProgress.Value = bytesReceived + + tmrTimeout.Reset + + + End Sub + #tag EndEvent +#tag EndEvents +#tag Events hvNotes + #tag Event + Function NewWindow() As Object + return hvNewWindow + + End Function + #tag EndEvent + #tag Event + Function CancelLoad(URL as String) As Boolean + #pragma unused URL + + dim r as boolean = not Loading + Loading = false + return r + + End Function + #tag EndEvent + #tag Event + Sub Error(errorNumber as Integer, errorMessage as String) + #pragma unused errorMessage + + #if TargetMacOS then + const kCancelledCode as integer = -999 + #else + const kCancelledCode as integer = -9999999999 + #endif + + if errorNumber <> kCancelledCode then + break + end if + + End Sub #tag EndEvent #tag EndEvents #tag ViewBehavior #tag ViewProperty - Name="AppName" - Group="Behavior" - Type="String" - EditorType="MultiLineEditor" - #tag EndViewProperty - #tag ViewProperty - Name="BackColor" + Name="MinimumWidth" Visible=true - Group="Appearance" - InitialValue="&hFFFFFF" - Type="Color" + Group="Size" + InitialValue="64" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Backdrop" + Name="MinimumHeight" Visible=true - Group="Appearance" - Type="Picture" - EditorType="Picture" + Group="Size" + InitialValue="64" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="CloseButton" + Name="MaximumWidth" Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" - EditorType="Boolean" + Group="Size" + InitialValue="32000" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Composite" + Name="MaximumHeight" Visible=true - Group="Appearance" - InitialValue="False" - Type="Boolean" + Group="Size" + InitialValue="32000" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Frame" + Name="Type" Visible=true - Group="Appearance" + Group="Frame" InitialValue="0" - Type="Integer" + Type="Types" EditorType="Enum" #tag EnumValues "0 - Document" @@ -1370,143 +1376,155 @@ End #tag EndEnumValues #tag EndViewProperty #tag ViewProperty - Name="FullScreen" - Group="Appearance" - InitialValue="False" + Name="HasCloseButton" + Visible=true + Group="Frame" + InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="FullScreenButton" + Name="HasMaximizeButton" Visible=true - Group="Appearance" - InitialValue="False" + Group="Frame" + InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="HasBackColor" + Name="HasMinimizeButton" Visible=true - Group="Appearance" + Group="Frame" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="HasFullScreenButton" + Visible=true + Group="Frame" InitialValue="False" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Height" + Name="DefaultLocation" Visible=true - Group="Position" - InitialValue="400" - Type="Integer" + Group="Behavior" + InitialValue="0" + Type="Locations" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Parent Window" + "2 - Main Screen" + "3 - Parent Window Screen" + "4 - Stagger" + #tag EndEnumValues #tag EndViewProperty #tag ViewProperty - Name="ImplicitInstance" + Name="HasBackgroundColor" Visible=true - Group="Appearance" - InitialValue="True" + Group="Background" + InitialValue="False" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Interfaces" + Name="BackgroundColor" Visible=true - Group="ID" + Group="Background" + InitialValue="&hFFFFFF" + Type="Color" + EditorType="Color" + #tag EndViewProperty + #tag ViewProperty + Name="AppName" + Visible=false + Group="Behavior" + InitialValue="" Type="String" - EditorType="String" + EditorType="MultiLineEditor" #tag EndViewProperty #tag ViewProperty - Name="LiveResize" + Name="Backdrop" Visible=true Group="Appearance" - InitialValue="True" - Type="Boolean" - EditorType="Boolean" + InitialValue="" + Type="Picture" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MacProcID" + Name="Composite" Visible=true Group="Appearance" - InitialValue="0" - Type="Integer" + InitialValue="False" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="FullScreen" + Visible=false + Group="Appearance" + InitialValue="False" + Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MaxHeight" + Name="Height" Visible=true Group="Position" - InitialValue="32000" + InitialValue="400" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MaximizeButton" + Name="ImplicitInstance" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MaxWidth" + Name="Interfaces" Visible=true - Group="Position" - InitialValue="32000" + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="MacProcID" + Visible=true + Group="Appearance" + InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="MenuBar" Visible=true Group="Appearance" + InitialValue="" Type="MenuBar" - EditorType="MenuBar" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="MenuBarVisible" + Visible=false Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="MinHeight" - Visible=true - Group="Position" - InitialValue="64" - Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="MinimizeButton" - Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" - EditorType="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="MinWidth" - Visible=true - Group="Position" - InitialValue="64" - Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" - #tag EndViewProperty - #tag ViewProperty - Name="Placement" - Visible=true - Group="Position" - InitialValue="0" - Type="Integer" - EditorType="Enum" - #tag EnumValues - "0 - Default" - "1 - Parent Window" - "2 - Main Screen" - "3 - Parent Window Screen" - "4 - Stagger" - #tag EndEnumValues + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Resizeable" @@ -1514,14 +1532,15 @@ End Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Title" @@ -1529,6 +1548,7 @@ End Group="Appearance" InitialValue="Untitled" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Visible" @@ -1536,7 +1556,7 @@ End Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Width" @@ -1544,5 +1564,6 @@ End Group="Position" InitialValue="600" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior diff --git a/Kaju Update Test v1.kaju b/Kaju Update Test v1.kaju index 6dc61c2..1798d16 100644 --- a/Kaju Update Test v1.kaju +++ b/Kaju Update Test v1.kaju @@ -12,27 +12,28 @@ "RequiresPayment":true, "UseTransparency":false, "Version":"1.1 (10)", + "Security Token":"8gFlTRPon5s=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" } @@ -42,31 +43,32 @@ "ImageScale":1, "ImageURL":"", "MinimumRequiredVersion":"", - "ReleaseNotes":"

A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions.<\/p>\n\n

Note that this version has a name change.<\/p>", + "ReleaseNotes":"

A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions.<\/p>\n

Visit my web site<\/a>!<\/p>\n

Note that this version has a name change.<\/p>", "RequiresPayment":false, "UseTransparency":false, "Version":"1.2.2d5", + "Security Token":"9zSMiiEIxNQ=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" } @@ -80,27 +82,28 @@ "RequiresPayment":false, "UseTransparency":false, "Version":"1.2.1a4", + "Security Token":"H\/kUzLP5Bgw=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" } @@ -114,27 +117,28 @@ "RequiresPayment":false, "UseTransparency":true, "Version":"1.2b2", + "Security Token":"ZrBKzGbbyxg=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Mac.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test" } @@ -148,27 +152,28 @@ "RequiresPayment":false, "UseTransparency":false, "Version":"0.9", + "Security Token":"e9Lkuplq9ho=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http:\/\/www.mactechnologies.com\/Kaju_Test\/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" } diff --git a/README.md b/README.md index e365fa7..933dd3d 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,8 @@ If you plan to allow 32-bit to 64-bit updates on Windows and Linux, you must inc Create a new `Kaju.UpdateChecker` instance and fill in its properties. In the `Constructor`, you have to provide a FolderItem for a folder where Kaju can save its preferences, one that is unique to your app. At the least, you must also set the `ServerPublicRSAKey` (more on this later) and the `UpdateURL` where it will get its update information. If that URL (or any URL) starts with "https:", it will be accessed securely. (Conversely, a URL that does not start with "https:" will be accessed normally.) +**Note**: Due to changes in the MacOS, accessing an insecure URL will require entries in your app's plist file. For more information, look [here](https://docs.xojo.com/UserGuide:App_Transport_Security). + Call the `ExecuteAsync` (preferred) or `Execute` method of the `Kaju.UpdateChecker`. That's it. Kaju will handle everything else by going to the `UpdateURL` to see if there are any updates available for that version of the app, then ask the user about them. If the user chooses to update, the class will download and verify the binary, then offer the user the opportunity to Quit & Install or Cancel. If they choose to install, Quit will be called. Since none of this is modal, the user can continue to use your app with the update window waiting in the background. If they do choose to install, the update window will be sent to the back so it will be closed last. @@ -47,11 +49,13 @@ To discover what `UpdateChecker` found, you can check the `Result` property in t ### ExecuteAsync vs. Execute -Xojo offers two types of HTTPSocket, the "classic" and the "namespaced" (`Xojo.Net.HTTPSocket`) versions. The namespaced version includes features that works with newer types of security but does not offer a synchronous mode. With that in mind, Kaju has two ways to start the update process, `Kaju.UpdateChecker.ExecuteAsync` and `Kaju.UpdateChecker.Execute`. The former uses the namespaced version and will report its result in the `ExecuteAsyncComplete` event. The latter uses the classic version and will report its results immediately. +Kaju has two ways to start the update process, `Kaju.UpdateChecker.ExecuteAsync` and `Kaju.UpdateChecker.Execute`. + +Xojo has introduced the `URLConnection` class, an update to the classic `HTTPSocket` and `HTTPSecureSocket` classes. The more modern implementation is preferred and used when you choose `ExecuteAsync`. The older class is used when you choose the synchronous `Execute` _and_ set `AllowRedirection` to `False` (Unfortunately, the `URLConnection` class has no way to disallow redirects and we can only fake it in asynchronous mode.) -If yoru uddate information is not on a secure website, it shouldn't matter which you use, but we still recommend `ExecuteAsync` moving forward. +`ExecuteAsync` will report its result in the `ExecuteAsyncComplete` event while `Execute` will report its results immediately. -**Note**: `ExecuteAsync` will always allow redirects so `UpdateChecker.AllowRedirection` must be set to `True` or an exception will be raised. +If your update information is not on a secure website, it shouldn't matter which you use, but we still recommend `ExecuteAsync` moving forward. ### Minimum OS @@ -65,9 +69,9 @@ If Kaju cannot find the tools it needs, the `Result` will be set to `Unsupported ### Required Updates -If you set up a minimim required version in your update information, Kaju may find that a particular update is "required". For example, if the user is using v.1.0 and you've discovered a bug that necessitates an update to at least v.1.1, you would set that as the minimum required version. In the future, even as you release v.1.2, 1.3, etc, you would leave the minimum required as v.1.1 so Kaju knows to force the users of 1.0 to update. +If you set up a minimum required version in your update information, Kaju may find that a particular update is "required". For example, if the user is using v.1.0 and you've discovered a bug that necessitates an update to at least v.1.1, you would set that as the minimum required version. In the future, even as you release v.1.2, 1.3, etc, you would leave the minimum required as v.1.1 so Kaju knows to force the users of 1.0 to update. -After calling `Kaju.UpdateChecker.ExecuteAsync` or `Kaju.UpdateChecker.Execute`, the `Result` method will tell you if a required update was found. In that case, it's up to you to take special actions to make sure that your app cannot be used until it is updated. To help, there is the `Kaju.UpdateChecker.QuitOnCancelIfRequired` property that is `True` by default. If the user tries to cancel a required update, the app will quit. +After calling `Kaju.UpdateChecker.ExecuteAsync` or `Kaju.UpdateChecker.Execute`, the `Result` property will tell you if a required update was found. In that case, it's up to you to take special actions to make sure that your app cannot be used until it is updated. To help, there is the `Kaju.UpdateChecker.QuitOnCancelIfRequired` property that is `True` by default. If the user tries to cancel a required update, the app will quit. ### Other Features @@ -79,7 +83,7 @@ If an update was found, the update window will have opened. You can check throug The user can choose to ignore certain versions as long as they are not marked as required. You can set `HonorIgnored` to `False` to bypass that temporarily and present even ignored versions to your user, or you can clear the database of ignored versions entirely with the `ResetIgnored` method. -You may choose to specify an update URL that redirects to another location. By default, Kaju will not allow that, but if you really need to do it, set the `Kaju.UpdateChecker.AllowRedirection` property to `True`. +You may choose to specify an update URL that redirects to another location. By default, Kaju will not allow that, but if you really need to do it, set the `Kaju.UpdateChecker.AllowRedirection` property to `True`. ### One At A Time @@ -101,7 +105,7 @@ Kaju does not elevate permissions. If the user does not have write permission fo ### Platform Differences -Kaju will act the same way across plaforms except for one point: Since the Mac executable is always one package, it will be replaced entirely. Anything stored within the package that was put there after initial installation will be deleted. +Kaju will act the same way across platforms except for one point: Since the Mac executable is always one package, it will be replaced entirely. Anything stored within the package that was put there after initial installation will be deleted. On Windows and Linux, since executable folders can be combined, only the files that are found in the update will be replaced. Any additional files or even older, no-longer-used files, will remain untouched. If you want to make sure some older file is removed by the update, put an empty placeholder into the update package. @@ -127,7 +131,7 @@ At a bare minimum, that's it. ## The Admin App -The included Admin app makes it easy to set up your update file. Start it up and use the "+" at the bottom, left to add a version. Fill in the information for the release. +The included Admin app makes it easy to set up your update file. Start it up and use the "+" at the bottom, left to add a version. Fill in the information for the release. When you're done, save the file, then export the HTML data. It is this exported file that you will post to your web site and the final URL should match the URL you included within your app. @@ -144,7 +148,7 @@ The two ways to include a URL from which release notes will be pulled: ``` http://wwww.something.com/my_release_notes -These are the alternate release notes and +These are the alternate release notes and the url above will be visible. ``` @@ -153,8 +157,8 @@ or ``` -These are the alternate release notes but -the url above will not be visible because they are +These are the alternate release notes but +the url above will not be visible because they are commented (preferred). ``` @@ -174,6 +178,8 @@ For each version in your admin file, check the checkbox for each platform to whi For Windows and Linux, you must also provide the exact name of the executable. If your app is called "My Great App", the Linux executable name will be "My Great App" and the Windows name will be "My Great App.exe". +__Note__: If you omit this, Kaju will assume the name of the executable that is running the update. + ### About 64-bit Kaju will allow you to specify 64-bit versions for Windows and Linux. If available, and if the `UpdateChecker.Allow32bitTo64bitUpdates` is `True`, the users of your 32-bit version will be given the option to upgrade to the next version as 64-bit. *But* see the warning above in that case. @@ -252,7 +258,7 @@ A sample JSON that will be returned by the server: "URL" : "http://www.site.com/download_path_Linux" , "Hash" : "ABC123" } , - "WindowsBinaryb4bit" : + "WindowsBinary64bit" : { "ExecutableName" : "My App.exe" , "URL" : "http://www.site.com/download_path_Win_64" , @@ -272,13 +278,13 @@ A sample JSON that will be returned by the server: "AppName" : "My App" , "Version" : "6.1b4" , "ReleaseNotes" : "http://link/to/release/notes" , - "MacBinary" : + "MacBinary" : { "URL" : "http://www.site.com/other_download_path" , "Hash" :"0123456" - } + } } -] +] ``` **NOTE**: The ExecutableName will be used by the updater script while the AppName is what will display in the updater window. These may be the same or different. Since the ExecutableName of the Mac app can be discovered, it is not needed for the Mac binary. @@ -317,7 +323,7 @@ There is also a `Kaju.Version` constant (introduced in v.1.4) that will let you |Allow32bitTo64bitUpdates|Boolean|If `True`, will offer the user of a 32-bit app the option to upgrade to the 64-bit version, if available.|n| |AllowedInteraction|UInt32|Determines what windows Kaju is allowed to display; Use the available constants|n| |AllowedStage|Integer|What stage of updates the user may see (App.Final, App.Beta, App.Alpha, or App.Development)|n| -|AllowRedirection|Boolean|If `True`, the `UpdateURL` may redirect to another URL (default: `False`) (must be `True` when using `ExecuteAsync`)|n| +|AllowRedirection|Boolean|If `True`, the `UpdateURL` may redirect to another URL (default: `False`)|n| |DefaultImage|Picture|The background image that will be displayed in the window when an image is not provided by the update|n| |DefaultUseTransparency|Boolean|If `True`, transparency will be set to 50%|n| |HonorIgnored|Boolean|If `False`, the user will be presented with updates they previously set to "ignore" (default: `True`)|n| @@ -373,7 +379,7 @@ Translations to other languages by: * Sascha Schneppmueller (German) * Valdemar De SOUSA (French) * Julen Ibarretxe Uriguen (Spanish) -* Heikki Ohvo (Finnish) +* Heikki Hoo (Finnish) * Manuel Romei (Italian) * Vidal van Bergen (Dutch) @@ -407,7 +413,7 @@ Fork the project to your GitHub account. Use the "develop" branch for general fi There are two places to look for strings that need translation: -1. The constants in the KajuLocale module. +1. The constants in the KajuLocale module. 1. The error messages in KajuException. Add a translation for each, then submit a pull request as outlined above. @@ -416,21 +422,28 @@ Add a translation for each, then submit a pull request as outlined above. 2.1 (__) -* **KajuUpdateWindow**: Changed `hsSocket` to a `Xojo.Net.HTTPSocket` object. -* **UpdateChecker**: Added `ExecuteAsync` that will check for updates asynchronously using `Xojo.Net.HTTPSocket` and `LastError` for HTTP errors that occur when using that method. -* **UpdateChecker**: Added results for "PageNotFound" and "FetchingUpdateInfo". +* **KajuUpdateWindow**: Changed `hsSocket` to a `URLConnection` object. +* **UpdateChecker**: Added `ExecuteAsync` that will check for updates asynchronously using `URLConnection` and `LastError` for HTTP errors that occur when using that method. +* **UpdateChecker**: Deprecated `Execute`. +* **UpdateChecker**: Use `URLConnection` unless `Execute` is used where `AllowRedirection` isß `False`. +* **UpdateChecker**: Added results for "PageNotFound", "PageRedirected", and "FetchingUpdateInfo". * **UpdateChecker**: Better handling of a URL in the form "http://un:pw@path". * **UpdateChecker**: Changed `Result` to a read-only computed property and made the `mResult` shadow property hidden. * **UpdateChecker**: Removed events that were not being raised anyway. * **UpdateChecker**: Make sure each version has a security token (see below). -* **UpdateChecker**: Validate the downloaded packet against every form of EOL in case that got changed along the way. +* **UpdateChecker**: Validate the downloaded packet against every form of EOL with and without Trim in case that got changed along the way. * **UpdateChecker**: `OSIsSupported` will try twice to find the tools it needs and log any errors. * **UpdateInformation**: Will fetch images and release notes asynchronously. +* **UpdateInitiater**: Fixed Windows script issue that could have prevented re-launch of the application. * **Test App**: The window will let you specify Asynchronous and your own URL and/or public key. It will also allow testing of simple HTTP authenticated directories. * **Test App**: Asynchronous is now the default. +* **Admin App**: Fixed issues with saving and alias tracking. (Alias tracking does not work on Windows.) +* **Admin App**: Better UI handling on Windows. * **General**: Code changes for easier debugging. * **General**: All HTTP requests now include headers to disable caching. * **General**: Exported information file contains a security token to make sure that each export has a different RSA signature. +* **General**: Handle IOException. +* **General**: Updated build script to look for kaju cli in "Builds" folder as named in the newer Xojo versions. 2.0 (May 31, 2017) @@ -442,7 +455,7 @@ Add a translation for each, then submit a pull request as outlined above. * Ability to load release notes through a URL. * **Admin GUI**: Fixed Dupe button. * Added support for 64-bit binaries. -* **Kaju**: Changed parameters of `DidLastUpdateSucceed` to report the "bit-ness" of the version that initiated the update. +* **Kaju**: Changed parameters of `DidLastUpdateSucceed` to report the "bit-ness" of the version that initiated the update. * **Test App**: Use better technique for compressing Windows and Linux executables. 1.6.1 (August 27, 2015) diff --git a/Update Test App/Build Scripts/Prepare Kaju.xojo_script b/Update Test App/Build Scripts/Prepare Kaju.xojo_script index 2c9a591..8fcee99 100644 --- a/Update Test App/Build Scripts/Prepare Kaju.xojo_script +++ b/Update Test App/Build Scripts/Prepare Kaju.xojo_script @@ -53,10 +53,17 @@ case else print str( CurrentBuildTarget ) end select -dim kaju as string = topLevelPath + "/Kaju\ Admin\ CLI/Builds\ \-\ Kaju\ Admin\ CLI.xojo_project/OS\ X\ 64\ bit/kaju/kaju" +dim kaju as string +kaju = topLevelPath + "/Kaju\ Admin\ CLI/Builds\ \-\ Kaju\ Admin\ CLI/OS\ X\ 64\ bit/kaju/kaju" dim result as string result = DoShellCommand( kaju ) + +if result.InStr( "addversion" ) = 0 then +kaju = topLevelPath + "/Kaju\ Admin\ CLI/Builds\ \-\ Kaju\ Admin\ CLI.xojo_project/OS\ X\ 64\ bit/kaju/kaju" +result = DoShellCommand( kaju ) +end if + if result.InStr( "addversion" ) = 0 then print "The kaju CLI is not available. Build it first." return diff --git a/Update Test App/Kaju Update Test.xojo_project b/Update Test App/Kaju Update Test.xojo_project index c7811f0..3f30e18 100644 --- a/Update Test App/Kaju Update Test.xojo_project +++ b/Update Test App/Kaju Update Test.xojo_project @@ -1,6 +1,7 @@ Type=Desktop -RBProjectVersion=2018.011 +RBProjectVersion=2019.031 MinIDEVersion=20150400 +OrigIDEVersion=00000000 Class=App;App.xojo_code;&h00000000503AC7A0;&h0000000000000000;false Folder=Custom Plist;Custom Plist;&h0000000031A617FF;&h0000000000000000;false Window=WndTest;WndTest.xojo_window;&h000000004308442C;&h0000000000000000;false @@ -53,6 +54,7 @@ DebuggerCommandLine= UseGDIPlus=True UseBuildsFolder=True HiDPI=True +DarkMode=True CopyRedistNextToWindowsEXE=False IsWebProject=False LinuxBuildArchitecture=1 diff --git a/Update Test App/WndTest.xojo_window b/Update Test App/WndTest.xojo_window index 486cbe7..b21a088 100644 --- a/Update Test App/WndTest.xojo_window +++ b/Update Test App/WndTest.xojo_window @@ -3,7 +3,6 @@ Begin Window WndTest BackColor = &cFFFFFF00 Backdrop = 0 CloseButton = True - Compatibility = "" Composite = False Frame = 0 FullScreen = False @@ -11,7 +10,7 @@ Begin Window WndTest HasBackColor = False Height = 584 ImplicitInstance= True - LiveResize = True + LiveResize = "True" MacProcID = 0 MaxHeight = 584 MaximizeButton = False @@ -64,7 +63,7 @@ Begin Window WndTest Begin PushButton btnExecute AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = False Caption = "Check" Default = True @@ -164,7 +163,7 @@ Begin Window WndTest Begin PushButton btnResetIgnored AutoDeactivate = True Bold = False - ButtonStyle = "0" + ButtonStyle = 0 Cancel = False Caption = "Reset Ignored" Default = False @@ -285,7 +284,7 @@ Begin Window WndTest TextFont = "System" TextSize = 0.0 TextUnit = 0 - Top = 346 + Top = 373 Transparent = True Underline = False Visible = True @@ -320,7 +319,7 @@ Begin Window WndTest TextFont = "System" TextSize = 0.0 TextUnit = 0 - Top = 355 + Top = 382 Transparent = False Underline = False Visible = True @@ -420,7 +419,7 @@ Begin Window WndTest TextFont = "System" TextSize = 0.0 TextUnit = 0 - Top = 387 + Top = 405 Transparent = True Underline = False Visible = True @@ -455,7 +454,7 @@ Begin Window WndTest TextFont = "System" TextSize = 0.0 TextUnit = 0 - Top = 397 + Top = 415 Transparent = False Underline = False Visible = True @@ -688,6 +687,39 @@ Begin Window WndTest Visible = True Width = 436 End + Begin CheckBox cbAllowRedirection + AutoDeactivate = True + Bold = False + Caption = "Allow Redirection" + DataField = "" + DataSource = "" + Enabled = True + Height = 20 + HelpTag = "" + Index = -2147483648 + InitialParent = "" + Italic = False + Left = 20 + LockBottom = False + LockedInPosition= False + LockLeft = True + LockRight = False + LockTop = True + Scope = 0 + State = 1 + TabIndex = 19 + TabPanelIndex = 0 + TabStop = True + TextFont = "System" + TextSize = 0.0 + TextUnit = 0 + Top = 344 + Transparent = True + Underline = False + Value = True + Visible = True + Width = 183 + End End #tag EndWindow @@ -759,6 +791,9 @@ End case Kaju.UpdateChecker.ResultType.FetchingUpdateInfo lblResult.Text = "Fetching update information" + case Kaju.UpdateChecker.ResultType.PageRedirected + lblResult.Text = "The URL was redirected to another page" + case Kaju.UpdateChecker.ResultType.PageNotFound lblResult.Text = "The URL resulted in a 404 error" @@ -814,7 +849,7 @@ End url = baseURL + pumChooseUpdateURL.RowTag( pumChooseUpdateURL.ListIndex ).StringValue end if Checker.UpdateURL = url - Checker.AllowRedirection = true + Checker.AllowRedirection = cbAllowRedirection.Value dim pubKey as string = fldPublicKey.Text.Trim if pubKey = "" then @@ -912,39 +947,43 @@ End #tag EndEvents #tag ViewBehavior #tag ViewProperty - Name="BackColor" + Name="MinimumWidth" Visible=true - Group="Appearance" - InitialValue="&hFFFFFF" - Type="Color" + Group="Size" + InitialValue="64" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Backdrop" + Name="MinimumHeight" Visible=true - Group="Appearance" - Type="Picture" - EditorType="Picture" + Group="Size" + InitialValue="64" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="CloseButton" + Name="MaximumWidth" Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" - EditorType="Boolean" + Group="Size" + InitialValue="32000" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Composite" - Group="Appearance" - InitialValue="False" - Type="Boolean" + Name="MaximumHeight" + Visible=true + Group="Size" + InitialValue="32000" + Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Frame" + Name="Type" Visible=true - Group="Appearance" + Group="Frame" InitialValue="0" - Type="Integer" + Type="Types" EditorType="Enum" #tag EnumValues "0 - Document" @@ -961,142 +1000,147 @@ End #tag EndEnumValues #tag EndViewProperty #tag ViewProperty - Name="FullScreen" - Group="Appearance" - InitialValue="False" + Name="HasCloseButton" + Visible=true + Group="Frame" + InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="FullScreenButton" + Name="HasMaximizeButton" Visible=true - Group="Appearance" - InitialValue="False" + Group="Frame" + InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="HasBackColor" + Name="HasMinimizeButton" Visible=true - Group="Appearance" + Group="Frame" + InitialValue="True" + Type="Boolean" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="HasFullScreenButton" + Visible=true + Group="Frame" InitialValue="False" Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Height" + Name="DefaultLocation" Visible=true - Group="Position" - InitialValue="400" - Type="Integer" + Group="Behavior" + InitialValue="0" + Type="Locations" + EditorType="Enum" + #tag EnumValues + "0 - Default" + "1 - Parent Window" + "2 - Main Screen" + "3 - Parent Window Screen" + "4 - Stagger" + #tag EndEnumValues #tag EndViewProperty #tag ViewProperty - Name="ImplicitInstance" + Name="HasBackgroundColor" Visible=true - Group="Appearance" - InitialValue="True" + Group="Background" + InitialValue="False" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="Interfaces" + Name="BackgroundColor" Visible=true - Group="ID" - Type="String" - EditorType="String" + Group="Background" + InitialValue="&hFFFFFF" + Type="Color" + EditorType="Color" #tag EndViewProperty #tag ViewProperty - Name="LiveResize" + Name="Backdrop" Visible=true Group="Appearance" - InitialValue="True" + InitialValue="" + Type="Picture" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="Composite" + Visible=false + Group="Appearance" + InitialValue="False" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MacProcID" + Name="FullScreen" + Visible=false Group="Appearance" - InitialValue="0" - Type="Integer" + InitialValue="False" + Type="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MaxHeight" + Name="Height" Visible=true Group="Position" - InitialValue="32000" + InitialValue="400" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MaximizeButton" + Name="ImplicitInstance" Visible=true Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty - Name="MaxWidth" + Name="Interfaces" Visible=true - Group="Position" - InitialValue="32000" + Group="ID" + InitialValue="" + Type="String" + EditorType="" + #tag EndViewProperty + #tag ViewProperty + Name="MacProcID" + Visible=false + Group="Appearance" + InitialValue="0" Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="MenuBar" Visible=true Group="Appearance" + InitialValue="" Type="MenuBar" - EditorType="MenuBar" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="MenuBarVisible" + Visible=false Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="MinHeight" - Visible=true - Group="Position" - InitialValue="64" - Type="Integer" - #tag EndViewProperty - #tag ViewProperty - Name="MinimizeButton" - Visible=true - Group="Appearance" - InitialValue="True" - Type="Boolean" - EditorType="Boolean" - #tag EndViewProperty - #tag ViewProperty - Name="MinWidth" - Visible=true - Group="Position" - InitialValue="64" - Type="Integer" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Name" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" - #tag EndViewProperty - #tag ViewProperty - Name="Placement" - Visible=true - Group="Position" - InitialValue="0" - Type="Integer" - EditorType="Enum" - #tag EnumValues - "0 - Default" - "1 - Parent Window" - "2 - Main Screen" - "3 - Parent Window Screen" - "4 - Stagger" - #tag EndEnumValues + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Resizeable" @@ -1104,14 +1148,15 @@ End Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Super" Visible=true Group="ID" + InitialValue="" Type="String" - EditorType="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Title" @@ -1119,6 +1164,7 @@ End Group="Appearance" InitialValue="Untitled" Type="String" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Visible" @@ -1126,7 +1172,7 @@ End Group="Appearance" InitialValue="True" Type="Boolean" - EditorType="Boolean" + EditorType="" #tag EndViewProperty #tag ViewProperty Name="Width" @@ -1134,5 +1180,6 @@ End Group="Position" InitialValue="600" Type="Integer" + EditorType="" #tag EndViewProperty #tag EndViewBehavior diff --git a/Update Test Files (Upload These)/Kaju_Update_Test_Linux.zip b/Update Test Files (Upload These)/Kaju_Update_Test_Linux.zip index db75e36..8ffaa48 100644 Binary files a/Update Test Files (Upload These)/Kaju_Update_Test_Linux.zip and b/Update Test Files (Upload These)/Kaju_Update_Test_Linux.zip differ diff --git a/Update Test Files (Upload These)/Kaju_Update_Test_Linux_64.zip b/Update Test Files (Upload These)/Kaju_Update_Test_Linux_64.zip index 9c0d56c..563caf2 100644 Binary files a/Update Test Files (Upload These)/Kaju_Update_Test_Linux_64.zip and b/Update Test Files (Upload These)/Kaju_Update_Test_Linux_64.zip differ diff --git a/Update Test Files (Upload These)/Kaju_Update_Test_Mac.zip b/Update Test Files (Upload These)/Kaju_Update_Test_Mac.zip index 0fcb4d9..c69ab56 100644 Binary files a/Update Test Files (Upload These)/Kaju_Update_Test_Mac.zip and b/Update Test Files (Upload These)/Kaju_Update_Test_Mac.zip differ diff --git a/Update Test Files (Upload These)/Kaju_Update_Test_Win.zip b/Update Test Files (Upload These)/Kaju_Update_Test_Win.zip index 0274934..3654947 100644 Binary files a/Update Test Files (Upload These)/Kaju_Update_Test_Win.zip and b/Update Test Files (Upload These)/Kaju_Update_Test_Win.zip differ diff --git a/Update Test Files (Upload These)/Kaju_Update_Test_Win_64.zip b/Update Test Files (Upload These)/Kaju_Update_Test_Win_64.zip index 24ab5b1..39342a1 100644 Binary files a/Update Test Files (Upload These)/Kaju_Update_Test_Win_64.zip and b/Update Test Files (Upload These)/Kaju_Update_Test_Win_64.zip differ diff --git a/Update Test Files (Upload These)/UpdateInformation.html b/Update Test Files (Upload These)/UpdateInformation.html index b141615..939e7fd 100644 --- a/Update Test Files (Upload These)/UpdateInformation.html +++ b/Update Test Files (Upload These)/UpdateInformation.html @@ -1,4 +1,4 @@ -KAJU 2F01BFEF92B2EAE0E0727B8072769D512FADD07349A3DBE1C49C3A7D24648B3C0594433D788CD67C034EFD5A7A1621B41111507889766F0DED7FE88291F13B5287275A59F3A2078E82C7E3964310EEB9C57312B9A8D9DFFB68AB68B972F61B0D328A25296D8F29D81CCF004C6B36EB58BFC5B3A325804B598BA4797DA944C5C37FBB329E671A9D2CF6FF9355BCC4F62B96C76C0C76DCAB276F808430BB9D005EE026BFF0AD79E516E29C753A1DE7EA7D8D718596DBB9A386EFCFF76CE06E9864BF7596917231E0EB5D8BCFB1124CA230DD2DA6839B815F80AE3A529D101537EA722DB4A4B301AE9A54A7EA2259E66FB9E1DB3880D15A193F22C3F1530EB58CF8 +KAJU 9E368490B29236933B69A92E7C834C3CC514C7B2FB708C1D2E15EB5D8EFB46EF0A0B53F4FC5CF3DB56B27B1884692ADDD47D439BDF06FEE2114263EDD8A483E21939C0C786478CBD956E800688E1B456F1853B9DD78AFF436998E7D66FF1E4EB2F646CB369B981029D4CE65BB3D307D7827BF64A72980B031962F253E11268DD8A0B242BBD03319EAED4BF4D23373559112E9887A66C4E103865DF40F81B88A7044D6F54618549B8D37A295A4605DC3F501AB4B40528CEDF415444F77CB9455D06F312DA1459D4DFF3C658D647138C960BB7D2282FAE01730924A540030CFAC307A043C45CA19EBE7EFF7D56FAD4D1BADB47C9CCE681FF9B525B12D1ACA19BAC [ { "AppName":"Kaju Update Test", @@ -9,66 +9,66 @@ "RequiresPayment":true, "UseTransparency":false, "Version":"1.1 (10)", + "Security Token":"bTrObWqxkJw=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"6dw6y4XELho=" + } }, { "AppName":"New Kaju Update Test", "ImageScale":1, "ImageURL":"", "MinimumRequiredVersion":"", - "ReleaseNotes":"

A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions.

\n\n

Note that this version has a name change.

", + "ReleaseNotes":"

A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions.

\n

Visit my web site!

\n

Note that this version has a name change.

", "RequiresPayment":false, "UseTransparency":false, "Version":"1.2.2d5", + "Security Token":"Bz1Hs77qeWE=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"15be+NZNrWo=" + } }, { "AppName":"Kaju Update Test", @@ -79,31 +79,31 @@ "RequiresPayment":false, "UseTransparency":false, "Version":"1.2.1a4", + "Security Token":"odDZlADDiR0=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"BLUYvedrbic=" + } }, { "AppName":"Kaju Update Test", @@ -114,31 +114,31 @@ "RequiresPayment":false, "UseTransparency":true, "Version":"1.2b2", + "Security Token":"imdB+t/DcJ4=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"IYtHO0sOf4E=" + } }, { "AppName":"Kaju Update Test", @@ -149,30 +149,30 @@ "RequiresPayment":false, "UseTransparency":false, "Version":"0.9", + "Security Token":"AMORx31tniU=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"ByePXA3K1T4=" + } } ] \ No newline at end of file diff --git a/Update Test Files (Upload These)/UpdateInformation32bit.html b/Update Test Files (Upload These)/UpdateInformation32bit.html index c70a29c..a2bbdf0 100644 --- a/Update Test Files (Upload These)/UpdateInformation32bit.html +++ b/Update Test Files (Upload These)/UpdateInformation32bit.html @@ -1,4 +1,4 @@ -KAJU 0746159F63D1D92356D1A79713D30F332C9DAE8538B9DB47416EE28134DF4F5AD657AC8FD695EEA3026EBD19FACBABC560275F64A537CA49B16A1862630AB7483B6CB77C82B6C70551D999E2C3284F57A7C71C0FF0F9BC32FCF9DB75A76C37284DC753118CE0F12F0185B71F770559CD1914A634CD8ED37620B2D6DACB9CB3CB85DBE78D0F2807E9050901D3E886C8DED416AF405598567589E393AF1B1477CE4CD65D1114B5F63BB004FFE14C3255E837433117732A6766E61E53104F807132A0A99036A80105F7CC3ECA0CF8D0423742B7E4123FDFD0314F10F9577303DB6ED77E7EDC7A1EDB72460AFDCDC0C4EBBB04C23AA794A10F24D1104131B418E981 +KAJU 5D780CB55DED1CC5F09AD357A281EF91BCFDDDB90B734E263B88C3B54AA8E04491085ACB1763863CBC4CA8C55E1F98F63130E012B2A78A2126BD762A94EB0470818564AB9CFDB7A64E2CE5F46D4187180A9FEDD9BF0107EC23EA35F7D62FF20AB9E465D138C966EDD4E6D61CFAE89B828BBA67D05702848BE07EF2B7F58052A6505A273335887A0C73E9B4C7D4B48457E0750772D17AA4DBAB9594B685121A6C14D4C558C6BD63E45BC6ADE7B1A3BB5E9E1E05247B99D7A7129B349DF448FA7F3709666E29B8BD18A2C6A0DFBE169CB42D58AF95CE15EEAE28AC98896F69CC4F4D6E2381421C75B10F93265FCD303115E62570114654ACC13120F75ED1BF6056 [ { "AppName":"Kaju Update Test", @@ -9,46 +9,46 @@ "RequiresPayment":true, "UseTransparency":false, "Version":"1.1 (10)", + "Security Token":"yVJWDXwACds=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"b5cWlFUJlRs=" + } }, { "AppName":"New Kaju Update Test", "ImageScale":1, "ImageURL":"", "MinimumRequiredVersion":"", - "ReleaseNotes":"

A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions.

\n\n

Note that this version has a name change.

", + "ReleaseNotes":"

A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions.

\n

Visit my web site!

\n

Note that this version has a name change.

", "RequiresPayment":false, "UseTransparency":false, "Version":"1.2.2d5", + "Security Token":"Ck4xaZl6tKM=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"wAsjX0gB06k=" + } }, { "AppName":"Kaju Update Test", @@ -59,21 +59,21 @@ "RequiresPayment":false, "UseTransparency":false, "Version":"1.2.1a4", + "Security Token":"Mc8KLloByME=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"CQuWJJ0xqrI=" + } }, { "AppName":"Kaju Update Test", @@ -84,21 +84,21 @@ "RequiresPayment":false, "UseTransparency":true, "Version":"1.2b2", + "Security Token":"wuixea464fE=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"b/H+HdYy35M=" + } }, { "AppName":"Kaju Update Test", @@ -109,20 +109,20 @@ "RequiresPayment":false, "UseTransparency":false, "Version":"0.9", + "Security Token":"de2OA8/9Zn4=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary":{ - "Hash":"B68C4F642F54A05A3BB3081484A180EA", + "Hash":"ECECC37A150B297CDB69EC32813136F6", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary":{ - "Hash":"590FD096630674C34EEA63F8C272086B", + "Hash":"A386E0321651CFA41C7544D91BB8AACE", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"8jHVd7IJQw8=" + } } ] \ No newline at end of file diff --git a/Update Test Files (Upload These)/UpdateInformation64bit.html b/Update Test Files (Upload These)/UpdateInformation64bit.html index 0976451..76c3840 100644 --- a/Update Test Files (Upload These)/UpdateInformation64bit.html +++ b/Update Test Files (Upload These)/UpdateInformation64bit.html @@ -1,4 +1,4 @@ -KAJU 322A05F0348C7CC55945DBC978DC2881363E1BCA95832F93C8E4F234FE34D53616D342E79B6BDA6BE96DCEFC55A09255F1F49B6EF0824692701E5BEC4D7E31BF0B9CE4356B6C837DFB7B5B935FC437C1085A0543147C733D1ECC8ACCB2DEB553ED7F9C4CE48AF1D00BC0B1EC624425973629E1D4AB2DC4113D4128A590041FE43D032ADB29718836CF8C6A91DC4F63988093A7F0CEEDF8D7672416D1483DEE640CB2DA6F2CF663F22F272FBC735BE3C02D2204EE9B9E86CBA09CD8C92C3213BFDEA851FF720B74DF038A57781CFF10D106C2AA0425D09C54C421D9F73C307953DA2047FA490B5CCCDA5DE653FE99BA566C0EA0AE0108671A38B9E762CA617A9A +KAJU 4434077A606E6F72A71F3E0B9C04A8DC17BEFBD67EFCA7C4BACC20F9C88D838A59083D5AF9D7944F1A5964BE22727887A1C1AF0539903C3CB17FB84A7ECE78A0399F547D56D532DEECF430479FECA4ABAF4C34213967031C53C35403AFF402C42CB0A2319E1CE114AC718717FF61D3A852D280745A8FCF8B27C81CDED6ED2DFEAABA571C8B801124C30DED899C200FBD364A4E1146B817BC86DFE3C2A7A9F3753875F44CC5BBE7E5B85371A6190079D1FAC1B93C231202A28EEA1576B338D5597B44AD51EEF974C33DAD16118CC95850FE2CA9444A1F50C21ED710A3F8D68069D59BE9DB70B5F551E6F57ABB4D20B1EC40E7610C2371C6CFAD17D49C9BAFFDCE [ { "AppName":"Kaju Update Test", @@ -9,46 +9,46 @@ "RequiresPayment":true, "UseTransparency":false, "Version":"1.1 (10)", + "Security Token":"zj/0PmIxVUI=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"NZdPiKQho50=" + } }, { "AppName":"New Kaju Update Test", "ImageScale":1, "ImageURL":"", "MinimumRequiredVersion":"", - "ReleaseNotes":"

A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions.

\n\n

Note that this version has a name change.

", + "ReleaseNotes":"

A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions.

\n

Visit my web site!

\n

Note that this version has a name change.

", "RequiresPayment":false, "UseTransparency":false, "Version":"1.2.2d5", + "Security Token":"McYxhSgmp1I=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"riPI1sSC5iA=" + } }, { "AppName":"Kaju Update Test", @@ -59,21 +59,21 @@ "RequiresPayment":false, "UseTransparency":false, "Version":"1.2.1a4", + "Security Token":"lQGD2NrrXWc=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"gi0TqQn5oxs=" + } }, { "AppName":"Kaju Update Test", @@ -84,21 +84,21 @@ "RequiresPayment":false, "UseTransparency":true, "Version":"1.2b2", + "Security Token":"NVrNOtLyYVk=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux.zip" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"OnJMQACeyDc=" + } }, { "AppName":"Kaju Update Test", @@ -109,20 +109,20 @@ "RequiresPayment":false, "UseTransparency":false, "Version":"0.9", + "Security Token":"d5Sv4F3G7zE=", "MacBinary":{ - "Hash":"07A49D4D1A1865E695DC0DC881C06AAE", + "Hash":"5A66CD3648FC633C2CC3AC57FBB4CA80", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Mac.zip" }, "WindowsBinary64bit":{ - "Hash":"FA91CBF135F03FB751824C6DD2E3EB9F", + "Hash":"8225FE35A48D461638092DE9286A43DA", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Win_64.zip", "ExecutableName":"Kaju Update Test.exe" }, "LinuxBinary64bit":{ - "Hash":"C0A14913EE3413B5ACBD93EADF9BDDC6", + "Hash":"864E7E6D1E48B0E09ADD1D8CC6F76C08", "URL":"http://www.mactechnologies.com/Kaju_Test/Kaju_Update_Test_Linux_64.zip", "ExecutableName":"Kaju Update Test" - }, - "Security Token":"FlUR8PEqXf8=" + } } ] \ No newline at end of file