source_api_sdk.v1.bs

import "pkg:/source/api/baserequest.bs"

' V1 user endpoint shims — covers Jellyfin 10.7.x and 10.8.x
' All paths use the /Users/{userId}/ prefix that was removed in 10.9.
' Do NOT call these functions directly. Use the ApiClient class via GetApi() (e.g., GetApi().GetItem()).
namespace sdkV1
  namespace users

    ' Get user profile image URL.
    function GetImageURL(id as string, imagetype = "primary" as string, imageindex = 0 as integer, params = {} as object) as dynamic
      return buildURL(Substitute("/users/{0}/images/{1}/{2}", id, imagetype, imageindex.toStr()), params)
    end function

    ' HEAD user profile image.
    function HeadImageURL(id as string, imagetype = "primary" as string, imageindex = 0 as integer, params = {} as object)
      req = APIRequest(Substitute("/users/{0}/images/{1}/{2}", id, imagetype, imageindex.toStr()), params)
      return headVoid(req)
    end function

    ' Gets items based on a query.
    function GetItemsByQuery(id as string, params = {} as object)
      req = APIRequest(Substitute("/users/{0}/items", id), params)
      return getJson(req)
    end function

    ' Gets resumable items.
    function GetResumeItemsByQuery(id as string, params = {} as object)
      req = APIRequest(Substitute("/users/{0}/items/resume", id), params)
      return getJson(req)
    end function

    ' Gets suggestions.
    function GetSuggestions(id as string, params = {} as object)
      req = APIRequest(Substitute("/users/{0}/suggestions", id), params)
      return getJson(req)
    end function

    ' Get user view grouping options.
    function GetGroupingOptions(id as string)
      req = APIRequest(Substitute("/users/{0}/groupingoptions", id))
      return getJson(req)
    end function

    ' Get user views.
    function GetViews(id as string, params = {} as object)
      req = APIRequest(Substitute("/users/{0}/views", id), params)
      return getJson(req)
    end function

    ' Gets an item from a user's library.
    function GetItem(userid as string, itemid as string, params = {} as object)
      req = APIRequest(Substitute("/users/{0}/items/{1}", userid, itemid), params)
      return getJson(req)
    end function

    ' Gets intros to play before the main media item plays.
    function GetIntros(userid as string, itemid as string)
      req = APIRequest(Substitute("/users/{0}/items/{1}/intros", userid, itemid))
      return getJson(req)
    end function

    ' Gets local trailers for an item.
    function GetLocalTrailers(userid as string, itemid as string)
      req = APIRequest(Substitute("/users/{0}/items/{1}/localtrailers", userid, itemid))
      return getJson(req)
    end function

    ' Gets special features for an item.
    function GetSpecialFeatures(userid as string, itemid as string)
      req = APIRequest(Substitute("/users/{0}/items/{1}/specialfeatures", userid, itemid))
      return getJson(req)
    end function

    ' Gets latest media.
    function GetLatestMedia(userid as string, params = {} as object)
      req = APIRequest(Substitute("/users/{0}/items/latest", userid), params)
      return getJson(req)
    end function

    ' Gets the root folder from a user's library.
    function GetRoot(userid as string)
      req = APIRequest(Substitute("/users/{0}/items/root", userid))
      return getJson(req)
    end function

    ' Marks an item as a favorite.
    function MarkFavorite(userid as string, itemid as string)
      req = APIRequest(Substitute("users/{0}/favoriteitems/{1}", userid, itemid))
      return postJson(req)
    end function

    ' Unmarks item as a favorite.
    function UnmarkFavorite(userid as string, itemid as string)
      req = APIRequest(Substitute("users/{0}/favoriteitems/{1}", userid, itemid))
      return deleteVoid(req)
    end function

    ' Deletes a user's saved personal rating for an item.
    function DeleteRating(userid as string, itemid as string)
      req = APIRequest(Substitute("users/{0}/items/{1}/rating", userid, itemid))
      return deleteVoid(req)
    end function

    ' Updates a user's rating for an item.
    function UpdateRating(userid as string, itemid as string, params = {} as object)
      req = APIRequest(Substitute("users/{0}/items/{1}/rating", userid, itemid), params)
      return postJson(req)
    end function

    ' Marks an item as played for user.
    function MarkPlayed(userid as string, itemid as string, params = {} as object)
      if params.count() = 0
        params = {
          "DatePlayed": CreateObject("roDateTime").ToISOString(),
          "PlaybackPositionTicks": 0
        }
      end if
      req = APIRequest(Substitute("users/{0}/playeditems/{1}", userid, itemid), params)
      return postJson(req)
    end function

    ' Marks an item as unplayed for user.
    function UnmarkPlayed(userid as string, itemid as string)
      req = APIRequest(Substitute("users/{0}/playeditems/{1}", userid, itemid))
      return deleteVoid(req)
    end function

    ' Reports that a user has begun playing an item.
    function MarkPlaying(userid as string, itemid as string, params = {} as object)
      req = APIRequest(Substitute("users/{0}/playingitems/{1}", userid, itemid), params)
      return postJson(req)
    end function

    ' Reports that a user has stopped playing an item.
    function MarkStoppedPlaying(userid as string, itemid as string, params = {} as object)
      req = APIRequest(Substitute("users/{0}/playingitems/{1}", userid, itemid), params)
      return deleteVoid(req)
    end function

    ' Reports a user's playback progress.
    function ReportPlayProgress(userid as string, itemid as string, params = {} as object)
      req = APIRequest(Substitute("users/{0}/playingitems/{1}/progress", userid, itemid), params)
      return postJson(req)
    end function

    ' Updates a user configuration.
    function UpdateConfiguration(id as string, body = {} as object)
      req = APIRequest(Substitute("/users/{0}/configuration", id))
      return postVoid(req, FormatJson(body))
    end function

    ' Updates a user's password.
    function UpdatePassword(id as string, body = {} as object)
      req = APIRequest(Substitute("/users/{0}/password", id))
      return postVoid(req, FormatJson(body))
    end function

  end namespace
end namespace