mirror of
https://github.com/Dadido3/Scanyonero.git
synced 2025-06-06 01:10:00 +00:00
- Rename to Scanyonero - Add FTP server that ingests TIFF, PNG, JPEG or PDF files - Add web interface to check and modify ingested files - Rework how ocrmypdf is invoked Basics are working, but the program is not in a usable state.
84 lines
2.0 KiB
Go
84 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
|
|
}
|
|
|
|
var entries []QueueEntry
|
|
for _, page := range docPages {
|
|
entries = append(entries, QueueEntry{
|
|
ID: NewQueueEntryID(),
|
|
Name: filepath.Base(file.Name),
|
|
QueueEntryData: QueueEntryDataPage{Page: &page},
|
|
})
|
|
}
|
|
entries = append(entries, QueueEntry{ID: NewQueueEntryID(), QueueEntryData: QueueEntryDataSeparator{}})
|
|
|
|
server.Documents.Lock()
|
|
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)
|
|
}
|
|
}
|