classifier/main.go

103 lines
1.9 KiB
Go
Raw Normal View History

2021-08-02 19:03:33 +02:00
package main
import (
"errors"
"fmt"
"io/fs"
"io/ioutil"
"log"
"os"
"path/filepath"
"regexp"
"strings"
)
const (
absBasePath = "/opt/synapse/download"
seriesPath = absBasePath + "/series"
filmPath = absBasePath + "/film"
musicPath = absBasePath + "/music"
programsPath = absBasePath + "/programs"
)
const (
series = iota
film
music
program
)
var maybeSeries, maybeFilm, maybeMusic, maybeProgram *regexp.Regexp
var errYetPresent = errors.New("element yet present")
type classification map[string]int
func (c classification) add(element string, kind int) error {
if _, ok := c[element]; ok {
return errYetPresent
}
c[element] = kind
return nil
}
func (c classification) get(element string) (string, bool) {
kind, ok := c[element]
if !ok {
return "", false
}
switch kind {
case series:
return "series", true
case film:
return "film", true
case music:
return "music", true
case program:
return "program", true
default:
panic(fmt.Sprintf("kind value now allowed: %d\n", kind))
}
}
var cls classification
func init() {
maybeSeries = regexp.MustCompile(`(?i)^.*(((s|S)(\d+)((e|E)(\d+))?)|((season)(\ )?(\d+)?)).*\.(mkv|mp4|avi)$`)
maybeFilm = regexp.MustCompile(`(?i)^.*\.(mkv|mp4|avi)$`)
maybeMusic = regexp.MustCompile(`(?i)^.*\.(mp3|ogg|flac)$`)
maybeProgram = regexp.MustCompile(`(?i)^.*\.(zip|tar|tar\.gz|exe|msi|rar)$`)
cls = make(classification)
}
func isInSpecialDir(dir string) bool {
if strings.Contains(dir, seriesPath) {
return true
}
if strings.Contains(dir, filmPath) {
return true
}
if strings.Contains(dir, musicPath) {
return true
}
if strings.Contains(dir, programsPath) {
return true
}
return false
}
func find(name string, info fs.FileInfo, err error) error {
// skip directories
if info.IsDir() {
return nil
}
// skip special directories
if isInSpecialDir(name) {
return nil
}
return nil
}
func main() {
fmt.Println("vim-go")
}