2021-05-13 20:03:07 +02:00
using System ;
using System.ComponentModel ;
using System.Threading.Tasks ;
2022-08-30 15:42:25 +02:00
using Serilog ;
2021-05-13 20:03:07 +02:00
using TINK.Model.Device ;
using Xamarin.Essentials ;
using Xamarin.Forms ;
namespace TINK.ViewModel.Info
{
2022-09-06 16:08:19 +02:00
/// <summary> Manges the tabbed info page. </summary>
public class InfoPageViewModel : INotifyPropertyChanged
{
/// <summary> Fired whenever a property changed.</summary>
public event PropertyChangedEventHandler PropertyChanged ;
/// <summary> Holds the name of the host.</summary>
private string HostName { get ; }
/// <summary> Holds value wether site caching is on or off.</summary>
bool IsSiteCachingOn { get ; }
private string AgbResourcePath { get ; }
private string PrivacyResourcePath { get ; }
private string ImpressResourcePath { get ; }
/// <summary>
/// Holds the current ui two letter ISO language name.
/// </summary>
private string UiIsoLanguageName { get ; }
/// <summary> Constructs Info view model</summary>
/// <param name="isSiteCachingOn">Holds value wether site caching is on or off.</param>
/// <param name="agbResourcePath"> Agb resouce path received from backend.</param>
/// <param name="privacyResourcePath"> Privacy resouce path received from backend.</param>
/// <param name="impressResourcePath"> Impress resouce path received from backend.</param>
/// <param name="uiIsoLangugageName">Two letter ISO language name.</param>
/// <param name="resourceProvider">Delegate to get an an embedded html ressource. Used as fallback if download from web page does not work and cache is empty.</param>
public InfoPageViewModel (
string hostName ,
string agbResourcePath ,
string privacyResourcePath ,
string impressResourcePath ,
bool isSiteCachingOn ,
string uiIsoLangugageName ,
Func < string , string > resourceProvider )
{
HostName = hostName ;
AgbResourcePath = agbResourcePath ;
PrivacyResourcePath = privacyResourcePath ;
ImpressResourcePath = impressResourcePath ;
IsSiteCachingOn = isSiteCachingOn ;
UiIsoLanguageName = uiIsoLangugageName ;
InfoAgb = new HtmlWebViewSource { Html = "<html>Loading...</html>" } ;
ResourceProvider = resourceProvider
? ? throw new ArgumentException ( $"Can not instantiate {typeof(InfoPageViewModel)}-object. No ressource provider availalbe." ) ;
}
/// <summary> Called when page is shown. </summary>
public async void OnAppearing ( )
{
// Gets privacy info from server.
async Task < HtmlWebViewSource > GetInfoPrivacy ( )
{
string GetUriText ( )
= > $"https://{HostName}/{PrivacyResourcePath}" ;
if ( string . IsNullOrEmpty ( PrivacyResourcePath ) )
{
// Information to access ressource is missing
return new HtmlWebViewSource
{
Html = await Task . FromResult ( ViewModelHelper . FromBody ( "No privacy resource available. Resource path is null or empty." ) )
} ;
}
Log . Debug ( $"Request to open url {GetUriText()} to get privacy info." ) ;
return new HtmlWebViewSource
{
Html = await ViewModelHelper . GetSource (
GetUriText ( ) , // "site/privacy.html"
IsSiteCachingOn )
} ;
}
// Gets impress info from server.
async Task < HtmlWebViewSource > GetImpressum ( )
{
string GetUriText ( )
= > $"https://{HostName}/{ImpressResourcePath}" ;
if ( string . IsNullOrEmpty ( ImpressResourcePath ) )
{
// Information to access ressource is missing
return new HtmlWebViewSource
{
Html = await Task . FromResult ( ViewModelHelper . FromBody ( "No impress resource available. Resource path is null or empty." ) )
} ;
}
Log . Debug ( $"Request to open url {GetUriText()} to get impress info." ) ;
return new HtmlWebViewSource
{
Html = await ViewModelHelper . GetSource (
GetUriText ( ) , // "site/privacy.html"
IsSiteCachingOn )
} ;
}
InfoAgb = await GetAgb ( HostName , AgbResourcePath , IsSiteCachingOn , UiIsoLanguageName ) ;
InfoPrivacy = await GetInfoPrivacy ( ) ;
InfoImpressum = await GetImpressum ( ) ;
}
/// <summary> Gets the AGBs</summary>
/// <param name="resourceProvider"></param>
/// <returns> AGBs</returns>
public static async Task < HtmlWebViewSource > GetAgb (
string hostName ,
string agbResourcePath ,
bool isSiteCachingOn ,
string uiIsoLangugageName )
{
string GetUriText ( )
= > $"https://{hostName}/{agbResourcePath}" ;
if ( string . IsNullOrEmpty ( agbResourcePath ) )
{
return new HtmlWebViewSource
{
Html = await Task . FromResult ( ViewModelHelper . FromBody ( "No terms resource available. Resource path is null or empty." ) )
} ;
}
Log . Debug ( $"Request to open url {GetUriText()} to get AGB infos." ) ;
return new HtmlWebViewSource
{
Html = await ViewModelHelper . GetSource (
GetUriText ( ) , // "agb.html"
isSiteCachingOn )
} ;
}
/// <summary> Gets the platfrom specific prefix. </summary>
private Func < string , string > ResourceProvider { get ; set ; }
/// <summary> Gets the app related information (app version and licenses). </summary>
public HtmlWebViewSource InfoLicenses = > new HtmlWebViewSource
{
Html = ResourceProvider ( "HtmlResouces.V02.InfoLicenses.html" )
. Replace ( "CURRENT_VERSION_TINKAPP" , DependencyService . Get < IAppInfo > ( ) . Version . ToString ( ) )
. Replace ( "ACTIVE_APPNAME" , AppInfo . Name )
. Replace ( "APPSUPPORTMAILADDRESS" , ContactPageViewModel . APPSUPPORTMAILADDRESS )
} ;
/// <summary> Privacy text.</summary>
private HtmlWebViewSource infoImpress ;
/// <summary> Gets the privacy related information. </summary>
public HtmlWebViewSource InfoImpressum
{
get = > infoImpress ;
set
{
infoImpress = value ;
PropertyChanged ? . Invoke ( this , new PropertyChangedEventArgs ( nameof ( InfoImpressum ) ) ) ;
}
}
/// <summary> Agb information text.</summary>
private HtmlWebViewSource infoAgb ;
/// <summary> Privacy text.</summary>
private HtmlWebViewSource infoPrivacy ;
/// <summary> Agb information text.</summary>
public HtmlWebViewSource InfoAgb
{
get = > infoAgb ;
set
{
infoAgb = value ;
PropertyChanged ? . Invoke ( this , new PropertyChangedEventArgs ( nameof ( InfoAgb ) ) ) ;
}
}
/// <summary> Agb information text.</summary>
public HtmlWebViewSource InfoPrivacy
{
get = > infoPrivacy ;
set
{
infoPrivacy = value ;
PropertyChanged ? . Invoke ( this , new PropertyChangedEventArgs ( nameof ( InfoPrivacy ) ) ) ;
}
}
}
2021-05-13 20:03:07 +02:00
}