gopro-plus 0.3.1.1 → 0.4.0.0
raw patch · 3 files changed
+75/−13 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ GoPro.Plus.Media: SidecarFile :: Int -> String -> String -> String -> String -> SidecarFile
+ GoPro.Plus.Media: [_file_head] :: File -> String
+ GoPro.Plus.Media: [_file_transforms] :: File -> Maybe [String]
+ GoPro.Plus.Media: [_sidecar_fps] :: SidecarFile -> Int
+ GoPro.Plus.Media: [_sidecar_head] :: SidecarFile -> String
+ GoPro.Plus.Media: [_sidecar_label] :: SidecarFile -> String
+ GoPro.Plus.Media: [_sidecar_type] :: SidecarFile -> String
+ GoPro.Plus.Media: [_sidecar_url] :: SidecarFile -> String
+ GoPro.Plus.Media: [_sprite_heads] :: Sprite -> [String]
+ GoPro.Plus.Media: [_var_head] :: Variation -> String
+ GoPro.Plus.Media: [_var_transforms] :: Variation -> Maybe [String]
+ GoPro.Plus.Media: class HasMediaLabel c
+ GoPro.Plus.Media: class HasMediaType c
+ GoPro.Plus.Media: class HasMediaURL c
+ GoPro.Plus.Media: data SidecarFile
+ GoPro.Plus.Media: file_head :: Lens' File String
+ GoPro.Plus.Media: file_transforms :: Lens' File (Maybe [String])
+ GoPro.Plus.Media: instance Data.Aeson.Types.FromJSON.FromJSON GoPro.Plus.Media.SidecarFile
+ GoPro.Plus.Media: instance GHC.Generics.Generic GoPro.Plus.Media.SidecarFile
+ GoPro.Plus.Media: instance GHC.Show.Show GoPro.Plus.Media.SidecarFile
+ GoPro.Plus.Media: instance GoPro.Plus.Media.HasMediaLabel GoPro.Plus.Media.SidecarFile
+ GoPro.Plus.Media: instance GoPro.Plus.Media.HasMediaLabel GoPro.Plus.Media.Variation
+ GoPro.Plus.Media: instance GoPro.Plus.Media.HasMediaType GoPro.Plus.Media.SidecarFile
+ GoPro.Plus.Media: instance GoPro.Plus.Media.HasMediaType GoPro.Plus.Media.Variation
+ GoPro.Plus.Media: instance GoPro.Plus.Media.HasMediaURL GoPro.Plus.Media.File
+ GoPro.Plus.Media: instance GoPro.Plus.Media.HasMediaURL GoPro.Plus.Media.SidecarFile
+ GoPro.Plus.Media: instance GoPro.Plus.Media.HasMediaURL GoPro.Plus.Media.Variation
+ GoPro.Plus.Media: media_label :: HasMediaLabel c => Lens' c String
+ GoPro.Plus.Media: media_type :: HasMediaType c => Lens' c String
+ GoPro.Plus.Media: media_url :: HasMediaURL c => Lens' c String
+ GoPro.Plus.Media: sidecar_fps :: Lens' SidecarFile Int
+ GoPro.Plus.Media: sidecar_head :: Lens' SidecarFile String
+ GoPro.Plus.Media: sidecar_label :: Lens' SidecarFile String
+ GoPro.Plus.Media: sidecar_type :: Lens' SidecarFile String
+ GoPro.Plus.Media: sidecar_url :: Lens' SidecarFile String
+ GoPro.Plus.Media: sprite_heads :: Lens' Sprite [String]
+ GoPro.Plus.Media: var_head :: Lens' Variation String
+ GoPro.Plus.Media: var_transforms :: Lens' Variation (Maybe [String])
- GoPro.Plus.Media: File :: String -> Int -> Int -> Int -> Int -> String -> File
+ GoPro.Plus.Media: File :: String -> Int -> Int -> Int -> Int -> Maybe [String] -> String -> String -> File
- GoPro.Plus.Media: FileStuff :: [File] -> [Variation] -> [Sprite] -> [Value] -> FileStuff
+ GoPro.Plus.Media: FileStuff :: [File] -> [Variation] -> [Sprite] -> [SidecarFile] -> FileStuff
- GoPro.Plus.Media: Sprite :: Double -> SpriteFrame -> Int -> Int -> String -> [String] -> Sprite
+ GoPro.Plus.Media: Sprite :: Double -> SpriteFrame -> Int -> Int -> String -> [String] -> [String] -> Sprite
- GoPro.Plus.Media: Variation :: Int -> Int -> String -> String -> String -> String -> Variation
+ GoPro.Plus.Media: Variation :: Int -> Int -> String -> String -> Maybe [String] -> String -> String -> String -> Variation
- GoPro.Plus.Media: [_sidecar_files] :: FileStuff -> [Value]
+ GoPro.Plus.Media: [_sidecar_files] :: FileStuff -> [SidecarFile]
- GoPro.Plus.Media: sidecar_files :: Lens' FileStuff [Value]
+ GoPro.Plus.Media: sidecar_files :: Lens' FileStuff [SidecarFile]
Files
- gopro-plus.cabal +2/−2
- src/GoPro/Plus/Media.hs +50/−10
- test/Spec.hs +23/−1
gopro-plus.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 1b17e91a409617284416087aef77c7dfc75822817835c9a0faeae5f3a9b8709b+-- hash: c4a43a2cafe660b7470ec32c0dfa673a4c94724aaed4a35b1b1a10ae30f0cf46 name: gopro-plus-version: 0.3.1.1+version: 0.4.0.0 synopsis: GoPro Plus Client API. description: Please see the README on GitHub at <https://github.com/dustin/gopro-plus#readme> category: Web
src/GoPro/Plus/Media.hs view
@@ -26,13 +26,15 @@ medium_ready_to_view, medium_source_duration, medium_type, medium_token, medium_width, medium_height, Listing(..), media, pages,+ HasMediaURL(..), HasMediaLabel(..), HasMediaType(..), File(..), file_camera_position, file_height, file_width,- file_item_number, file_orientation, file_url,+ file_item_number, file_orientation, file_head, file_url, file_transforms, Variation(..), var_height, var_width, var_label, var_quality,- var_type, var_url,+ var_type, var_transforms, var_head, var_url, SpriteFrame(..), frame_count, frame_height, frame_width, Sprite(..), sprite_fps, sprite_frame, sprite_height, sprite_width,- sprite_type, sprite_urls,+ sprite_type, sprite_heads, sprite_urls,+ SidecarFile(..), sidecar_fps, sidecar_label, sidecar_type, sidecar_head, sidecar_url, FileStuff(..), files, variations, sprites, sidecar_files, FileInfo(..), fileStuff, filename, Error(..), error_reason, error_code, error_description, error_id,@@ -194,36 +196,54 @@ then dig (n + 1) m' else pure m' +class HasMediaURL c where+ media_url :: 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 :: String , _file_height :: Int , _file_width :: Int , _file_item_number :: Int , _file_orientation :: Int+ , _file_transforms :: Maybe [String]+ , _file_head :: String , _file_url :: String } deriving (Generic, Show) makeLenses ''File +instance HasMediaURL File where media_url = file_url+ instance FromJSON File where parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = dropPrefix "_file_" } data Variation = Variation- { _var_height :: Int- , _var_width :: Int- , _var_label :: String- , _var_quality :: String- , _var_type :: String- , _var_url :: String+ { _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 } deriving (Generic, Show) makeLenses ''Variation +instance HasMediaURL Variation where media_url = var_url+instance HasMediaLabel Variation where media_label = var_label+instance HasMediaType Variation where media_type = var_type+ instance FromJSON Variation where parseJSON = genericParseJSON defaultOptions { fieldLabelModifier = dropPrefix "_var_"@@ -249,6 +269,7 @@ , _sprite_height :: Int , _sprite_width :: Int , _sprite_type :: String+ , _sprite_heads :: [String] , _sprite_urls :: [String] } deriving (Generic, Show)@@ -260,11 +281,30 @@ fieldLabelModifier = dropPrefix "_sprite_" } +data SidecarFile = SidecarFile+ { _sidecar_fps :: Int+ , _sidecar_label :: String+ , _sidecar_type :: String+ , _sidecar_head :: String+ , _sidecar_url :: String+ } deriving (Generic, Show)++makeLenses ''SidecarFile++instance HasMediaURL SidecarFile where media_url = sidecar_url+instance HasMediaLabel SidecarFile where media_label = sidecar_label+instance HasMediaType SidecarFile where media_type = sidecar_type++instance FromJSON SidecarFile where+ parseJSON = genericParseJSON defaultOptions {+ fieldLabelModifier = dropPrefix "_sidecar_"+ }+ data FileStuff = FileStuff { _files :: [File] , _variations :: [Variation] , _sprites :: [Sprite]- , _sidecar_files :: [Value]+ , _sidecar_files :: [SidecarFile] } deriving (Generic, Show)
test/Spec.hs view
@@ -26,9 +26,31 @@ assertEqual (show l) [Video, Photo] (l ^.. _Just . media . folded . medium_type) assertEqual (show l) ["62NzWRrpPXm7o", "EDavpqr4GVe8O"] (l ^.. _Just . media . folded . medium_id) +testFileInfo :: Assertion+testFileInfo = do+ fi <- J.decode <$> BL.readFile "test/mediaex.json" :: IO (Maybe FileInfo)+ assertEqual (show fi) (Just "G0000004.JPG") (fi ^? _Just . filename)+ let Just fs = fi ^? _Just . fileStuff+ assertEqual (show fs) ["http://a/", "http://aprime/"] (fs ^.. files . folded . media_url)+ assertEqual (show fs) ["http://b/"] (fs ^.. sidecar_files . folded . media_url)+ assertEqual (show fs) ["http://d/", "http://e/", "http://f/"] (fs ^.. variations . folded . media_url)++ assertEqual (show fs) ["ziplabel", "timelapse_video", "high_res_proxy_mp4", "mp4_low"] (+ mconcat [fs ^.. sidecar_files . folded . media_label, fs ^.. variations . folded . media_label])++ assertEqual (show fs) ["zip", "mp4", "mp4", "mp4"] (+ mconcat [fs ^.. sidecar_files . folded . media_type, fs ^.. variations . folded . media_type])++ assertEqual (show fs) [["antishake", "horizon"],+ ["proshake", "verizon"]] (fs ^.. variations . folded . var_transforms . _Just)++ assertEqual (show fs) "intoalightpost" (fs ^. files . folded . file_transforms . folded . folded)++ tests :: [TestTree] tests = [- testCase "Parsing" testSearchParser+ testCase "Parsing" testSearchParser,+ testCase "FileInfo" testFileInfo ] main :: IO ()