gamesscreenshotmanager

package module
v1.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 17, 2026 License: GPL-3.0 Imports: 34 Imported by: 0

README

Games Screenshot Manager

Go Report Card

A simple tool to collect and sort games screenshots from different platforms.

Features

  • Collect screenshots taken from different platforms/games. See Supported providers for the list of supported providers.
    • Steam
    • Guild Wars 2
    • Hytale
    • Minecraft
    • PlayStation 4
    • PlayStation 5
    • World of Warcraft
    • Xbox Game Bar
  • Automatically organize screenshots by platform and game in chronological order.
  • Download covers for the games in some providers automatically.
  • Generate a gallery of the screenshots. (check mine)

Quickstart

Installation
go install github.com/fmartingr/games-screenshot-manager/cmd/games-screenshot-manager@latest

Or get the latest binary build from the releases page

Configuration

Create a configuration file following the example config.

The file contains a step by step guide to set up each section, go through the file and set up the features you want to use.

Usage

Run the games-screenshot-manager command:

games-screenshot-manager -config ./config.toml

If no -config flag is provided, the binary will look for a config.toml file in the user configuration directory, which varies by system:

  • Linux: $XDG_CONFIG_HOME/games-screenshot-manager/config.toml
  • Windows: %APPDATA%\games-screenshot-manager\config.toml
  • macOS: ~/Library/Application Support/games-screenshot-manager/config.toml

Supported providers

Guild Wars 2
  • Supported platforms: Windows (other platforms require a custom path)
  • Screenshots: Yes
  • Clips: Not supported by the game
  • Recordings: Not supported by the game
Hytale
  • Supported platforms: macOS, Linux
  • Screenshots: Yes
  • Clips: Not supported by the game
  • Recordings: Not supported by the game
  • Covers: Yes, provided by us.
Minecraft
  • Supported platforms: Windows, macOS, Linux (launcher) and Linux (flatpak).
  • Screenshots: Yes
  • Clips: Not supported by the game
  • Recordings: Not supported by the game
PlayStation 4
  • Supported platforms: None, requires a custom path.
  • Screenshots: Yes
  • Clips: Yes (30s videos)
  • Recordings: Not supported by the game
PlayStation 5
  • Supported platforms: None, requires a custom path.
  • Screenshots: Yes
  • Clips: Yes (30s videos)
  • Recordings: Not supported by the game
Steam
  • Supported platforms: Windows, macOS and Linux.
  • Screenshots: Yes
  • Clips: No
  • Recordings: No
  • Covers: Yes, auto-downloads the header from Steam

Also supports downloading screenshots uploaded to Steam by specifying steam_user_id and api_key in appropiate sections in the config file.

World of Warcraft
  • Supported platforms: Windows, macOS. (Other platforms require a custom path)
  • Screenshots: Yes
  • Clips: Not supported by the game
  • Recordings: Not supported by the game
Xbox Game Bar
  • Supported platforms: Windows only.
  • Screenshots: Yes
  • Clips: No
  • Recordings: No

Requirements

What about Nintendo Switch?

This project initially started as a Nintendo Switch helper to import and properly organize Switch screenshots since their system was a mess, but Nintendo improved this over the years and now we can use Android File Transfer to easily get the screenshots from a Nintendo Switch with the proper game name as folder name and the screenshots sorted by date.

For more information about this, read this issue

License

See LICENSE.

Documentation

Index

Constants

View Source
const DatetimeFormat = "2006-01-02_15-04-05"

Variables

View Source
var ErrCopyFileDestinationExists = errors.New("copy destination exists")

Functions

func AdjustDatetimeByVideoDuration added in v1.3.3

func AdjustDatetimeByVideoDuration(datetime time.Time, videoPath string) time.Time

AdjustDatetimeByVideoDuration subtracts the duration of a video from a given datetime This is useful for providers like PlayStation 5 where the video timestamp is the end time

func GetExifTags

func GetExifTags(path string) (map[string]string, error)

func GetExifTagsWithTool

