Class: Pig

Inherits:
Object
  • Object
show all
Defined in:
lib/pig-media-server/model/pig.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record) ⇒ Pig

Returns a new instance of Pig.



7
8
9
10
11
12
13
# File 'lib/pig-media-server/model/pig.rb', line 7

def initialize record
  unless record.size
    record.size = File::Stat.new(record.path).size.to_s rescue nil
  end
  self.record = record
  self.config = $config || Pit.get("Pig Media Server")
end

Instance Attribute Details

#configObject

Returns the value of attribute config.



6
7
8
# File 'lib/pig-media-server/model/pig.rb', line 6

def config
  @config
end

#recordObject

Returns the value of attribute record.



6
7
8
# File 'lib/pig-media-server/model/pig.rb', line 6

def record
  @record
end

Class Method Details

.allObject



100
101
102
# File 'lib/pig-media-server/model/pig.rb', line 100

def self.all
  Groonga['Files'].select.map{|x| Pig.new x}
end

.find(key) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/pig-media-server/model/pig.rb', line 56

def self.find key
  case key.class.to_s
  when 'Array'
    return key.map{|x| self.new Groonga['Files'][x]}
  when 'String'
    return self.new Groonga['Files'][key]
  end
end

.find_or_create_by_path(path) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/pig-media-server/model/pig.rb', line 88

def self.find_or_create_by_path path
  key = Digest::MD5.hexdigest(path).to_s
  unless Groonga['Files'][key]
    stat = File::Stat.new path
    Groonga["Files"].add(key)
    Groonga["Files"][key].path = path
    Groonga["Files"][key].mtime = stat.mtime.to_i
    Groonga['Files'][key].size = stat.size.to_s
  end
  return Pig.new Groonga['Files'][key]
end

.search(opts) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/pig-media-server/model/pig.rb', line 65

def self.search opts
  query = Sewell.generate opts[:query].to_s, %w{metadata path srt}
  limit = opts[:limit] ? opts[:limit].to_i : 50
  page = opts[:page].to_i < 1 ? 1 : opts[:page].to_i
  order = (opts[:order] == 'ascending' or opts[:order] == 'descending') ? opts[:order] : 'descending'
  result = Groonga['Files'].select(query)
  if result.count == 0
    begin
      result = Groonga['Files'].select{|x| x.path.match str}
    rescue
    end
  end
  if opts[:sort] == 'name'
    list = result.paginate([key: 'path', order: order], size: 2000, page: page).map{|x| Pig.new x}.sort{|x,y| 
      x.path.split('/').last.sub(/^\d\d*_/, '') <=> y.path.split('/').last.sub(/^\d\d*_/, '')
    }.reverse rescue list = []
    list.reverse! if order == 'descending'
  else
    list = result.paginate([key: 'mtime', order: order], size: limit, page: page).map{|x| Pig.new x} rescue list = []
  end
  list
end

Instance Method Details

#checkObject



104
105
106
107
# File 'lib/pig-media-server/model/pig.rb', line 104

def check
  return false unless self.record
  Groonga['Files'].delete self.record._key unless File.exist? self.record.path
end

#comicObject



38
39
40
# File 'lib/pig-media-server/model/pig.rb', line 38

def comic
  Comic.new self.record
end

#keyObject



14
# File 'lib/pig-media-server/model/pig.rb', line 14

def key; self.record._key;end

#metadataObject



18
# File 'lib/pig-media-server/model/pig.rb', line 18

def ; self.record.;end

#mtimeObject



16
# File 'lib/pig-media-server/model/pig.rb', line 16

def mtime; Time.at(self.record.mtime);end

#nameObject



15
# File 'lib/pig-media-server/model/pig.rb', line 15

def name; self.record.path.split('/').last; end

#pathObject



35
36
37
# File 'lib/pig-media-server/model/pig.rb', line 35

def path
  self.record.path.sub(/#{config['path'].sub(/\//, '\/')}/, '')
end

#sizeObject



17
# File 'lib/pig-media-server/model/pig.rb', line 17

def size; self.record.size;end

#srtObject



19
# File 'lib/pig-media-server/model/pig.rb', line 19

def srt; self.record.srt;end

#to_kindle(user_id) ⇒ Object



49
50
51
52
# File 'lib/pig-media-server/model/pig.rb', line 49

def to_kindle user_id
  FileUtils.mkdir_p "#{self.config['user_data_path']}/kindle/queue"
  open("#{self.config['user_data_path']}/kindle/queue/#{self.key}_#{user_id}", 'w'){|x| x.puts ''}
end

#typeObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/pig-media-server/model/pig.rb', line 21

def type
  case self.name.split('.').last
  when 'mp4', 'MP4', 'webm'
    'video'
  when 'zip', 'ZIP'
    'read'
  when 'txt', 'TXT'
    'txt'
  when 'mobi'
    'mobi'
  else
    'other'
  end
end

#urlObject



20
# File 'lib/pig-media-server/model/pig.rb', line 20

def url; '/volume' + URI.encode(self.record.path.sub(/#{config['path'].sub(/\//, '\/')}/, ''));end

#webvttObject



41
42
43
44
45
46
47
48
# File 'lib/pig-media-server/model/pig.rb', line 41

def webvtt
str = <<EOS 
WEBVTT

#{self.srt.split("\n").delete_if{|x| x.to_i.to_s == x.chomp}.map{|x| if x =~ /\d\d:\d\d/; x.gsub!(/,/, '.');else; x = x.gsub(/</, '').gsub(/>/, '');end; x}.join("\n")}
EOS
str.chomp.chomp
end