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. Note that this version has a name change. A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions. Visit my web site! Note that this version has a name change. A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions. Note that this version has a name change. A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions. Visit my web site! Note that this version has a name change. A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions. Note that this version has a name change. A phony development version pointing to the same binary. Meant as a placeholder to demonstrate multiple versions. Visit my web site! Note that this version has a name change.