1diff --git a/Makefile b/Makefile
2index 39c579c0bb9e29d7a7407c5f2178d1e6178f32ee..5731808468bf7f1964698229f3399874c8ec2bab 100644
3--- a/Makefile
4+++ b/Makefile
5@@ -13,9 +13,11 @@ $(GO_BUILD) -o $(OUT) $(SERVER)
6
7 run: sass
8 $(GO_RUN) $(SERVER) \
9- --log-level error \
10+ --db-type psql \
11+ --db-con "host=localhost user=gabrielgio password=diablo123 dbname=img port=5432 sslmode=disable" \
12+ --log-level trace \
13 --aes-key=6368616e676520746869732070617373 \
14- --root=${HOME} \
15+ --root=${HOME}
16
17 sass:
18 @mkdir -p static
19diff --git a/README.md b/README.md
20index 817ba0e9711bb18d0e309d69e1764762ed2ecae9..9f05e5fae430a2cb5a909ea86d48170021e97028 100644
21--- a/README.md
22+++ b/README.md
23@@ -1,3 +1,13 @@
24 # IMG
25
26 A read only file explorer with media capabilities.
27+
28+# TODO
29+
30+* Thumbnail system
31+* Initial setup process
32+ * Also allow setup user config file
33+* Single binary output
34+* Better worker pool. Allow cron job and ui config
35+* Alpine package and demo site
36+* Single image viewer and show exif info (not sure how yet)
37diff --git a/cmd/server/main.go b/cmd/server/main.go
38index e9314ec813338fb63cf8b4e536eab2ce20a8a446..0abdc09c74554ffe96c2e8d04b63a68923f41f12 100644
39--- a/cmd/server/main.go
40+++ b/cmd/server/main.go
41@@ -112,7 +112,7 @@ // worker
42 var (
43 serverWorker = worker.NewServerWorker(&fasthttp.Server{Handler: r.Handler})
44 fileScanner = worker.NewFileScanner(*root, mediaRepository)
45- exifScanner = worker.NewEXIFScanner(*root, mediaRepository)
46+ exifScanner = worker.NewEXIFScanner(mediaRepository)
47 )
48
49 pool := worker.NewWorkerPool()
50diff --git a/golangci.yml b/golangci.yml
51index 25b47fd54de1addbcb04a64dd6eaf8a9d4305cf1..1ad6f9c8e4bdc1c983bb2f69ea2550f692625b4e 100644
52--- a/golangci.yml
53+++ b/golangci.yml
54@@ -13,6 +13,8 @@ - unparam
55 - gci
56 - bodyclose
57 - makezero
58+ - govet
59+ - contextcheck
60
61 linters-settings:
62 gci:
63@@ -31,6 +33,11 @@ severity: error
64 disabled: false
65 - name: package-comments
66 disabled: true
67+ govet:
68+ enable-all: true
69+ disable:
70+ - fieldalignment
71+ - shadow
72
73 issues:
74 exclude-use-default: false
75diff --git a/main b/main
76deleted file mode 100644
77index c2b077f19312c3a1e7db65c962d89510cd2e1a3e..0000000000000000000000000000000000000000
78Binary files a/main and /dev/null differ
79diff --git a/pkg/database/sql/media.go b/pkg/database/sql/media.go
80index 835e262efe59ac90d2cdb27604caabfcd9e27fa4..59a4b83cd13b57b64e643a2b8a87f7f2c18fd9be 100644
81--- a/pkg/database/sql/media.go
82+++ b/pkg/database/sql/media.go
83@@ -223,7 +223,7 @@ Joins("left join media_exifs on media.id = media_exifs.media_id").
84 Where("media_exifs.media_id IS NULL").
85 Offset(pagination.Page * pagination.Size).
86 Limit(pagination.Size).
87- Order("created_at DESC").
88+ Order("media.created_at DESC").
89 Find(&medias)
90
91 if result.Error != nil {
92diff --git a/pkg/worker/exif_scanner.go b/pkg/worker/exif_scanner.go
93index 66091cd33ff93ebc6dbfda28a74bddef860ab6d3..6d40dbd7435830a06fee5974cda18f20e73f67c0 100644
94--- a/pkg/worker/exif_scanner.go
95+++ b/pkg/worker/exif_scanner.go
96@@ -15,7 +15,7 @@ )
97
98 var _ ListProcessor[*media.Media] = &EXIFScanner{}
99
100-func NewEXIFScanner(root string, repository media.Repository) *EXIFScanner {
101+func NewEXIFScanner(repository media.Repository) *EXIFScanner {
102 return &EXIFScanner{
103 repository: repository,
104 }
105diff --git a/pkg/worker/file_scanner.go b/pkg/worker/file_scanner.go
106index 321fbcac11e422ea6221e8a476ac2f7704b06143..0dc2eb2d4ec01556a88a96ac284a0cd695b68f93 100644
107--- a/pkg/worker/file_scanner.go
108+++ b/pkg/worker/file_scanner.go
109@@ -33,6 +33,12 @@ c := make(chan string)
110 go func() {
111 defer close(c)
112 _ = filepath.Walk(f.root, func(path string, info fs.FileInfo, err error) error {
113+ select {
114+ case <-ctx.Done():
115+ return filepath.SkipAll
116+ default:
117+ }
118+
119 if info.IsDir() && filepath.Base(info.Name())[0] == '.' {
120 return filepath.SkipDir
121 }
122diff --git a/pkg/worker/list_processor_test.go b/pkg/worker/list_processor_test.go
123index b7373d183eed5685a26c30a4097a84cd0f36ea42..1e4ed2d7793632a996cb6b828fd21677dcedbb55 100644
124--- a/pkg/worker/list_processor_test.go
125+++ b/pkg/worker/list_processor_test.go
126@@ -1,4 +1,4 @@
127-// go:build unit
128+//go:build unit
129
130 package worker
131
132diff --git a/pkg/worker/worker.go b/pkg/worker/worker.go
133index c52f0becef3a84c09caa841e402977c9858e7fb3..18cc0e25c15a57d778a806275f6fa354b637d8c0 100644
134--- a/pkg/worker/worker.go
135+++ b/pkg/worker/worker.go
136@@ -36,12 +36,12 @@ })
137 }
138
139 func (self *WorkerPool) Start(ctx context.Context) {
140+ self.wg.Add(len(self.workers))
141 for _, w := range self.workers {
142- self.wg.Add(1)
143 go func(w *Work) {
144 defer self.wg.Done()
145 if err := w.Worker.Start(ctx); err != nil && !errors.Is(err, context.Canceled) {
146- fmt.Println("Error ", w.Name, err.Error())
147+ fmt.Println("Processes finished, error", w.Name, err.Error())
148 } else {
149 fmt.Println(w.Name, "done")
150 }
151diff --git a/scss/main.scss b/scss/main.scss
152index bf6b3d8dda08d6916c9bae414816f95c84239261..faad1caee8041b36f946b89d7f8b309d042426c2 100644
153--- a/scss/main.scss
154+++ b/scss/main.scss
155@@ -13,6 +13,7 @@ $panel-shadow: 0;
156
157 $card-shadow: 0;
158 $card-radius: 0;
159+$card-content-padding: 0;
160
161 @import "bulma/sass/base/_all.sass";
162 @import "bulma/sass/utilities/_all.sass";
163@@ -38,7 +39,6 @@ }
164
165 nav {
166 border-bottom: 1px solid;
167- max-width: 1024px;
168 margin: auto;
169 }
170
171diff --git a/templates/layout.html b/templates/layout.html
172index 56d02f80858fd73559659118b4352bb342f12188..e21ec5e8b6f8c4d9f66356eca18052a829dc7cc4 100644
173--- a/templates/layout.html
174+++ b/templates/layout.html
175@@ -21,7 +21,7 @@ settings
176 </a>
177 </div>
178 </nav>
179- <div class="container is-max-desktop">
180+ <div class="container">
181 {{block "content" .}}noop{{end}}
182 </div>
183 </body>