func GetExifTagsWithTool(et *exiftool.Exiftool, path string) (map[string]string, error)

func GetFormattedVideoDuration added in v1.3.3

func GetFormattedVideoDuration(duration float64) string

GetFormattedVideoDuration returns the duration of a video file formatted as: - "MM:SS" if the duration is 1 minute or longer - "XXs" if the duration is less than 1 minute Returns an empty string if there's an error

func GetVideoDuration added in v1.3.3

func GetVideoDuration(videoPath string) float64

GetVideoDuration extracts the duration of a video file in seconds Returns 0 if there's an error getting the duration

func GetVideoMetadataCachePath added in v1.3.3

func GetVideoMetadataCachePath(videoPath string) string

GetVideoMetadataCachePath returns the path to the metadata cache file for a video file

func LocalMediaComparison added in v1.1.0

func LocalMediaComparison(m MediaFile, destinationPath string) bool

LocalMediaComparison compares the sha1 shases of the source and destination files

func Ptr

func Ptr[T any](v T) *T

func RunCLI

func RunCLI() error

RunCLI starts the command line interface

Types

type Config

type Config struct {
	OutputPath string        `toml:"output_path"`
	Global     GlobalConfig  `toml:"global"`
	Gallery    GalleryConfig `toml:"gallery"`
	Providers  Providers     `toml:"providers"`

	// Dry run is provided via -dry-run CLI flag
	DryRun bool
}

Config represents the root configuration structure

func NewConfig

func NewConfig(path string) (*Config, error)

NewConfig creates a new Config instance from a TOML file

func (*Config) Defaults

func (c *Config) Defaults()

func (*Config) Save

func (c *Config) Save(path string) error

Save saves the configuration back to a TOML file

type FileManager

type FileManager struct {
	// contains filtered or unexported fields
}

func NewFileManager

func NewFileManager(config Config) *FileManager

func (*FileManager) Cleanup

func (f *FileManager) Cleanup() error

func (*FileManager) DownloadURL

func (f *FileManager) DownloadURL(url string) (tempFile *os.File, err error)

DownloadURL downloads a URL to a temporary file and takes care of the cleanup

func (*FileManager) FileExists

func (f *FileManager) FileExists(path string) bool

func (*FileManager) GetPathForGame

func (f *FileManager) GetPathForGame(game *Game) string

func (*FileManager) ProcessGame

func (f *FileManager) ProcessGame(game *Game) error

func (*FileManager) ProcessMedia

func (f *FileManager) ProcessMedia(game *Game, media MediaFile) error

func (*FileManager) WriteFile

func (f *FileManager) WriteFile(path string, data io.Reader) error

func (*FileManager) WriteFileIfModified

func (f *FileManager) WriteFileIfModified(path string, data []byte) error

type GalleryBuilder

type GalleryBuilder struct {
	Config      Config
	Root        *GalleryNode
	IgnoreNames []string
	// contains filtered or unexported fields
}

func NewGalleryBuilder

func NewGalleryBuilder(config Config) (*GalleryBuilder, error)

func (*GalleryBuilder) Build

func (b *GalleryBuilder) Build() (*GalleryNode, error)

type GalleryConfig

type GalleryConfig struct {
	Create            bool              `toml:"create"`
	SiteTitle         string            `toml:"site_title"`
	Context           map[string]string `toml:"context"`
	ShowVideoDuration bool              `toml:"show_video_duration"`
}

GalleryConfig represents the web gallery configuration

func (*GalleryConfig) Defaults

func (c *GalleryConfig) Defaults()

type GalleryNode

type GalleryNode struct {
	Title   string
	Path    string
	Parent  *GalleryNode
	Folders []*GalleryNode `json:",omitempty"`
	Files   []*GalleryNode `json:",omitempty"`
	Cover   string         `json:",omitempty"`
}

func (*GalleryNode) AddFile

func (n *GalleryNode) AddFile(child *GalleryNode)

func (*GalleryNode) AddFolder

func (n *GalleryNode) AddFolder(child *GalleryNode)

