From 1e2b717ce80b5d5e441e4cd2b4c9825f0e4100e5 Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Wed, 26 Nov 2025 21:12:30 +0300 Subject: [PATCH] chore: initialized qrminator --- cmd/main.go | 7 ++- internal/qrminator/qrminator.go | 96 +++++++++++++++++++++++++++++++++ internal/qrminator/stats.go | 29 ++++++++++ internal/qrminator/status.go | 31 +++++++++++ 4 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 internal/qrminator/qrminator.go create mode 100644 internal/qrminator/stats.go create mode 100644 internal/qrminator/status.go diff --git a/cmd/main.go b/cmd/main.go index 9452dd5..0ba6756 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -20,9 +20,11 @@ package main import ( + "git.weirdcat.su/weirdcat/auto-attendance/internal/browserlauncher" "git.weirdcat.su/weirdcat/auto-attendance/internal/config" "git.weirdcat.su/weirdcat/auto-attendance/internal/linkvalidator" "git.weirdcat.su/weirdcat/auto-attendance/internal/logger" + "git.weirdcat.su/weirdcat/auto-attendance/internal/qrminator" "git.weirdcat.su/weirdcat/auto-attendance/internal/screencapturer" "git.weirdcat.su/weirdcat/auto-attendance/internal/vision" "go.uber.org/fx" @@ -34,10 +36,13 @@ func main() { config.NewConfig, logger.NewLogger, linkvalidator.NewLinkValidator, + browserlauncher.NewBrowserLauncher, screencapturer.NewWholeScreenCapturer, vision.NewVision, + qrminator.NewQrminator, ), - fx.Invoke(func() { + fx.Invoke(func(qrm qrminator.Qrminator) { + }), ) diff --git a/internal/qrminator/qrminator.go b/internal/qrminator/qrminator.go new file mode 100644 index 0000000..000e21c --- /dev/null +++ b/internal/qrminator/qrminator.go @@ -0,0 +1,96 @@ +// Copyright (c) 2025 Nikolai Papin +// +// This file is part of the Auto Attendance app that looks for +// self-attend QR-codes during lectures and opens their URLs in your +// browser. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +// the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package qrminator + +import ( + "sync" + + "git.weirdcat.su/weirdcat/auto-attendance/internal/browserlauncher" + "git.weirdcat.su/weirdcat/auto-attendance/internal/config" + "git.weirdcat.su/weirdcat/auto-attendance/internal/linkvalidator" + "git.weirdcat.su/weirdcat/auto-attendance/internal/logger" + "git.weirdcat.su/weirdcat/auto-attendance/internal/screencapturer" + "git.weirdcat.su/weirdcat/auto-attendance/internal/vision" +) + +type Qrminator interface { + Init() error + Start() error + Stop() error + Toggle() error + ConsoleOutput() (string, error) + UpdateConfig(string) error +} + +type qrminatorImpl struct { + config *config.Config + log *logger.Logger + capturer screencapturer.ScreenCapturer + vision vision.Vision + validator linkvalidator.LinkValidator + launcher browserlauncher.BrowserLauncher + + active bool + stats Stats + mu sync.Mutex +} + +// ConsoleOutput implements Qrminator. +func (q *qrminatorImpl) ConsoleOutput() (string, error) { + panic("unimplemented") +} + +// Init implements Qrminator. +func (q *qrminatorImpl) Init() error { + panic("unimplemented") +} + +// Start implements Qrminator. +func (q *qrminatorImpl) Start() error { + panic("unimplemented") +} + +// Stop implements Qrminator. +func (q *qrminatorImpl) Stop() error { + panic("unimplemented") +} + +// Toggle implements Qrminator. +func (q *qrminatorImpl) Toggle() error { + panic("unimplemented") +} + +// UpdateConfig implements Qrminator. +func (q *qrminatorImpl) UpdateConfig(string) error { + panic("unimplemented") +} + +func NewQrminator(cfg *config.Config, log *logger.Logger, capt screencapturer.ScreenCapturer, vis vision.Vision, val linkvalidator.LinkValidator, launch browserlauncher.BrowserLauncher) Qrminator { + return &qrminatorImpl{ + config: cfg, + log: log, + capturer: capt, + vision: vis, + validator: val, + launcher: launch, + active: false, + stats: Stats{}, + } +} diff --git a/internal/qrminator/stats.go b/internal/qrminator/stats.go new file mode 100644 index 0000000..57534a5 --- /dev/null +++ b/internal/qrminator/stats.go @@ -0,0 +1,29 @@ +// Copyright (c) 2025 Nikolai Papin +// +// This file is part of the Auto Attendance app that looks for +// self-attend QR-codes during lectures and opens their URLs in your +// browser. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +// the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package qrminator + +import "time" + +type Stats struct { + Status QrminatorStatus + Uptime time.Duration + FoundAmount int + Link string +} diff --git a/internal/qrminator/status.go b/internal/qrminator/status.go new file mode 100644 index 0000000..0f3992c --- /dev/null +++ b/internal/qrminator/status.go @@ -0,0 +1,31 @@ +// Copyright (c) 2025 Nikolai Papin +// +// This file is part of the Auto Attendance app that looks for +// self-attend QR-codes during lectures and opens their URLs in your +// browser. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +// the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package qrminator + +type QrminatorStatus int16 + +const ( + Offline QrminatorStatus = iota + Waiting + Screenshotting + Analyzing + Validating + Completed +)