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)| %> Week <%= week_number %> @@ -27,7 +27,7 @@ <% lectures.each do |lecture| %> - <%= lecture.title %> + <%= lecture.nice_title %> <%= lecture.start_time.to_fs(:dmy) %> diff --git a/db/migrate/20230929184126_add_default_status_to_lecture.rb b/db/migrate/20230929184126_add_default_status_to_lecture.rb new file mode 100644 index 0000000..ff0da64 --- /dev/null +++ b/db/migrate/20230929184126_add_default_status_to_lecture.rb @@ -0,0 +1,5 @@ +class AddDefaultStatusToLecture < ActiveRecord::Migration[7.0] + def change + change_column :lectures, :status, :integer, default: 0, null: false + end +end diff --git a/db/schema.rb b/db/schema.rb index d8955e7..13d513d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_09_29_181725) do +ActiveRecord::Schema[7.0].define(version: 2023_09_29_184126) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -26,7 +26,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_09_29_181725) do create_table "lectures", force: :cascade do |t| t.string "title", null: false t.datetime "start_time", null: false - t.integer "status", null: false + t.integer "status", default: 0, null: false t.string "recording_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false diff --git a/test/jobs/scrape_panopto_job_test.rb b/test/jobs/scrape_panopto_job_test.rb new file mode 100644 index 0000000..551f223 --- /dev/null +++ b/test/jobs/scrape_panopto_job_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class ScrapePanoptoJobTest < ActiveJob::TestCase + # test "the truth" do + # assert true + # end +end