shoefiti

Check-in [23acb16814]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:First attempt at UI layout, email bodies load

* Laying out application as desired, with scrolling message pane
* Message bodies are now returned, have to check for plain text messages
and mutlipart messages.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 23acb16814a005603132c97ac38e093a27ccfdaadce563ac124f9b7579a1ef3b
User & Date: i5ivem@gmail.com 2010-03-24 14:46:18
Context
2010-04-04
22:37
Fix message pane displaying only latest message check-in: 9971bce308 user: i5ivem@gmail.com tags: trunk
2010-03-24
14:46
First attempt at UI layout, email bodies load

* Laying out application as desired, with scrolling message pane
* Message bodies are now returned, have to check for plain text messages
and mutlipart messages. check-in: 23acb16814 user: i5ivem@gmail.com tags: trunk

2010-03-23
17:25
Basics of App now working

* Not displaying message bodies because need to parse and sanitize first
* Doesn't redraw anything if you select a different month/list, etc
* I.e. very rough around the edges. check-in: cb38509564 user: i5ivem@gmail.com tags: trunk

Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to shoefiti.rb.

1
2
3
4
5
6
7
8
9
10
11
12
13
14



15
16
17
18
19
20
21
22
23
24
25

26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

65
66
67
68
69

70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89

90
91
92
93
94





95
96
97

98



99



100






101


102


103



104
require 'rubygems'
require 'date'
require 'json'

Shoes.app :title => "Shoefiti - Librelist Browser" do
	URL = "http://librelist.com/archives/"
	@listurl = ""
	def getlist
		download(URL+@listurl) do |list|
			@lists = eval(list.response.body)[1]
			@place = eval(list.response.body)[0].split("/")
			debug(@lists)
			debug(@place)
			stack do



				if @place.length < 5 #Need to break out of this once we get to the list of days. Odd array length due to split on /
					list_box :items => @lists do |list|
						@listurl += list.text
						getlist
					end
				else
							#debug("Pop1")
							#debug(@place.pop)
							#debug("Pop2")
							#debug(@place.pop)
							drawcalendar(@place.pop.to_i, @place.pop.to_i, @place.pop.to_s, @lists)	#pass @lists?	

				end	
			end		
		end
	end

	getlist


	def drawcalendar(month, year, list, maildays)
	off=Date.new(year, month, 01).wday-1 #Offset, not sure wh yI need the -1 here, but I do.
	mdays=(Date.new(year, 12, 31) << (12-month)).day #Days in the month
	rows=((mdays+off+1).to_f/7.0).ceil #Number of rows in calendar, plus 1 to compensate for -1 above. Have confused myself
		days = %w{Su Mo Tu We Th Fr Sa}
		days.each do |column|
			i = days.index(column)
			row = 0
			stack :left => i*50, :top => 100 do
				para column
				until row == rows do
					calday = i-off+7*row
					if (1..mdays) === calday #Only want to draw if greater than zero and less than max days
						if calday.to_s.length == 1
							caldaystr = "0"+calday.to_s
						else
							caldaystr = calday.to_s
						end
						if maildays.include?(caldaystr+"/") #deal with "0" in front of single digits
							para make_date_link(list, year, month, calday)
						else
							para calday
						end
					else 
						para ""
					end#
					row += 1
				end
			end
		end
	end


	def make_date_link(list, year, month, day) #http://thread.gmane.org/gmane.comp.lib.shoes/4042/focus=4044
		link(day){getmails(list, year, month, day)}
	end
	

	def getmails(list, year, month, day)
		#need to fix months and days here, ie 0 on front.
		if month.to_s.length == 1
			month = "0"+month.to_s
		else
			month = month.to_s
		end
		if day.to_s.length == 1
			day = "0"+day.to_s
		else
			day = day.to_s
		end
		url = "http://librelist.com/archives/"+list+"/"+year.to_s+"/"+month.to_s+"/"+day.to_s+"/json/"
		debug(url)
		download(url) do |data|
			emails = eval(data.response.body)[1]
			debug(emails.length)
			emails.each do |message|
				download(url+message) do |data|
					js = JSON.parse(data.response.body)

					stack :margin => 10, :width => 400 do
							border black, :strokewidth => 3, :curve => 5 
							inscription js["headers"]["Date"]
							inscription js["headers"]["From"]
							inscription js["headers"]["Subject"]





					end
						#para js["body"] #Need to sanatize this a bit for output
				end

			end



				# Where to store all these? Or just draw straight away?



		end






	end


		






