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
|
# File 'lib/git_fit/cli.rb', line 26
def parse(file)
format = file.match?(/\.gpx$/i) ? :gpx : :tcx
content = File.read(file)
parser = format == :gpx ? GitFit::Parser::GPX.new(source: "file") : GitFit::Parser::TCX.new(source: "file")
activities = parser.call(content)
if activities.empty?
say_status :warn, "No activities found in #{file}", :yellow
return
end
activities.each do |act|
say_status :activity, act[:name] || "unnamed", :green
say " #{act[:sport_category]}#{act[:sport_type] ? " (#{act[:sport_type]})" : ""}"
say " #{act[:start_date]} | #{act[:distance]&.round(2)}m" if act[:distance]
say " #{act[:moving_time]}s" if act[:moving_time]
end
if options[:save]
db = connect_db
now = Time.now.utc
activities.each do |act|
existing = db[:activities].where(run_id: act[:run_id]).first
if existing
db[:activities].where(run_id: act[:run_id]).update(act.merge(updated_at: now))
else
db[:activities].insert(act.merge(created_at: now, updated_at: now))
end
end
say_status :done, "Saved #{activities.size} activities", :green
end
rescue => e
say_status :error, "Parse failed: #{e.message}", :red
end
|