app-outlet/app-outlet

View on GitHub
src/app/ui/pages/initial-setup/initial-setup.component.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Component, OnInit } from '@angular/core';
import { CardStatus } from '../../components/setup-item-card/card-status';
import { SetupService } from '../../../service/setup/setup.service';
import { Router } from '@angular/router';
import { NbDialogService } from '@nebular/theme';
import { FlatpakInstalledComponent } from './flatpak-installed/flatpak-installed.component';
import { CheckPackagesModalComponent } from './check-packages-modal/check-packages-modal.component';

@Component({
    selector: 'app-initial-setup',
    templateUrl: './initial-setup.component.html',
    styleUrls: ['./initial-setup.component.scss'],
})
export class InitialSetupComponent implements OnInit {
    private wasFlatpakInstalled = false;
    snapdStatus = CardStatus.NOT_INSTALLED;
    flatpakStatus = CardStatus.NOT_INSTALLED;

    constructor(
        private setupService: SetupService,
        private router: Router,
        private dialogService: NbDialogService,
    ) {}

    ngOnInit(): void {
        this.checkSetup();
    }

    private checkSetup(): void {
        this.checkIfFlatpakIsInstalled();
        this.checkIfSnapdIsInstalled();
    }

    private checkIfSnapdIsInstalled(): void {
        this.snapdStatus = CardStatus.LOADING;
        this.setupService
            .checkIfSnapdIsInstalled()
            .then(() => {
                this.snapdStatus = CardStatus.INSTALLED;
            })
            .catch(() => {
                this.snapdStatus = CardStatus.NOT_INSTALLED;
            });
    }

    private checkIfFlatpakIsInstalled(): void {
        this.flatpakStatus = CardStatus.LOADING;
        this.setupService
            .checkIfFlatpakIsInstalled()
            .then(() => {
                this.flatpakStatus = CardStatus.INSTALLED;
            })
            .catch(() => {
                this.flatpakStatus = CardStatus.NOT_INSTALLED;
            });
    }

    installSnapd(): void {
        this.snapdStatus = CardStatus.INSTALLING;
        this.setupService
            .installSnapd()
            .then((result) => {
                console.log(result);
                this.snapdStatus = CardStatus.INSTALLED;
            })
            .catch((err) => {
                console.error(err);
                this.snapdStatus = CardStatus.ERROR;
            });
    }

    installFlatpak(): void {
        this.flatpakStatus = CardStatus.INSTALLING;
        this.setupService
            .installFlatpak()
            .then((result) => {
                console.log(result);
                this.flatpakStatus = CardStatus.INSTALLED;
                this.wasFlatpakInstalled = true;
                this.openRestartModal();
            })
            .catch((err) => {
                console.error(err);
                this.flatpakStatus = CardStatus.ERROR;
            });
    }

    goToMain(force = false): void {
        if (force || this.shouldGoToMainDirectly()) {
            this.router.navigate(['']).then();
        } else {
            this.openCheckPackagesModal();
        }
    }

    private openCheckPackagesModal(): void {
        this.dialogService
            .open(CheckPackagesModalComponent)
            .onClose.subscribe((proceedAnyway) => {
                if (proceedAnyway) {
                    this.goToMain(true);
                }
            });
    }

    private shouldGoToMainDirectly(): boolean {
        return (
            this.snapdStatus === CardStatus.INSTALLED &&
            this.flatpakStatus === CardStatus.INSTALLED
        );
    }

    private openRestartModal(): void {
        this.dialogService.open(FlatpakInstalledComponent);
    }
}