File storage rewrite (#2676)

* Restructure data layer part 2 (#2599)
* Refactor and separate image model
* Refactor image query builder
* Handle relationships in image query builder
* Remove relationship management methods
* Refactor gallery model/query builder
* Add scenes to gallery model
* Convert scene model
* Refactor scene models
* Remove unused methods
* Add unit tests for gallery
* Add image tests
* Add scene tests
* Convert unnecessary scene value pointers to values
* Convert unnecessary pointer values to values
* Refactor scene partial
* Add scene partial tests
* Refactor ImagePartial
* Add image partial tests
* Refactor gallery partial update
* Add partial gallery update tests
* Use zero/null package for null values
* Add files and scan system
* Add sqlite implementation for files/folders
* Add unit tests for files/folders
* Image refactors
* Update image data layer
* Refactor gallery model and creation
* Refactor scene model
* Refactor scenes
* Don't set title from filename
* Allow galleries to freely add/remove images
* Add multiple scene file support to graphql and UI
* Add multiple file support for images in graphql/UI
* Add multiple file for galleries in graphql/UI
* Remove use of some deprecated fields
* Remove scene path usage
* Remove gallery path usage
* Remove path from image
* Move funscript to video file
* Refactor caption detection
* Migrate existing data
* Add post commit/rollback hook system
* Lint. Comment out import/export tests
* Add WithDatabase read only wrapper
* Prepend tasks to list
* Add 32 pre-migration
* Add warnings in release and migration notes
This commit is contained in:
WithoutPants
2022-07-13 16:30:54 +10:00
parent 30877c75fb
commit 5495d72849
359 changed files with 43690 additions and 16000 deletions

View File

@@ -9,6 +9,7 @@ const ProgressIndefinite float64 = -1
// Progress is used by JobExec to communicate updates to the job's progress to
// the JobManager.
type Progress struct {
defined bool
processed int
total int
percent float64
@@ -36,17 +37,38 @@ func (p *Progress) Indefinite() {
p.mutex.Lock()
defer p.mutex.Unlock()
p.defined = false
p.total = 0
p.calculatePercent()
}
// SetTotal sets the total number of work units. This is used to calculate the
// progress percentage.
// Definite notifies that the total is known.
func (p *Progress) Definite() {
p.mutex.Lock()
defer p.mutex.Unlock()
p.defined = true
p.calculatePercent()
}
// SetTotal sets the total number of work units and sets definite to true.
// This is used to calculate the progress percentage.
func (p *Progress) SetTotal(total int) {
p.mutex.Lock()
defer p.mutex.Unlock()
p.total = total
p.defined = true
p.calculatePercent()
}
// AddTotal adds to the total number of work units. This is used to calculate the
// progress percentage.
func (p *Progress) AddTotal(total int) {
p.mutex.Lock()
defer p.mutex.Unlock()
p.total += total
p.calculatePercent()
}
@@ -62,7 +84,7 @@ func (p *Progress) SetProcessed(processed int) {
func (p *Progress) calculatePercent() {
switch {
case p.total <= 0:
case !p.defined || p.total <= 0:
p.percent = ProgressIndefinite
case p.processed < 0:
p.percent = 0
@@ -99,7 +121,7 @@ func (p *Progress) Increment() {
p.mutex.Lock()
defer p.mutex.Unlock()
if p.total <= 0 || p.processed < p.total {
if !p.defined || p.total <= 0 || p.processed < p.total {
p.processed++
p.calculatePercent()
}
@@ -112,7 +134,7 @@ func (p *Progress) AddProcessed(v int) {
defer p.mutex.Unlock()
newVal := v
if newVal > p.total {
if p.defined && p.total > 0 && newVal > p.total {
newVal = p.total
}
@@ -124,7 +146,7 @@ func (p *Progress) addTask(t *task) {
p.mutex.Lock()
defer p.mutex.Unlock()
p.currentTasks = append(p.currentTasks, t)
p.currentTasks = append([]*task{t}, p.currentTasks...)
p.updated()
}