|
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
Imports System.Net
Imports System.Windows.Forms
Imports Microsoft.VisualBasic.CompilerServices
Imports Microsoft.VisualBasic.MyServices.Internal
Namespace Microsoft.VisualBasic.Devices
Friend Module NetworkUtilities
' Password used in overloads where there is no password parameter
Friend Const DEFAULT_PASSWORD As String = ""
' Default timeout value
Friend Const DEFAULT_TIMEOUT As Integer = 100000
' UserName used in overloads where there is no userName parameter
Friend Const DEFAULT_USERNAME As String = ""
''' <summary>
''' Posts a message to close the <see cref="ProgressDialog"/>.
''' </summary>
Friend Sub CloseProgressDialog(dialog As ProgressDialog)
' Don't invoke unless dialog is up and running
If dialog IsNot Nothing Then
dialog.IndicateClosing()
If dialog.IsHandleCreated Then
dialog.BeginInvoke(New MethodInvoker(AddressOf dialog.CloseDialog))
Else
' Ensure dialog is closed. If we get here it means the file was copied before the handle for
' the progress dialog was created.
dialog.Close()
End If
End If
End Sub
''' <summary>
''' Gets network credentials from a userName and password.
''' </summary>
''' <param name="userName">The name of the user.</param>
''' <param name="password">The password of the user.</param>
''' <returns>A <see langword="New"/> <see cref="NetworkCredential"/> or <see langword="Nothing"/>.</returns>
Friend Function GetNetworkCredentials(userName As String, password As String) As ICredentials
Return If(String.IsNullOrWhiteSpace(userName) OrElse String.IsNullOrWhiteSpace(password),
Nothing,
DirectCast(New NetworkCredential(userName, password), ICredentials)
)
End Function
''' <summary>
''' Centralize setup a <see cref="ProgressDialog"/> to be used with FileDownload and FileUpload.
''' </summary>
''' <param name="address">Address to the remote file, http, ftp etc...</param>
''' <param name="destinationFileName">Name and path of file where download is saved.</param>
''' <param name="showUI">Indicates whether or not to show a progress bar.</param>
''' <returns><see langword="New"/> <see cref="ProgressDialog"/>.</returns>
Friend Function GetProgressDialog(
address As String,
destinationFileName As String,
showUI As Boolean) As ProgressDialog
If showUI AndAlso Environment.UserInteractive Then
'Construct the local file. This will validate the full name and path
Dim fullFilename As String = FileSystemUtils.NormalizeFilePath(
path:=destinationFileName,
paramName:=NameOf(destinationFileName))
Return New ProgressDialog With {
.Text = Utils.GetResourceString(SR.ProgressDialogDownloadingTitle, address),
.LabelText = Utils.GetResourceString(
ResourceKey:=SR.ProgressDialogDownloadingLabel,
address,
fullFilename)
}
End If
Return Nothing
End Function
''' <summary>
''' Gets a <see cref="Uri"/> from a uri string.
''' We also use this function to validate the UriString (remote file address).
''' </summary>
''' <param name="address">The remote file address.</param>
''' <returns>A <see cref="Uri"/> if successful, otherwise it throws an <see cref="UriFormatException"/>.</returns>
Friend Function GetUri(address As String) As Uri
Try
Return New Uri(address)
Catch ex As UriFormatException
'Throw an exception with an error message more appropriate to our API
Throw GetArgumentExceptionWithArgName(
argumentName:=NameOf(address),
resourceKey:=SR.Network_InvalidUriString,
address)
End Try
End Function
End Module
End Namespace
|