lib/sculd/manager.rb in sculd-0.0.3 vs lib/sculd/manager.rb in sculd-0.1.0
- old
+ new
@@ -3,11 +3,11 @@
require "date"
require "sculd.rb"
require "rubygems"
-gem "highline"
+#gem "highline"
require "highline"
#
#
#
@@ -16,13 +16,16 @@
WEEKDAYS = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ]
class LoadError < Exception; end
#
- def initialize(file, io = $stdout)
- @source_file = file
- load_file(@source_file, io)
+ def initialize(dir, io = $stdout)
+ @source_dir = dir
+ @plans = []
+ Dir.glob("#{@source_dir}/*").each do |file|
+ load_file(file, io)
+ end
end
def show(num_event, num_task, io = $stdout)
show_events(num_event)
show_tasks(num_task)
@@ -30,35 +33,39 @@
private
# read, parse file and set data to @events and @tasks.
def load_file(file, io = $stdio)
- @plans = []
File.open(file, "r").readlines.each_with_index do |line, index|
begin
- date, type, option = Sculd::Plan.parse(line, io)
- option = option.to_i
- next unless type
- case type
- when "@"
- plan_type = Sculd::Plan::Schedule
- when "!"
- plan_type = Sculd::Plan::Deadline
- option = 7 if option == 0
- when "-"
- plan_type = Sculd::Plan::Reminder
- when "+"
- plan_type = Sculd::Plan::Todo
- option = 7 if option == 0
+ elems = Sculd::Plan.parse(line, io)
+ next unless elems[:type]
+ case elems[:type]
+ when Sculd::Plan::Schedule::SYMBOL_CHAR
+ plan_class = Sculd::Plan::Schedule
+ when Sculd::Plan::Deadline::SYMBOL_CHAR
+ plan_class = Sculd::Plan::Deadline
+ when Sculd::Plan::Reminder::SYMBOL_CHAR
+ plan_class = Sculd::Plan::Reminder
+ when Sculd::Plan::Todo::SYMBOL_CHAR
+ plan_class = Sculd::Plan::Todo
else
next
end
- @plans << plan_type.new(date, option, line)
+ @plans << plan_class.new(elems[:datetime ],
+ elems[:flag_time ],
+ elems[:option ],
+ elems[:description],
+ )
rescue Sculd::Plan::WeekdayMismatchError
- io.puts "error occured at #{index}: #{line}"
+ io.puts "error occured at #{index}: #{line.to_i + 1}"
raise LoadError
+ rescue Sculd::Plan::NotNumberError
+ #io.puts "error occured at #{index}: #{line+1}"
+ #raise LoadError
+ next
rescue
# do nothing
end
end
end
@@ -87,29 +94,48 @@
if events # if plan is not empty.
#HIGHLINE.say("<%= color('red', :red) %>!")
#HIGHLINE.say(" <%= color(#{date.to_s} #{WEEKDAYS[date.wday]}, :white, :red) %>")
#hl.say(" <%= color('red', :red) %>!")
#io.puts str
- events.sort_by{|i| i.datetime}.each do |job|
- io.puts " #{job.description.strip}"
+ events.sort_by{|i| i.datetime}.each do |event|
+ #pp event
+
+ io.print(" ") #indent
+ event_date = Date.new(event.datetime.year,
+ event.datetime.month,
+ event.datetime.day)
+ if event_date != date
+ io.printf("<%02d/%02d>", event.datetime.month, event.datetime.day )
+ elsif event.flag_time
+ io.printf("[%02d:%02d]", event.datetime.hour, event.datetime.minute )
+ else
+ io.print(" ")
+ end
+ io.printf("%s", event.class::SYMBOL_CHAR )
+ io.printf("%-2s ", event.option.to_s )
+ io.puts "#{event.description}"
+
+ #io.puts " #{event.description.strip}"
end
else
- io.puts " (no plan)"
+ io.puts " (no event)"
end
io.puts
end
end
# Return a hash of dates and events.
# The eventes generated from @schedules sorted by date and time.
def days_events
results = {}
@plans.each do |plan|
- plan.events.each do |event|
- date = event.date
+ #puts
+ #p plan
+ plan.event_dates.each do |date|
+ #pp date
results[date] ||= []
- results[date] << event
+ results[date] << plan
end
end
return results
end
@@ -117,14 +143,24 @@
def show_tasks(num, today = Date.today, io = $stdout)
return if num == 0
io.puts "Tasks:"
plans = @plans.sort_by {|plan| plan.priority(today)}.reverse
- #pp plans
num = plans.size if plans.size < num
plans[0..(num-1)].each do |plan|
- io.puts " #{plan.description.strip}"
+ io.printf(" [%4d-%02d-%02d]",
+ plan.datetime.year,
+ plan.datetime.month,
+ plan.datetime.day,
+ )
+ io.printf("%s%-2s %s",
+ plan.class::SYMBOL_CHAR,
+ plan.option.to_s,
+ plan.description
+ #io.print " #{plan.description.strip}"
+ )
+ io.puts
end
end
end