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) } }