tagliatelle

Simple self-hosted tagging filesystem webapp
Log | Files | Refs

main.go (1822B)


      1 package main
      2 
      3 import (
      4 	"flag"
      5 	"fmt"
      6 	"log"
      7 	"net/http"
      8 	"os"
      9 	"path/filepath"
     10 
     11 	"tagliatelle/internal/app"
     12 )
     13 
     14 func main() {
     15 	// CLI flags
     16 	dataDir := flag.String("d", ".", "Data directory (stores tagliatelle.db and uploads/ subfolder)")
     17 	port := flag.String("p", "8080", "Port to listen on")
     18 	czkawka := flag.String("czkawka", "czkawka_cli", "Path to the czkawka_cli binary (used by the admin Duplicates page)")
     19 	flag.Parse()
     20 	app.CzkawkaBin = *czkawka
     21 
     22 	// Derive paths from -d
     23 	dbPath := filepath.Join(*dataDir, "tagliatelle.db")
     24 	uploadDir := filepath.Join(*dataDir, "uploads")
     25 	serverPort := fmt.Sprintf(":%s", *port)
     26 
     27 	// Create necessary directories
     28 	if err := os.MkdirAll(uploadDir, 0755); err != nil {
     29 		log.Fatalf("Failed to create upload directory: %v", err)
     30 	}
     31 	os.MkdirAll("static", 0755)
     32 
     33 	// Initialize database
     34 	var err error
     35 	app.DB, err = app.InitDatabase(dbPath)
     36 	if err != nil {
     37 		log.Fatalf("Failed to initialize database: %v", err)
     38 	}
     39 	defer app.DB.Close()
     40 
     41 	// Load config from database (gallery size, items per page, aliases, sed rules)
     42 	app.Cfg, err = app.LoadConfig(app.DB)
     43 	if err != nil {
     44 		log.Fatalf("Failed to load config from database: %v", err)
     45 	}
     46 
     47 	// Inject runtime values (not stored in DB)
     48 	app.Cfg.DatabasePath = dbPath
     49 	app.Cfg.UploadDir = uploadDir
     50 	app.Cfg.ServerPort = serverPort
     51 
     52 	// Initialize templates
     53 	app.Tmpl, err = app.InitTemplates()
     54 	if err != nil {
     55 		log.Fatalf("Failed to load templates: %v", err)
     56 	}
     57 
     58 	// Register all routes
     59 	app.RegisterRoutes()
     60 
     61 	// Start server
     62 	log.Printf("Server started at http://localhost%s", app.Cfg.ServerPort)
     63 	log.Printf("Database: %s", app.Cfg.DatabasePath)
     64 	log.Printf("Upload directory: %s", app.Cfg.UploadDir)
     65 
     66 	if err := http.ListenAndServe(app.Cfg.ServerPort, nil); err != nil {
     67 		log.Fatalf("Server failed to start: %v", err)
     68 	}
     69 }