pig-media-server 0.2.0

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 (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +1 -0
  7. data/bin/pig-media-server +4 -0
  8. data/lib/pig-media-server.rb +10 -0
  9. data/lib/pig-media-server/book2.erb +59 -0
  10. data/lib/pig-media-server/cli.rb +21 -0
  11. data/lib/pig-media-server/crawl.rb +23 -0
  12. data/lib/pig-media-server/model/comic.rb +64 -0
  13. data/lib/pig-media-server/model/migrate.rb +26 -0
  14. data/lib/pig-media-server/model/pig.rb +98 -0
  15. data/lib/pig-media-server/script.rb +4 -0
  16. data/lib/pig-media-server/version.rb +3 -0
  17. data/lib/pig-media-server/views/_ft_other.haml +0 -0
  18. data/lib/pig-media-server/views/_ft_read.haml +9 -0
  19. data/lib/pig-media-server/views/_ft_txt.haml +1 -0
  20. data/lib/pig-media-server/views/_ft_video.haml +6 -0
  21. data/lib/pig-media-server/views/_link.haml +14 -0
  22. data/lib/pig-media-server/views/_new_flag.haml +4 -0
  23. data/lib/pig-media-server/views/app.scss +85 -0
  24. data/lib/pig-media-server/views/book.coffee +236 -0
  25. data/lib/pig-media-server/views/book2.erb +59 -0
  26. data/lib/pig-media-server/views/config.coffee +8 -0
  27. data/lib/pig-media-server/views/config.haml +29 -0
  28. data/lib/pig-media-server/views/index.haml +45 -0
  29. data/lib/pig-media-server/views/movie.coffee +159 -0
  30. data/lib/pig-media-server/views/read.haml +34 -0
  31. data/lib/pig-media-server/views/remote.coffee +25 -0
  32. data/lib/pig-media-server/views/remote.haml +14 -0
  33. data/lib/pig-media-server/views/session.coffee +6 -0
  34. data/lib/pig-media-server/views/sessions.haml +11 -0
  35. data/lib/pig-media-server/views/storage.coffee +32 -0
  36. data/lib/pig-media-server/views/swipe.erb +433 -0
  37. data/lib/pig-media-server/views/unread.coffee +14 -0
  38. data/lib/pig-media-server/web.rb +201 -0
  39. data/pig-media-server.gemspec +32 -0
  40. metadata +250 -0
@@ -0,0 +1,14 @@
1
+ window.set_new = ->
2
+ window.get_recents (recents)->
3
+ count = 0
4
+ $.each $('.new_flag'), ->
5
+ key = this.getAttribute 'key'
6
+ unless recents[key]
7
+ $(this).text 'New!'
8
+ count += 1
9
+ if count == 0
10
+ $('.main_link').css('margin-left', '0')
11
+
12
+ $ ->
13
+ set_new()
14
+
@@ -0,0 +1,201 @@
1
+ require 'pig-media-server'
2
+ require 'pig-media-server/model/pig'
3
+ require 'pig-media-server/model/comic'
4
+ require 'sinatra/base'
5
+ require 'sinatra/flash'
6
+ require 'net/http'
7
+ require 'sass'
8
+ require 'haml'
9
+ require 'coffee_script'
10
+ require 'rack/csrf'
11
+ require 'json'
12
+
13
+ module PigMediaServer
14
+ class UserData
15
+ def self.save json, user_id, path
16
+ open("#{path}/#{user_id}.json", "w"){|f| f.puts json}
17
+ true
18
+ end
19
+
20
+ def self.load user_id, path
21
+ return JSON.parse(open("#{path}/#{user_id}.json").read) rescue return {}
22
+ end
23
+ end
24
+
25
+ class Gyazo
26
+ def self.post url, point
27
+ imagedata = url.sub(/data:image\/png;base64,/, '').unpack('m').first
28
+ boundary = '----BOUNDARYBOUNDARY----'
29
+ id = rand(256**16).to_s(16)
30
+
31
+ data = <<EOF
32
+ --#{boundary}\r
33
+ content-disposition: form-data; name="id"\r
34
+ \r
35
+ #{id}\r
36
+ --#{boundary}\r
37
+ content-disposition: form-data; name="imagedata"; filename="gyazo.com"\r
38
+ \r
39
+ #{imagedata}\r
40
+ --#{boundary}--\r
41
+ EOF
42
+ header ={
43
+ 'Content-Length' => data.length.to_s,
44
+ 'Content-type' => "multipart/form-data; boundary=#{boundary}",
45
+ 'User-Agent' => 'ssig33.com/1.0'
46
+ }
47
+ proxy_host, proxy_port = nil, nil
48
+ uri = URI.parse point
49
+ Net::HTTP::Proxy(proxy_host, proxy_port).start(uri.host,80) {|http|
50
+ res = http.post(uri.path, data, header).body
51
+ puts res
52
+ return res
53
+ }
54
+ end
55
+ end
56
+
57
+ class Web < Sinatra::Base
58
+ register Sinatra::Flash
59
+
60
+ configure do
61
+ set :sessions, true
62
+ set :haml, escape_html: true
63
+ set :haml, attr_wrapper: '"'
64
+ use Rack::Session::Cookie, expire_after: 60*60*24*28, secret: $session_secret || rand(256**16).to_s(16)
65
+ end
66
+
67
+ get '/' do
68
+ if params[:query]
69
+ redirect '/latest' if params[:query].empty?
70
+ @page = params[:page].to_i < 1 ? 1 : params[:page].to_i
71
+ @action = 'list'
72
+ @list = Pig.search params.merge(page: @page)
73
+ end
74
+ haml :index
75
+ end
76
+
77
+ get '/custom' do
78
+ c = config['custom_list'][params[:name]]
79
+ @page = params[:page].to_i < 1 ? 1 : params[:page].to_i
80
+ @action = 'list'
81
+ @list = Pig.find JSON.parse(open(c).read)
82
+ haml :index
83
+ end
84
+
85
+ get '/latest' do
86
+ @page = params[:page].to_i < 1 ? 1 : params[:page].to_i
87
+ size = params[:size] ? params[:size].to_i : 50
88
+ @list = Groonga['Files'].select.paginate([key: 'mtime', order: 'descending'], size: size, page: @page).map{|x| Pig.new(x)}
89
+ @action = 'list'
90
+ haml :index
91
+ end
92
+
93
+ get '/read/:key' do
94
+ if request.xhr?
95
+ @record = Pig.find params[:key] rescue nil
96
+ @comic = @record.comic
97
+ haml :read
98
+ else
99
+ raise
100
+ end
101
+ end
102
+ get('/book/info/:key'){ content_type :json; Pig.find(params[:key]).comic.info(params[:page]).to_json}
103
+ get '/book/image' do
104
+ image, type = Pig.find(params[:id]).comic.page(params[:page])
105
+ content_type type
106
+ image
107
+ end
108
+
109
+ post '/gyazo' do
110
+ url = PigMediaServer::Gyazo.post params[:url], params[:point]
111
+ content_type :json
112
+ {url: url}.to_json
113
+ end
114
+
115
+ get '/remote' do
116
+ if request.xhr? and params[:key]
117
+ return partial :_link, locals: {l: Pig.find(params[:key])}
118
+ end
119
+ return haml :remote
120
+ end
121
+
122
+
123
+ get '/sessions' do
124
+ if session[:user_id]
125
+ session[:user_id] = nil
126
+ redirect '/'
127
+ else
128
+ haml :sessions
129
+ end
130
+ end
131
+
132
+ post '/sessions' do
133
+ session[:user_id] = params[:user_id]
134
+ redirect '/'
135
+ end
136
+
137
+ get('/hash'){content_type :json; hash().to_json}
138
+ post('/hash'){PigMediaServer::UserData.save params[:json], session[:user_id], config['user_data_path']}
139
+
140
+ get('/config'){haml :config}
141
+ get('/book2.js'){content_type :js;erb :book2}
142
+ get('/swipe.js'){content_type :js;erb :swipe}
143
+ get('/*.css'){scss params[:splat].first.to_sym}
144
+ get('/*.js'){coffee params[:splat].first.to_sym}
145
+
146
+ helpers do
147
+ def config
148
+ Pit.get "Pig Media Server"
149
+ end
150
+ def h str; CGI.escapeHTML str.to_s; end
151
+ def partial(template, *args)
152
+ options = args.last.is_a?(Hash) ? args.pop : {}
153
+ options.merge!(:layout => false)
154
+ if collection = options.delete(:collection) then
155
+ collection.inject([]) do |buffer, member|
156
+ buffer << haml(template, options.merge(:layout => false, :locals => {template => member}))
157
+ end.join("\n")
158
+ else
159
+ haml(template, options)
160
+ end
161
+ end
162
+ def hash
163
+ if session[:user_id]
164
+ return PigMediaServer::UserData.load session[:user_id], config['user_data_path']
165
+ else
166
+ return {}
167
+ end
168
+ end
169
+
170
+ def markdown str
171
+ str = str.to_s
172
+ Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(hard_wrap: true), autolink: true, fenced_code_blocks: true).render(str)
173
+ end
174
+
175
+ def number_to_human_size(number, precision = 1)
176
+ number = begin
177
+ Float(number)
178
+ rescue ArgumentError, TypeError
179
+ return number
180
+ end
181
+ case
182
+ when number.to_i == 1 then
183
+ "1 Byte"
184
+ when number < 1024 then
185
+ "%d Bytes" % number
186
+ when number < 1048576 then
187
+ "%.#{precision}f KB" % (number / 1024)
188
+ when number < 1073741824 then
189
+ "%.#{precision}f MB" % (number / 1048576)
190
+ when number < 1099511627776 then
191
+ "%.#{precision}f GB" % (number / 1073741824)
192
+ else
193
+ "%.#{precision}f TB" % (number / 1099511627776)
194
+ end.sub(/([0-9]\.\d*?)0+ /, '\1 ' ).sub(/\. /,' ').encode('UTF-8')
195
+ rescue
196
+ nil
197
+ end
198
+ end
199
+ end
200
+
201
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pig-media-server/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "pig-media-server"
8
+ gem.version = PigMediaServer::VERSION
9
+ gem.authors = ["ssig33"]
10
+ gem.email = ["mail@ssig33.com"]
11
+ gem.description = %q{Pig Media Server}
12
+ gem.summary = %q{Pig Media Server}
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = %w(pig-media-server)
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency 'rroonga'
21
+ gem.add_dependency 'sinatra'
22
+ gem.add_dependency 'haml'
23
+ gem.add_dependency 'sass'
24
+ gem.add_dependency 'rack_csrf'
25
+ gem.add_dependency 'unicorn'
26
+ gem.add_dependency 'pit'
27
+ gem.add_dependency 'sewell'
28
+ gem.add_dependency 'rmagick'
29
+ gem.add_dependency 'zipruby'
30
+ gem.add_dependency 'coffee-script'
31
+ gem.add_dependency 'sinatra-flash'
32
+ end
metadata ADDED
@@ -0,0 +1,250 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pig-media-server
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - ssig33
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rroonga
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sinatra
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: haml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sass
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack_csrf
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: unicorn
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pit
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sewell
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rmagick
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: zipruby
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: coffee-script
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: sinatra-flash
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ description: Pig Media Server
182
+ email:
183
+ - mail@ssig33.com
184
+ executables:
185
+ - pig-media-server
186
+ extensions: []
187
+ extra_rdoc_files: []
188
+ files:
189
+ - .gitignore
190
+ - Gemfile
191
+ - LICENSE.txt
192
+ - README.md
193
+ - Rakefile
194
+ - bin/pig-media-server
195
+ - lib/pig-media-server.rb
196
+ - lib/pig-media-server/book2.erb
197
+ - lib/pig-media-server/cli.rb
198
+ - lib/pig-media-server/crawl.rb
199
+ - lib/pig-media-server/model/comic.rb
200
+ - lib/pig-media-server/model/migrate.rb
201
+ - lib/pig-media-server/model/pig.rb
202
+ - lib/pig-media-server/script.rb
203
+ - lib/pig-media-server/version.rb
204
+ - lib/pig-media-server/views/_ft_other.haml
205
+ - lib/pig-media-server/views/_ft_read.haml
206
+ - lib/pig-media-server/views/_ft_txt.haml
207
+ - lib/pig-media-server/views/_ft_video.haml
208
+ - lib/pig-media-server/views/_link.haml
209
+ - lib/pig-media-server/views/_new_flag.haml
210
+ - lib/pig-media-server/views/app.scss
211
+ - lib/pig-media-server/views/book.coffee
212
+ - lib/pig-media-server/views/book2.erb
213
+ - lib/pig-media-server/views/config.coffee
214
+ - lib/pig-media-server/views/config.haml
215
+ - lib/pig-media-server/views/index.haml
216
+ - lib/pig-media-server/views/movie.coffee
217
+ - lib/pig-media-server/views/read.haml
218
+ - lib/pig-media-server/views/remote.coffee
219
+ - lib/pig-media-server/views/remote.haml
220
+ - lib/pig-media-server/views/session.coffee
221
+ - lib/pig-media-server/views/sessions.haml
222
+ - lib/pig-media-server/views/storage.coffee
223
+ - lib/pig-media-server/views/swipe.erb
224
+ - lib/pig-media-server/views/unread.coffee
225
+ - lib/pig-media-server/web.rb
226
+ - pig-media-server.gemspec
227
+ homepage: ''
228
+ licenses: []
229
+ metadata: {}
230
+ post_install_message:
231
+ rdoc_options: []
232
+ require_paths:
233
+ - lib
234
+ required_ruby_version: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
239
+ required_rubygems_version: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ requirements: []
245
+ rubyforge_project:
246
+ rubygems_version: 2.0.2
247
+ signing_key:
248
+ specification_version: 4
249
+ summary: Pig Media Server
250
+ test_files: []