name: firmware-updater
version: git
summary: Firmware Updater
description: Update Firmware
confinement: strict
base: core22
grade: stable
license: GPL-3.0+
icon: snap/local/firmware-updater.png
architectures:
  - build-on: amd64
  - build-on: arm64

slots:
  dbus-slot:
    interface: dbus
    name: com.canonical.firmware_updater
    bus: session

parts:
  flutter-git:
    plugin: nil
    source: .
    override-build: |
      bash $CRAFT_PART_SRC/scripts/install-fvm.sh
      fvm install
      fvm flutter doctor
    build-packages:
      - clang
      - cmake
      - curl
      - libgtk-3-dev
      - ninja-build
      - unzip
      - xz-utils
      - zip
    override-prime: ""

  firmware-updater-app:
    after: [ flutter-git ]
    plugin: nil
    source: .
    override-build: |
      set -eux
      fvm install
      fvm dart pub global activate melos

      set +e # ignore pub errors
      # when building locally artifacts can pollute the container and cause builds to fail
      # this helps increase reliability for local builds
      fvm dart pub global run melos clean
      fvm dart pub global run melos bootstrap
      set -e

      cd apps/firmware_updater
      fvm flutter build linux --release -v
      mkdir -p $CRAFT_PART_INSTALL/bin/
      cp -r build/linux/*/release/bundle/* $CRAFT_PART_INSTALL/bin/
      cp $CRAFT_PART_INSTALL/bin/data/flutter_assets/assets/firmware-updater.desktop $CRAFT_PART_INSTALL/bin/data/flutter_assets/assets/firmware-updater-app.desktop
      echo "NoDisplay=true" >> $CRAFT_PART_INSTALL/bin/data/flutter_assets/assets/firmware-updater-app.desktop

  firmware-notifier:
    after: [ flutter-git ]
    plugin: nil
    source: .
    override-build: |
      set -eux
      fvm install
      fvm dart pub global activate melos

      set +e # ignore pub errors
      # when building locally artifacts can pollute the container and cause builds to fail
      # this helps increase reliability for local builds
      fvm dart pub global run melos clean
      fvm dart pub global run melos bootstrap
      set -e

      cd apps/firmware_notifier
      mkdir -p $CRAFT_PART_INSTALL/bin/
      fvm dart compile exe bin/firmware_notifier.dart -o $CRAFT_PART_INSTALL/bin/firmware-notifier

  firmware-updater:
    plugin: dump
    source: ./launcher-script/

apps:
  firmware-updater:
    command: bin/launch-firmware-updater.sh
    desktop: bin/data/flutter_assets/assets/firmware-updater.desktop
    extensions: [gnome]

  firmware-updater-app:
    desktop: bin/data/flutter_assets/assets/firmware-updater-app.desktop
    command: bin/firmware-updater --gapplication-service
    daemon: dbus
    passthrough:
      daemon-scope: user
    activates-on: [dbus-slot]
    extensions: [gnome]
    plugs:
      - fwupd
      - shutdown
      - upower-observe

  firmware-notifier:
    command: bin/firmware-notifier
    daemon: simple
    passthrough:
      daemon-scope: user
    timer: '00:00-24:00/8'
    extensions: [gnome]
    plugs:
      - desktop
      - fwupd
      - upower-observe