func (*GalleryNode) Empty

func (n *GalleryNode) Empty() bool

func (*GalleryNode) GetBreadcrumbs

func (n *GalleryNode) GetBreadcrumbs() []*GalleryNode

func (*GalleryNode) GetFolderCount

func (n *GalleryNode) GetFolderCount() int

func (*GalleryNode) GetFormattedVideoDuration added in v1.3.0

func (n *GalleryNode) GetFormattedVideoDuration(config *Config) string

GetFormattedVideoDuration returns the duration of a video file formatted as: - "MM:SS" if the duration is 1 minute or longer - "XXs" if the duration is less than 1 minute Returns an empty string if the file is not a video, if there's an error, or if show_video_duration is disabled in the configuration

func (*GalleryNode) GetImageCount

func (n *GalleryNode) GetImageCount() int

func (*GalleryNode) GetLastUpdated added in v1.2.2

func (n *GalleryNode) GetLastUpdated() string

GetLastUpdated returns the most recent modification time of original image and video files in this folder or its subfolders recursively. It returns this time formatted as RFC3339.

func (*GalleryNode) GetThumbPath

func (n *GalleryNode) GetThumbPath() string

func (*GalleryNode) GetVideoCount

func (n *GalleryNode) GetVideoCount() int

func (*GalleryNode) GetVideoDuration added in v1.3.0

func (n *GalleryNode) GetVideoDuration() float64

GetVideoDuration returns the duration of a video file in seconds Returns 0 if the file is not a video or if there's an error getting the duration

func (*GalleryNode) GetWebCoverPath

func (n *GalleryNode) GetWebCoverPath() string

func (*GalleryNode) GetWebPath

func (n *GalleryNode) GetWebPath() string

func (*GalleryNode) HasThumb

func (n *GalleryNode) HasThumb() bool

func (*GalleryNode) Kind

func (n *GalleryNode) Kind() GalleryNodeKind

type GalleryNodeKind

type GalleryNodeKind string
const (
	GalleryNodeKindFolder GalleryNodeKind = "folder"
	GalleryNodeKindImage  GalleryNodeKind = "image"
	GalleryNodeKindVideo  GalleryNodeKind = "video"
)

type Game

type Game struct {
	ID          string
	CoverURL    string
	Name        string
	Platform    string
	Provider    string
	Screenshots []*Media
	Clips       []*Media
	Recordings  []*Media
	Cover       *Media
}

func NewGame

func NewGame(id, name, platform, provider string) *Game

func (*Game) AddClip

func (g *Game) AddClip(clip *Media)

func (*Game) AddRecording

func (g *Game) AddRecording(recording *Media)

func (*Game) AddScreenshot

func (g *Game) AddScreenshot(screenshot *Media)

func (*Game) SetCover

func (g *Game) SetCover(cover *Media)

type GameManager

type GameManager struct {
	// contains filtered or unexported fields
}

func NewGameManager

func NewGameManager() *GameManager

func (*GameManager) AddGame

func (gm *GameManager) AddGame(game *Game) *Game

func (*GameManager) GetGame

func (gm *GameManager) GetGame(id string) *Game

func (*GameManager) GetGames

func (gm *GameManager) GetGames() []*Game

type GlobalConfig

type GlobalConfig struct {
	Enabled        bool `toml:"enabled"`
	DownloadCovers bool `toml:"download_covers"`
}

GlobalConfig represents the global configuration settings

func (*GlobalConfig) Defaults

func (c *GlobalConfig) Defaults()

type GuildWars2Provider

type GuildWars2Provider struct {
	// contains filtered or unexported fields
}

func NewGuildWars2Provider

func NewGuildWars2Provider(config Config, gameManager *GameManager, fileManager *FileManager) (*GuildWars2Provider, error)

func (*GuildWars2Provider) FindGames

func (p *GuildWars2Provider) FindGames(options ProviderConfig) ([]Game, error)

func (*GuildWars2Provider) GetClips

func (p *GuildWars2Provider) GetClips() ([]Game, error)

