Class: Redwood::Chunk::Attachment

Inherits:
Object
  • Object
show all
Defined in:
lib/sup/message-chunks.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(content_type, filename, encoded_content, sibling_types) ⇒ Attachment

Returns a new instance of Attachment.



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/sup/message-chunks.rb', line 102

def initialize content_type, filename, encoded_content, sibling_types
  @content_type = content_type.downcase
  @filename = filename
  @quotable = false # changed to true if we can parse it through the
                    # mime-decode hook, or if it's plain text
  @raw_content =
    if encoded_content.body
      encoded_content.decode
    else
      "For some bizarre reason, RubyMail was unable to parse this attachment.\n"
    end

  text = case @content_type
  when /^text\/plain\b/
    @raw_content
  else
    HookManager.run "mime-decode", :content_type => content_type,
                    :filename => lambda { write_to_disk },
                    :charset => encoded_content.charset,
                    :sibling_types => sibling_types
  end

  @lines = nil
  if text
    text = text.transcode(encoded_content.charset || $encoding)
    @lines = text.gsub("\r\n", "\n").gsub(/\t/, "        ").gsub(/\r/, "").split("\n")
    @quotable = true
  end
end

Instance Attribute Details

#content_typeObject (readonly)

raw_content is the post-MIME-decode content. this is used for saving the attachment to disk.



99
100
101
# File 'lib/sup/message-chunks.rb', line 99

def content_type
  @content_type
end

#filenameObject (readonly)

raw_content is the post-MIME-decode content. this is used for saving the attachment to disk.



99
100
101
# File 'lib/sup/message-chunks.rb', line 99

def filename
  @filename
end

#linesObject (readonly)

raw_content is the post-MIME-decode content. this is used for saving the attachment to disk.



99
100
101
# File 'lib/sup/message-chunks.rb', line 99

def lines
  @lines
end

#raw_contentObject (readonly)

raw_content is the post-MIME-decode content. this is used for saving the attachment to disk.



99
100
101
# File 'lib/sup/message-chunks.rb', line 99

def raw_content
  @raw_content
end

Instance Method Details

#colorObject



132
# File 'lib/sup/message-chunks.rb', line 132

def color; :none end

#expandable?Boolean

Returns:

  • (Boolean)


145
# File 'lib/sup/message-chunks.rb', line 145

def expandable?; !viewable? end

#initial_stateObject



146
# File 'lib/sup/message-chunks.rb', line 146

def initial_state; :open end

#inlineable?Boolean

an attachment is exapndable if we’ve managed to decode it into something we can display inline. otherwise, it’s viewable.

Returns:

  • (Boolean)


144
# File 'lib/sup/message-chunks.rb', line 144

def inlineable?; false end

#patina_colorObject



133
# File 'lib/sup/message-chunks.rb', line 133

def patina_color; :attachment_color end

#patina_textObject



134
135
136
137
138
139
140
# File 'lib/sup/message-chunks.rb', line 134

def patina_text
  if expandable?
    "Attachment: #{filename} (#{lines.length} lines)"
  else
    "Attachment: #{filename} (#{content_type}; #{@raw_content.size.to_human_size})"
  end
end

#to_sObject

used when viewing the attachment as text



175
176
177
# File 'lib/sup/message-chunks.rb', line 175

def to_s
  @lines || @raw_content
end

#view!Object



160
161
162
163
164
165
# File 'lib/sup/message-chunks.rb', line 160

def view!
  path = write_to_disk
  ret = HookManager.run "mime-view", :content_type => @content_type,
                                     :filename => path
  ret || view_default!(path)
end

#view_default!(path) ⇒ Object



148
149
150
151
152
153
154
155
156
157
158
# File 'lib/sup/message-chunks.rb', line 148

def view_default! path
  case Config::CONFIG['arch']
    when /darwin/
      cmd = "open '#{path}'"
    else
      cmd = "/usr/bin/run-mailcap --action=view '#{@content_type}:#{path}'"
  end
  debug "running: #{cmd.inspect}"
  BufferManager.shell_out(cmd)
  $? == 0
end

#viewable?Boolean

Returns:

  • (Boolean)


147
# File 'lib/sup/message-chunks.rb', line 147

def viewable?; @lines.nil? end

#write_to_diskObject



167
168
169
170
171
172
# File 'lib/sup/message-chunks.rb', line 167

def write_to_disk
  file = Tempfile.new(["sup", @filename.gsub("/", "_") || "sup-attachment"])
  file.print @raw_content
  file.close
  file.path
end