gnome-tv 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,43 @@
1
+ Gnome TV
2
+ ========
3
+
4
+ A GNOME menu entry which:
5
+
6
+ - looks for an available TV stream URL provider (Freebox, Neufbox, <your provider here>...)
7
+ - launches Totem with the associated URL
8
+
9
+
10
+ Install
11
+ -------
12
+
13
+ Using rubygems:
14
+
15
+ gem install gnome-tv
16
+
17
+ Once installed, the following command will add an entry to the GNOME menu with a nice TV icon:
18
+
19
+ gnome-tv-install
20
+
21
+ To do
22
+ -----
23
+
24
+ - Store found provider in ~/.config/gnome-tv, and use it next time gnome-tv is launched.
25
+ - Optimize provider lookup (by country ? DNS ? using NetworkManager ?)
26
+ - Extend the DSL (udp:// streams support ? )
27
+ - Integrate with the preferred applications dialog ?
28
+
29
+
30
+ Adding a new provider
31
+ ---------------------
32
+
33
+ See http://github.com/sebn/gnome-tv/blob/master/lib/providers/freebox.rb
34
+
35
+ Feel free to fork the project and extend the DSL to support your new provider.
36
+
37
+
38
+ License
39
+ -------
40
+
41
+ Copyright © 2010 Sébastien Nicouleaud. See LICENSE file for more details.
42
+
43
+
@@ -0,0 +1,6 @@
1
+ desc 'Run in-place'
2
+ task :run do
3
+ $:.unshift(File.dirname(__FILE__) + '/lib')
4
+ load 'bin/gnome-tv'
5
+ end
6
+
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gnome_tv'
4
+ GnomeTV.watch
5
+
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'gnome_tv'
4
+ require 'fileutils'
5
+ include FileUtils
6
+
7
+ DESKTOP_FILE = "#{GnomeTV::DATA_DIR}/gnome-tv.desktop"
8
+ ICONS = Dir["#{GnomeTV::DATA_DIR}/icons/**/*.*"]
9
+ PREFIX = "/usr/local/share"
10
+ APPLICATIONS_DIR = "#{PREFIX}/applications"
11
+ ICONS_DIR = "#{PREFIX}/icons/hicolor"
12
+
13
+ mkdir_p APPLICATIONS_DIR unless File.directory? APPLICATIONS_DIR
14
+ install DESKTOP_FILE, APPLICATIONS_DIR
15
+
16
+ ICONS.each do |icon|
17
+ target = File.join(ICONS_DIR, *icon.split('/')[-3..-1])
18
+ target_dir = File.dirname(target)
19
+
20
+ mkdir_p target_dir
21
+ install icon, target
22
+ end
23
+
@@ -0,0 +1,14 @@
1
+ [Desktop Entry]
2
+ Name=Television
3
+ Comment=Watch television
4
+ Exec=gnome-tv
5
+ Icon=tv
6
+ Terminal=false
7
+ Type=Application
8
+ Categories=GTK;GNOME;AudioVideo;Video;
9
+ OnlyShowIn=GNOME;
10
+ X-GNOME-Bugzilla-Bugzilla=GNOME
11
+ X-GNOME-Bugzilla-Product=gnome-desktop
12
+ X-GNOME-Bugzilla-Component=gnome-about
13
+ X-GNOME-Bugzilla-Version=2.30.0
14
+ StartupNotify=true
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{gnome-tv}
5
+ s.version = '0.1'
6
+ s.authors = ["Sébastien Nicouleaud"]
7
+ s.date = %q{2009-10-18}
8
+ s.default_executable = %q{gnome-tv}
9
+ s.description = %q{Watch TV}
10
+ s.email = %q{sebastien.nicouleaud@gmail.com}
11
+ s.executables = ["gnome-tv", "gnome-tv-install"]
12
+ s.files = `find * -type f`.split("\n")
13
+ s.homepage = %q{http://github.com/sebn/gnome-tv}
14
+ s.require_paths = ["lib"]
15
+ s.rubyforge_project = %q{rack}
16
+ s.rubygems_version = %q{1.3.7}
17
+ s.summary = %q{a modular Ruby webserver interface}
18
+ end
19
+
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,386 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+ <svg
4
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
5
+ xmlns:cc="http://web.resource.org/cc/"
6
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7
+ xmlns:svg="http://www.w3.org/2000/svg"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ xmlns:xlink="http://www.w3.org/1999/xlink"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="48"
13
+ height="48"
14
+ id="svg2"
15
+ sodipodi:version="0.32"
16
+ inkscape:version="0.45+devel"
17
+ sodipodi:docbase="/home/needcoffee/Templates"
18
+ sodipodi:docname="tv.svg"
19
+ version="1.0"
20
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
21
+ <defs
22
+ id="defs4">
23
+ <linearGradient
24
+ inkscape:collect="always"
25
+ id="linearGradient8228">
26
+ <stop
27
+ style="stop-color:#000000;stop-opacity:1;"
28
+ offset="0"
29
+ id="stop8230" />
30
+ <stop
31
+ style="stop-color:#000000;stop-opacity:0;"
32
+ offset="1"
33
+ id="stop8232" />
34
+ </linearGradient>
35
+ <linearGradient
36
+ id="linearGradient7815">
37
+ <stop
38
+ style="stop-color:#000000;stop-opacity:0;"
39
+ offset="0"
40
+ id="stop7817" />
41
+ <stop
42
+ id="stop7823"
43
+ offset="0.5"
44
+ style="stop-color:#000000;stop-opacity:1;" />
45
+ <stop
46
+ style="stop-color:#000000;stop-opacity:0;"
47
+ offset="1"
48
+ id="stop7819" />
49
+ </linearGradient>
50
+ <linearGradient
51
+ inkscape:collect="always"
52
+ id="linearGradient7422">
53
+ <stop
54
+ style="stop-color:#000000;stop-opacity:1;"
55
+ offset="0"
56
+ id="stop7424" />
57
+ <stop
58
+ style="stop-color:#000000;stop-opacity:0;"
59
+ offset="1"
60
+ id="stop7426" />
61
+ </linearGradient>
62
+ <linearGradient
63
+ id="linearGradient6646">
64
+ <stop
65
+ style="stop-color:#eeeeec;stop-opacity:1"
66
+ offset="0"
67
+ id="stop6648" />
68
+ <stop
69
+ style="stop-color:#555753;stop-opacity:1"
70
+ offset="1"
71
+ id="stop6650" />
72
+ </linearGradient>
73
+ <linearGradient
74
+ inkscape:collect="always"
75
+ id="linearGradient6257">
76
+ <stop
77
+ style="stop-color:#555753;stop-opacity:1;"
78
+ offset="0"
79
+ id="stop6259" />
80
+ <stop
81
+ style="stop-color:#2e3436;stop-opacity:1"
82
+ offset="1"
83
+ id="stop6261" />
84
+ </linearGradient>
85
+ <linearGradient
86
+ id="linearGradient5863">
87
+ <stop
88
+ style="stop-color:#000000;stop-opacity:1;"
89
+ offset="0"
90
+ id="stop5865" />
91
+ <stop
92
+ style="stop-color:#2e3436;stop-opacity:1"
93
+ offset="1"
94
+ id="stop5867" />
95
+ </linearGradient>
96
+ <linearGradient
97
+ id="linearGradient5088">
98
+ <stop
99
+ style="stop-color:#ffffff;stop-opacity:0.54347825;"
100
+ offset="0"
101
+ id="stop5090" />
102
+ <stop
103
+ style="stop-color:#729fcf;stop-opacity:1;"
104
+ offset="1"
105
+ id="stop5092" />
106
+ </linearGradient>
107
+ <linearGradient
108
+ id="linearGradient4701"
109
+ inkscape:collect="always">
110
+ <stop
111
+ id="stop4703"
112
+ offset="0"
113
+ style="stop-color:#729fcf;stop-opacity:1" />
114
+ <stop
115
+ id="stop4705"
116
+ offset="1"
117
+ style="stop-color:#3465a4;stop-opacity:1" />
118
+ </linearGradient>
119
+ <linearGradient
120
+ inkscape:collect="always"
121
+ id="linearGradient4301">
122
+ <stop
123
+ style="stop-color:#ffffff;stop-opacity:1;"
124
+ offset="0"
125
+ id="stop4303" />
126
+ <stop
127
+ style="stop-color:#ffffff;stop-opacity:0;"
128
+ offset="1"
129
+ id="stop4305" />
130
+ </linearGradient>
131
+ <linearGradient
132
+ inkscape:collect="always"
133
+ id="linearGradient3145">
134
+ <stop
135
+ style="stop-color:#ffffff;stop-opacity:1;"
136
+ offset="0"
137
+ id="stop3147" />
138
+ <stop
139
+ style="stop-color:#ffffff;stop-opacity:0;"
140
+ offset="1"
141
+ id="stop3149" />
142
+ </linearGradient>
143
+ <linearGradient
144
+ inkscape:collect="always"
145
+ xlink:href="#linearGradient3145"
146
+ id="linearGradient3151"
147
+ x1="7"
148
+ y1="-1"
149
+ x2="12"
150
+ y2="16"
151
+ gradientUnits="userSpaceOnUse"
152
+ gradientTransform="matrix(1,0,0,1.5,-8.9269482e-8,-3)" />
153
+ <linearGradient
154
+ inkscape:collect="always"
155
+ xlink:href="#linearGradient4301"
156
+ id="linearGradient4307"
157
+ x1="-5"
158
+ y1="-7"
159
+ x2="39"
160
+ y2="30"
161
+ gradientUnits="userSpaceOnUse"
162
+ gradientTransform="matrix(0.9166667,0,0,1,1.4999999,0)" />
163
+ <radialGradient
164
+ inkscape:collect="always"
165
+ xlink:href="#linearGradient4701"
166
+ id="radialGradient4699"
167
+ gradientUnits="userSpaceOnUse"
168
+ gradientTransform="matrix(1.6128206,4.953674e-8,-1.796921e-8,0.6499999,-14.707692,8.0499982)"
169
+ cx="24"
170
+ cy="39.923077"
171
+ fx="24"
172
+ fy="39.923077"
173
+ r="20" />
174
+ <linearGradient
175
+ inkscape:collect="always"
176
+ xlink:href="#linearGradient5088"
177
+ id="linearGradient5097"
178
+ gradientUnits="userSpaceOnUse"
179
+ x1="2"
180
+ y1="-4"
181
+ x2="19"
182
+ y2="30"
183
+ gradientTransform="matrix(0.9459461,0,0,1,1.2972975,1.1192092e-6)" />
184
+ <linearGradient
185
+ inkscape:collect="always"
186
+ xlink:href="#linearGradient5863"
187
+ id="linearGradient5872"
188
+ gradientUnits="userSpaceOnUse"
189
+ x1="8"
190
+ y1="37"
191
+ x2="8"
192
+ y2="41"
193
+ gradientTransform="matrix(4.6249999,0,0,1.3333327,-15.312499,-13.49998)" />
194
+ <linearGradient
195
+ inkscape:collect="always"
196
+ xlink:href="#linearGradient6257"
197
+ id="linearGradient6263"
198
+ x1="12.283331"
199
+ y1="41.250008"
200
+ x2="12.283331"
201
+ y2="36.750004"
202
+ gradientUnits="userSpaceOnUse"
203
+ gradientTransform="matrix(0.8108109,0,0,-0.6666662,2.0405412,64.499985)" />
204
+ <radialGradient
205
+ inkscape:collect="always"
206
+ xlink:href="#linearGradient6646"
207
+ id="radialGradient6652"
208
+ cx="12"
209
+ cy="8.4459467"
210
+ fx="12"
211
+ fy="8.4459467"
212
+ r="22"
213
+ gradientTransform="matrix(0.5336804,1.3433128,-1.5602536,0.6818182,19.331795,-10.878352)"
214
+ gradientUnits="userSpaceOnUse" />
215
+ <radialGradient
216
+ inkscape:collect="always"
217
+ xlink:href="#linearGradient7422"
218
+ id="radialGradient7831"
219
+ gradientUnits="userSpaceOnUse"
220
+ gradientTransform="matrix(1,0,0,1.2500003,0,-10.875016)"
221
+ cx="2"
222
+ cy="43.5"
223
+ fx="2"
224
+ fy="43.5"
225
+ r="2" />
226
+ <radialGradient
227
+ inkscape:collect="always"
228
+ xlink:href="#linearGradient7422"
229
+ id="radialGradient7833"
230
+ gradientUnits="userSpaceOnUse"
231
+ gradientTransform="matrix(1,0,0,1.2500003,44,-10.875014)"
232
+ cx="2"
233
+ cy="43.5"
234
+ fx="2"
235
+ fy="43.5"
236
+ r="2" />
237
+ <linearGradient
238
+ inkscape:collect="always"
239
+ xlink:href="#linearGradient7815"
240
+ id="linearGradient7835"
241
+ gradientUnits="userSpaceOnUse"
242
+ x1="6"
243
+ y1="41"
244
+ x2="6"
245
+ y2="46" />
246
+ <linearGradient
247
+ inkscape:collect="always"
248
+ xlink:href="#linearGradient8228"
249
+ id="linearGradient8234"
250
+ x1="10"
251
+ y1="40.999996"
252
+ x2="10"
253
+ y2="35.999996"
254
+ gradientUnits="userSpaceOnUse"
255
+ gradientTransform="translate(0,3.387501e-6)" />
256
+ </defs>
257
+ <sodipodi:namedview
258
+ id="base"
259
+ pagecolor="#ffffff"
260
+ bordercolor="#666666"
261
+ borderopacity="1.0"
262
+ inkscape:pageopacity="0.0"
263
+ inkscape:pageshadow="2"
264
+ inkscape:zoom="13.62465"
265
+ inkscape:cx="34.194079"
266
+ inkscape:cy="17.945107"
267
+ inkscape:document-units="px"
268
+ inkscape:current-layer="layer1"
269
+ inkscape:window-width="1280"
270
+ inkscape:window-height="932"
271
+ inkscape:window-x="0"
272
+ inkscape:window-y="42"
273
+ inkscape:showpageshadow="false"
274
+ width="48px"
275
+ height="48px"
276
+ borderlayer="true"
277
+ gridtolerance="10000">
278
+ <inkscape:grid
279
+ type="xygrid"
280
+ id="grid2173" />
281
+ </sodipodi:namedview>
282
+ <metadata
283
+ id="metadata7">
284
+ <rdf:RDF>
285
+ <cc:Work
286
+ rdf:about="">
287
+ <dc:format>image/svg+xml</dc:format>
288
+ <dc:type
289
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
290
+ <dc:title>TV</dc:title>
291
+ <dc:date>2007-06-06</dc:date>
292
+ <dc:creator>
293
+ <cc:Agent>
294
+ <dc:title>Sebastian Kraft</dc:title>
295
+ </cc:Agent>
296
+ </dc:creator>
297
+ <dc:subject>
298
+ <rdf:Bag>
299
+ <rdf:li>tv</rdf:li>
300
+ <rdf:li>television</rdf:li>
301
+ </rdf:Bag>
302
+ </dc:subject>
303
+ <cc:license
304
+ rdf:resource="GPL" />
305
+ </cc:Work>
306
+ </rdf:RDF>
307
+ </metadata>
308
+ <g
309
+ inkscape:label="Ebene 1"
310
+ inkscape:groupmode="layer"
311
+ id="layer1">
312
+ <g
313
+ id="g7826"
314
+ style="opacity:0.46000001"
315
+ transform="matrix(1,0,0,1.5999988,0,-26.599946)">
316
+ <path
317
+ sodipodi:nodetypes="cscc"
318
+ id="path6654"
319
+ d="M 2,45.999998 C 0.896,45.999998 0,44.879998 0,43.499998 C 0,42.119997 0.896,40.999997 2,40.999997 C 2,40.999997 2,45.999998 2,45.999998 z"
320
+ style="color:#000000;fill:url(#radialGradient7831);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
321
+ <path
322
+ sodipodi:nodetypes="cccc"
323
+ id="path7037"
324
+ d="M 48,43.5 C 48,44.88 47.104,46 46,46 C 46,46 46,40.999999 46,40.999999 C 47.104,40.999999 48,42.119999 48,43.5 z"
325
+ style="color:#000000;fill:url(#radialGradient7833);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
326
+ <path
327
+ id="rect7432"
328
+ d="M 2,41 L 46,41 L 46,46 L 2,46 L 2,41 z"
329
+ style="fill:url(#linearGradient7835);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
330
+ </g>
331
+ <path
332
+ style="fill:#2e3436;fill-opacity:1;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
333
+ d="M 6.5611112,5.5 L 2.5000001,7.5 L 2.5000001,43.5 L 45.5,43.5 L 45.5,7.5 L 41.438888,5.5 L 6.5611112,5.5 z"
334
+ id="rect2174"
335
+ sodipodi:nodetypes="ccccccc" />
336
+ <path
337
+ style="fill:url(#linearGradient3151);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
338
+ d="M 7,6 L 41,6 L 45,9 L 3,9 L 7,6 z"
339
+ id="rect2761"
340
+ sodipodi:nodetypes="ccccc" />
341
+ <path
342
+ sodipodi:nodetypes="ccccccc"
343
+ id="path2757"
344
+ d="M 6.9465577,6.5000001 L 3.5,8.0375941 L 3.5,42.5 L 44.5,42.5 L 44.5,8.0375941 L 41.053441,6.5000001 L 6.9465577,6.5000001 z"
345
+ style="fill:none;fill-opacity:1;stroke:url(#radialGradient6652);stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
346
+ <path
347
+ style="fill:url(#radialGradient4699);fill-opacity:1;stroke:#204a87;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
348
+ d="M 5.5,10.5 L 42.5,10.5 L 42.5,35.5 L 5.5,35.5 L 5.5,10.5 z"
349
+ id="rect2759" />
350
+ <path
351
+ style="opacity:0.4;fill:url(#linearGradient4307);fill-opacity:1;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
352
+ d="M 7,12 L 40,12 L 40,18 C 40,18 38.166666,15 28.083333,22 C 17.999999,29 7,24.120301 7,24.120301 L 7,12 z"
353
+ id="rect3536"
354
+ sodipodi:nodetypes="ccczcc" />
355
+ <path
356
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient5097);stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
357
+ d="M 6.5000003,11.500001 L 41.500002,11.500001 L 41.500002,34.500003 L 6.5000003,34.500003 L 6.5000003,11.500001 z"
358
+ id="rect3534" />
359
+ <path
360
+ style="fill:url(#linearGradient5872);fill-opacity:1;stroke:url(#linearGradient8234);stroke-width:1.00000036000000003;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
361
+ d="M 5.4999998,36.500001 L 42.5,36.500001 L 42.5,40.5 L 5.4999998,40.5 L 5.4999998,36.500001 z"
362
+ id="rect5099" />
363
+ <path
364
+ id="path5874"
365
+ d="M 6.5000006,39.500001 L 36.500001,39.500001 L 36.500001,37.500002 L 6.5000006,37.500002 L 6.5000006,39.500001 z"
366
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient6263);stroke-width:0.99999987999999995;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
367
+ <path
368
+ style="fill:#2e3436;fill-opacity:1;stroke:#555753;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
369
+ d="M 37.500002,37.499988 L 41.500003,37.499988 L 41.500003,39.500001 L 37.500002,39.500001 L 37.500002,37.499988 z"
370
+ id="path7839" />
371
+ <rect
372
+ style="opacity:1;fill:#4e9a06;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
373
+ id="rect7843"
374
+ width="1"
375
+ height="1"
376
+ x="40"
377
+ y="38" />
378
+ <rect
379
+ y="38"
380
+ x="39"
381
+ height="1"
382
+ width="1"
383
+ id="rect7845"
384
+ style="opacity:1;fill:#8ae234;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
385
+ </g>
386
+ </svg>