the_little_streamer 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/the_little_streamer/html.rb +208 -0
  3. metadata +12 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b03679acd1ab6444fbfc9cfc7a12bf121bfba39e
4
- data.tar.gz: ce0b49c91defdfeb426e71a5f74908239b009edd
3
+ metadata.gz: 51105a77ed843dde2841f3dcdf07fec04e2b16c6
4
+ data.tar.gz: 4897f52dd669382e145ad146e718ad9fe4b8b05e
5
5
  SHA512:
6
- metadata.gz: da677439965af7e19dce818aaf4154eaa14572e195164bf88a748a612c9d176e37000e34627ff95bb7acb44c06d15326f1dc2a20cb4e080eca4c45b203a955dd
7
- data.tar.gz: 2af892f229291e69ef1f6d872836e2e1f0cdda49ea2265c04e3826c02524df2378081f83ddde69cc969b67620f8959b7bf7ca1cc83ea743988166e1eebec6de1
6
+ metadata.gz: 0183101cbdcf9f3efa30dcdbed1cd8fd3f49ef8b38090341c351bda1e6d554c0021e76083178dba4a8469e5b7f6b3b23fd6a369c9e8cde8abbdcf4a19f2827e2
7
+ data.tar.gz: 6083e64a11d887896d174475aee1a6da6aa91936edd5305533cc91f2aafea7d278d5e15f8b60873f37b3ef8b565ca7a271b0c7efed140ceab3b314ffc6bea458
@@ -0,0 +1,208 @@
1
+ module TLS::HTML
2
+ #Wrap up in HTML
3
+ def page body = nil
4
+ if block_given?
5
+ body = yield
6
+ end
7
+
8
+ <<-HTML
9
+ <html>
10
+ <head>
11
+ <style type="text/css">
12
+ #{css}
13
+ </style>
14
+ <title>The Little Streamer</title>
15
+ </head>
16
+ <body>
17
+ #{body}
18
+ </body>
19
+ <script>
20
+ if(document.getElementById('artist')) {
21
+ window.onload = function() {
22
+ var artist = document.getElementById('artist').firstChild.text;
23
+ var title = document.getElementById('title').textContent;
24
+ document.title = title + " by " + artist;
25
+ }
26
+ }
27
+ </script>
28
+ </html>
29
+ HTML
30
+ end
31
+
32
+ def css
33
+ @css ||= <<-CSS
34
+ body {
35
+ font-family: Helvetica,Verdana,Arial,sans-serif;
36
+ font-size: 13pt;
37
+ }
38
+
39
+ span#title {
40
+ font-size: 14pt;
41
+ font-weight: bold;
42
+ }
43
+
44
+ span#artist {
45
+ font-size: 14pt;
46
+ font-weight: bold;
47
+ }
48
+
49
+ span#artist a {
50
+ text-decoration: none;
51
+ color: black;
52
+ }
53
+
54
+ span#artist a:hover {
55
+ text-decoration: underline;
56
+ }
57
+
58
+ span#album {
59
+ font-style: italic;
60
+ }
61
+
62
+ span#album a {
63
+ text-decoration: none;
64
+ color: black;
65
+ }
66
+
67
+ span#album a:hover {
68
+ text-decoration: underline;
69
+ }
70
+
71
+ div#playlist {
72
+ float: left;
73
+ margin-top: 15px;
74
+ height: 80%;
75
+ overflow: auto;
76
+ text-align: left;
77
+ }
78
+
79
+ div#playerbox {
80
+ float: left;
81
+ text-align: center;
82
+ }
83
+ CSS
84
+
85
+ @css
86
+ end
87
+
88
+ #Create a link
89
+ def link root, path, text = path, params = {}
90
+ full_path = root.split('/').map! {|r| URI.escape r }.join('/') << "/" << URI.escape(path)
91
+ params = params.map { |k, v| "#{k}=#{v}" }.join "&"
92
+ "<a href=\"#{full_path}?#{params}\">#{text}</a>"
93
+ end
94
+
95
+ #Some navigation
96
+ def title artist, album = nil
97
+ if album
98
+ "<h3>#{link "/", "", "Music"} : #{link "/artist/", artist, artist} : #{album}</h3>"
99
+ else
100
+ "<h3>#{link "/", "", "Music"} : #{artist}</h3>"
101
+ end
102
+ end
103
+
104
+ #Audio tag
105
+ def audio path
106
+ <<-HTML
107
+ <audio id='player' onEnded='javascript:play_next()' src=#{("/" << URI.escape(path)).inspect} autobuffer controls autoplay >
108
+ You need the power of HTML5!
109
+ </audio>
110
+ <script type="text/javascript">
111
+ document.getElementById('player').volume = 0.3;
112
+ </script>
113
+ HTML
114
+ end
115
+
116
+ #HTML for displaying playlist
117
+ def playlist_html songs
118
+ list = []
119
+
120
+ songs.each_with_index do |song, i|
121
+ list << "<li><a href=\"javascript:play_index(#{i})\">#{song.artist} - #{song.title}</a></li>"
122
+ end
123
+
124
+ <<-HTML
125
+ <div style="clear:both">&nbsp;</div>
126
+ <div id="playlist">
127
+ <ol>
128
+ #{list.join}
129
+ </ol>
130
+ </div>
131
+ HTML
132
+ end
133
+
134
+ #Javascript for playlist
135
+ def playlist_js songs
136
+ <<-JAVASCRIPT
137
+ <script type="text/javascript">
138
+ var player = document.getElementById('player');
139
+ var artist = document.getElementById('artist');
140
+ var album = document.getElementById('album');
141
+ var title = document.getElementById('title');
142
+ var playlist = [#{songs.map { |s| song_to_js s }.join "," }]
143
+ var current_song = 0;
144
+
145
+ play_next = function(reverse) {
146
+ if(reverse && current_song > 0)
147
+ current_song--;
148
+ else if(!reverse && current_song < playlist.length)
149
+ current_song++;
150
+ else
151
+ return;
152
+
153
+ play_current();
154
+ }
155
+
156
+ play_current = function() {
157
+ var song = playlist[current_song];
158
+ player.src = song.path;
159
+ artist.innerHTML = song.artist
160
+ album.innerHTML = song.album
161
+ title.innerHTML = song.title
162
+ document.title = song.title + " by " + document.getElementById('artist').firstChild.text;
163
+ player.play();
164
+ }
165
+
166
+ play_index = function(index) {
167
+ current_song = index;
168
+ play_current();
169
+ }
170
+ </script>
171
+ JAVASCRIPT
172
+ end
173
+
174
+ #Javascript for a song
175
+ def song_to_js song
176
+ <<-JAVASCRIPT
177
+ { artist: #{link("/artist", song.artist, song.artist).inspect},
178
+ album: #{link("/artist/#{song.artist}/album/", song.album, song.album).inspect},
179
+ title: #{song.title.inspect},
180
+ path: #{(CGI.escapeHTML "/" << CGI.escape(song.path)).inspect} }
181
+ JAVASCRIPT
182
+ end
183
+
184
+ #HTML for song information header
185
+ def song_info song
186
+ "<span id='title'>#{song.title}</span> by <span id='artist'>#{link "/artist/", song.artist}</span><br/><span id='album'>#{link "/artist/#{song.artist}/album", song.album}</span>"
187
+ end
188
+
189
+ #Back/forward links
190
+ def prev_and_next
191
+ @prev_and_next ||= "<a href='javascript:play_next(true)'>Prev</a>&nbsp;&nbsp;&nbsp;<a href='javascript:play_next()'>Next</a>"
192
+ @prev_and_next
193
+ end
194
+
195
+ #Output HTML for player
196
+ def player_html songs
197
+ page <<-HTML
198
+ <div id="playerbox">
199
+ #{song_info songs.first}<br/>
200
+ #{audio songs.first.path}<br/>
201
+ #{prev_and_next if songs.length > 1}
202
+ #{playlist_js songs}
203
+ #{playlist_html songs if songs.length > 1}
204
+ <div style="clear:both">#{link "/", "", "Back to All Music"}</div>
205
+ </div>
206
+ HTML
207
+ end
208
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: the_little_streamer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Collins
@@ -14,28 +14,28 @@ dependencies:
14
14
  name: sinatra
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: taglib-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.6'
41
41
  description: Point the Little Streamer to your music directory and it will serve up
@@ -46,16 +46,16 @@ executables:
46
46
  extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
- - bin/the_little_streamer
50
49
  - README.md
50
+ - bin/the_little_streamer
51
51
  - lib/the_little_streamer.rb
52
52
  - lib/the_little_streamer/finder.rb
53
- - lib/the_little_streamer/player.rb
53
+ - lib/the_little_streamer/html.rb
54
54
  - lib/the_little_streamer/music.rb
55
+ - lib/the_little_streamer/player.rb
55
56
  - lib/the_little_streamer/song.rb
56
57
  homepage: http://github.com/presidentbeef/the_little_streamer
57
- licenses:
58
- - MIT
58
+ licenses: []
59
59
  metadata: {}
60
60
  post_install_message:
61
61
  rdoc_options: []
@@ -63,17 +63,17 @@ require_paths:
63
63
  - lib
64
64
  required_ruby_version: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - '>='
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  requirements: []
75
75
  rubyforge_project:
76
- rubygems_version: 2.1.11
76
+ rubygems_version: 2.2.2
77
77
  signing_key:
78
78
  specification_version: 4
79
79
  summary: Simple Sinatra application for streaming music.