func (*GuildWars2Provider) GetRecordings

func (p *GuildWars2Provider) GetRecordings() ([]Game, error)

func (*GuildWars2Provider) GetScreenshots

func (p *GuildWars2Provider) GetScreenshots() error

func (*GuildWars2Provider) Run

func (p *GuildWars2Provider) Run() error

type HytaleProvider added in v1.5.0

type HytaleProvider struct {
	// contains filtered or unexported fields
}

func NewHytaleProvider added in v1.5.0

func NewHytaleProvider(config Config, gameManager *GameManager, fileManager *FileManager) (*HytaleProvider, error)

func (*HytaleProvider) FindGames added in v1.5.0

func (p *HytaleProvider) FindGames(options ProviderConfig) ([]Game, error)

func (*HytaleProvider) GetClips added in v1.5.0

func (p *HytaleProvider) GetClips() ([]Game, error)

func (*HytaleProvider) GetCovers added in v1.5.0

func (p *HytaleProvider) GetCovers() error

func (*HytaleProvider) GetRecordings added in v1.5.0

func (p *HytaleProvider) GetRecordings() ([]Game, error)

func (*HytaleProvider) GetScreenshots added in v1.5.0

func (p *HytaleProvider) GetScreenshots() error

func (*HytaleProvider) Run added in v1.5.0

func (p *HytaleProvider) Run() error

type Media

type Media struct {
	Kind            MediaKind
	SourceURL       string
	SourcePath      string
	DestinationName string
	ComparisionFunc func(m MediaFile, destinationPath string) bool
}

func NewMedia

func NewMedia(kind MediaKind, path string) *Media

func (*Media) Compare added in v1.1.0

func (m *Media) Compare(destinationPath string) bool

func (*Media) GetDestinationName

func (m *Media) GetDestinationName() string

func (*Media) GetKind

func (m *Media) GetKind() MediaKind

func (*Media) GetSourceHash added in v1.1.0

func (m *Media) GetSourceHash() string

func (*Media) GetSourcePath added in v1.1.0

func (m *Media) GetSourcePath() string

func (*Media) GetSourceURL added in v1.1.0

func (m *Media) GetSourceURL() string

func (*Media) IsLocal added in v1.1.0

func (m *Media) IsLocal() bool

func (*Media) SetDestinationName added in v1.1.0

func (m *Media) SetDestinationName(destinationName string)

func (*Media) SetSourcePath added in v1.1.2

func (m *Media) SetSourcePath(sourcePath string)

func (*Media) SetSourceURL added in v1.1.2

func (m *Media) SetSourceURL(sourceURL string)

type MediaFile

type MediaFile interface {
	GetSourcePath() string
	SetSourcePath(sourcePath string)
	GetSourceURL() string
	SetSourceURL(sourceURL string)
	GetSourceHash() string
	GetDestinationName() string
	SetDestinationName(destinationName string)
	GetKind() MediaKind
	IsLocal() bool
	Compare(destinationPath string) bool
}

type MediaKind

type MediaKind string
const (
	MediaKindScreenshot MediaKind = "screenshot"
	MediaKindClip       MediaKind = "clip"
	MediaKindRecording  MediaKind = "recording"
	MediaKindCover      MediaKind = "cover"
)

type MinecraftProvider

type MinecraftProvider struct {
	// contains filtered or unexported fields
}

func NewMinecraftProvider

func NewMinecraftProvider(config Config, gameManager *GameManager, fileManager *FileManager) (*MinecraftProvider, error)

func (*MinecraftProvider) FindGames

func (p *MinecraftProvider) FindGames(options ProviderConfig) ([]Game, error)

func (*MinecraftProvider) GetClips

func (p *MinecraftProvider) GetClips() ([]Game, error)

func (*MinecraftProvider) GetRecordings

func (p *MinecraftProvider) GetRecordings() ([]Game, error)

func (*MinecraftProvider) GetScreenshots

func (p *MinecraftProvider) GetScreenshots() error

