screenxtv 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/screenxtv.rb +45 -12
- metadata +2 -2
data/lib/screenxtv.rb
CHANGED
@@ -10,13 +10,25 @@ require 'tempfile'
|
|
10
10
|
|
11
11
|
HOST="screenx.tv"
|
12
12
|
|
13
|
-
|
13
|
+
def show_info(info)
|
14
|
+
broadcasting_url="http://#{HOST}/#{info['url']}"
|
15
|
+
private_flag=!!info['private']
|
16
|
+
authorized=info['authorized']
|
17
|
+
print "Broadcasting URL: \e[1m#{broadcasting_url}\e[m\n"
|
18
|
+
print "Chat page : \e[1m#{broadcasting_url}?chat\e[m\n"
|
19
|
+
if info['private']
|
20
|
+
print "This is a private casting.\n"
|
21
|
+
print "The only person who knows the URL can watch this screen.\n"
|
22
|
+
elsif !info['authorized']
|
23
|
+
print "This URL is not reserved and chat messages will be deleted after broadcasting.\n";
|
24
|
+
print "If you want to reserve this URL, please create your account.\n"
|
25
|
+
end
|
26
|
+
end
|
14
27
|
|
15
28
|
if ENV['SCREENXTV_BROADCASTING']
|
16
|
-
|
29
|
+
show_info(JSON.parse ENV['SCREENXTV_BROADCASTING'])
|
17
30
|
exit
|
18
31
|
end
|
19
|
-
ENV['SCREENXTV_BROADCASTING']='1'
|
20
32
|
|
21
33
|
Signal.trap(:INT){exit;}
|
22
34
|
|
@@ -30,7 +42,7 @@ def readpswd(prompt='> ')
|
|
30
42
|
STDIN.raw{
|
31
43
|
s=""
|
32
44
|
loop do
|
33
|
-
c=STDIN.
|
45
|
+
c=STDIN.getch
|
34
46
|
case c
|
35
47
|
when "\x03"
|
36
48
|
print "\r\n"
|
@@ -108,6 +120,7 @@ conf_scan=[
|
|
108
120
|
errmsg:'You can use only alphabets, numbers and underscore.'
|
109
121
|
},
|
110
122
|
{key:"screen",value:"screenxtv"},
|
123
|
+
{key:"screen_private",value:"screenxtv_private"},
|
111
124
|
{
|
112
125
|
key:"color",msg:"Terminal Color [BLACK/white/green/novel]",
|
113
126
|
value:'black',
|
@@ -123,6 +136,7 @@ parser=OptionParser.new do |op|
|
|
123
136
|
op.on("-c [color]"){|v|argv[:color]=v||true}
|
124
137
|
op.on("-t [title]"){|v|argv[:title]=v||true}
|
125
138
|
op.on("-reset"){|v|argv[:new]=true}
|
139
|
+
op.on("-private"){|v|argv[:private]=true}
|
126
140
|
op.on("-f config_file"){|v|argv[:file]=v}
|
127
141
|
end
|
128
142
|
parser.parse(ARGV)
|
@@ -142,8 +156,11 @@ else
|
|
142
156
|
conf['color']=argv[:color]==true ? nil : argv[:color] if argv[:color]
|
143
157
|
end
|
144
158
|
|
159
|
+
conf_scan.delete :url if argv[:private]
|
160
|
+
|
145
161
|
conf_scan.each do |item|
|
146
162
|
key=item[:key]
|
163
|
+
next if key=='url'&&argv[:private]
|
147
164
|
msg=item[:msg]
|
148
165
|
value=item[:value]
|
149
166
|
if !conf[key] then
|
@@ -157,26 +174,35 @@ conf_scan.each do |item|
|
|
157
174
|
end
|
158
175
|
end
|
159
176
|
end
|
160
|
-
conf['url'].gsub! /[^_a-zA-Z0-9]/,""
|
177
|
+
conf['url'].gsub! /[^_a-zA-Z0-9]/,"" if conf['url']
|
161
178
|
conf['color'].downcase!
|
162
179
|
File.write conf_file,conf.to_yaml
|
163
180
|
|
164
181
|
print "connecting...\n"
|
165
182
|
socket=nil
|
183
|
+
url=''
|
166
184
|
loop do
|
167
185
|
File.write conf_file,conf.to_yaml
|
168
186
|
socket=kvconnect HOST,8000
|
169
187
|
height,width=STDOUT.winsize
|
170
188
|
initdata={
|
171
|
-
width:width,height:height,slug:conf['url']+'#'+(conf['urlhash']||''),
|
189
|
+
width:width,height:height,slug:(conf['url']||'')+'#'+(conf['urlhash']||''),
|
172
190
|
user:conf['user'],
|
173
191
|
auth_key:conf['auth_key'],
|
192
|
+
private:argv[:private],
|
193
|
+
private_url:conf['private_url'],
|
174
194
|
info:{color:conf['color'],title:conf['title']}
|
175
195
|
}
|
176
196
|
socket.send('init',initdata.to_json)
|
177
197
|
key,value=socket.recv
|
178
|
-
|
198
|
+
case key
|
199
|
+
when 'slug'
|
179
200
|
conf['url'],conf['urlhash']=value.split("#")
|
201
|
+
url=conf['url']
|
202
|
+
break
|
203
|
+
when 'private_url'
|
204
|
+
conf['private_url']=value;
|
205
|
+
url='private/'+value.split("#")[0]
|
180
206
|
break
|
181
207
|
end
|
182
208
|
socket.close
|
@@ -193,9 +219,15 @@ loop do
|
|
193
219
|
end
|
194
220
|
|
195
221
|
File.write conf_file,conf.to_yaml
|
222
|
+
info={
|
223
|
+
'url'=>url,
|
224
|
+
'authorized'=>conf['urlhash']==url+"/"+conf['auth_key'],
|
225
|
+
'private'=>argv[:private]
|
226
|
+
}
|
227
|
+
ENV['SCREENXTV_BROADCASTING']=info.to_json
|
228
|
+
show_info(info)
|
196
229
|
|
197
|
-
print "
|
198
|
-
print "Press Enter to start broadcasting\n"
|
230
|
+
print "\npress enter to start broadcasting"
|
199
231
|
readline
|
200
232
|
|
201
233
|
screenrc=Tempfile.new("screenrc");
|
@@ -206,11 +238,11 @@ begin
|
|
206
238
|
}
|
207
239
|
rescue
|
208
240
|
end
|
209
|
-
screenrc.write "hardstatus alwayslastline 'http://#{HOST}/#{
|
241
|
+
screenrc.write "hardstatus alwayslastline 'http://#{HOST}/#{url}'\n"
|
210
242
|
screenrc.flush
|
211
243
|
rescue
|
212
244
|
end
|
213
|
-
|
245
|
+
ENV['SCREENRC']=screenrc.path
|
214
246
|
|
215
247
|
Thread.new{
|
216
248
|
begin
|
@@ -227,7 +259,8 @@ begin
|
|
227
259
|
ENV['TERM']='vt100'
|
228
260
|
ENV['LANG']='en_US.UTF-8'
|
229
261
|
master.winsize=STDOUT.winsize
|
230
|
-
|
262
|
+
screen_name=argv[:private] ? conf['screen_private'] : conf['screen']
|
263
|
+
rr,ww,pid = PTY::getpty("screen -x #{screen_name} -R",in:slave,out:master)
|
231
264
|
winsize=->{
|
232
265
|
height,width=master.winsize=rr.winsize=STDOUT.winsize
|
233
266
|
socket.send 'winch',{width:width,height:height}.to_json
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: screenxtv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|