diff --git a/app/jobs/scrape_panopto_job.rb b/app/jobs/scrape_panopto_job.rb new file mode 100644 index 0000000..8887c16 --- /dev/null +++ b/app/jobs/scrape_panopto_job.rb @@ -0,0 +1,30 @@ +class ScrapePanoptoJob < ApplicationJob + queue_as :default + + def perform(*args) + courses = Course.all + + courses.each do |course| + self.scrape_course(course) + end + end + + # @param [Course] course + def scrape_course(course) + panopto_folder_ids = course.panopto_folders + panopto_folder_ids.each do |folder_id| + lectures_data = Panopto::list_folder folder_id + attributes = lectures_data.map do |lecture_data| + { + title: lecture_data['title'], + start_time: Time.new(lecture_data['start_time']), + recording_id: lecture_data['panopto_delivery_id'], + course_id: course.id, + status: :undetermined + } + end + + Lecture.insert_all(attributes, unique_by: :recording_id) + end + end +end diff --git a/app/lib/Panopto.rb b/app/lib/panopto.rb similarity index 100% rename from app/lib/Panopto.rb rename to app/lib/panopto.rb diff --git a/app/lib/panopto.rbs b/app/lib/panopto.rbs new file mode 100644 index 0000000..fcdab31 --- /dev/null +++ b/app/lib/panopto.rbs @@ -0,0 +1,3 @@ +module Panopto + def self.list_folder: (folder_id: String) -> Array[Hash[String, untyped]] +end diff --git a/app/models/lecture.rb b/app/models/lecture.rb index 0f30e48..9ff2dcf 100644 --- a/app/models/lecture.rb +++ b/app/models/lecture.rb @@ -2,12 +2,13 @@ class Lecture < ApplicationRecord belongs_to :course enum :status, [ + :undetermined, :future, :happening_now, :attended_in_person, :watched_recording, :missed, - ] + ], default: :undetermined def week_number ((start_time.beginning_of_week - Time.new('2023-10-02')) / 1.week).floor @@ -22,4 +23,14 @@ class Lecture < ApplicationRecord "https://uniofbath.cloud.panopto.eu/Panopto/Pages/Viewer.aspx?id=#{recording_id}" end + + def nice_title + if course.title == "General Relativity" + regex = /.+L(\d+).*/ + lecture_number = self.title.match(regex)[1].to_i + return "Lecture #{lecture_number}" + end + + title + end end diff --git a/app/views/attendance_tracker/index.html.erb b/app/views/attendance_tracker/index.html.erb index f4f2f74..4f28d14 100644 --- a/app/views/attendance_tracker/index.html.erb +++ b/app/views/attendance_tracker/index.html.erb @@ -19,7 +19,7 @@
- <% course.lectures.group_by { |lecture| lecture.week_number }.each do |(week_number, lectures)| %> + <% course.lectures.order(:start_time).group_by { |lecture| lecture.week_number }.each do |(week_number, lectures)| %>