func (*MinecraftProvider) Run

func (p *MinecraftProvider) Run() error

type Playstation4Provider

type Playstation4Provider struct {
	// contains filtered or unexported fields
}

func NewPlaystation4Provider

func NewPlaystation4Provider(config Config, gameManager *GameManager, fileManager *FileManager) (*Playstation4Provider, error)

func (*Playstation4Provider) FindGames

func (p *Playstation4Provider) FindGames(options ProviderConfig) ([]Game, error)

func (*Playstation4Provider) GetClips

func (p *Playstation4Provider) GetClips() ([]Game, error)

func (*Playstation4Provider) GetRecordings

func (p *Playstation4Provider) GetRecordings() ([]Game, error)

func (*Playstation4Provider) GetScreenshots

func (p *Playstation4Provider) GetScreenshots() error

func (*Playstation4Provider) Run

func (p *Playstation4Provider) Run() error

type Playstation5Provider

type Playstation5Provider struct {
	// contains filtered or unexported fields
}

func NewPlaystation5Provider

func NewPlaystation5Provider(config Config, gameManager *GameManager, fileManager *FileManager) (*Playstation5Provider, error)

func (*Playstation5Provider) FindGames

func (p *Playstation5Provider) FindGames(options ProviderConfig) ([]Game, error)

func (*Playstation5Provider) GetClips

func (p *Playstation5Provider) GetClips() ([]Game, error)

func (*Playstation5Provider) GetRecordings

func (p *Playstation5Provider) GetRecordings() ([]Game, error)

func (*Playstation5Provider) GetScreenshots

func (p *Playstation5Provider) GetScreenshots() error

func (*Playstation5Provider) Run

func (p *Playstation5Provider) Run() error

type Provider

type Provider interface {
	Run() error
}

type ProviderConfig

type ProviderConfig struct {
	Enabled        *bool   `toml:"enabled"`
	DownloadCovers *bool   `toml:"download_covers"`
	Path           *string `toml:"path"`
}

ProviderConfig represents the configuration for a specific provider

func (*ProviderConfig) GetPath

func (c *ProviderConfig) GetPath() string

func (*ProviderConfig) IsEnabled

func (c *ProviderConfig) IsEnabled() bool

func (*ProviderConfig) Merge

func (pc *ProviderConfig) Merge(global *GlobalConfig)

Merge merges the provider config with the global config and defaults

func (*ProviderConfig) ShouldDownloadCovers

func (c *ProviderConfig) ShouldDownloadCovers() bool

type ProviderRegistry

type ProviderRegistry struct {
	Providers map[string]Provider
	// contains filtered or unexported fields
}

func NewProviderRegistry

func NewProviderRegistry(config *Config, gameManager *GameManager, fileManager *FileManager) (*ProviderRegistry, error)

type Providers

type Providers struct {
	GuildWars2      ProviderConfig `toml:"guild_wars_2"`
	Hytale          ProviderConfig `toml:"hytale"`
	Minecraft       ProviderConfig `toml:"minecraft"`
	PlayStation4    ProviderConfig `toml:"playstation4"`
	PlayStation5    ProviderConfig `toml:"playstation5"`
	Steam           SteamConfig    `toml:"steam"`
	WorldOfWarcraft ProviderConfig `toml:"world_of_warcraft"`
	XboxGameBar     ProviderConfig `toml:"xbox_game_bar"`
}

Providers represents all game provider configurations

type PublishedFileDetail

type PublishedFileDetail struct {
	AppID           int    `json:"consumer_appid"`
	FileURL         string `json:"file_url"`
	PreviewURL      string `json:"preview_url"`
	PublishedFileID string `json:"publishedfileid"`
	TimeCreated     int    `json:"time_created"`
	TimeUpdated     int    `json:"time_updated"`
	ShortcutName    string `json:"shortcutname"`
}

PublishedScreenshot represents a screenshot published to Steam

func (*PublishedFileDetail) GetFileSHA1 added in v1.1.0

func (f *PublishedFileDetail) GetFileSHA1() string

