adium2gmail 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -16,6 +16,10 @@ Run:
16
16
 
17
17
  Open the file in Thunderbird to view all the chatlogs
18
18
 
19
+ Copy it into your gmail
20
+
21
+ ![Feature Diagram](https://github.com/johnjiang/adium2gmail/raw/gh-pages/images/example.png)
22
+
19
23
  ## TODO
20
24
 
21
25
  1. Multiprocessing of chatlogs to improve performance
@@ -27,4 +31,4 @@ Open the file in Thunderbird to view all the chatlogs
27
31
  2. Create your feature branch (`git checkout -b my-new-feature`)
28
32
  3. Commit your changes (`git commit -am 'Added some feature'`)
29
33
  4. Push to the branch (`git push origin my-new-feature`)
30
- 5. Create new Pull Request
34
+ 5. Create new Pull Request
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
 
11
11
  gem.add_dependency('mail')
12
12
  gem.add_dependency('nokogiri')
13
- gem.add_dependency('trollop')
13
+ gem.add_dependency('parallel')
14
14
 
15
15
  gem.add_development_dependency('rspec')
16
16
 
@@ -2,12 +2,48 @@
2
2
 
3
3
  require 'adium2gmail'
4
4
  require 'Find'
5
- require 'trollop'
5
+ require 'optparse'
6
+ require 'ostruct'
6
7
 
7
- opts = Trollop::options do
8
- version "adium2gmail #{Adium2Gmail::VERSION}"
9
- opt :output, "Output path", :short => 'o', :default => 'chatlogs'
10
- opt :input, "Input path", :short => 'i', :default => File.expand_path('~/Library/Application Support/Adium 2.0/Users/Default/Logs')
8
+
9
+ options = OpenStruct.new
10
+ options.input_path = File.expand_path('~/Library/Application Support/Adium 2.0/Users/Default/Logs')
11
+ options.output_path = "chatlogs"
12
+ options.parallel = false
13
+
14
+ opts = OptionParser.new do |opts|
15
+ opts.banner = "Usage: adium2gmail [options]"
16
+
17
+ opts.separator ""
18
+ opts.separator "Specific options:"
19
+
20
+ opts.on("-i", "--input [PATH]", "Path of the adium chatlogs") do |input_path|
21
+ options.input_path = input_path
22
+ end
23
+
24
+ opts.on("-o", "--output [PATH]", "Path of the output path") do |output_path|
25
+ options.output_path = output_path
26
+ end
27
+
28
+ opts.on("-p", "--[no-]parallel", "Enable parallel processing (experimental!)") do |parallel|
29
+ options.parallel = parallel
30
+ end
31
+
32
+ opts.separator ""
33
+ opts.separator "Common options:"
34
+
35
+ opts.on_tail("-h", "--help", "Show this message") do
36
+ puts opts
37
+ exit
38
+ end
39
+
40
+ opts.on_tail("--version", "Show version") do
41
+ puts Adium2Gmail::VERSION
42
+ exit
43
+ end
11
44
  end
12
45
 
13
- Adium2Gmail::process_adium_chatlogs opts[:input], opts[:output]
46
+ opts.parse!(ARGV)
47
+
48
+
49
+ Adium2Gmail::process_adium_chatlogs options.input_path, options.output_path, options.parallel
@@ -4,6 +4,8 @@ require 'find'
4
4
  require 'logger'
5
5
  require 'mail'
6
6
  require 'nokogiri'
7
+ require 'ostruct'
8
+ require 'parallel'
7
9
 
8
10
 
9
11
  module Adium2Gmail
@@ -21,19 +23,19 @@ module Adium2Gmail
21
23
  content_type 'text/html; charset=UTF-8'
22
24
  body email_body
23
25
  end
24
- header = "From - " + chat_date.strftime("%a %b %d %H:%M:%S %Y")
25
- header += "Date: " + chat_date.strftime("%a, %d %b %Y %H:%M:%S %z")
26
- header + "\n" + mail.to_s.split("\n")[1..-1].join("\n") + "\n\n\n"
26
+ header = "From - " + chat_date.strftime("%a %b %d %H:%M:%S %Y\n")
27
+ header += "Date: " + chat_date.strftime("%a, %d %b %Y %H:%M:%S %z\n")
28
+ header + mail.to_s.split("\n")[1..-1].join("\n") + "\n\n\n"
27
29
  end
28
30
 
29
31
  def self.get_email_body(f)
30
32
  messages = ''
31
-
33
+
32
34
  doc = Nokogiri::XML(File.open(f, "r"))
33
-
35
+
34
36
  doc.remove_namespaces! #stupid namespaces
35
37
 
36
- doc.xpath("//message").each do | message |
38
+ doc.xpath("//message").each do |message|
37
39
  datetime = DateTime.parse(message.xpath("@time").text)
38
40
  nickname = message.xpath("@alias").text
39
41
  nickname = message.xpath("@sender").text if nickname.blank?
@@ -48,7 +50,7 @@ module Adium2Gmail
48
50
  time = date.strftime("%I:%M %p")
49
51
 
50
52
  message_tag = message_tag.xpath("div/span")
51
-
53
+
52
54
  #Not sure why I do the gsub here. I did it in python but didn't comment :(
53
55
  #But I'm sure I did it for a good reason
54
56
  message = message_tag.text.gsub("'", "'")
@@ -66,17 +68,37 @@ module Adium2Gmail
66
68
  </div>}
