Scanyonero/main.go
David Vogel b5ecf95a7b Add split function
- Add ServerWebsocketPacketQueueSplit
- Add Split method to Queue
- Correct automatic separator insertion for newly ingested documents
- Rework UI so that entries have their own set of buttons
- Refactor occurrences of "document" to "queueEntry"
2025-05-19 12:03:40 +02:00

87 lines
2.0 KiB
Go

package main
import (
"Scanyonero/document"
"Scanyonero/ftpserver"
"Scanyonero/unit"
"log"
"net/http"
"path/filepath"
"regexp"
)
func main() {
log.Printf("Starting Scanyonero.")
// Start FTP server.
ftpServer, err := ftpserver.NewFTPServer("", "", "127.0.0.1:21")
if err != nil {
log.Panicf("Failed to start FTP server: %v.", err)
}
defer ftpServer.Stop()
// Web and WS server.
server := NewServer()
// Add test documents.
server.Documents.Append(LoadExampleQueueEntries()...)
server.Documents.Append(LoadExampleQueueEntries()...)
server.Documents.Append(LoadExampleQueueEntries()...)
server.Documents.Append(LoadExampleQueueEntries()...)
go func() {
ingestor := document.Ingestor{
DefaultDPI: unit.PerInch(150),
Rules: []document.IngestorRule{{
Match: struct {
Name *regexp.Regexp
XPixels *int
YPixels *int
}{
Name: regexp.MustCompile(`^.*\.pdf$`),
},
Action: struct {
MediumWidth *unit.Millimeter
MediumHeight *unit.Millimeter
ScanOffsetX *unit.Millimeter
ScanOffsetY *unit.Millimeter
}{
MediumWidth: &([]unit.Millimeter{100}[0]),
},
}},
}
for file := range ftpServer.FileChan() {
docPages, err := ingestor.Ingest(file)
if err != nil {
log.Printf("Failed to ingest document file %q: %v.", file.Name, err)
continue
}
server.Documents.Lock()
var entries []QueueEntry
if len(server.Documents.Documents) > 0 {
entries = append(entries, QueueEntry{ID: NewQueueEntryID(), QueueEntryData: QueueEntryDataSeparator{}})
}
for _, page := range docPages {
entries = append(entries, QueueEntry{
ID: NewQueueEntryID(),
Name: filepath.Base(file.Name),
QueueEntryData: QueueEntryDataPage{Page: &page},
})
}
server.Documents.Append(entries...)
server.Documents.Unlock()
}
}()
http.Handle("/", server)
log.Println("Server is running on port 8080.")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Panicf("ListenAndServe failed: %v.", err)
}
}