2021-05-13 20:03:07 +02:00
using System ;
using System.ComponentModel ;
using System.Threading.Tasks ;
using TINK.Model.Device ;
using TINK.Services.CopriApi.ServerUris ;
using Xamarin.Essentials ;
using Xamarin.Forms ;
namespace TINK.ViewModel.Info
{
/// <summary> Manges the tabbed info page. </summary>
2022-01-22 18:28:01 +01:00
public class InfoPageViewModel : INotifyPropertyChanged
2021-05-13 20:03:07 +02:00
{
/// <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 ; }
2022-01-22 18:28:01 +01:00
private string AgbResourcePath { get ; }
private string PrivacyResourcePath { get ; }
private string ImpressResourcePath { get ; }
2021-05-13 20:03:07 +02:00
/// <summary> Constructs Info view model</summary>
/// <param name="isSiteCachingOn">Holds value wether site caching is on or off.</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>
2022-01-22 18:28:01 +01:00
public InfoPageViewModel (
2021-05-13 20:03:07 +02:00
string hostName ,
2022-01-22 18:28:01 +01:00
string agbResourcePath ,
string privacyResourcePath ,
string impressResourcePath ,
bool isSiteCachingOn ,
2021-05-13 20:03:07 +02:00
Func < string , string > resourceProvider )
{
HostName = hostName ;
2022-01-22 18:28:01 +01:00
AgbResourcePath = agbResourcePath ;
PrivacyResourcePath = privacyResourcePath ;
ImpressResourcePath = impressResourcePath ;
2021-05-13 20:03:07 +02:00
IsSiteCachingOn = isSiteCachingOn ;
InfoAgb = new HtmlWebViewSource { Html = "<html>Loading...</html>" } ;
ResourceProvider = resourceProvider
2022-01-22 18:28:01 +01:00
? ? throw new ArgumentException ( $"Can not instantiate {typeof(InfoPageViewModel)}-object. No ressource provider availalbe." ) ;
2021-05-13 20:03:07 +02:00
}
/// <summary> Called when page is shown. </summary>
public async void OnAppearing ( )
{
2022-01-22 18:28:01 +01:00
InfoAgb = await GetAgb ( HostName , AgbResourcePath , IsSiteCachingOn ) ;
2021-05-13 20:03:07 +02:00
InfoPrivacy = new HtmlWebViewSource
{
2022-01-22 18:28:01 +01:00
Html = ! string . IsNullOrEmpty ( PrivacyResourcePath )
? await ViewModelHelper . GetSource (
$"https://{HostName}/{PrivacyResourcePath}" , // "site/privacy.html"
IsSiteCachingOn )
: await Task . FromResult ( ViewModelHelper . FromBody ( "No privacy resource available. Resource path is null or empty." ) )
2021-05-13 20:03:07 +02:00
} ;
InfoImpressum = new HtmlWebViewSource
{
2022-01-22 18:28:01 +01:00
Html = ! string . IsNullOrEmpty ( ImpressResourcePath )
? await ViewModelHelper . GetSource (
$"https://{HostName}/{ImpressResourcePath}" , // "site/impress.html"
IsSiteCachingOn )
: await Task . FromResult ( ViewModelHelper . FromBody ( "No impress resource available. Resource path is null or empty." ) )
2021-05-13 20:03:07 +02:00
} ;
}
/// <summary> Gets the AGBs</summary>
/// <param name="resourceProvider"></param>
/// <returns> AGBs</returns>
public static async Task < HtmlWebViewSource > GetAgb (
string hostName ,
2022-01-22 18:28:01 +01:00
string agbResourcePath ,
bool isSiteCachingOn )
2021-05-13 20:03:07 +02:00
{
return new HtmlWebViewSource
{
2022-01-22 18:28:01 +01:00
Html = ! string . IsNullOrEmpty ( agbResourcePath )
? await ViewModelHelper . GetSource (
$"https://{hostName}/{agbResourcePath}" , // "agb.html"
isSiteCachingOn )
: await Task . FromResult ( ViewModelHelper . FromBody ( "No terms resource available. Resource path is null or empty." ) )
2021-05-13 20:03:07 +02:00
} ;
}
/// <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 )
} ;
/// <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 ) ) ) ;
}
}
}
}