67
69
  end
68
70
 
69
- def self.process_adium_chatlogs(input, output_path)
70
- File.open output_path, "w" do |output_file|
71
- Find.find(input) do |f|
72
- if f.match(/\.chatlog.*?\.xml\Z/) && ! f.include?("msn chat") #skipping multiple conversations for now
73
- to_email = File.basename(File.dirname(File.dirname(File.dirname(f)))).sub(/.*?\./, "") #this is somewhat hacky...
74
- from_email, chat_date = File.basename(f, ".xml").split()
75
- chat_date = DateTime.parse(chat_date.gsub!(".", ":"))
71
+ def self.find_logs(input)
72
+ infos = []
73
+ Find.find(input) do |f|
74
+ if f.match(/\.chatlog.*?\.xml\Z/) && !f.include?("msn chat") #skipping multiple conversations for now
75
+ to_email = File.basename(File.dirname(File.dirname(File.dirname(f)))).sub(/.*?\./, "") #this is somewhat hacky...
76
+ from_email, chat_date = File.basename(f, ".xml").split()
77
+ chat_date = DateTime.parse(chat_date.gsub!(".", ":"))
78
+
79
+ info = OpenStruct.new
80
+ info.from_email = from_email
81
+ info.to_email = to_email
82
+ info.f = f
83
+ info.chat_date = chat_date
84
+ infos.push info
85
+ end
86
+ end
76
87
 
77
- output_file.puts create_email(from_email, to_email, f, chat_date)
88
+ return infos
89
+ end
90
+
91
+ def self.process_adium_chatlogs(input, output_path, parallel)
92
+ File.open output_path, "w" do |output_file|
93
+ if parallel then
94
+ Parallel.map(find_logs(input)) do |info|
95
+ output_file.puts create_email(info.from_email, info.to_email, info.f, info.chat_date)
78
96
  end
79
- end
97
+ else
98
+ find_logs(input).each do |info|
99
+ output_file.puts create_email(info.from_email, info.to_email, info.f, info.chat_date)
100
+ end
101
+ end
80
102
  end
81
- end
103
+ end
82
104
  end
@@ -1,3 +1,3 @@
1
1
  module Adium2Gmail
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adium2gmail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-27 00:00:00.000000000 Z
12
+ date: 2012-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mail
16
- requirement: &70163823546000 !ruby/object:Gem::Requirement
16
+ requirement: &70157516174440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70163823546000
24
+ version_requirements: *70157516174440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &70163823545280 !ruby/object:Gem::Requirement
27
+ requirement: &70157516173400 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70163823545280
35
+ version_requirements: *70157516173400
36
36
  - !ruby/object:Gem::Dependency
37
- name: trollop
38
- requirement: &70163823544520 !ruby/object:Gem::Requirement
37
+ name: parallel
38
+ requirement: &70157516172380 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70163823544520
46
+ version_requirements: *70157516172380
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70163823543900 !ruby/object:Gem::Requirement
49
+ requirement: &70157516171940 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70163823543900
57
+ version_requirements: *70157516171940
58
58
  description: Converts Adium chatlogs to emails
59
59
  email:
60
60
  - johnjiang101@gmail.com