C#C
C#3y ago
Mek

✅ Showing Splash Screen with logic functionality

using System;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Diary.ViewModels;
using Diary.Views;
using System.Threading.Tasks;

namespace Diary;

public partial class App : Application
{
    public override void Initialize()
    {
        AvaloniaXamlLoader.Load(this);
    }

    public override async void OnFrameworkInitializationCompleted()
    {
        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
        {
            var splashScreenVM = new SplashScreenViewModel();
            var splashScreen = new SplashScreen
            {
                DataContext = splashScreenVM
            };
            desktop.MainWindow = splashScreen;
            splashScreen.Show();

            try
            {
                splashScreenVM.StartupMessage = "Checking If config.json File Exists...";
                await Task.Delay(1000, splashScreenVM.CancellationToken);

                bool jsonExists = CheckForJsonFile();

                if (jsonExists)
                {
                    splashScreenVM.StartupMessage =
                        "config.json File Found. Loading Data From Json File...Please Wait!";
                    await Task.Delay(2000, splashScreenVM.CancellationToken);

                    splashScreenVM.StartupMessage =
                        "Data Loaded From Json File... Launching Home Screen... Please Wait!";
                    await Task.Delay(2000, splashScreenVM.CancellationToken);

                    desktop.MainWindow = HomeScreen;
                }
                else
                {
                    splashScreenVM.StartupMessage = "config.json File Not Found. Creating New Json File...Please Wait!";
                    await Task.Delay(2000, splashScreenVM.CancellationToken);

                    bool jsonCreated = CreateJsonFile();

                    if (jsonCreated)
                    {
                        splashScreenVM.StartupMessage = "Json File Created. Launching Setup Screen...Please Wait!";
                        await Task.Delay(2000, splashScreenVM.CancellationToken);

                        var mainWin = new MainWindow
                        {
                            DataContext = new MainWindowViewModel(),
                        };

                        desktop.MainWindow = mainWin;
                        mainWin.Show();
                        splashScreen.Close();
                    }
                    else
                    {
                        throw new ArgumentException("Unable To Create Json File.");
                    }
                }
            }
            catch (TaskCanceledException)
            {
                splashScreen.Close();
                return;
            }
        }

        base.OnFrameworkInitializationCompleted();
    }

    private bool CheckForJsonFile()
    {
        bool jsonCheck = false;
        string fileName = "ProjectSettings.Json";
        ProjectSettings readProjectSettings;

        if (File.Exists(fileName))
        {
            readProjectSettings = JsonConverter.DeserializeObject<ProjectSettings>(File.ReadAllText(fileName));
            jsonCheck = true;
        }
        else
        {
            readProjectSettings = new ProjectSettings();
            jsonCheck = false;
        }

        readProjectSettings.decProp1 = readProjectSettings.decProp1;
        return jsonCheck;
    }
}
Was this page helpful?