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
+)