summaryrefslogtreecommitdiff
path: root/lib/feed2imap
diff options
context:
space:
mode:
Diffstat (limited to 'lib/feed2imap')
-rw-r--r--lib/feed2imap/channel.rb26
-rw-r--r--lib/feed2imap/feed2imap.rb1
-rw-r--r--lib/feed2imap/imap.rb4
-rw-r--r--lib/feed2imap/textconverters.rb15
4 files changed, 31 insertions, 15 deletions
diff --git a/lib/feed2imap/channel.rb b/lib/feed2imap/channel.rb
index a9b4499..d59b47b 100644
--- a/lib/feed2imap/channel.rb
+++ b/lib/feed2imap/channel.rb
@@ -196,19 +196,19 @@ class Item
def to_text
s = ""
s += "Channel: "
- s += @channel.title + ' ' if @channel.title
- s += "<#{@channel.link}>" if @channel.link
+ s += @channel.title.toISO_8859_1('utf-8') + ' ' if @channel.title
+ s += "<#{@channel.link.toISO_8859_1('utf-8')}>" if @channel.link
s += "\n"
s += "Item: "
- s += @title + ' ' if @title
- s += "<#{@link}>" if @link
+ s += @title.toISO_8859_1('utf-8') + ' ' if @title
+ s += "<#{@link.toISO_8859_1('utf-8')}>" if @link
s += "\n"
- s += "\nDate: #{@date.to_s}" if @date # TODO improve date rendering ?
- s += "\nAuthor: #{@creator}" if @creator
- s += "\nSubject: #{@subject}" if @subject
- s += "\nCategory: #{@category}" if @category
+ s += "\nDate: #{@date.to_s.toISO_8859_1('utf-8')}" if @date # TODO improve date rendering ?
+ s += "\nAuthor: #{@creator.toISO_8859_1('utf-8')}" if @creator
+ s += "\nSubject: #{@subject.toISO_8859_1('utf-8')}" if @subject
+ s += "\nCategory: #{@category.toISO_8859_1('utf-8')}" if @category
s += "\n\n"
- s += "#{@content.html2text}" if @content
+ s += "#{@content.html2text.toISO_8859_1('utf-8')}" if @content
s
end
@@ -249,14 +249,14 @@ class Item
message.header['X-F2IStatus'] = "Updated" if @cacheditem.updated
# TODO encode in ISO ?
if @title
- message.header['Subject'] = @title
+ message.header['Subject'] = @title.toISO_8859_1('utf-8')
elsif @date
- message.header['Subject'] = @date.to_s
+ message.header['Subject'] = @date.to_s.toISO_8859_1('utf-8')
elsif @link
- message.header['Subject'] = @link
+ message.header['Subject'] = @link.toISO_8859_1('utf-8')
end
textpart = RMail::Message::new
- textpart.header['Content-Type'] = 'text/plain; charset=UTF-8; format=flowed'
+ textpart.header['Content-Type'] = 'text/plain; charset=iso-8859-1; format=flowed'
textpart.header['Content-Transfer-Encoding'] = '7bit'
textpart.body = to_text
htmlpart = RMail::Message::new
diff --git a/lib/feed2imap/feed2imap.rb b/lib/feed2imap/feed2imap.rb
index 9896a3c..daee87d 100644
--- a/lib/feed2imap/feed2imap.rb
+++ b/lib/feed2imap/feed2imap.rb
@@ -129,6 +129,7 @@ class Feed2Imap
end
rescue
@logger.fatal("Exception caught while uploading mail to #{f.folder}: #{$!}")
+ puts $!.backtrace
next
end
begin
diff --git a/lib/feed2imap/imap.rb b/lib/feed2imap/imap.rb
index 70a0aa0..301b95c 100644
--- a/lib/feed2imap/imap.rb
+++ b/lib/feed2imap/imap.rb
@@ -99,13 +99,15 @@ class ImapAccount
def updatemail(folder, mail, idx)
@connection.select(folder)
searchres = @connection.search(['HEADER', 'X-CacheIndex', "-#{idx}-"])
+ flags = nil
if searchres.length == 1
+ flags = @connection.fetch(searchres[0], 'FLAGS')[0].attr['FLAGS']
@connection.store(searchres[0], "+FLAGS", [:Deleted])
@connection.expunge
elsif searchres.length != 0
raise "Search returned multiple results !!"
end
- putmail(folder, mail)
+ @connection.append(folder, mail, flags)
end
def to_s
diff --git a/lib/feed2imap/textconverters.rb b/lib/feed2imap/textconverters.rb
index ba49193..b28c211 100644
--- a/lib/feed2imap/textconverters.rb
+++ b/lib/feed2imap/textconverters.rb
@@ -61,10 +61,23 @@ class String
return self.gsub!(/\A\s*/m, '').gsub!(/\s*\Z/m,'')
end
+ # Convert a text in inputenc to a text in ISO-8859-1
+ def toISO_8859_1(inputenc)
+ if inputenc.downcase == 'utf-8'
+ begin
+ return self.unpack('U*').pack('C*')
+ rescue
+ return self
+ end
+ else
+ return self
+ end
+ end
+
# Convert a text in inputenc to a text in UTF8
# must take care of wrong input locales
def toUTF8(inputenc)
- if inputenc.downcase! != 'utf-8'
+ if inputenc.downcase != 'utf-8'
# it is said it is not UTF-8. Ensure it is REALLY not UTF-8
begin
if self.unpack('U*').pack('U*') == self