aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_moddownload.nut
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.Client/mod/scripts/vscripts/ui/menu_ns_moddownload.nut')
-rw-r--r--Northstar.Client/mod/scripts/vscripts/ui/menu_ns_moddownload.nut117
1 files changed, 117 insertions, 0 deletions
diff --git a/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_moddownload.nut b/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_moddownload.nut
new file mode 100644
index 000000000..4d299362d
--- /dev/null
+++ b/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_moddownload.nut
@@ -0,0 +1,117 @@
+global function DownloadMod
+global function DisplayModDownloadErrorDialog
+
+global enum eModInstallStatus
+{
+ DOWNLOADING,
+ CHECKSUMING,
+ EXTRACTING,
+ DONE,
+ FAILED,
+ FAILED_READING_ARCHIVE,
+ FAILED_WRITING_TO_DISK,
+ MOD_FETCHING_FAILED,
+ MOD_CORRUPTED,
+ NO_DISK_SPACE_AVAILABLE,
+ NOT_FOUND
+}
+
+const int MB = 1024*1000;
+
+bool function DownloadMod( RequiredModInfo mod )
+{
+ // Downloading mod UI
+ DialogData dialogData
+ dialogData.header = Localize( "#DOWNLOADING_MOD_TITLE" )
+ dialogData.message = Localize( "#DOWNLOADING_MOD_TEXT", mod.name, mod.version )
+ dialogData.showSpinner = true;
+
+ // Prevent user from closing dialog
+ dialogData.forceChoice = true;
+ OpenDialog( dialogData )
+
+ // Save reference to UI elements, to update their content
+ var menu = GetMenu( "Dialog" )
+ var header = Hud_GetChild( menu, "DialogHeader" )
+ var body = GetSingleElementByClassname( menu, "DialogMessageClass" )
+
+ // Start actual mod downloading
+ NSDownloadMod( mod.name, mod.version )
+
+ ModInstallState state = NSGetModInstallState()
+ while ( state.status < eModInstallStatus.DONE )
+ {
+ state = NSGetModInstallState()
+ UpdateModDownloadDialog( mod, state, menu, header, body )
+ WaitFrame()
+ }
+
+ printt( "Mod status:", state.status )
+
+ // Close loading dialog
+ CloseActiveMenu()
+
+ return state.status == eModInstallStatus.DONE
+}
+
+void function UpdateModDownloadDialog( RequiredModInfo mod, ModInstallState state, var menu, var header, var body )
+{
+ switch ( state.status )
+ {
+ case eModInstallStatus.DOWNLOADING:
+ Hud_SetText( header, Localize( "#DOWNLOADING_MOD_TITLE_W_PROGRESS", string( state.ratio ) ) )
+ Hud_SetText( body, Localize( "#DOWNLOADING_MOD_TEXT_W_PROGRESS", mod.name, mod.version, floor( state.progress / MB ), floor( state.total / MB ) ) )
+ break
+ case eModInstallStatus.CHECKSUMING:
+ Hud_SetText( header, Localize( "#CHECKSUMING_TITLE" ) )
+ Hud_SetText( body, Localize( "#CHECKSUMING_TEXT", mod.name, mod.version ) )
+ break
+ case eModInstallStatus.EXTRACTING:
+ Hud_SetText( header, Localize( "#EXTRACTING_MOD_TITLE", string( state.ratio ) ) )
+ Hud_SetText( body, Localize( "#EXTRACTING_MOD_TEXT", mod.name, mod.version, floor( state.progress / MB ), floor( state.total / MB ) ) )
+ break
+ default:
+ break
+ }
+}
+
+void function DisplayModDownloadErrorDialog( string modName )
+{
+ ModInstallState state = NSGetModInstallState()
+
+ DialogData dialogData
+ dialogData.header = Localize( "#FAILED_DOWNLOADING", modName )
+ dialogData.image = $"ui/menu/common/dialog_error"
+
+ switch ( state.status )
+ {
+ case eModInstallStatus.FAILED_READING_ARCHIVE:
+ dialogData.message = Localize( "#FAILED_READING_ARCHIVE" )
+ break
+ case eModInstallStatus.FAILED_WRITING_TO_DISK:
+ dialogData.message = Localize( "#FAILED_WRITING_TO_DISK" )
+ break
+ case eModInstallStatus.MOD_FETCHING_FAILED:
+ dialogData.message = Localize( "#MOD_FETCHING_FAILED" )
+ break
+ case eModInstallStatus.MOD_CORRUPTED:
+ dialogData.message = Localize( "#MOD_CORRUPTED" )
+ break
+ case eModInstallStatus.NO_DISK_SPACE_AVAILABLE:
+ dialogData.message = Localize( "#NO_DISK_SPACE_AVAILABLE" )
+ break
+ case eModInstallStatus.NOT_FOUND:
+ dialogData.message = Localize( "#NOT_FOUND" )
+ break
+ case eModInstallStatus.FAILED:
+ default:
+ dialogData.message = Localize( "#MOD_FETCHING_FAILED_GENERAL" )
+ break
+ }
+
+ AddDialogButton( dialogData, "#DISMISS" )
+ AddDialogFooter( dialogData, "#A_BUTTON_SELECT" )
+ AddDialogFooter( dialogData, "#B_BUTTON_DISMISS_RUI" )
+
+ OpenDialog( dialogData )
+}