Better requests, code needs cleaning
This commit is contained in:
parent
65c8e5935b
commit
72b0e8775c
28
index.html
28
index.html
|
@ -19,22 +19,24 @@
|
||||||
|
|
||||||
var lastId, player;
|
var lastId, player;
|
||||||
|
|
||||||
app.ports.registerVideo.subscribe(function(args) {
|
if (app.ports !== undefined && app.ports.registerVideo !== undefined) {
|
||||||
var time = parseInt(args[2], 10) || undefined;
|
app.ports.registerVideo.subscribe(function(args) {
|
||||||
|
var time = parseInt(args[2], 10) || undefined;
|
||||||
|
|
||||||
requestAnimationFrame(function() {
|
requestAnimationFrame(function() {
|
||||||
if (args[0] !== lastId) {
|
if (args[0] !== lastId) {
|
||||||
lastId = args[0];
|
lastId = args[0];
|
||||||
|
|
||||||
player = vd.setup(args[0], {
|
player = vd.setup(args[0], {
|
||||||
v: args[1] + "/manifest.mpd",
|
v: args[1] + "/manifest.mpd",
|
||||||
t: parseInt(args[2], 10) || 0
|
t: parseInt(args[2], 10) || 0
|
||||||
});
|
});
|
||||||
} else if (time !== undefined ){
|
} else if (time !== undefined ){
|
||||||
player.currentTime(time);
|
player.currentTime(time);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
80
src/Core.elm
80
src/Core.elm
|
@ -27,16 +27,18 @@ type alias Model =
|
||||||
|
|
||||||
type Page
|
type Page
|
||||||
= Home
|
= Home
|
||||||
| Playlist Twitch.Playlist
|
| Playlist Twitch.PlaylistWithVideos
|
||||||
| Video Twitch.Playlist Twitch.Video
|
| Video Twitch.PlaylistWithVideos Twitch.Video
|
||||||
|
|
||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
= Noop
|
= Noop
|
||||||
| PlaylistsReceived ( List Twitch.Playlist, Time.Zone )
|
| PlaylistsReceived ( List Twitch.Playlist, Time.Zone )
|
||||||
| HomeClicked
|
| HomeClicked
|
||||||
| PlaylistClicked Twitch.Playlist
|
| PlaylistClicked String
|
||||||
| VideoClicked Twitch.Playlist Twitch.Video
|
| PlaylistReceived Twitch.PlaylistWithVideos
|
||||||
|
| PlaylistReceivedVideo String (Maybe Int) Twitch.PlaylistWithVideos
|
||||||
|
| VideoClicked Twitch.PlaylistWithVideos Twitch.Video
|
||||||
| UrlReceived Url.Url
|
| UrlReceived Url.Url
|
||||||
| SizeReceived Int Int
|
| SizeReceived Int Int
|
||||||
|
|
||||||
|
@ -76,7 +78,7 @@ update msg model =
|
||||||
|
|
||||||
( PlaylistClicked playlist, Loaded m ) ->
|
( PlaylistClicked playlist, Loaded m ) ->
|
||||||
( model
|
( model
|
||||||
, Nav.pushUrl m.key ("#" ++ playlist.url)
|
, Nav.pushUrl m.key ("#" ++ playlist)
|
||||||
)
|
)
|
||||||
|
|
||||||
( VideoClicked playlist video, Loaded m ) ->
|
( VideoClicked playlist video, Loaded m ) ->
|
||||||
|
@ -92,10 +94,14 @@ update msg model =
|
||||||
( split, args ) =
|
( split, args ) =
|
||||||
case splits of
|
case splits of
|
||||||
h1 :: h2 :: _ ->
|
h1 :: h2 :: _ ->
|
||||||
( String.split "/" h1, parseQueryString h2 )
|
( String.split "/" h1 |> List.filter (not << String.isEmpty)
|
||||||
|
, parseQueryString h2
|
||||||
|
)
|
||||||
|
|
||||||
h1 :: _ ->
|
h1 :: _ ->
|
||||||
( String.split "/" h1, Dict.empty )
|
( String.split "/" h1 |> List.filter (not << String.isEmpty)
|
||||||
|
, Dict.empty
|
||||||
|
)
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
( [], Dict.empty )
|
( [], Dict.empty )
|
||||||
|
@ -123,31 +129,73 @@ update msg model =
|
||||||
( Nothing, Nothing )
|
( Nothing, Nothing )
|
||||||
|
|
||||||
playlist =
|
playlist =
|
||||||
List.head (List.filter (\x -> Just x.url == playlistName) m.playlists)
|
case m.page of
|
||||||
|
Playlist p ->
|
||||||
|
Just p
|
||||||
|
|
||||||
video =
|
Video p _ ->
|
||||||
|
Just p
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
realVideo =
|
||||||
case playlist of
|
case playlist of
|
||||||
Just p ->
|
Just p ->
|
||||||
List.head (List.filter (\x -> Just (Twitch.videoName x) == videoName) p.videos)
|
case List.head (List.filter (\x -> Just (Twitch.videoName x) == videoName) p.videos) of
|
||||||
|
Just v ->
|
||||||
|
Just v
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
Nothing
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
( page, cmd ) =
|
( page, cmd ) =
|
||||||
case ( playlist, video ) of
|
case ( ( playlist, realVideo ), ( playlistName, videoName ) ) of
|
||||||
( Just p, Just v ) ->
|
( ( Just p, _ ), ( Just _, Nothing ) ) ->
|
||||||
( Video p v
|
( Playlist p
|
||||||
, Ports.registerVideo ( Twitch.videoId v, v.url, time )
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
( Just p, Nothing ) ->
|
( ( Just p, Just video ), ( Just _, Just _ ) ) ->
|
||||||
( Playlist p, Cmd.none )
|
( Video p video
|
||||||
|
, Ports.registerVideo ( Twitch.videoId video, video.url, time )
|
||||||
|
)
|
||||||
|
|
||||||
|
( ( _, _ ), ( Just name, Nothing ) ) ->
|
||||||
|
( m.page
|
||||||
|
, Task.perform
|
||||||
|
PlaylistReceived
|
||||||
|
(Twitch.fetchPlaylistWithVideos name)
|
||||||
|
)
|
||||||
|
|
||||||
|
( ( _, _ ), ( Just name, Just video ) ) ->
|
||||||
|
( m.page
|
||||||
|
, Task.perform
|
||||||
|
(PlaylistReceivedVideo video time)
|
||||||
|
(Twitch.fetchPlaylistWithVideos name)
|
||||||
|
)
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
( Home, Cmd.none )
|
( Home, Cmd.none )
|
||||||
in
|
in
|
||||||
( Loaded { m | page = page }, cmd )
|
( Loaded { m | page = page }, cmd )
|
||||||
|
|
||||||
|
( PlaylistReceived p, Loaded m ) ->
|
||||||
|
( Loaded { m | page = Playlist p }, Cmd.none )
|
||||||
|
|
||||||
|
( PlaylistReceivedVideo video time playlist, Loaded m ) ->
|
||||||
|
case List.head (List.filter (\x -> Twitch.videoName x == video) playlist.videos) of
|
||||||
|
Just v ->
|
||||||
|
( Loaded { m | page = Video playlist v }
|
||||||
|
, Ports.registerVideo ( Twitch.videoId v, v.url, time )
|
||||||
|
)
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
( Loaded { m | page = Home }, Cmd.none )
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
( model, Cmd.none )
|
( model, Cmd.none )
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
module Twitch exposing
|
module Twitch exposing
|
||||||
( Playlist
|
( Playlist
|
||||||
|
, PlaylistWithVideos
|
||||||
, Video
|
, Video
|
||||||
|
, fetchPlaylistWithVideos
|
||||||
, fetchPlaylists
|
, fetchPlaylists
|
||||||
, playlistMiniatureUrl
|
, playlistMiniatureUrl
|
||||||
, videoId
|
, videoId
|
||||||
|
@ -17,6 +19,13 @@ import Time
|
||||||
|
|
||||||
|
|
||||||
type alias Playlist =
|
type alias Playlist =
|
||||||
|
{ url : String
|
||||||
|
, name : String
|
||||||
|
, videos : List String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias PlaylistWithVideos =
|
||||||
{ url : String
|
{ url : String
|
||||||
, name : String
|
, name : String
|
||||||
, videos : List Video
|
, videos : List Video
|
||||||
|
@ -57,7 +66,7 @@ playlistMiniatureUrl : Playlist -> String
|
||||||
playlistMiniatureUrl playlist =
|
playlistMiniatureUrl playlist =
|
||||||
case List.head playlist.videos of
|
case List.head playlist.videos of
|
||||||
Just v ->
|
Just v ->
|
||||||
v.url ++ "miniature-050.png"
|
"videos/" ++ playlist.url ++ v ++ "miniature-050.png"
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
""
|
""
|
||||||
|
@ -70,7 +79,7 @@ videoMiniatureUrl video =
|
||||||
|
|
||||||
sortPlaylist : Playlist -> Playlist
|
sortPlaylist : Playlist -> Playlist
|
||||||
sortPlaylist playlist =
|
sortPlaylist playlist =
|
||||||
{ playlist | videos = List.sortBy .url playlist.videos |> List.reverse }
|
{ playlist | videos = List.sort playlist.videos |> List.reverse }
|
||||||
|
|
||||||
|
|
||||||
sortPlaylists : List Playlist -> List Playlist
|
sortPlaylists : List Playlist -> List Playlist
|
||||||
|
@ -105,11 +114,22 @@ fetchPlaylist name =
|
||||||
|> Task.andThen
|
|> Task.andThen
|
||||||
(\a ->
|
(\a ->
|
||||||
fetchPlaylistVideoPaths name
|
fetchPlaylistVideoPaths name
|
||||||
|> Task.andThen (\c -> fetchVideos name c)
|
-- |> Task.andThen (\c -> fetchVideos name c)
|
||||||
|> Task.map (Playlist name a)
|
|> Task.map (Playlist name a)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
fetchPlaylistWithVideos : String -> Task x PlaylistWithVideos
|
||||||
|
fetchPlaylistWithVideos name =
|
||||||
|
fetchPlaylistName name
|
||||||
|
|> Task.andThen
|
||||||
|
(\a ->
|
||||||
|
fetchPlaylistVideoPaths name
|
||||||
|
|> Task.andThen (\c -> fetchVideos name c)
|
||||||
|
|> Task.map (PlaylistWithVideos name a)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
fetchVideo : String -> String -> Task x Video
|
fetchVideo : String -> String -> Task x Video
|
||||||
fetchVideo playlist video =
|
fetchVideo playlist video =
|
||||||
let
|
let
|
||||||
|
|
|
@ -171,13 +171,13 @@ playlistView playlist =
|
||||||
button =
|
button =
|
||||||
Input.button [ Element.width Element.fill, Element.alignTop ]
|
Input.button [ Element.width Element.fill, Element.alignTop ]
|
||||||
{ label = display
|
{ label = display
|
||||||
, onPress = Just (Core.PlaylistClicked playlist)
|
, onPress = Just (Core.PlaylistClicked playlist.url)
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
button
|
button
|
||||||
|
|
||||||
|
|
||||||
videoMiniaturesView : Element.Device -> Time.Zone -> Twitch.Playlist -> Element Core.Msg
|
videoMiniaturesView : Element.Device -> Time.Zone -> Twitch.PlaylistWithVideos -> Element Core.Msg
|
||||||
videoMiniaturesView device zone playlist =
|
videoMiniaturesView device zone playlist =
|
||||||
let
|
let
|
||||||
empty =
|
empty =
|
||||||
|
@ -231,7 +231,7 @@ videoMiniature video =
|
||||||
image
|
image
|
||||||
|
|
||||||
|
|
||||||
videoMiniatureView : Time.Zone -> Twitch.Playlist -> Twitch.Video -> Element Core.Msg
|
videoMiniatureView : Time.Zone -> Twitch.PlaylistWithVideos -> Twitch.Video -> Element Core.Msg
|
||||||
videoMiniatureView zone playlist video =
|
videoMiniatureView zone playlist video =
|
||||||
let
|
let
|
||||||
display =
|
display =
|
||||||
|
@ -249,7 +249,7 @@ videoMiniatureView zone playlist video =
|
||||||
button
|
button
|
||||||
|
|
||||||
|
|
||||||
videoInList : Time.Zone -> Twitch.Playlist -> Twitch.Video -> Twitch.Video -> Element Core.Msg
|
videoInList : Time.Zone -> Twitch.PlaylistWithVideos -> Twitch.Video -> Twitch.Video -> Element Core.Msg
|
||||||
videoInList zone playlist activeVideo video =
|
videoInList zone playlist activeVideo video =
|
||||||
let
|
let
|
||||||
( msg, attr ) =
|
( msg, attr ) =
|
||||||
|
@ -276,7 +276,7 @@ videoInList zone playlist activeVideo video =
|
||||||
Input.button attr { label = label, onPress = msg }
|
Input.button attr { label = label, onPress = msg }
|
||||||
|
|
||||||
|
|
||||||
videoView : Element.Device -> Time.Zone -> Twitch.Playlist -> Twitch.Video -> Element Core.Msg
|
videoView : Element.Device -> Time.Zone -> Twitch.PlaylistWithVideos -> Twitch.Video -> Element Core.Msg
|
||||||
videoView device zone playlist video =
|
videoView device zone playlist video =
|
||||||
let
|
let
|
||||||
( builder, contentPadding ) =
|
( builder, contentPadding ) =
|
||||||
|
|
Loading…
Reference in New Issue