summaryrefslogtreecommitdiff
path: root/internal/app/load_progress.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/app/load_progress.go')
-rw-r--r--internal/app/load_progress.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/internal/app/load_progress.go b/internal/app/load_progress.go
new file mode 100644
index 0000000..38679fa
--- /dev/null
+++ b/internal/app/load_progress.go
@@ -0,0 +1,57 @@
+package app
+
+import "sync"
+
+type loadProgress struct {
+ mu sync.Mutex
+ total int
+ processed int
+ done bool
+}
+
+func (p *loadProgress) Reset() {
+ if p == nil {
+ return
+ }
+ p.mu.Lock()
+ p.total = 0
+ p.processed = 0
+ p.done = false
+ p.mu.Unlock()
+}
+
+func (p *loadProgress) SetTotal(total int) {
+ if p == nil {
+ return
+ }
+ p.mu.Lock()
+ p.total = total
+ p.mu.Unlock()
+}
+
+func (p *loadProgress) Increment() {
+ if p == nil {
+ return
+ }
+ p.mu.Lock()
+ p.processed++
+ p.mu.Unlock()
+}
+
+func (p *loadProgress) MarkDone() {
+ if p == nil {
+ return
+ }
+ p.mu.Lock()
+ p.done = true
+ p.mu.Unlock()
+}
+
+func (p *loadProgress) Snapshot() (processed, total int, done bool) {
+ if p == nil {
+ return 0, 0, true
+ }
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ return p.processed, p.total, p.done
+}