scripts/misc/unlock-parse
2020-04-02 10:38:36 +02:00

57 lines
1 KiB
Ruby
Executable file

#!/usr/bin/env ruby
require 'time'
def valid_log(lines)
lines.reduce(["L",true]){|acc,line|
if acc[1] && line[0] != acc[0] then
[line[0], true]
else
[nil, false]
end
}[1]
end
if ARGV[0] == '-h' then
puts <<~HELP
Usage: unlock-parse [-s] DAY...
-s short output, total only
HELP
exit
end
if ARGV[0] == '-s' then
short=true
days=ARGV[1..-1]
else
short=false
days=ARGV
end
days.empty? && days = [Date.today.iso8601]
days.each do |logday|
path = if File.exists? logday then logday else ENV['XDG_DATA_HOME'] + '/log/locktime/' + logday end
log = File.readlines(path)
if ! valid_log(log) then puts "Invalid log file"; exit 1 end
if log.length % 2 != 0 then
log << "L " + Time.now.iso8601
end
times = log.each_slice(2).map{|e|
Time.parse(e[1][2..-1]) - Time.parse(e[0][2..-1])
}
if ! short then
times.map{|t| Time.at(t).utc.strftime("%H:%M:%S")}.each{|s|puts s}
puts "\nTotal:"
end
puts Time.at(times.sum).utc.strftime("%H:%M:%S")
end