end




|
|
<




|
|
|
>
>
>






|
<
|
<
|
>





<

<

|
|
|




|





|



|






|





>





>













|


|



>
|
|
|
|
|
>
>
>
>
>
|
<
|
>
|
>
>
>
|
>
>
>
|
>
>
>
>
>
>

>
>
|
>
>
|
>
>
>

1
2
3
4
5
6

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

24

25
26
27
28
29
30
31

32

33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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
require 'rubygems'
require 'date'
require 'json'

Shoes.app :title => "Shoefiti - Librelist Browser", :height => 700, :scroll => false do
	

	def getlist
		download(URL+@listurl) do |list|
			@lists = eval(list.response.body)[1]
			@place = eval(list.response.body)[0].split("/")
			#debug(@lists)
			#debug(@place)
			stack :margin => 10 do
				@loading.hide
				@animate.stop
				@loaded.show
				if @place.length < 5 #Need to break out of this once we get to the list of days. Odd array length due to split on /
					list_box :items => @lists do |list|
						@listurl += list.text
						getlist
					end
				else
					#debug("Pop1 "+@place.pop) #Turning on these debugs will break app since popping items from array

					#debug("Pop2 "+@place.pop)

					drawcalendar(@place.pop.to_i, @place.pop.to_i, @place.pop.to_s, @lists)
					drawmailpane #Can't draw mailpane before now, as otherwise threading in getlist downloads results in drop downs appearing below mailpane
				end	
			end		
		end
	end




	def drawcalendar(month, year, list, maildays)
		off=Date.new(year, month, 01).wday-1 #Offset, not sure why I need the -1 here, but I do.
		mdays=(Date.new(year, 12, 31) << (12-month)).day #Days in the month
		rows=((mdays+off+1).to_f/7.0).ceil #Number of rows in calendar, plus 1 to compensate for -1 above. Have confused myself
		days = %w{Su Mo Tu We Th Fr Sa}
		days.each do |column|
			i = days.index(column)
			row = 0
			stack :left => i*40+250, :top => -150 do
				para column
				until row == rows do
					calday = i-off+7*row
					if (1..mdays) === calday #Only want to draw if greater than zero and less than max days
						if calday.to_s.length == 1
							caldaystr = "0"+calday.to_s #need "0" in front of single digits
						else
							caldaystr = calday.to_s
						end
						if maildays.include?(caldaystr+"/") 
							para make_date_link(list, year, month, calday)
						else
							para calday
						end
					else 
						para ""
					end
					row += 1
				end
			end
		end
	end


	def make_date_link(list, year, month, day) #http://thread.gmane.org/gmane.comp.lib.shoes/4042/focus=4044
		link(day){getmails(list, year, month, day)}
	end
	

	def getmails(list, year, month, day)
		#need to fix months and days here, ie 0 on front.
		if month.to_s.length == 1
			month = "0"+month.to_s
		else
			month = month.to_s
		end
		if day.to_s.length == 1
			day = "0"+day.to_s
		else
			day = day.to_s
		end
		url = "http://librelist.com/archives/"+list+"/"+year.to_s+"/"+month.to_s+"/"+day.to_s+"/json/"
		#debug(url)
		download(url) do |data|
			emails = eval(data.response.body)[1]
			#debug(emails.length)
			emails.each do |message|
				download(url+message) do |data|
					js = JSON.parse(data.response.body)
					@messagelist.clear{
						stack :margin => 30, :width => 550 do
								border black, :strokewidth => 2 
								inscription js["headers"]["Date"]
								inscription js["headers"]["From"]
								inscription js["headers"]["Subject"]
								#message body can end up in one of two places
								if js["body"] 
									para js["body"].to_s #Need to sanatize this a bit for output??
								else 
									para js["parts"][0]["body"].to_s
								end

						end
					}
				end
			end
		end
	end

	
	def drawmailpane
		@messagelist = stack :height => 425, :scroll => true 
	end

	
	@loading = para "Loading Lists...", :margin => 10
	@animate = animate(5) do |frame|
		weight = ["bold", "normal"]
		@loading.style(:weight => weight[frame&1])	
	end
	@loaded = para "Pick list to browse", :margin => 10
	@loaded.hide

	URL = "http://librelist.com/archives/"
	@listurl = ""
	
	getlist 		
	

end