package host
import (
"encoding/json"
"errors"
"github.com/navidrome/navidrome/plugins/pdk/go/pdk"
)
type ScrobbleCountOptions struct {
FromTimestamp *int64 `json:"fromTimestamp"`
ToTimestamp *int64 `json:"toTimestamp"`
}
type ScrobbleOptions struct {
FromTimestamp *int64 `json:"fromTimestamp"`
ToTimestamp *int64 `json:"toTimestamp"`
Descending bool `json:"descending"`
MaxItems int `json:"maxItems"`
Offset int `json:"offset"`
}
type ScrobbleRef struct {
ID int64 `json:"id"`
MediaFileID string `json:"mediaFileId"`
SubmissionTime int64 `json:"submissionTime"`
}
func scrobbleretriever_getfirsttimestamp(uint64) uint64
func scrobbleretriever_getlasttimestamp(uint64) uint64
func scrobbleretriever_getscrobbles(uint64) uint64
func scrobbleretriever_getscrobblecount(uint64) uint64
type scrobbleRetrieverGetFirstTimestampRequest struct {
Username string `json:"username"`
}
type scrobbleRetrieverGetFirstTimestampResponse struct {
Result *int64 `json:"result,omitempty"`
Error string `json:"error,omitempty"`
}
type scrobbleRetrieverGetLastTimestampRequest struct {
Username string `json:"username"`
}
type scrobbleRetrieverGetLastTimestampResponse struct {
Result *int64 `json:"result,omitempty"`
Error string `json:"error,omitempty"`
}
type scrobbleRetrieverGetScrobblesRequest struct {
Username string `json:"username"`
Options ScrobbleOptions `json:"options"`
}
type scrobbleRetrieverGetScrobblesResponse struct {
Scrobbles []ScrobbleRef `json:"scrobbles,omitempty"`
Next *ScrobbleOptions `json:"next,omitempty"`
Error string `json:"error,omitempty"`
}
type scrobbleRetrieverGetScrobbleCountRequest struct {
Username string `json:"username"`
Options ScrobbleCountOptions `json:"options"`
}
type scrobbleRetrieverGetScrobbleCountResponse struct {
Result int64 `json:"result,omitempty"`
Error string `json:"error,omitempty"`
}
func ScrobbleRetrieverGetFirstTimestamp(username string) (*int64, error) {
req := scrobbleRetrieverGetFirstTimestampRequest{
Username: username,
}
reqBytes, err := json.Marshal(req)
if err != nil {
return nil, err
}
reqMem := pdk.AllocateBytes(reqBytes)
defer reqMem.Free()
responsePtr := scrobbleretriever_getfirsttimestamp(reqMem.Offset())
responseMem := pdk.FindMemory(responsePtr)
responseBytes := responseMem.ReadBytes()
var response scrobbleRetrieverGetFirstTimestampResponse
if err := json.Unmarshal(responseBytes, &response); err != nil {
return nil, err
}
if response.Error != "" {
return nil, errors.New(response.Error)
}
return response.Result, nil
}
func ScrobbleRetrieverGetLastTimestamp(username string) (*int64, error) {
req := scrobbleRetrieverGetLastTimestampRequest{
Username: username,
}
reqBytes, err := json.Marshal(req)
if err != nil {
return nil, err
}
reqMem := pdk.AllocateBytes(reqBytes)
defer reqMem.Free()
responsePtr := scrobbleretriever_getlasttimestamp(reqMem.Offset())
responseMem := pdk.FindMemory(responsePtr)
responseBytes := responseMem.ReadBytes()
var response scrobbleRetrieverGetLastTimestampResponse
if err := json.Unmarshal(responseBytes, &response); err != nil {
return nil, err
}
if response.Error != "" {
return nil, errors.New(response.Error)
}
return response.Result, nil
}
func ScrobbleRetrieverGetScrobbles(username string, options ScrobbleOptions) ([]ScrobbleRef, *ScrobbleOptions, error) {
req := scrobbleRetrieverGetScrobblesRequest{
Username: username,
Options: options,
}
reqBytes, err := json.Marshal(req)
if err != nil {
return nil, nil, err
}
reqMem := pdk.AllocateBytes(reqBytes)
defer reqMem.Free()
responsePtr := scrobbleretriever_getscrobbles(reqMem.Offset())
responseMem := pdk.FindMemory(responsePtr)
responseBytes := responseMem.ReadBytes()
var response scrobbleRetrieverGetScrobblesResponse
if err := json.Unmarshal(responseBytes, &response); err != nil {
return nil, nil, err
}
if response.Error != "" {
return nil, nil, errors.New(response.Error)
}
return response.Scrobbles, response.Next, nil
}
func ScrobbleRetrieverGetScrobbleCount(username string, options ScrobbleCountOptions) (int64, error) {
req := scrobbleRetrieverGetScrobbleCountRequest{
Username: username,
Options: options,
}
reqBytes, err := json.Marshal(req)
if err != nil {
return 0, err
}
reqMem := pdk.AllocateBytes(reqBytes)
defer reqMem.Free()
responsePtr := scrobbleretriever_getscrobblecount(reqMem.Offset())
responseMem := pdk.FindMemory(responsePtr)
responseBytes := responseMem.ReadBytes()
var response scrobbleRetrieverGetScrobbleCountResponse
if err := json.Unmarshal(responseBytes, &response); err != nil {
return 0, err
}
if response.Error != "" {
return 0, errors.New(response.Error)
}
return response.Result, nil
}