func (*PublishedFileDetail) GetPreviewSHA1 added in v1.1.0

func (f *PublishedFileDetail) GetPreviewSHA1() string

type SteamApp

type SteamApp struct {
	AppID uint64 `json:"appid"`
	Name  string `json:"name"`
}

SteamApp struct for game details

type SteamAppList

type SteamAppList struct {
	Apps []SteamApp `json:"apps"`
}

SteamAppList is a collection of SteamApp

func (*SteamAppList) GetGameID added in v1.1.0

func (s *SteamAppList) GetGameID(gameName string) string

func (*SteamAppList) GetGameName

func (s *SteamAppList) GetGameName(gameID string) string

type SteamAppListResponse

type SteamAppListResponse struct {
	Response struct {
		Apps      []SteamApp `json:"apps"`
		LastAppID uint64     `json:"last_appid,omitempty"`
	} `json:"response"`
}

type SteamClient

type SteamClient struct {
	// contains filtered or unexported fields
}

SteamClient handles API interactions with Steam

func NewSteamClient

func NewSteamClient(fileManager *FileManager, apiKey string) (*SteamClient, error)

NewSteamClient creates a new Steam client apiKey is optional but required for downloading the app list (the endpoint requires authentication)

func (*SteamClient) DownloadGameCover

func (c *SteamClient) DownloadGameCover(gameID string) (*os.File, error)

DownloadGameCover downloads a game's cover image

func (*SteamClient) DownloadSteamAppList

func (c *SteamClient) DownloadSteamAppList() error

DownloadSteamAppList downloads the Steam APP List and caches it It's used to get the JSON response with all the games so we can match the game ID (folder name) with the game name (from the JSON response)

func (*SteamClient) GetGameID added in v1.1.0

func (c *SteamClient) GetGameID(gameName string) string

GetGameID returns the ID of a game by its name

func (*SteamClient) GetGameName

func (c *SteamClient) GetGameName(gameID string) string

GetGameName returns the name of a game by its ID

func (*SteamClient) GetPublishedScreenshots

func (c *SteamClient) GetPublishedScreenshots(steamID string) ([]PublishedFileDetail, error)

GetPublishedScreenshots retrieves all screenshots published by a Steam user

func (*SteamClient) GetSteamApps

func (c *SteamClient) GetSteamApps() SteamAppList

GetSteamApps returns the current list of Steam apps

func (*SteamClient) SetAPIKey

func (c *SteamClient) SetAPIKey(apiKey string)

SetAPIKey sets the Steam Web API key for authenticated requests

type SteamConfig

type SteamConfig struct {
	ProviderConfig
	UserDataPath      string            `toml:"userdata_path"`
	RecordingsPath    string            `toml:"recordings_path"`
	ProcessRecordings bool              `toml:"process_recordings"`
	ProcessClips      bool              `toml:"process_clips"`
	OnlineGallery     bool              `toml:"online_gallery"`
	UserID            string            `toml:"user_id"`
	APIKey            string            `toml:"api_key"`
	CustomGames       map[string]string `toml:"custom_games"`
}

SteamConfig represents the Steam-specific configuration

func (*SteamConfig) GetPath

func (c *SteamConfig) GetPath() string

func (*SteamConfig) GetUserDataPath

func (c *SteamConfig) GetUserDataPath() string

func (*SteamConfig) ShouldProcessClips

func (c *SteamConfig) ShouldProcessClips() bool

func (*SteamConfig) ShouldProcessRecordings

func (c *SteamConfig) ShouldProcessRecordings() bool

type SteamFileDetailsRequest

type SteamFileDetailsRequest struct {
	ItemCount        int      `json:"itemcount"`
	PublishedFileIDs []string `json:"publishedfileids"`
}

SteamFileDetailsRequest represents the request to GetPublishedFileDetails

type SteamFileDetailsResponse

