package main import ( "fmt" "path/filepath" "strings" ) type mediaElement struct { Directory string Name string Episode string Title string Tags []string Extension string } func newMediaElement(p string) *mediaElement { dir := filepath.Dir(p) name := filepath.Base(p) ext := filepath.Ext(name) name = trimSuffix(name, ext) dash := strings.Index(name, " - ") episode := "" if dash != -1 { episode = name[dash+3:] name = name[:dash] } dash = strings.Index(episode, " - ") title := "" if dash != -1 { title = episode[dash+3:] episode = episode[:dash] } element := &mediaElement{ Directory: dir, Extension: ext, Name: name, Episode: episode, Title: title, } words := strings.Split(title, " ") titleWords := []string{} for i := len(words) - 1; i >= 0; i-- { word := words[i] switch word { case "EN": fallthrough case "DE": fallthrough case "FORCED": fallthrough case "3D": fallthrough case "UNCUT": element.Tags = append(element.Tags, word) default: titleWords = append(titleWords, word) } } fmt.Printf("%v\n", titleWords) return element } func (element *mediaElement) String() string { result := "" result += fmt.Sprintf("Directory: %s\n", element.Directory) result += fmt.Sprintf("Name: %s\n", element.Name) result += fmt.Sprintf("Episode: %s\n", element.Episode) result += fmt.Sprintf("Title: %s\n", element.Title) result += fmt.Sprintf("Extension: %s\n", element.Extension) result += "Tags:" for _, tag := range element.Tags { result += " " + tag } return result }