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.



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
131
# File 'lib/sup/message_chunks.rb', line 103

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.



100
101
102
# File 'lib/sup/message_chunks.rb', line 100

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.



100
101
102
# File 'lib/sup/message_chunks.rb', line 100

def filename
  @filename
end

#linesObject (readonly)

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



100
101
102
# File 'lib/sup/message_chunks.rb', line 100

def lines
  @lines
end

#raw_contentObject (readonly)

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



100
101
102
# File 'lib/sup/message_chunks.rb', line 100

def raw_content
  @raw_content
end

Instance Method Details

#colorObject



133
# File 'lib/sup/message_chunks.rb', line 133

def color; :text_color end

#expandable?Boolean

Returns:

  • (Boolean)


146
# File 'lib/sup/message_chunks.rb', line 146

def expandable?; !viewable? end

#initial_stateObject



147
# File 'lib/sup/message_chunks.rb', line 147

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)


145
# File 'lib/sup/message_chunks.rb', line 145

def inlineable?; false end

#patina_colorObject



134
# File 'lib/sup/message_chunks.rb', line 134

def patina_color; :attachment_color end

#patina_textObject



135
136
137
138
139
140
141
# File 'lib/sup/message_chunks.rb', line 135

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



176
177
178
# File 'lib/sup/message_chunks.rb', line 176

def to_s
  @lines || @raw_content
end

#view!Object



161
162
163
164
165
166
# File 'lib/sup/message_chunks.rb', line 161

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



149
150
151
152
153
154
155
156
157
158
159
# File 'lib/sup/message_chunks.rb', line 149

def view_default! path
  case RbConfig::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)


148
# File 'lib/sup/message_chunks.rb', line 148

def viewable?; @lines.nil? end

#write_to_diskObject



168
169
170
171
172
173
# File 'lib/sup/message_chunks.rb', line 168

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