Artifact f3fdec05c48bfa51a72fc1834edcb8611babaf02365d4be61ba99c7bcdeb62dd:
- File
shoefiti.rb
— part of check-in
[1a9d98c852]
at
2010-05-26 13:02:39
on branch master
— Not working - further attempts to get Class approach working
* Can't get the message list to draw properly using this class approach.
The Shoes para, etc bits seem to get ignored. As does the @messagelist
(the whole window scrolls)
* Perhaps a class is not the best thing to use: Ideally need to flush each
time as at the moment objects just get added to it for each date that is
clicked on, but old ones aren't removed. Perhaps should use a hash or
array for potential thread sorting, etc. (user: i5ivem@gmail.com size: 5559)
0000: 72 65 71 75 69 72 65 20 27 72 75 62 79 67 65 6d require 'rubygem
0010: 73 27 0a 72 65 71 75 69 72 65 20 27 64 61 74 65 s'.require 'date
0020: 27 0a 72 65 71 75 69 72 65 20 27 6a 73 6f 6e 27 '.require 'json'
0030: 0a 0a 53 68 6f 65 73 2e 61 70 70 20 3a 74 69 74 ..Shoes.app :tit
0040: 6c 65 20 3d 3e 20 22 53 68 6f 65 66 69 74 69 20 le => "Shoefiti
0050: 2d 20 4c 69 62 72 65 6c 69 73 74 20 42 72 6f 77 - Librelist Brow
0060: 73 65 72 22 2c 20 3a 68 65 69 67 68 74 20 3d 3e ser", :height =>
0070: 20 37 30 30 2c 20 3a 73 63 72 6f 6c 6c 20 3d 3e 700, :scroll =>
0080: 20 66 61 6c 73 65 20 64 6f 0a 0a 09 63 6c 61 73 false do...clas
0090: 73 20 45 6d 61 69 6c 20 0a 09 09 23 57 68 61 74 s Email ...#What
00a0: 20 61 62 6f 75 74 20 77 68 61 74 20 63 6c 61 73 about what clas
00b0: 73 20 72 65 74 61 69 6e 73 20 69 6e 20 6d 65 6d s retains in mem
00c0: 6f 72 79 3f 20 44 6f 20 49 20 6e 65 65 64 20 74 ory? Do I need t
00d0: 6f 20 66 6c 75 73 68 20 74 68 65 20 63 6c 61 73 o flush the clas
00e0: 73 3f 20 49 73 20 74 68 61 74 20 65 76 65 6e 20 s? Is that even
00f0: 70 6f 73 73 69 62 6c 65 3f 0a 09 09 23 50 65 72 possible?...#Per
0100: 68 61 70 73 20 6e 65 65 64 20 74 6f 20 68 61 6e haps need to han
0110: 64 20 6c 69 73 74 2c 20 6d 6f 6e 74 68 2c 20 64 d list, month, d
0120: 61 79 2c 20 79 65 61 72 20 61 74 74 72 69 62 75 ay, year attribu
0130: 74 65 73 20 74 6f 20 64 72 61 77 5f 61 6c 6c 2e tes to draw_all.
0140: 20 0a 09 09 23 50 65 72 68 61 70 73 20 75 73 69 ...#Perhaps usi
0150: 6e 67 20 61 20 63 6c 61 73 73 20 69 73 20 6e 6f ng a class is no
0160: 74 20 74 68 65 20 62 65 73 74 20 77 61 79 2e 2e t the best way..
0170: 2e 20 55 73 65 20 68 61 73 68 20 6f 72 20 61 72 . Use hash or ar
0180: 72 61 79 2e 0a 0a 09 09 61 74 74 72 5f 61 63 63 ray.....attr_acc
0190: 65 73 73 6f 72 20 3a 64 61 74 65 2c 20 3a 66 72 essor :date, :fr
01a0: 6f 6d 2c 20 3a 73 75 62 6a 65 63 74 2c 20 3a 62 om, :subject, :b
01b0: 6f 64 79 0a 0a 09 09 64 65 66 20 69 6e 69 74 69 ody....def initi
01c0: 61 6c 69 7a 65 28 64 61 74 65 2c 20 66 72 6f 6d alize(date, from
01d0: 2c 20 73 75 62 6a 65 63 74 2c 20 62 6f 64 79 29 , subject, body)
01e0: 0a 09 09 09 40 64 61 74 65 20 3d 20 64 61 74 65 ....@date = date
01f0: 0a 09 09 09 40 66 72 6f 6d 20 3d 20 66 72 6f 6d ....@from = from
0200: 0a 09 09 09 40 73 75 62 6a 65 63 74 20 3d 20 73 ....@subject = s
0210: 75 62 6a 65 63 74 0a 09 09 09 40 62 6f 64 79 20 ubject....@body
0220: 3d 20 62 6f 64 79 0a 09 09 09 23 40 74 68 72 65 = body....#@thre
0230: 61 64 20 3d 20 73 75 62 6a 65 63 74 2e 73 74 72 ad = subject.str
0240: 69 70 20 6f 66 20 52 45 2c 20 46 57 2c 20 65 74 ip of RE, FW, et
0250: 63 2e 20 0a 09 09 09 23 57 61 6e 74 20 74 6f 20 c. ....#Want to
0260: 73 65 74 20 74 68 72 65 61 64 2e 20 42 61 73 65 set thread. Base
0270: 64 20 6f 6e 20 73 75 62 6a 65 63 74 3f 0a 09 09 d on subject?...
0280: 65 6e 64 0a 0a 3d 62 65 67 69 6e 0a 09 09 64 65 end..=begin...de
0290: 66 20 73 65 6c 66 2e 73 6f 72 74 5f 62 79 5f 74 f self.sort_by_t
02a0: 68 72 65 61 64 28 74 68 72 65 61 64 29 20 3f 3f hread(thread) ??
02b0: 3f 0a 09 09 09 23 21 0a 09 09 09 4f 62 6a 65 63 ?....#!....Objec
02c0: 74 53 70 61 63 65 2e 65 61 63 68 5f 6f 62 6a 65 tSpace.each_obje
02d0: 63 74 28 45 6d 61 69 6c 29 20 64 6f 20 7c 65 7c ct(Email) do |e|
02e0: 0a 09 09 09 09 65 2e 74 68 72 65 61 64 20 3d 3d .....e.thread ==
02f0: 20 0a 0a 09 09 65 6e 64 0a 3d 65 6e 64 0a 09 09 ....end.=end...
0300: 0a 09 09 64 65 66 20 73 65 6c 66 2e 64 72 61 77 ...def self.draw
0310: 5f 61 6c 6c 0a 09 09 09 4f 62 6a 65 63 74 53 70 _all....ObjectSp
0320: 61 63 65 2e 65 61 63 68 5f 6f 62 6a 65 63 74 28 ace.each_object(
0330: 45 6d 61 69 6c 29 20 64 6f 20 7c 65 7c 0a 0a 09 Email) do |e|...
0340: 09 09 09 23 40 6d 65 73 73 61 67 65 6c 69 73 74 ...#@messagelist
0350: 2e 61 70 70 65 6e 64 7b 0a 09 09 09 09 09 24 61 .append{......$a
0360: 70 70 2e 73 74 61 63 6b 20 3a 6d 61 72 67 69 6e pp.stack :margin
0370: 20 3d 3e 20 33 30 2c 20 3a 77 69 64 74 68 20 3d => 30, :width =
0380: 3e 20 35 35 30 20 64 6f 20 23 49 73 20 74 68 69 > 550 do #Is thi
0390: 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 68 65 72 s understood her
03a0: 65 3f 20 53 6f 6d 65 20 6f 66 20 74 68 69 73 20 e? Some of this
03b0: 69 73 20 6e 6f 74 20 77 6f 72 6b 69 6e 67 2e 0a is not working..
03c0: 09 09 09 09 09 09 24 61 70 70 2e 62 6f 72 64 65 ......$app.borde
03d0: 72 20 62 6c 61 63 6b 2c 20 3a 73 74 72 6f 6b 65 r black, :stroke
03e0: 77 69 64 74 68 20 3d 3e 20 32 20 0a 09 09 09 09 width => 2 .....
03f0: 09 09 24 61 70 70 2e 69 6e 73 63 72 69 70 74 69 ..$app.inscripti
0400: 6f 6e 20 65 2e 64 61 74 65 0a 09 09 09 09 09 09 on e.date.......
0410: 24 61 70 70 2e 69 6e 73 63 72 69 70 74 69 6f 6e $app.inscription
0420: 20 65 2e 66 72 6f 6d 0a 09 09 09 09 09 09 24 61 e.from.......$a
0430: 70 70 2e 69 6e 73 63 72 69 70 74 69 6f 6e 20 65 pp.inscription e
0440: 2e 73 75 62 6a 65 63 74 0a 09 09 09 09 09 09 24 .subject.......$
0450: 61 70 70 2e 70 61 72 61 20 65 2e 62 6f 64 79 2e app.para e.body.
0460: 74 6f 5f 73 0a 09 09 09 09 09 65 6e 64 0a 09 09 to_s......end...
0470: 09 09 23 7d 0a 09 09 09 65 6e 64 0a 09 09 65 6e ..#}....end...en
0480: 64 0a 0a 09 65 6e 64 0a 0a 0a 09 23 4e 65 65 64 d...end....#Need
0490: 20 74 6f 20 62 65 20 63 61 72 65 66 75 6c 20 6e to be careful n
04a0: 6f 74 20 74 6f 20 67 65 74 20 6d 6f 6e 74 68 73 ot to get months
04b0: 20 74 68 61 74 20 64 6f 6e 27 74 20 65 78 69 73 that don't exis
04c0: 74 20 28 74 68 69 6e 6b 20 6f 6b 20 62 61 63 6b t (think ok back
04d0: 20 69 6e 20 74 69 6d 65 2c 20 77 69 74 68 69 6e in time, within
04e0: 20 72 65 61 73 6f 6e 3f 3f 29 0a 09 64 65 66 20 reason??)..def
04f0: 63 68 61 6e 67 65 6d 6f 6e 74 68 28 64 69 72 65 changemonth(dire
0500: 63 74 69 6f 6e 29 0a 09 09 69 66 20 64 69 72 65 ction)...if dire
0510: 63 74 69 6f 6e 20 3d 3d 20 3a 62 61 63 6b 77 61 ction == :backwa
0520: 72 64 0a 09 09 09 69 66 20 40 6d 6f 6e 74 68 20 rd....if @month
0530: 3d 3d 20 31 20 23 74 65 6d 70 74 69 6e 67 20 74 == 1 #tempting t
0540: 6f 20 64 6f 20 22 31 32 2f 22 2e 6e 65 78 74 20 o do "12/".next
0550: 62 75 74 20 6e 6f 20 63 6f 72 72 65 73 70 6f 6e but no correspon
0560: 64 69 6e 67 20 70 72 65 76 69 6f 75 73 0a 09 09 ding previous...
0570: 09 09 40 79 65 61 72 20 2d 3d 20 31 0a 09 09 09 ..@year -= 1....
0580: 09 40 6d 6f 6e 74 68 20 3d 20 31 32 0a 09 09 09 .@month = 12....
0590: 65 6c 73 65 0a 09 09 09 09 40 6d 6f 6e 74 68 20 else.....@month
05a0: 2d 3d 20 31 0a 09 09 09 65 6e 64 0a 09 09 65 6e -= 1....end...en
05b0: 64 0a 09 09 69 66 20 64 69 72 65 63 74 69 6f 6e d...if direction
05c0: 20 3d 3d 20 3a 66 6f 72 77 61 72 64 0a 09 09 09 == :forward....
05d0: 69 66 20 40 6d 6f 6e 74 68 20 3d 3d 20 31 32 0a if @month == 12.
05e0: 09 09 09 09 40 79 65 61 72 20 2b 3d 20 31 0a 09 ....@year += 1..
05f0: 09 09 09 40 6d 6f 6e 74 68 20 3d 20 31 0a 09 09 ...@month = 1...
0600: 09 65 6c 73 65 0a 09 09 09 09 40 6d 6f 6e 74 68 .else.....@month
0610: 20 2b 3d 20 31 0a 09 09 09 65 6e 64 0a 09 09 65 += 1....end...e
0620: 6e 64 0a 09 09 64 65 62 75 67 28 40 79 65 61 72 nd...debug(@year
0630: 29 0a 09 09 64 65 62 75 67 28 40 6d 6f 6e 74 68 )...debug(@month
0640: 29 0a 09 09 64 6f 77 6e 6c 6f 61 64 28 55 52 4c )...download(URL
0650: 2b 40 6c 69 73 74 2b 40 79 65 61 72 2e 74 6f 5f +@list+@year.to_
0660: 73 2b 22 2f 22 2b 28 30 20 69 66 20 40 6d 6f 6e s+"/"+(0 if @mon
0670: 74 68 20 3c 20 31 30 29 2e 74 6f 5f 73 2b 40 6d th < 10).to_s+@m
0680: 6f 6e 74 68 2e 74 6f 5f 73 29 20 64 6f 20 7c 72 onth.to_s) do |r
0690: 65 73 70 7c 0a 09 09 09 40 64 61 79 73 20 3d 20 esp|....@days =
06a0: 65 76 61 6c 28 72 65 73 70 2e 72 65 73 70 6f 6e eval(resp.respon
06b0: 73 65 2e 62 6f 64 79 29 5b 31 5d 0a 09 09 09 64 se.body)[1]....d
06c0: 65 62 75 67 28 40 64 61 79 73 29 0a 09 09 09 23 ebug(@days)....#
06d0: 40 73 74 61 63 6b 5f 63 61 6c 2e 73 68 6f 77 0a @stack_cal.show.
06e0: 09 09 09 23 40 73 74 61 63 6b 5f 63 61 6c 5f 6e ...#@stack_cal_n
06f0: 61 76 2e 73 68 6f 77 0a 09 09 09 40 77 68 65 6e av.show....@when
0700: 2e 72 65 70 6c 61 63 65 28 40 6d 6f 6e 74 68 2e .replace(@month.
0710: 74 6f 5f 73 2c 20 22 20 22 2c 20 40 79 65 61 72 to_s, " ", @year
0720: 2e 74 6f 5f 73 29 0a 09 09 09 64 72 61 77 63 61 .to_s)....drawca
0730: 6c 65 6e 64 61 72 28 40 6c 69 73 74 2c 20 40 79 lendar(@list, @y
0740: 65 61 72 2c 20 40 6d 6f 6e 74 68 2c 20 40 64 61 ear, @month, @da
0750: 79 73 29 0a 09 09 65 6e 64 0a 09 65 6e 64 0a 09 ys)...end..end..
0760: 0a 09 09 0a 09 64 65 66 20 69 6e 69 74 0a 09 09 .....def init...
0770: 64 6f 77 6e 6c 6f 61 64 28 55 52 4c 29 20 64 6f download(URL) do
0780: 20 7c 72 65 73 70 7c 0a 09 09 09 40 6c 69 73 74 |resp|....@list
0790: 5f 6c 69 73 74 2e 69 74 65 6d 73 20 3d 20 65 76 _list.items = ev
07a0: 61 6c 28 72 65 73 70 2e 72 65 73 70 6f 6e 73 65 al(resp.response
07b0: 2e 62 6f 64 79 29 5b 31 5d 0a 09 09 09 40 73 74 .body)[1]....@st
07c0: 61 63 6b 5f 6c 69 73 74 2e 73 68 6f 77 0a 09 09 ack_list.show...
07d0: 65 6e 64 0a 09 65 6e 64 0a 0a 0a 09 23 4e 65 65 end..end....#Nee
07e0: 64 20 74 6f 20 63 6c 65 61 72 20 61 6e 64 20 72 d to clear and r
07f0: 65 64 72 61 77 20 6c 69 6b 65 20 6d 61 69 6c 70 edraw like mailp
0800: 61 6e 65 0a 09 64 65 66 20 64 72 61 77 63 61 6c ane..def drawcal
0810: 65 6e 64 61 72 28 6c 69 73 74 2c 20 79 65 61 72 endar(list, year
0820: 2c 20 6d 6f 6e 74 68 2c 20 6d 61 69 6c 64 61 79 , month, mailday
0830: 73 29 0a 09 09 64 65 62 75 67 28 22 57 68 65 72 s)...debug("Wher
0840: 65 27 73 20 74 68 65 20 63 61 6c 65 6e 64 61 72 e's the calendar
0850: 3f 22 29 0a 09 09 6f 66 66 3d 44 61 74 65 2e 6e ?")...off=Date.n
0860: 65 77 28 79 65 61 72 2c 20 6d 6f 6e 74 68 2c 20 ew(year, month,
0870: 30 31 29 2e 77 64 61 79 2d 31 20 23 4f 66 66 73 01).wday-1 #Offs
0880: 65 74 2c 20 63 61 6e 27 74 20 72 65 6d 65 6d 62 et, can't rememb
0890: 65 72 20 77 68 79 20 49 20 6e 65 65 64 20 74 68 er why I need th
08a0: 65 20 2d 31 20 68 65 72 65 2c 20 62 75 74 20 49 e -1 here, but I
08b0: 20 64 6f 2e 0a 09 09 6d 64 61 79 73 3d 28 44 61 do....mdays=(Da
08c0: 74 65 2e 6e 65 77 28 79 65 61 72 2c 20 31 32 2c te.new(year, 12,
08d0: 20 33 31 29 20 3c 3c 20 28 31 32 2d 6d 6f 6e 74 31) << (12-mont
08e0: 68 29 29 2e 64 61 79 20 23 44 61 79 73 20 69 6e h)).day #Days in
08f0: 20 74 68 65 20 6d 6f 6e 74 68 0a 09 09 72 6f 77 the month...row
0900: 73 3d 28 28 6d 64 61 79 73 2b 6f 66 66 2b 31 29 s=((mdays+off+1)
0910: 2e 74 6f 5f 66 2f 37 2e 30 29 2e 63 65 69 6c 20 .to_f/7.0).ceil
0920: 23 4e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 #Number of rows
0930: 69 6e 20 63 61 6c 65 6e 64 61 72 2c 20 70 6c 75 in calendar, plu
0940: 73 20 31 20 74 6f 20 63 6f 6d 70 65 6e 73 61 74 s 1 to compensat
0950: 65 20 66 6f 72 20 2d 31 20 61 62 6f 76 65 2e 20 e for -1 above.
0960: 48 61 76 65 20 63 6f 6e 66 75 73 65 64 20 6d 79 Have confused my
0970: 73 65 6c 66 0a 09 09 64 61 79 73 20 3d 20 25 77 self...days = %w
0980: 7b 53 75 20 4d 6f 20 54 75 20 57 65 20 54 68 20 {Su Mo Tu We Th
0990: 46 72 20 53 61 7d 0a 09 09 40 6d 65 73 73 61 67 Fr Sa}...@messag
09a0: 65 6c 69 73 74 2e 63 6c 65 61 72 0a 09 09 40 73 elist.clear...@s
09b0: 74 61 63 6b 5f 63 61 6c 2e 63 6c 65 61 72 7b 0a tack_cal.clear{.
09c0: 09 09 64 61 79 73 2e 65 61 63 68 20 64 6f 20 7c ..days.each do |
09d0: 63 6f 6c 75 6d 6e 7c 0a 09 09 09 69 20 3d 20 64 column|....i = d
09e0: 61 79 73 2e 69 6e 64 65 78 28 63 6f 6c 75 6d 6e ays.index(column
09f0: 29 0a 09 09 09 72 6f 77 20 3d 20 30 0a 09 09 09 )....row = 0....
0a00: 73 74 61 63 6b 20 3a 6c 65 66 74 20 3d 3e 20 69 stack :left => i
0a10: 2a 34 30 2c 20 3a 74 6f 70 20 3d 3e 20 31 30 20 *40, :top => 10
0a20: 64 6f 0a 09 09 09 09 70 61 72 61 20 63 6f 6c 75 do.....para colu
0a30: 6d 6e 0a 09 09 09 09 75 6e 74 69 6c 20 72 6f 77 mn.....until row
0a40: 20 3d 3d 20 72 6f 77 73 20 64 6f 0a 09 09 09 09 == rows do.....
0a50: 09 63 61 6c 64 61 79 20 3d 20 69 2d 6f 66 66 2b .calday = i-off+
0a60: 37 2a 72 6f 77 0a 09 09 09 09 09 69 66 20 28 31 7*row......if (1
0a70: 2e 2e 6d 64 61 79 73 29 20 3d 3d 3d 20 63 61 6c ..mdays) === cal
0a80: 64 61 79 20 23 4f 6e 6c 79 20 77 61 6e 74 20 74 day #Only want t
0a90: 6f 20 64 72 61 77 20 69 66 20 67 72 65 61 74 65 o draw if greate
0aa0: 72 20 74 68 61 6e 20 7a 65 72 6f 20 61 6e 64 20 r than zero and
0ab0: 6c 65 73 73 20 74 68 61 6e 20 6d 61 78 20 64 61 less than max da
0ac0: 79 73 0a 09 09 09 09 09 09 69 66 20 63 61 6c 64 ys.......if cald
0ad0: 61 79 2e 74 6f 5f 73 2e 6c 65 6e 67 74 68 20 3d ay.to_s.length =
0ae0: 3d 20 31 0a 09 09 09 09 09 09 09 63 61 6c 64 61 = 1........calda
0af0: 79 73 74 72 20 3d 20 22 30 22 2b 63 61 6c 64 61 ystr = "0"+calda
0b00: 79 2e 74 6f 5f 73 20 23 6e 65 65 64 20 22 30 22 y.to_s #need "0"
0b10: 20 69 6e 20 66 72 6f 6e 74 20 6f 66 20 73 69 6e in front of sin
0b20: 67 6c 65 20 64 69 67 69 74 73 0a 09 09 09 09 09 gle digits......
0b30: 09 65 6c 73 65 0a 09 09 09 09 09 09 09 63 61 6c .else........cal
0b40: 64 61 79 73 74 72 20 3d 20 63 61 6c 64 61 79 2e daystr = calday.
0b50: 74 6f 5f 73 0a 09 09 09 09 09 09 65 6e 64 0a 09 to_s.......end..
0b60: 09 09 09 09 09 69 66 20 6d 61 69 6c 64 61 79 73 .....if maildays
0b70: 2e 69 6e 63 6c 75 64 65 3f 28 63 61 6c 64 61 79 .include?(calday
0b80: 73 74 72 2b 22 2f 22 29 20 0a 09 09 09 09 09 09 str+"/") .......
0b90: 09 70 61 72 61 20 6d 61 6b 65 5f 64 61 74 65 5f .para make_date_
0ba0: 6c 69 6e 6b 28 6c 69 73 74 2c 20 79 65 61 72 2c link(list, year,
0bb0: 20 6d 6f 6e 74 68 2c 20 63 61 6c 64 61 79 29 0a month, calday).
0bc0: 09 09 09 09 09 09 65 6c 73 65 0a 09 09 09 09 09 ......else......
0bd0: 09 09 70 61 72 61 20 63 61 6c 64 61 79 0a 09 09 ..para calday...
0be0: 09 09 09 09 65 6e 64 0a 09 09 09 09 09 65 6c 73 ....end......els
0bf0: 65 20 0a 09 09 09 09 09 09 70 61 72 61 20 22 22 e .......para ""
0c00: 0a 09 09 09 09 09 65 6e 64 0a 09 09 09 09 09 72 ......end......r
0c10: 6f 77 20 2b 3d 20 31 0a 09 09 09 09 65 6e 64 0a ow += 1.....end.
0c20: 09 09 09 65 6e 64 0a 09 09 65 6e 64 7d 0a 09 65 ...end...end}..e
0c30: 6e 64 0a 0a 0a 09 64 65 66 20 6d 61 6b 65 5f 64 nd....def make_d
0c40: 61 74 65 5f 6c 69 6e 6b 28 6c 69 73 74 2c 20 79 ate_link(list, y
0c50: 65 61 72 2c 20 6d 6f 6e 74 68 2c 20 64 61 79 29 ear, month, day)
0c60: 20 23 68 74 74 70 3a 2f 2f 74 68 72 65 61 64 2e #http://thread.
0c70: 67 6d 61 6e 65 2e 6f 72 67 2f 67 6d 61 6e 65 2e gmane.org/gmane.
0c80: 63 6f 6d 70 2e 6c 69 62 2e 73 68 6f 65 73 2f 34 comp.lib.shoes/4
0c90: 30 34 32 2f 66 6f 63 75 73 3d 34 30 34 34 0a 09 042/focus=4044..
0ca0: 09 6c 69 6e 6b 28 64 61 79 29 7b 67 65 74 6d 61 .link(day){getma
0cb0: 69 6c 73 28 6c 69 73 74 2c 20 79 65 61 72 2c 20 ils(list, year,
0cc0: 6d 6f 6e 74 68 2c 20 64 61 79 29 7d 0a 09 65 6e month, day)}..en
0cd0: 64 0a 09 0a 0a 09 64 65 66 20 67 65 74 6d 61 69 d.....def getmai
0ce0: 6c 73 28 6c 69 73 74 2c 20 79 65 61 72 2c 20 6d ls(list, year, m
0cf0: 6f 6e 74 68 2c 20 64 61 79 29 0a 09 09 23 6e 65 onth, day)...#ne
0d00: 65 64 20 74 6f 20 66 69 78 20 6d 6f 6e 74 68 73 ed to fix months
0d10: 20 61 6e 64 20 64 61 79 73 20 68 65 72 65 2c 20 and days here,
0d20: 69 65 20 30 20 6f 6e 20 66 72 6f 6e 74 2e 0a 09 ie 0 on front...
0d30: 09 69 66 20 6d 6f 6e 74 68 2e 74 6f 5f 73 2e 6c .if month.to_s.l
0d40: 65 6e 67 74 68 20 3d 3d 20 31 0a 09 09 09 6d 6f ength == 1....mo
0d50: 6e 74 68 20 3d 20 22 30 22 2b 6d 6f 6e 74 68 2e nth = "0"+month.
0d60: 74 6f 5f 73 20 23 4d 72 2e 20 43 6f 6e 73 69 73 to_s #Mr. Consis
0d70: 74 65 6e 74 2e 20 44 6f 6e 65 20 64 69 66 66 65 tent. Done diffe
0d80: 72 65 6e 74 6c 79 20 66 72 6f 6d 20 74 68 65 20 rently from the
0d90: 75 72 6c 73 21 0a 09 09 65 6c 73 65 0a 09 09 09 urls!...else....
0da0: 6d 6f 6e 74 68 20 3d 20 6d 6f 6e 74 68 2e 74 6f month = month.to
0db0: 5f 73 0a 09 09 65 6e 64 0a 09 09 69 66 20 64 61 _s...end...if da
0dc0: 79 2e 74 6f 5f 73 2e 6c 65 6e 67 74 68 20 3d 3d y.to_s.length ==
0dd0: 20 31 0a 09 09 09 64 61 79 20 3d 20 22 30 22 2b 1....day = "0"+
0de0: 64 61 79 2e 74 6f 5f 73 0a 09 09 65 6c 73 65 0a day.to_s...else.
0df0: 09 09 09 64 61 79 20 3d 20 64 61 79 2e 74 6f 5f ...day = day.to_
0e00: 73 0a 09 09 65 6e 64 0a 09 09 75 72 6c 20 3d 20 s...end...url =
0e10: 22 68 74 74 70 3a 2f 2f 6c 69 62 72 65 6c 69 73 "http://librelis
0e20: 74 2e 63 6f 6d 2f 61 72 63 68 69 76 65 73 2f 22 t.com/archives/"
0e30: 2b 6c 69 73 74 2b 22 2f 22 2b 79 65 61 72 2e 74 +list+"/"+year.t
0e40: 6f 5f 73 2b 22 2f 22 2b 6d 6f 6e 74 68 2e 74 6f o_s+"/"+month.to
0e50: 5f 73 2b 22 2f 22 2b 64 61 79 2e 74 6f 5f 73 2b _s+"/"+day.to_s+
0e60: 22 2f 6a 73 6f 6e 2f 22 0a 09 09 23 64 65 62 75 "/json/"...#debu
0e70: 67 28 75 72 6c 29 0a 09 09 64 6f 77 6e 6c 6f 61 g(url)...downloa
0e80: 64 28 75 72 6c 29 20 64 6f 20 7c 64 61 74 61 7c d(url) do |data|
0e90: 0a 09 09 09 65 6d 61 69 6c 73 20 3d 20 65 76 61 ....emails = eva
0ea0: 6c 28 64 61 74 61 2e 72 65 73 70 6f 6e 73 65 2e l(data.response.
0eb0: 62 6f 64 79 29 5b 31 5d 0a 09 09 09 65 6d 61 69 body)[1]....emai
0ec0: 6c 73 2e 65 61 63 68 20 64 6f 20 7c 6d 65 73 73 ls.each do |mess
0ed0: 61 67 65 7c 0a 09 09 09 09 64 6f 77 6e 6c 6f 61 age|.....downloa
0ee0: 64 28 75 72 6c 2b 6d 65 73 73 61 67 65 29 20 64 d(url+message) d
0ef0: 6f 20 7c 64 61 74 61 7c 0a 09 09 09 09 09 6a 73 o |data|......js
0f00: 20 3d 20 4a 53 4f 4e 2e 70 61 72 73 65 28 64 61 = JSON.parse(da
0f10: 74 61 2e 72 65 73 70 6f 6e 73 65 2e 62 6f 64 79 ta.response.body
0f20: 29 0a 09 09 09 09 09 45 6d 61 69 6c 2e 6e 65 77 )......Email.new
0f30: 28 0a 09 09 09 09 09 09 6a 73 5b 22 68 65 61 64 (.......js["head
0f40: 65 72 73 22 5d 5b 22 44 61 74 65 22 5d 2c 20 0a ers"]["Date"], .
0f50: 09 09 09 09 09 09 6a 73 5b 22 68 65 61 64 65 72 ......js["header
0f60: 73 22 5d 5b 22 46 72 6f 6d 22 5d 2c 20 0a 09 09 s"]["From"], ...
0f70: 09 09 09 09 6a 73 5b 22 68 65 61 64 65 72 73 22 ....js["headers"
0f80: 5d 5b 22 53 75 62 6a 65 63 74 22 5d 2c 0a 09 09 ]["Subject"],...
0f90: 09 09 09 09 69 66 20 6a 73 5b 22 62 6f 64 79 22 ....if js["body"
0fa0: 5d 20 0a 09 09 09 09 09 09 09 70 61 72 61 20 6a ] ........para j
0fb0: 73 5b 22 62 6f 64 79 22 5d 0a 09 09 09 09 09 09 s["body"].......
0fc0: 65 6c 73 65 20 0a 09 09 09 09 09 09 09 70 61 72 else ........par
0fd0: 61 20 6a 73 5b 22 70 61 72 74 73 22 5d 5b 30 5d a js["parts"][0]
0fe0: 5b 22 62 6f 64 79 22 5d 0a 09 09 09 09 09 09 65 ["body"].......e
0ff0: 6e 64 0a 09 09 09 09 09 29 0a 09 09 09 09 65 6e nd......).....en
1000: 64 0a 09 09 09 65 6e 64 0a 09 09 09 40 6d 65 73 d....end....@mes
1010: 73 61 67 65 6c 69 73 74 2e 63 6c 65 61 72 7b 0a sagelist.clear{.
1020: 09 09 09 09 23 73 74 61 63 6b 20 64 6f 0a 09 09 ....#stack do...
1030: 09 09 09 45 6d 61 69 6c 2e 64 72 61 77 5f 61 6c ...Email.draw_al
1040: 6c 20 23 6c 69 73 74 2c 20 64 61 74 65 3f 0a 09 l #list, date?..
1050: 09 09 09 23 65 6e 64 0a 09 09 09 7d 0a 09 09 65 ...#end....}...e
1060: 6e 64 0a 09 65 6e 64 0a 09 0a 09 0a 09 23 41 63 nd..end......#Ac
1070: 74 75 61 6c 20 61 70 70 20 73 74 75 66 66 0a 09 tual app stuff..
1080: 55 52 4c 20 3d 20 22 68 74 74 70 3a 2f 2f 6c 69 URL = "http://li
1090: 62 72 65 6c 69 73 74 2e 63 6f 6d 2f 61 72 63 68 brelist.com/arch
10a0: 69 76 65 73 2f 22 0a 0a 09 23 54 72 79 20 64 6f ives/"...#Try do
10b0: 69 6e 67 20 73 69 6e 67 6c 65 20 6c 69 73 74 20 ing single list
10c0: 62 6f 78 20 6f 77 69 6e 67 20 74 6f 20 6c 69 73 box owing to lis
10d0: 74 5f 62 6f 78 20 74 72 6f 75 62 6c 65 73 20 6f t_box troubles o
10e0: 6e 20 73 68 6f 65 73 20 4d 69 6e 47 57 0a 09 23 n shoes MinGW..#
10f0: 4d 6f 72 65 20 63 6c 6f 73 65 6c 79 20 6d 69 6d More closely mim
1100: 69 63 73 20 74 68 65 20 77 65 62 20 69 6e 74 65 ics the web inte
1110: 72 66 61 63 65 0a 09 66 6c 6f 77 20 3a 77 69 64 rface..flow :wid
1120: 74 68 20 3d 3e 20 22 31 30 30 25 22 20 64 6f 0a th => "100%" do.
1130: 09 09 73 74 61 63 6b 20 3a 77 69 64 74 68 20 3d ..stack :width =
1140: 3e 20 22 34 30 25 22 20 64 6f 20 0a 09 09 09 40 > "40%" do ....@
1150: 73 74 61 63 6b 5f 6c 69 73 74 20 3d 20 73 74 61 stack_list = sta
1160: 63 6b 20 3a 6d 61 72 67 69 6e 20 3d 3e 20 31 30 ck :margin => 10
1170: 20 64 6f 0a 09 09 09 09 40 6c 69 73 74 5f 6c 69 do.....@list_li
1180: 73 74 20 3d 20 6c 69 73 74 5f 62 6f 78 20 64 6f st = list_box do
1190: 20 7c 6c 69 73 74 7c 20 0a 09 09 09 09 09 40 6c |list| ......@l
11a0: 69 73 74 20 3d 20 6c 69 73 74 2e 74 65 78 74 09 ist = list.text.
11b0: 0a 09 09 09 09 09 64 6f 77 6e 6c 6f 61 64 28 55 ......download(U
11c0: 52 4c 2b 40 6c 69 73 74 29 20 64 6f 20 7c 72 65 RL+@list) do |re
11d0: 73 70 7c 0a 09 09 09 09 09 09 40 79 65 61 72 20 sp|.......@year
11e0: 3d 20 65 76 61 6c 28 72 65 73 70 2e 72 65 73 70 = eval(resp.resp
11f0: 6f 6e 73 65 2e 62 6f 64 79 29 5b 31 5d 5b 2d 31 onse.body)[1][-1
1200: 5d 2e 74 6f 5f 69 0a 09 09 09 09 09 09 64 65 62 ].to_i.......deb
1210: 75 67 28 40 79 65 61 72 29 0a 09 09 09 09 09 09 ug(@year).......
1220: 64 6f 77 6e 6c 6f 61 64 28 55 52 4c 2b 40 6c 69 download(URL+@li
1230: 73 74 2b 40 79 65 61 72 2e 74 6f 5f 73 29 20 64 st+@year.to_s) d
1240: 6f 20 7c 72 65 73 70 7c 0a 09 09 09 09 09 09 09 o |resp|........
1250: 40 6d 6f 6e 74 68 20 3d 20 65 76 61 6c 28 72 65 @month = eval(re
1260: 73 70 2e 72 65 73 70 6f 6e 73 65 2e 62 6f 64 79 sp.response.body
1270: 29 5b 31 5d 5b 2d 31 5d 2e 74 6f 5f 69 0a 09 09 )[1][-1].to_i...
1280: 09 09 09 09 09 64 65 62 75 67 28 40 6d 6f 6e 74 .....debug(@mont
1290: 68 29 0a 09 09 09 09 09 09 09 64 6f 77 6e 6c 6f h)........downlo
12a0: 61 64 28 55 52 4c 2b 40 6c 69 73 74 2b 40 79 65 ad(URL+@list+@ye
12b0: 61 72 2e 74 6f 5f 73 2b 22 2f 22 2b 28 30 20 69 ar.to_s+"/"+(0 i
12c0: 66 20 40 6d 6f 6e 74 68 20 3c 20 31 30 29 2e 74 f @month < 10).t
12d0: 6f 5f 73 2b 40 6d 6f 6e 74 68 2e 74 6f 5f 73 29 o_s+@month.to_s)
12e0: 20 64 6f 20 7c 72 65 73 70 7c 0a 09 09 09 09 09 do |resp|......
12f0: 09 09 09 40 64 61 79 73 20 3d 20 65 76 61 6c 28 ...@days = eval(
1300: 72 65 73 70 2e 72 65 73 70 6f 6e 73 65 2e 62 6f resp.response.bo
1310: 64 79 29 5b 31 5d 0a 09 09 09 09 09 09 09 09 64 dy)[1].........d
1320: 65 62 75 67 28 40 64 61 79 73 29 0a 09 09 09 09 ebug(@days).....
1330: 09 09 09 09 40 77 68 65 6e 2e 72 65 70 6c 61 63 ....@when.replac
1340: 65 28 40 6d 6f 6e 74 68 2e 74 6f 5f 73 2c 20 22 e(@month.to_s, "
1350: 20 22 2c 20 40 79 65 61 72 2e 74 6f 5f 73 29 0a ", @year.to_s).
1360: 09 09 09 09 09 09 09 09 64 72 61 77 63 61 6c 65 ........drawcale
1370: 6e 64 61 72 28 40 6c 69 73 74 2c 20 40 79 65 61 ndar(@list, @yea
1380: 72 2c 20 40 6d 6f 6e 74 68 2c 20 40 64 61 79 73 r, @month, @days
1390: 29 0a 09 09 09 09 09 09 09 65 6e 64 0a 09 09 09 )........end....
13a0: 09 09 09 65 6e 64 0a 09 09 09 09 09 65 6e 64 0a ...end......end.
13b0: 09 09 09 09 65 6e 64 0a 09 09 09 65 6e 64 0a 09 ....end....end..
13c0: 09 09 40 6c 69 73 74 75 72 6c 20 3d 20 22 22 0a ..@listurl = "".
13d0: 09 09 09 40 73 74 61 63 6b 5f 63 61 6c 5f 6e 61 ...@stack_cal_na
13e0: 76 20 3d 20 73 74 61 63 6b 20 3a 6d 61 72 67 69 v = stack :margi
13f0: 6e 20 3d 3e 20 31 30 20 64 6f 0a 09 09 09 09 62 n => 10 do.....b
1400: 75 74 74 6f 6e 20 22 3c 22 20 64 6f 0a 09 09 09 utton "<" do....
1410: 09 09 63 68 61 6e 67 65 6d 6f 6e 74 68 28 3a 62 ..changemonth(:b
1420: 61 63 6b 77 61 72 64 29 0a 09 09 09 09 65 6e 64 ackward).....end
1430: 0a 09 09 09 09 40 77 68 65 6e 20 3d 20 70 61 72 .....@when = par
1440: 61 20 22 20 22 0a 09 09 09 09 40 77 68 65 6e 2e a " ".....@when.
1450: 73 74 79 6c 65 20 3a 6d 61 72 67 69 6e 20 3d 3e style :margin =>
1460: 20 31 30 0a 09 09 09 09 62 75 74 74 6f 6e 20 22 10.....button "
1470: 3e 22 20 64 6f 0a 09 09 09 09 09 63 68 61 6e 67 >" do......chang
1480: 65 6d 6f 6e 74 68 28 3a 66 6f 72 77 61 72 64 29 emonth(:forward)
1490: 0a 09 09 09 09 65 6e 64 0a 09 09 09 65 6e 64 0a .....end....end.
14a0: 09 09 65 6e 64 0a 09 09 40 73 74 61 63 6b 5f 63 ..end...@stack_c
14b0: 61 6c 20 3d 20 73 74 61 63 6b 20 3a 77 69 64 74 al = stack :widt
14c0: 68 20 3d 3e 20 22 36 30 25 22 20 64 6f 0a 09 09 h => "60%" do...
14d0: 09 70 61 72 61 20 22 20 22 0a 09 09 65 6e 64 0a .para " "...end.
14e0: 09 65 6e 64 0a 09 40 6d 65 73 73 61 67 65 6c 69 .end..@messageli
14f0: 73 74 20 3d 20 73 74 61 63 6b 20 3a 68 65 69 67 st = stack :heig
1500: 68 74 20 3d 3e 20 34 32 35 2c 20 3a 73 63 72 6f ht => 425, :scro
1510: 6c 6c 20 3d 3e 20 74 72 75 65 20 0a 09 69 6e 69 ll => true ..ini
1520: 74 20 09 0a 0a 65 6e 64 0a 0a 23 57 68 61 74 20 t ...end..#What
1530: 77 6f 75 6c 64 20 6d 61 6b 65 20 74 68 69 73 20 would make this
1540: 75 73 65 66 75 6c 3f 3f 20 0a 23 47 72 6f 75 70 useful?? .#Group
1550: 69 6e 67 20 62 79 20 74 68 72 65 61 64 2f 73 75 ing by thread/su
1560: 62 6a 65 63 74 20 2d 20 63 6f 6c 6c 61 70 73 69 bject - collapsi
1570: 62 6c 65 20 73 65 63 74 69 6f 6e 73 2e 20 0a 23 ble sections. .#
1580: 46 6f 72 20 6e 6f 77 20 72 65 61 6c 6c 79 20 68 For now really h
1590: 61 76 65 20 74 6f 20 6b 65 65 70 20 65 76 65 72 ave to keep ever
15a0: 79 74 68 69 6e 67 20 74 6f 20 22 6f 6e 65 20 64 ything to "one d
15b0: 61 79 22 20 0a 0a 0a ay" ...