Change observability service ports and add Arrtrix content management
- Update ports for Alloy, Grafana, Loki, Prometheus, Promtail, Tempo, and Uptime Kuma to new ranges - Add Arrtrix content management commands and subscriptions - Implement Radarr and Sonarr client logic for movie and series management - Add matrix commands for download and subscription management - Add subscription repository with database schema and logic - Update Arrtrix config and example config for content section - Update help text and command processor to include new commands - Update vendor hash for Arrtrix package
This commit is contained in:
parent
9b93f017b6
commit
e26e25b566
24 changed files with 1340 additions and 82 deletions
76
packages/arrtrix/pkg/arr/catalog.go
Normal file
76
packages/arrtrix/pkg/arr/catalog.go
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
package arr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"slices"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type ContentType string
|
||||
|
||||
const (
|
||||
ContentTypeMovies ContentType = "movies"
|
||||
ContentTypeSeries ContentType = "series"
|
||||
)
|
||||
|
||||
var supportedContentTypes = []ContentType{
|
||||
ContentTypeMovies,
|
||||
ContentTypeSeries,
|
||||
}
|
||||
|
||||
var supportedEvents = map[ContentType][]string{
|
||||
ContentTypeMovies: {"Test", "Grab", "Download", "Rename", "MovieFileDelete", "MovieDelete"},
|
||||
ContentTypeSeries: {"Test", "Grab", "Download", "Rename", "EpisodeFileDelete", "SeriesDelete"},
|
||||
}
|
||||
|
||||
func SupportedContentTypes() []ContentType {
|
||||
return append([]ContentType(nil), supportedContentTypes...)
|
||||
}
|
||||
|
||||
func SupportedEventTypes(contentType ContentType) []string {
|
||||
return append([]string(nil), supportedEvents[contentType]...)
|
||||
}
|
||||
|
||||
func ParseContentType(value string) (ContentType, error) {
|
||||
contentType := ContentType(strings.ToLower(strings.TrimSpace(value)))
|
||||
if slices.Contains(supportedContentTypes, contentType) {
|
||||
return contentType, nil
|
||||
}
|
||||
return "", fmt.Errorf("unsupported content type %q (expected one of: %s)", value, Strings())
|
||||
}
|
||||
|
||||
func ParseEventType(contentType ContentType, value string) (string, error) {
|
||||
value = strings.TrimSpace(value)
|
||||
if strings.EqualFold(value, "all") {
|
||||
return "all", nil
|
||||
}
|
||||
for _, eventType := range supportedEvents[contentType] {
|
||||
if strings.EqualFold(eventType, value) {
|
||||
return eventType, nil
|
||||
}
|
||||
}
|
||||
return "", fmt.Errorf("unsupported event type %q for %s", value, contentType)
|
||||
}
|
||||
|
||||
func SupportsEventType(contentType ContentType, eventType string) bool {
|
||||
return slices.Contains(supportedEvents[contentType], strings.TrimSpace(eventType))
|
||||
}
|
||||
|
||||
func (c ContentType) Label() string {
|
||||
switch c {
|
||||
case ContentTypeMovies:
|
||||
return "movies"
|
||||
case ContentTypeSeries:
|
||||
return "series"
|
||||
default:
|
||||
return string(c)
|
||||
}
|
||||
}
|
||||
|
||||
func Strings() string {
|
||||
values := make([]string, 0, len(supportedContentTypes))
|
||||
for _, contentType := range supportedContentTypes {
|
||||
values = append(values, string(contentType))
|
||||
}
|
||||
return strings.Join(values, ", ")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue