mirror of
https://github.com/aunefyren/wrapperr
synced 2024-12-12 20:32:27 +00:00
7d073207cd
Not functional as of yet, but configurable
645 lines
30 KiB
Go
645 lines
30 KiB
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type Default_Reply struct {
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
}
|
|
|
|
/*
|
|
type CustomPayload struct {
|
|
jwt.Payload
|
|
Username string `json:"username,omitempty"`
|
|
PlexID int `json:"plexid,omitempty"`
|
|
Admin bool `json:"admin,omitempty"`
|
|
}
|
|
*/
|
|
|
|
type Payload struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Username string `json:"username"`
|
|
Admin bool `json:"admin"`
|
|
AuthToken string `json:"authtoken"`
|
|
IssuedAt time.Time `json:"issued_at"`
|
|
ExpiredAt time.Time `json:"expired_at"`
|
|
}
|
|
|
|
type JWTMaker struct {
|
|
secretKey string
|
|
}
|
|
|
|
type AdminConfig struct {
|
|
AdminUsername string `json:"admin_username"`
|
|
AdminPassword string `json:"admin_password"`
|
|
}
|
|
|
|
type WrapperrConfig struct {
|
|
TautulliConfig []TautulliConfig `json:"tautulli_config"`
|
|
WrapperrCustomize WrapperrCustomize `json:"wrapperr_customize"`
|
|
WrapperrVersion string `json:"wrapperr_version"`
|
|
Timezone string `json:"timezone"`
|
|
ApplicationName string `json:"application_name"`
|
|
ApplicationURL string `json:"application_url"`
|
|
UseCache bool `json:"use_cache"`
|
|
UseLogs bool `json:"use_logs"`
|
|
ClientKey string `json:"client_key"`
|
|
WrapperrRoot string `json:"wrapperr_root"`
|
|
PrivateKey string `json:"private_key"`
|
|
CreateShareLinks bool `json:"create_share_links"`
|
|
WrappedStart int `json:"wrapped_start"`
|
|
WrappedEnd int `json:"wrapped_end"`
|
|
WrapperrPort int `json:"wrapperr_port"`
|
|
PlexAuth bool `json:"plex_auth"`
|
|
WinterTheme bool `json:"winter_theme"`
|
|
}
|
|
|
|
type TautulliConfig struct {
|
|
TautulliApiKey string `json:"tautulli_apikey"`
|
|
TautulliIP string `json:"tautulli_ip"`
|
|
TautulliPort int `json:"tautulli_port"`
|
|
TautulliLength int `json:"tautulli_length"`
|
|
TautulliRoot string `json:"tautulli_root"`
|
|
TautulliLibraries string `json:"tautulli_libraries"`
|
|
TautulliGrouping bool `json:"tautulli_grouping"`
|
|
TautulliHttps bool `json:"tautulli_https"`
|
|
TautulliName string `json:"tautulli_name"`
|
|
TautulliID int `json:"tautulli_id"`
|
|
}
|
|
|
|
type WrapperrCustomize struct {
|
|
WrapperrFrontPageTitle string `json:"wrapperr_front_page_title"`
|
|
WrapperrFrontPageSubtitle string `json:"wrapperr_front_page_subtitle"`
|
|
StatsIntroTitle string `json:"stats_intro_title"`
|
|
StatsIntroSubtitle string `json:"stats_intro_subtitle"`
|
|
StatsOutroTitle string `json:"stats_outro_title"`
|
|
StatsOutroSubtitle string `json:"stats_outro_subtitle"`
|
|
StatsOrderByPlays bool `json:"stats_order_by_plays"`
|
|
StatsOrderByDuration bool `json:"stats_order_by_duration"`
|
|
StatsTopListLength int `json:"stats_top_list_length"`
|
|
GetUserMovieStats bool `json:"get_user_movie_stats"`
|
|
GetUserMovieStatsTitle string `json:"get_user_movie_stats_title"`
|
|
GetUserMovieStatsSubtitle string `json:"get_user_movie_stats_subtitle"`
|
|
GetUserMovieStatsSubsubtitle string `json:"get_user_movie_stats_subsubtitle"`
|
|
GetUserMovieStatsSubtitleOne string `json:"get_user_movie_stats_subtitle_one"`
|
|
GetUserMovieStatsSubsubtitleOne string `json:"get_user_movie_stats_subsubtitle_one"`
|
|
GetUserMovieStatsSubtitleNone string `json:"get_user_movie_stats_subtitle_none"`
|
|
GetUserMovieStatsSubsubtitleNone string `json:"get_user_movie_stats_subsubtitle_none"`
|
|
GetUserMovieStatsTopMovie string `json:"get_user_movie_stats_top_movie"`
|
|
GetUserMovieStatsTopMoviePlural string `json:"get_user_movie_stats_top_movie_plural"`
|
|
GetUserMovieStatsMovieCompletionTitle string `json:"get_user_movie_stats_movie_completion_title"`
|
|
GetUserMovieStatsMovieCompletionTitlePlural string `json:"get_user_movie_stats_movie_completion_title_plural"`
|
|
GetUserMovieStatsMovieCompletionSubtitle string `json:"get_user_movie_stats_movie_completion_subtitle"`
|
|
GetUserMovieStatsPauseTitle string `json:"get_user_movie_stats_pause_title"`
|
|
GetUserMovieStatsPauseSubtitle string `json:"get_user_movie_stats_pause_subtitle"`
|
|
GetUserMovieStatsPauseTitleOne string `json:"get_user_movie_stats_pause_title_one"`
|
|
GetUserMovieStatsPauseSubtitleOne string `json:"get_user_movie_stats_pause_subtitle_one"`
|
|
GetUserMovieStatsPauseTitleNone string `json:"get_user_movie_stats_pause_title_none"`
|
|
GetUserMovieStatsPauseSubtitleNone string `json:"get_user_movie_stats_pause_subtitle_none"`
|
|
GetUserMovieStatsOldestTitle string `json:"get_user_movie_stats_oldest_title"`
|
|
GetUserMovieStatsOldestSubtitle string `json:"get_user_movie_stats_oldest_subtitle"`
|
|
GetUserMovieStatsOldestSubtitlePre1950 string `json:"get_user_movie_stats_oldest_subtitle_pre_1950"`
|
|
GetUserMovieStatsOldestSubtitlePre1975 string `json:"get_user_movie_stats_oldest_subtitle_pre_1975"`
|
|
GetUserMovieStatsOldestSubtitlePre2000 string `json:"get_user_movie_stats_oldest_subtitle_pre_2000"`
|
|
GetUserMovieStatsSpentTitle string `json:"get_user_movie_stats_spent_title"`
|
|
GetUserShowStats bool `json:"get_user_show_stats"`
|
|
GetUserShowBuddy bool `json:"get_user_show_stats_buddy"`
|
|
GetUserShowStatsTitle string `json:"get_user_show_stats_title"`
|
|
GetUserShowStatsSubtitle string `json:"get_user_show_stats_subtitle"`
|
|
GetUserShowStatsSubsubtitle string `json:"get_user_show_stats_subsubtitle"`
|
|
GetUserShowStatsSubtitleOne string `json:"get_user_show_stats_subtitle_one"`
|
|
GetUserShowStatsSubsubtitleOne string `json:"get_user_show_stats_subsubtitle_one"`
|
|
GetUserShowStatsSubtitleNone string `json:"get_user_show_stats_subtitle_none"`
|
|
GetUserShowStatsSubsubtitleNone string `json:"get_user_show_stats_subsubtitle_none"`
|
|
GetUserShowStatsTopShow string `json:"get_user_show_stats_top_show"`
|
|
GetUserShowStatsTopShowPlural string `json:"get_user_show_stats_top_show_plural"`
|
|
GetUserShowStatsSpentTitle string `json:"get_user_show_stats_spent_title"`
|
|
GetUserShowStatsMostPlayedTitle string `json:"get_user_show_stats_most_played_title"`
|
|
GetUserShowStatsMostPlayedSubtitle string `json:"get_user_show_stats_most_played_subtitle"`
|
|
GetUserShowStatsBuddyTitle string `json:"get_user_show_stats_buddy_title"`
|
|
GetUserShowStatsBuddySubtitle string `json:"get_user_show_stats_buddy_subtitle"`
|
|
GetUserShowStatsBuddyTitleNone string `json:"get_user_show_stats_buddy_title_none"`
|
|
GetUserShowStatsBuddySubtitleNone string `json:"get_user_show_stats_buddy_subtitle_none"`
|
|
GetUserMusicStats bool `json:"get_user_music_stats"`
|
|
GetUserMusicStatsTitle string `json:"get_user_music_stats_title"`
|
|
GetUserMusicStatsSubtitle string `json:"get_user_music_stats_subtitle"`
|
|
GetUserMusicStatsSubsubtitle string `json:"get_user_music_stats_subsubtitle"`
|
|
GetUserMusicStatsSubtitleOne string `json:"get_user_music_stats_subtitle_one"`
|
|
GetUserMusicStatsSubsubtitleOne string `json:"get_user_music_stats_subsubtitle_one"`
|
|
GetUserMusicStatsSubtitleNone string `json:"get_user_music_stats_subtitle_none"`
|
|
GetUserMusicStatsSubsubtitleNone string `json:"get_user_music_stats_subsubtitle_none"`
|
|
GetUserMusicStatsTopTrack string `json:"get_user_music_stats_top_track"`
|
|
GetUserMusicStatsTopTrackPlural string `json:"get_user_music_stats_top_track_plural"`
|
|
GetUserMusicStatsTopAlbumPlural string `json:"get_user_music_stats_top_album_plural"`
|
|
GetUserMusicStatsTopArtistPlural string `json:"get_user_music_stats_top_artist_plural"`
|
|
GetUserMusicStatsSpentTitle string `json:"get_user_music_stats_spent_title"`
|
|
GetUserMusicStatsSpentSubtitle string `json:"get_user_music_stats_spent_subtitle"`
|
|
GetUserMusicStatsOldestAlbumTitle string `json:"get_user_music_stats_oldest_album_title"`
|
|
GetUserMusicStatsOldestAlbumSubtitle string `json:"get_user_music_stats_oldest_album_subtitle"`
|
|
GetYearStatsTitle string `json:"get_year_stats_title"`
|
|
GetYearStatsSubtitle string `json:"get_year_stats_subtitle"`
|
|
GetYearStatsSubsubtitle string `json:"get_year_stats_subsubtitle"`
|
|
GetYearStatsMovies bool `json:"get_year_stats_movies"`
|
|
GetYearStatsMoviesTitle string `json:"get_year_stats_movies_title"`
|
|
GetYearStatsShows bool `json:"get_year_stats_shows"`
|
|
GetYearStatsShowsTitle string `json:"get_year_stats_shows_title"`
|
|
GetYearStatsMusic bool `json:"get_year_stats_music"`
|
|
GetYearStatsMusicTitle string `json:"get_year_stats_music_title"`
|
|
GetYearStatsLeaderboard bool `json:"get_year_stats_leaderboard"`
|
|
GetYearStatsLeaderboardNumbers bool `json:"get_year_stats_leaderboard_numbers"`
|
|
GetYearStatsLeaderboardTitle string `json:"get_year_stats_leaderboard_title"`
|
|
GetYearStatsMoviesDurationTitle string `json:"get_year_stats_movies_duration_title"`
|
|
GetYearStatsShowsDurationTitle string `json:"get_year_stats_shows_duration_title"`
|
|
GetYearStatsMusicDurationTitle string `json:"get_year_stats_music_duration_title"`
|
|
GetYearStatsDurationSumTitle string `json:"get_year_stats_duration_sum_title"`
|
|
WrapperrAnd string `json:"wrapperr_and"`
|
|
WrapperrPlay string `json:"wrapperr_play"`
|
|
WrapperrPlayPlural string `json:"wrapperr_play_plural"`
|
|
WrapperrDay string `json:"wrapperr_day"`
|
|
WrapperrDayPlural string `json:"wrapperr_day_plural"`
|
|
WrapperrHour string `json:"wrapperr_hour"`
|
|
WrapperrHourPlural string `json:"wrapperr_hour_plural"`
|
|
WrapperrMinute string `json:"wrapperr_minute"`
|
|
WrapperrMinutePlural string `json:"wrapperr_minute_plural"`
|
|
WrapperrSecond string `json:"wrapperr_second"`
|
|
WrapperrSecondPlural string `json:"wrapperr_second_plural"`
|
|
WrapperrSortPlays string `json:"wrapperr_sort_plays"`
|
|
WrapperrSortDuration string `json:"wrapperr_sort_duration"`
|
|
}
|
|
|
|
type WrapperrVersion struct {
|
|
WrapperrVersion string `json:"wrapperr_version"`
|
|
ApplicationName string `json:"application_name"`
|
|
PlexAuth bool `json:"plex_auth"`
|
|
WrapperrFrontPageTitle string `json:"wrapperr_front_page_title"`
|
|
WrapperrFrontPageSubtitle string `json:"wrapperr_front_page_subtitle"`
|
|
ClientKey string `json:"client_key"`
|
|
WrapperrConfigured bool `json:"wrapperr_configured"`
|
|
WinterTheme bool `json:"winter_theme"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
}
|
|
|
|
type BooleanReply struct {
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
Data bool `json:"data"`
|
|
}
|
|
|
|
type StringReply struct {
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
Data string `json:"data"`
|
|
}
|
|
|
|
type ConfigReply struct {
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
Data WrapperrConfig `json:"data"`
|
|
Username string `json:"username"`
|
|
}
|
|
|
|
type WrapperrFunctions struct {
|
|
WrapperrCustomize WrapperrCustomize `json:"wrapperr_customize"`
|
|
WrapperrVersion string `json:"wrapperr_version"`
|
|
PlexAuth bool `json:"plex_auth"`
|
|
CreateShareLinks bool `json:"create_share_links"`
|
|
}
|
|
|
|
type SetWrapperrConfig struct {
|
|
ClearCache bool `json:"clear_cache"`
|
|
DataType string `json:"data_type"`
|
|
TautulliConfig []TautulliConfig `json:"tautulli_config"`
|
|
WrapperrCustomize WrapperrCustomize `json:"wrapperr_customize"`
|
|
WrapperrData struct {
|
|
UseCache bool `json:"use_cache"`
|
|
UseLogs bool `json:"use_logs"`
|
|
PlexAuth bool `json:"plex_auth"`
|
|
WrapperrRoot string `json:"wrapperr_root"`
|
|
CreateShareLinks bool `json:"create_share_links"`
|
|
Timezone string `json:"timezone"`
|
|
ApplicationName string `json:"application_name"`
|
|
ApplicationURL string `json:"application_url"`
|
|
WrappedStart int `json:"wrapped_start"`
|
|
WrappedEnd int `json:"wrapped_end"`
|
|
WinterTheme bool `json:"winter_theme"`
|
|
} `json:"wrapperr_data"`
|
|
}
|
|
|
|
type GetLoginURL struct {
|
|
HomeURL string `json:"home_url"`
|
|
}
|
|
|
|
type GetLoginURLReply struct {
|
|
ID int `json:"id"`
|
|
Code string `json:"code"`
|
|
URL string `json:"url"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
}
|
|
|
|
type PlexGetPinReply struct {
|
|
ID int `json:"id"`
|
|
Code string `json:"code"`
|
|
Product string `json:"product"`
|
|
Trusted bool `json:"trusted"`
|
|
ClientIdentifier string `json:"clientIdentifier"`
|
|
Location struct {
|
|
Code string `json:"code"`
|
|
EuropeanUnionMember bool `json:"european_union_member"`
|
|
ContinentCode string `json:"continent_code"`
|
|
Country string `json:"country"`
|
|
City string `json:"city"`
|
|
TimeZone string `json:"time_zone"`
|
|
PostalCode string `json:"postal_code"`
|
|
InPrivacyRestrictedCountry bool `json:"in_privacy_restricted_country"`
|
|
Subdivisions string `json:"subdivisions"`
|
|
Coordinates string `json:"coordinates"`
|
|
} `json:"location"`
|
|
ExpiresIn int `json:"expiresIn"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
ExpiresAt time.Time `json:"expiresAt"`
|
|
AuthToken string `json:"authToken"`
|
|
NewRegistration interface{} `json:"newRegistration"`
|
|
}
|
|
|
|
type LoginPlexAuth struct {
|
|
ID int `json:"id"`
|
|
Code string `json:"code"`
|
|
}
|
|
|
|
type PlexGetUserReply struct {
|
|
ID int `json:"id"`
|
|
UUID string `json:"uuid"`
|
|
Username string `json:"username"`
|
|
Title string `json:"title"`
|
|
Email string `json:"email"`
|
|
FriendlyName string `json:"friendlyName"`
|
|
Locale interface{} `json:"locale"`
|
|
Confirmed bool `json:"confirmed"`
|
|
EmailOnlyAuth bool `json:"emailOnlyAuth"`
|
|
HasPassword bool `json:"hasPassword"`
|
|
Protected bool `json:"protected"`
|
|
Thumb string `json:"thumb"`
|
|
AuthToken string `json:"authToken"`
|
|
MailingListStatus string `json:"mailingListStatus"`
|
|
MailingListActive bool `json:"mailingListActive"`
|
|
ScrobbleTypes string `json:"scrobbleTypes"`
|
|
Country string `json:"country"`
|
|
Pin string `json:"pin"`
|
|
Subscription struct {
|
|
Active bool `json:"active"`
|
|
SubscribedAt time.Time `json:"subscribedAt"`
|
|
Status string `json:"status"`
|
|
PaymentService string `json:"paymentService"`
|
|
Plan string `json:"plan"`
|
|
Features []string `json:"features"`
|
|
} `json:"subscription"`
|
|
SubscriptionDescription string `json:"subscriptionDescription"`
|
|
Restricted bool `json:"restricted"`
|
|
Anonymous interface{} `json:"anonymous"`
|
|
Home bool `json:"home"`
|
|
Guest bool `json:"guest"`
|
|
HomeSize int `json:"homeSize"`
|
|
HomeAdmin bool `json:"homeAdmin"`
|
|
MaxHomeSize int `json:"maxHomeSize"`
|
|
CertificateVersion int `json:"certificateVersion"`
|
|
RememberExpiresAt int `json:"rememberExpiresAt"`
|
|
Profile struct {
|
|
AutoSelectAudio bool `json:"autoSelectAudio"`
|
|
DefaultAudioLanguage string `json:"defaultAudioLanguage"`
|
|
DefaultSubtitleLanguage string `json:"defaultSubtitleLanguage"`
|
|
AutoSelectSubtitle int `json:"autoSelectSubtitle"`
|
|
DefaultSubtitleAccessibility int `json:"defaultSubtitleAccessibility"`
|
|
DefaultSubtitleForced int `json:"defaultSubtitleForced"`
|
|
PlexPassVisibility string `json:"plexPassVisibility"`
|
|
AccountAgeVisibility string `json:"accountAgeVisibility"`
|
|
} `json:"profile"`
|
|
Entitlements []string `json:"entitlements"`
|
|
Roles []string `json:"roles"`
|
|
Services []struct {
|
|
Identifier string `json:"identifier"`
|
|
Endpoint string `json:"endpoint"`
|
|
Token string `json:"token"`
|
|
Secret interface{} `json:"secret"`
|
|
Status string `json:"status"`
|
|
} `json:"services"`
|
|
AdsConsent interface{} `json:"adsConsent"`
|
|
AdsConsentSetAt interface{} `json:"adsConsentSetAt"`
|
|
AdsConsentReminderAt interface{} `json:"adsConsentReminderAt"`
|
|
ExperimentalFeatures bool `json:"experimentalFeatures"`
|
|
TwoFactorEnabled bool `json:"twoFactorEnabled"`
|
|
BackupCodesCreated bool `json:"backupCodesCreated"`
|
|
}
|
|
|
|
type TautulliStatusReply struct {
|
|
Response struct {
|
|
Result string `json:"result"`
|
|
Message string `json:"message"`
|
|
Data struct {
|
|
} `json:"data"`
|
|
} `json:"response"`
|
|
}
|
|
|
|
type SearchWrapperrRequest struct {
|
|
CachingMode bool `json:"caching"`
|
|
CachingLimit int `json:"cache_limit"`
|
|
PlexIdentity string `json:"plex_identity"`
|
|
}
|
|
|
|
type TautulliGetUsersReply struct {
|
|
Response struct {
|
|
Result string `json:"result"`
|
|
Message interface{} `json:"message"`
|
|
Data []struct {
|
|
RowID int `json:"row_id"`
|
|
UserID int `json:"user_id"`
|
|
Username string `json:"username"`
|
|
FriendlyName string `json:"friendly_name"`
|
|
Thumb interface{} `json:"thumb"`
|
|
Email string `json:"email"`
|
|
IsActive int `json:"is_active"`
|
|
IsAdmin int `json:"is_admin"`
|
|
IsHomeUser interface{} `json:"is_home_user"`
|
|
IsAllowSync interface{} `json:"is_allow_sync"`
|
|
IsRestricted interface{} `json:"is_restricted"`
|
|
DoNotify int `json:"do_notify"`
|
|
KeepHistory int `json:"keep_history"`
|
|
AllowGuest int `json:"allow_guest"`
|
|
ServerToken interface{} `json:"server_token"`
|
|
SharedLibraries interface{} `json:"shared_libraries"`
|
|
FilterAll interface{} `json:"filter_all"`
|
|
FilterMovies interface{} `json:"filter_movies"`
|
|
FilterTv interface{} `json:"filter_tv"`
|
|
FilterMusic interface{} `json:"filter_music"`
|
|
FilterPhotos interface{} `json:"filter_photos"`
|
|
} `json:"data"`
|
|
} `json:"response"`
|
|
}
|
|
|
|
type WrapperrDay struct {
|
|
Date string `json:"date"`
|
|
Data []TautulliEntry `json:"data"`
|
|
DataComplete bool `json:"data_complete"`
|
|
}
|
|
|
|
type TautulliEntry struct {
|
|
Date int `json:"date"`
|
|
Duration int `json:"duration"`
|
|
RowID int `json:"row_id"`
|
|
FriendlyName string `json:"friendly_name"`
|
|
FullTitle string `json:"full_title"`
|
|
GrandparentRatingKey int `json:"grandparent_rating_key"`
|
|
GrandparentTitle string `json:"grandparent_title"`
|
|
OriginalTitle string `json:"original_title"`
|
|
MediaType string `json:"media_type"`
|
|
ParentRatingKey int `json:"parent_rating_key"`
|
|
ParentTitle string `json:"parent_title"`
|
|
PausedCounter int `json:"paused_counter"`
|
|
PercentComplete int `json:"percent_complete"`
|
|
RatingKey int `json:"rating_key"`
|
|
Title string `json:"title"`
|
|
User string `json:"user"`
|
|
UserID int `json:"user_id"`
|
|
Year int `json:"year"`
|
|
Plays int `json:"plays"`
|
|
}
|
|
|
|
type WrapperrYearUserEntry struct {
|
|
FriendlyName string `json:"friendly_name"`
|
|
GrandparentTitle string `json:"grandparent_title"`
|
|
OriginalTitle string `json:"original_title"`
|
|
ParentTitle string `json:"parent_title"`
|
|
PausedCounter int `json:"paused_counter"`
|
|
Title string `json:"title"`
|
|
User string `json:"user"`
|
|
UserID int `json:"user_id"`
|
|
Year int `json:"year"`
|
|
Plays int `json:"plays"`
|
|
DurationMovies int `json:"duration_movies"`
|
|
DurationShows int `json:"duration_shows"`
|
|
DurationArtists int `json:"duration_artists"`
|
|
Duration int `json:"duration"`
|
|
}
|
|
|
|
type TautulliGetHistoryReply struct {
|
|
Response struct {
|
|
Result string `json:"result"`
|
|
Message interface{} `json:"message"`
|
|
Data struct {
|
|
RecordsFiltered int `json:"recordsFiltered"`
|
|
RecordsTotal int `json:"recordsTotal"`
|
|
Data []TautulliHistoryItem `json:"data"`
|
|
Draw int `json:"draw"`
|
|
FilterDuration string `json:"filter_duration"`
|
|
TotalDuration string `json:"total_duration"`
|
|
} `json:"data"`
|
|
} `json:"response"`
|
|
}
|
|
|
|
type TautulliHistoryItem struct {
|
|
ReferenceID int `json:"reference_id"`
|
|
RowID int `json:"row_id"`
|
|
ID int `json:"id"`
|
|
Date int `json:"date"`
|
|
Started int `json:"started"`
|
|
Stopped int `json:"stopped"`
|
|
Duration int `json:"duration"`
|
|
PausedCounter int `json:"paused_counter"`
|
|
UserID int `json:"user_id"`
|
|
User string `json:"user"`
|
|
FriendlyName string `json:"friendly_name"`
|
|
Platform string `json:"platform"`
|
|
Product string `json:"product"`
|
|
Player string `json:"player"`
|
|
IPAddress string `json:"ip_address"`
|
|
Live int `json:"live"`
|
|
MachineID string `json:"machine_id"`
|
|
Location string `json:"location"`
|
|
Secure interface{} `json:"secure"`
|
|
Relayed interface{} `json:"relayed"`
|
|
MediaType string `json:"media_type"`
|
|
RatingKey int `json:"rating_key"`
|
|
ParentRatingKey int `json:"parent_rating_key"`
|
|
GrandparentRatingKey int `json:"grandparent_rating_key"`
|
|
FullTitle string `json:"full_title"`
|
|
Title string `json:"title"`
|
|
ParentTitle string `json:"parent_title"`
|
|
GrandparentTitle string `json:"grandparent_title"`
|
|
OriginalTitle string `json:"original_title"`
|
|
Year int `json:"year"`
|
|
MediaIndex string `json:"media_index"`
|
|
ParentMediaIndex string `json:"parent_media_index"`
|
|
Thumb string `json:"thumb"`
|
|
OriginallyAvailableAt string `json:"originally_available_at"`
|
|
GUID string `json:"guid"`
|
|
TranscodeDecision string `json:"transcode_decision"`
|
|
PercentComplete int `json:"percent_complete"`
|
|
WatchedStatus int `json:"watched_status"`
|
|
GroupCount int `json:"group_count"`
|
|
GroupIds string `json:"group_ids"`
|
|
State interface{} `json:"state"`
|
|
SessionKey interface{} `json:"session_key"`
|
|
}
|
|
|
|
type WrapperrStatisticsReply struct {
|
|
Error bool `json:"error"`
|
|
Date string `json:"date"`
|
|
Message string `json:"message"`
|
|
User struct {
|
|
Name string `json:"name"`
|
|
ID int `json:"id"`
|
|
UserMovies struct {
|
|
Data struct {
|
|
MoviesDuration []TautulliEntry `json:"movies_duration"`
|
|
MoviesPlays []TautulliEntry `json:"movies_plays"`
|
|
UserMovieMostPaused struct {
|
|
Title string `json:"title"`
|
|
Year int `json:"year"`
|
|
Plays int `json:"plays"`
|
|
Duration int `json:"duration"`
|
|
PausedCounter int `json:"paused_counter"`
|
|
} `json:"user_movie_most_paused"`
|
|
UserMovieFinishingPercent float64 `json:"user_movie_finishing_percent"`
|
|
UserMovieOldest struct {
|
|
Title string `json:"title"`
|
|
Year int `json:"year"`
|
|
Plays int `json:"plays"`
|
|
Duration int `json:"duration"`
|
|
PausedCounter int `json:"paused_counter"`
|
|
Error bool `json:"error"`
|
|
} `json:"user_movie_oldest"`
|
|
MovieDuration int `json:"movie_duration"`
|
|
MoviePlays int `json:"movie_plays"`
|
|
} `json:"data"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
} `json:"user_movies"`
|
|
UserShows struct {
|
|
Data struct {
|
|
ShowsDuration []TautulliEntry `json:"shows_duration"`
|
|
ShowsPlays []TautulliEntry `json:"shows_plays"`
|
|
EpisodeDurationLongest struct {
|
|
Title string `json:"title"`
|
|
ParentTitle string `json:"parent_title"`
|
|
GrandparentTitle string `json:"grandparent_title"`
|
|
Duration int `json:"duration"`
|
|
Plays int `json:"plays"`
|
|
Error bool `json:"error"`
|
|
} `json:"episode_duration_longest"`
|
|
ShowDuration int `json:"show_duration"`
|
|
ShowPlays int `json:"show_plays"`
|
|
ShowBuddy WrapperrShowBuddy `json:"show_buddy"`
|
|
} `json:"data"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
} `json:"user_shows"`
|
|
UserMusic struct {
|
|
Data struct {
|
|
TracksDuration []TautulliEntry `json:"tracks_duration"`
|
|
TracksPlays []TautulliEntry `json:"tracks_plays"`
|
|
AlbumsDuration []TautulliEntry `json:"albums_duration"`
|
|
AlbumsPlays []TautulliEntry `json:"albums_plays"`
|
|
UserAlbumOldest struct {
|
|
ParentTitle string `json:"parent_title"`
|
|
GrandparentTitle string `json:"grandparent_title"`
|
|
Year int `json:"year"`
|
|
Plays int `json:"plays"`
|
|
Duration int `json:"duration"`
|
|
Error bool `json:"error"`
|
|
} `json:"user_album_oldest"`
|
|
ArtistsDuration []TautulliEntry `json:"artists_duration"`
|
|
ArtistsPlays []TautulliEntry `json:"artists_plays"`
|
|
TrackDuration int `json:"track_duration"`
|
|
TrackPlays int `json:"track_plays"`
|
|
} `json:"data"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
} `json:"user_music"`
|
|
} `json:"user"`
|
|
YearStats struct {
|
|
YearMovies struct {
|
|
Data struct {
|
|
MoviesDuration []TautulliEntry `json:"movies_duration"`
|
|
MoviesPlays []TautulliEntry `json:"movies_plays"`
|
|
MovieDuration int `json:"movie_duration"`
|
|
MoviePlays int `json:"movie_plays"`
|
|
} `json:"data"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
} `json:"year_movies"`
|
|
YearShows struct {
|
|
Data struct {
|
|
ShowsDuration []TautulliEntry `json:"shows_duration"`
|
|
ShowsPlays []TautulliEntry `json:"shows_plays"`
|
|
ShowDuration int `json:"show_duration"`
|
|
ShowPlays int `json:"show_plays"`
|
|
} `json:"data"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
} `json:"year_shows"`
|
|
YearMusic struct {
|
|
Data struct {
|
|
ArtistsDuration []TautulliEntry `json:"artists_duration"`
|
|
ArtistsPlays []TautulliEntry `json:"artists_plays"`
|
|
MusicDuration int `json:"music_duration"`
|
|
MusicPlays int `json:"music_plays"`
|
|
} `json:"data"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
} `json:"year_music"`
|
|
YearUsers struct {
|
|
Data struct {
|
|
UsersDuration []WrapperrYearUserEntry `json:"users_duration"`
|
|
UsersPlays []WrapperrYearUserEntry `json:"users_plays"`
|
|
} `json:"data"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
} `json:"year_users"`
|
|
} `json:"year_stats"`
|
|
}
|
|
|
|
type WrapperrShareLinkCreateRequest struct {
|
|
Data WrapperrStatisticsReply `json:"data"`
|
|
Functions WrapperrCustomize `json:"functions"`
|
|
}
|
|
|
|
type WrapperrShareLinkGetRequest struct {
|
|
Hash string `json:"hash"`
|
|
}
|
|
|
|
type WrapperrShareLink struct {
|
|
Date string `json:"date"`
|
|
UserID int `json:"user_id"`
|
|
WrapperrVersion string `json:"wrapperr_version"`
|
|
Hash string `json:"hash"`
|
|
Content WrapperrShareLinkCreateRequest `json:"content"`
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
Expired bool `json:"expired"`
|
|
}
|
|
|
|
type WrapperrShowBuddy struct {
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
BuddyName string `json:"buddy_name"`
|
|
BuddyDuration int `json:"buddy_duration"`
|
|
BuddyFound bool `json:"buddy_found"`
|
|
}
|
|
|
|
type WrapperrLogLine struct {
|
|
Date string `json:"date"`
|
|
Time string `json:"time"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
type WrapperrLogLineReply struct {
|
|
Message string `json:"message"`
|
|
Error bool `json:"error"`
|
|
Data []WrapperrLogLine `json:"data"`
|
|
Limit int `json:"limit"`
|
|
}
|