Copyright | (c) Dustin Sallings 2020 |
---|---|
License | BSD3 |
Maintainer | dustin@spy.net |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
GoPro Plus media client.
Synopsis
- list :: (HasGoProAuth m, MonadIO m) => Int -> Int -> m ([Medium], PageInfo)
- listAll :: (HasGoProAuth m, MonadIO m) => m [Medium]
- listWhile :: (HasGoProAuth m, MonadIO m) => ([Medium] -> Bool) -> m [Medium]
- medium :: (HasGoProAuth m, FromJSON j, MonadIO m) => MediumID -> m j
- retrieve :: (HasGoProAuth m, FromJSON j, MonadIO m) => MediumID -> m j
- delete :: (HasGoProAuth m, MonadIO m) => MediumID -> m [Error]
- fetchThumbnail :: (HasGoProAuth m, MonadIO m) => Medium -> m ByteString
- data PageInfo = PageInfo {
- _current_page :: Int
- _per_page :: Int
- _total_items :: Int
- _total_pages :: Int
- current_page :: Lens' PageInfo Int
- per_page :: Lens' PageInfo Int
- total_items :: Lens' PageInfo Int
- total_pages :: Lens' PageInfo Int
- type MediumID = Text
- data MediumType
- = Photo
- | Video
- | TimeLapse
- | TimeLapseVideo
- | Burst
- data ReadyToViewType
- data Medium = Medium {
- _medium_id :: MediumID
- _medium_camera_model :: Maybe String
- _medium_captured_at :: UTCTime
- _medium_created_at :: UTCTime
- _medium_file_size :: Maybe Int
- _medium_moments_count :: Int
- _medium_ready_to_view :: ReadyToViewType
- _medium_source_duration :: Maybe String
- _medium_type :: MediumType
- _medium_token :: String
- _medium_width :: Maybe Int
- _medium_height :: Maybe Int
- medium_id :: Lens' Medium MediumID
- medium_camera_model :: Lens' Medium (Maybe String)
- medium_captured_at :: Lens' Medium UTCTime
- medium_created_at :: Lens' Medium UTCTime
- medium_file_size :: Lens' Medium (Maybe Int)
- medium_moments_count :: Lens' Medium Int
- medium_ready_to_view :: Lens' Medium ReadyToViewType
- medium_source_duration :: Lens' Medium (Maybe String)
- medium_type :: Lens' Medium MediumType
- medium_token :: Lens' Medium String
- medium_width :: Lens' Medium (Maybe Int)
- medium_height :: Lens' Medium (Maybe Int)
- data Listing = Listing {}
- media :: Lens' Listing [Medium]
- pages :: Lens' Listing PageInfo
- class HasMediaURL c where
- class HasMediaHead c where
- media_head :: Lens' c String
- class HasMediaLabel c where
- media_label :: Lens' c String
- class HasMediaType c where
- media_type :: Lens' c String
- data File = File {}
- file_camera_position :: Lens' File String
- file_height :: Lens' File Int
- file_width :: Lens' File Int
- file_item_number :: Lens' File Int
- file_orientation :: Lens' File Int
- file_head :: Lens' File String
- file_url :: Lens' File String
- file_transforms :: Lens' File (Maybe [String])
- data Variation = Variation {
- _var_height :: Int
- _var_width :: Int
- _var_label :: String
- _var_quality :: String
- _var_transforms :: Maybe [String]
- _var_type :: String
- _var_head :: String
- _var_url :: String
- var_height :: Lens' Variation Int
- var_width :: Lens' Variation Int
- var_label :: Lens' Variation String
- var_quality :: Lens' Variation String
- var_type :: Lens' Variation String
- var_transforms :: Lens' Variation (Maybe [String])
- var_head :: Lens' Variation String
- var_url :: Lens' Variation String
- data SpriteFrame = SpriteFrame {
- _frame_count :: Int
- _frame_height :: Int
- _frame_width :: Int
- frame_count :: Lens' SpriteFrame Int
- frame_height :: Lens' SpriteFrame Int
- frame_width :: Lens' SpriteFrame Int
- data Sprite = Sprite {}
- sprite_fps :: Lens' Sprite Double
- sprite_frame :: Lens' Sprite SpriteFrame
- sprite_height :: Lens' Sprite Int
- sprite_width :: Lens' Sprite Int
- sprite_type :: Lens' Sprite String
- sprite_heads :: Lens' Sprite [String]
- sprite_urls :: Lens' Sprite [String]
- data SidecarFile = SidecarFile {}
- sidecar_fps :: Lens' SidecarFile Double
- sidecar_label :: Lens' SidecarFile String
- sidecar_type :: Lens' SidecarFile String
- sidecar_head :: Lens' SidecarFile String
- sidecar_url :: Lens' SidecarFile String
- data FileStuff = FileStuff {
- _files :: [File]
- _variations :: [Variation]
- _sprites :: [Sprite]
- _sidecar_files :: [SidecarFile]
- files :: Lens' FileStuff [File]
- variations :: Lens' FileStuff [Variation]
- sprites :: Lens' FileStuff [Sprite]
- sidecar_files :: Lens' FileStuff [SidecarFile]
- data FileInfo = FileInfo {}
- fileStuff :: Lens' FileInfo FileStuff
- filename :: Lens' FileInfo String
- data Error = Error {}
- error_reason :: Lens' Error String
- error_code :: Lens' Error Int
- error_description :: Lens' Error String
- error_id :: Lens' Error String
- data Moment = Moment {
- _moment_id :: Text
- _moment_time :: Maybe Int
- moment_id :: Lens' Moment Text
- moment_time :: Lens' Moment (Maybe Int)
- moments :: (HasGoProAuth m, MonadIO m) => MediumID -> m [Moment]
- updateMedium :: (HasGoProAuth m, MonadIO m, FromJSON j, Putable a) => (j -> a) -> MediumID -> m ()
- putMedium :: (HasGoProAuth m, MonadIO m, Putable a) => MediumID -> a -> m ()
Accessing Data
:: (HasGoProAuth m, MonadIO m) | |
=> Int | Number of items per page. |
-> Int | Page number (one-based). |
-> m ([Medium], PageInfo) |
List a page worth of media.
listWhile :: (HasGoProAuth m, MonadIO m) => ([Medium] -> Bool) -> m [Medium] Source #
List all media while returned batches pass the given predicate.
medium :: (HasGoProAuth m, FromJSON j, MonadIO m) => MediumID -> m j Source #
Get the current Medium
record for the given Medium ID.
retrieve :: (HasGoProAuth m, FromJSON j, MonadIO m) => MediumID -> m j Source #
Get download descriptors for a given medium. The format is
typically FileInfo
, but it can be useful to map it into something
else.
fetchThumbnail :: (HasGoProAuth m, MonadIO m) => Medium -> m ByteString Source #
Fetch a 450px wide thumbnail data for the given medium.
Data Types
Pagination info returned from lists.
PageInfo | |
|
Instances
Eq PageInfo Source # | |
Show PageInfo Source # | |
Generic PageInfo Source # | |
Arbitrary PageInfo Source # | |
ToJSON PageInfo Source # | |
Defined in GoPro.Plus.Media | |
FromJSON PageInfo Source # | |
type Rep PageInfo Source # | |
Defined in GoPro.Plus.Media type Rep PageInfo = D1 ('MetaData "PageInfo" "GoPro.Plus.Media" "gopro-plus-0.6.0.3-1wKR3gDMAC3ESPt9Qc46CJ" 'False) (C1 ('MetaCons "PageInfo" 'PrefixI 'True) ((S1 ('MetaSel ('Just "_current_page") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "_per_page") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)) :*: (S1 ('MetaSel ('Just "_total_items") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "_total_pages") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))) |
data MediumType Source #
Type of Media for a given item.
Photo | a still photo |
Video | normal video |
TimeLapse | a timelapse series of photos |
TimeLapseVideo | a timelapse video |
Burst | a set of photos taken in a burst |
Instances
data ReadyToViewType Source #
Instances
Instances
Instances
Eq Listing Source # | |
Show Listing Source # | |
Generic Listing Source # | |
Arbitrary Listing Source # | |
ToJSON Listing Source # | |
Defined in GoPro.Plus.Media | |
FromJSON Listing Source # | |
type Rep Listing Source # | |
Defined in GoPro.Plus.Media type Rep Listing = D1 ('MetaData "Listing" "GoPro.Plus.Media" "gopro-plus-0.6.0.3-1wKR3gDMAC3ESPt9Qc46CJ" 'False) (C1 ('MetaCons "Listing" 'PrefixI 'True) (S1 ('MetaSel ('Just "_media") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Medium]) :*: S1 ('MetaSel ('Just "_pages") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PageInfo))) |
class HasMediaURL c where Source #
Instances
class HasMediaHead c where Source #
media_head :: Lens' c String Source #
Instances
HasMediaHead File Source # | |
Defined in GoPro.Plus.Media | |
HasMediaHead Variation Source # | |
Defined in GoPro.Plus.Media | |
HasMediaHead SidecarFile Source # | |
Defined in GoPro.Plus.Media |
class HasMediaLabel c where Source #
media_label :: Lens' c String Source #
Instances
HasMediaLabel Variation Source # | |
Defined in GoPro.Plus.Media | |
HasMediaLabel SidecarFile Source # | |
Defined in GoPro.Plus.Media |
class HasMediaType c where Source #
media_type :: Lens' c String Source #
Instances
HasMediaType Variation Source # | |
Defined in GoPro.Plus.Media | |
HasMediaType SidecarFile Source # | |
Defined in GoPro.Plus.Media |
File | |
|
Instances
Variation | |
|
Instances
data SpriteFrame Source #
SpriteFrame | |
|
Instances
Sprite | |
|
Instances
data SidecarFile Source #
SidecarFile | |
|
Instances
FileStuff | |
|
Instances
Eq FileStuff Source # | |
Show FileStuff Source # | |
Generic FileStuff Source # | |
Arbitrary FileStuff Source # | |
ToJSON FileStuff Source # | |
Defined in GoPro.Plus.Media | |
FromJSON FileStuff Source # | |
type Rep FileStuff Source # | |
Defined in GoPro.Plus.Media type Rep FileStuff = D1 ('MetaData "FileStuff" "GoPro.Plus.Media" "gopro-plus-0.6.0.3-1wKR3gDMAC3ESPt9Qc46CJ" 'False) (C1 ('MetaCons "FileStuff" 'PrefixI 'True) ((S1 ('MetaSel ('Just "_files") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [File]) :*: S1 ('MetaSel ('Just "_variations") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Variation])) :*: (S1 ('MetaSel ('Just "_sprites") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Sprite]) :*: S1 ('MetaSel ('Just "_sidecar_files") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [SidecarFile])))) |
Instances
Eq FileInfo Source # | |
Show FileInfo Source # | |
Generic FileInfo Source # | |
Arbitrary FileInfo Source # | |
ToJSON FileInfo Source # | |
Defined in GoPro.Plus.Media | |
FromJSON FileInfo Source # | |
type Rep FileInfo Source # | |
Defined in GoPro.Plus.Media type Rep FileInfo = D1 ('MetaData "FileInfo" "GoPro.Plus.Media" "gopro-plus-0.6.0.3-1wKR3gDMAC3ESPt9Qc46CJ" 'False) (C1 ('MetaCons "FileInfo" 'PrefixI 'True) (S1 ('MetaSel ('Just "_fileStuff") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FileStuff) :*: S1 ('MetaSel ('Just "_filename") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String))) |
Error | |
|
Instances
Show Error Source # | |
Generic Error Source # | |
FromJSON Error Source # | |
type Rep Error Source # | |
Defined in GoPro.Plus.Media type Rep Error = D1 ('MetaData "Error" "GoPro.Plus.Media" "gopro-plus-0.6.0.3-1wKR3gDMAC3ESPt9Qc46CJ" 'False) (C1 ('MetaCons "Error" 'PrefixI 'True) ((S1 ('MetaSel ('Just "_error_reason") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just "_error_code") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)) :*: (S1 ('MetaSel ('Just "_error_description") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Just "_error_id") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))) |
A moment of interestingness in a Medium.
Moment | |
|
Instances
Eq Moment Source # | |
Show Moment Source # | |
Generic Moment Source # | |
Arbitrary Moment Source # | |
ToJSON Moment Source # | |
Defined in GoPro.Plus.Media | |
FromJSON Moment Source # | |
type Rep Moment Source # | |
Defined in GoPro.Plus.Media type Rep Moment = D1 ('MetaData "Moment" "GoPro.Plus.Media" "gopro-plus-0.6.0.3-1wKR3gDMAC3ESPt9Qc46CJ" 'False) (C1 ('MetaCons "Moment" 'PrefixI 'True) (S1 ('MetaSel ('Just "_moment_id") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "_moment_time") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Int)))) |
moments :: (HasGoProAuth m, MonadIO m) => MediumID -> m [Moment] Source #
Get the moments for the given medium.
Low-level Junk
:: (HasGoProAuth m, MonadIO m, FromJSON j, Putable a) | |
=> (j -> a) | Transformation function. |
-> MediumID | Medium to update. |
-> m () |
Fetch, modify, and store a medium value.