type SteamFileDetailsResponse struct {
	Response struct {
		PublishedFileDetails []struct {
			PublishedFileID string `json:"publishedfileid"`
			AppID           int    `json:"consumer_app_id"`
			Title           string `json:"title"`
			Description     string `json:"description"`
			FileURL         string `json:"file_url"`
			PreviewURL      string `json:"preview_url"`
			FileType        int    `json:"file_type"`
		} `json:"publishedfiledetails"`
		Result int `json:"result"`
	} `json:"response"`
}

SteamFileDetailsResponse represents the response from GetPublishedFileDetails

type SteamProvider

type SteamProvider struct {
	// contains filtered or unexported fields
}

func NewSteamProvider

func NewSteamProvider(config Config, gameManager *GameManager, fileManager *FileManager) (*SteamProvider, error)

func (*SteamProvider) FindGames

func (p *SteamProvider) FindGames(options SteamConfig) ([]Game, error)

func (*SteamProvider) GetClips

func (p *SteamProvider) GetClips() error

func (*SteamProvider) GetCovers

func (p *SteamProvider) GetCovers() error

func (*SteamProvider) GetPublishedScreenshots

func (p *SteamProvider) GetPublishedScreenshots() error

GetPublishedScreenshots retrieves screenshots published to Steam by the configured user

func (*SteamProvider) GetRecordings

func (p *SteamProvider) GetRecordings() error

func (*SteamProvider) GetScreenshots

func (p *SteamProvider) GetScreenshots() error

func (*SteamProvider) Run

func (p *SteamProvider) Run() error

type SteamPublishedFilesResponse

type SteamPublishedFilesResponse struct {
	Response struct {
		PublishedFileDetails []PublishedFileDetail `json:"publishedfiledetails"`
		Total                int                   `json:"total"`
		StartIndex           int                   `json:"startindex"`
	} `json:"response"`
}

SteamPublishedFilesResponse represents the response from GetPublishedFilesByUser

type VideoMetadata added in v1.3.3

type VideoMetadata struct {
	FFmpegMetadata string  `json:"ffmpeg_metadata"`
	Duration       float64 `json:"duration"`
	Timestamp      string  `json:"timestamp"` // ISO8601/RFC3339
}

VideoMetadata represents cached metadata for video files

type WorldOfWarcraftProvider

type WorldOfWarcraftProvider struct {
	// contains filtered or unexported fields
}

func NewWorldOfWarcraftProvider

func NewWorldOfWarcraftProvider(config Config, gameManager *GameManager, fileManager *FileManager) (*WorldOfWarcraftProvider, error)

func (*WorldOfWarcraftProvider) FindGames

func (p *WorldOfWarcraftProvider) FindGames(options ProviderConfig) ([]Game, error)

func (*WorldOfWarcraftProvider) GetClips

func (p *WorldOfWarcraftProvider) GetClips() ([]Game, error)

func (*WorldOfWarcraftProvider) GetRecordings

func (p *WorldOfWarcraftProvider) GetRecordings() ([]Game, error)

func (*WorldOfWarcraftProvider) GetScreenshots

func (p *WorldOfWarcraftProvider) GetScreenshots() error

func (*WorldOfWarcraftProvider) Run

func (p *WorldOfWarcraftProvider) Run() error

type XboxGameBarProvider

type XboxGameBarProvider struct {
	// contains filtered or unexported fields
}

func NewXboxGameBarProvider

func NewXboxGameBarProvider(config Config, gameManager *GameManager, fileManager *FileManager) (*XboxGameBarProvider, error)

func (*XboxGameBarProvider) FindGames

func (p *XboxGameBarProvider) FindGames(options ProviderConfig) ([]Game, error)

func (*XboxGameBarProvider) GetClips

func (p *XboxGameBarProvider) GetClips() ([]Game, error)

func (*XboxGameBarProvider) GetRecordings

func (p *XboxGameBarProvider) GetRecordings() ([]Game, error)

func (*XboxGameBarProvider) GetScreenshots

func (p *XboxGameBarProvider) GetScreenshots() error

func (*XboxGameBarProvider) Run

func (p *XboxGameBarProvider) Run() error

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL