eivid 1.0.3 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/app/controllers/eivid/videos_controller.rb +6 -1
 - data/app/errors/eivid/video_unavailable_all_attempts_failed_error.rb +4 -0
 - data/app/errors/eivid/video_urls_all_attempts_failed_error.rb +4 -0
 - data/app/jobs/eivid/check_vimeo_status_job.rb +6 -1
 - data/app/jobs/eivid/get_vimeo_hd_url_job.rb +24 -0
 - data/app/jobs/eivid/get_vimeo_urls_job.rb +16 -24
 - data/app/jobs/eivid/get_vimeo_urls_mixin.rb +36 -0
 - data/app/models/eivid/concerns/main_app/video_concerns.rb +2 -0
 - data/app/services/eivid/upload_service.rb +2 -2
 - data/db/migrate/20210818121057_add_title_to_video.rb +5 -0
 - data/lib/eivid/version.rb +1 -1
 - metadata +7 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 18c4c4d966bf527f9b36d9d30fa7f0bd1a78cbe85ed82ed02264c2b15c23b022
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 79899e7a07874171fba933e51a53bf4d5b6d9a531300ee6b59ac39f8fdd09070
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4b4c8890c237800b56c5bad688fc025a1fb2ed4b835afdb103435281dd421d14587a35f99265f8fdd0073e72c5ba8ffebaf6ce4dc6bbb88b509aa48052661f7a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 3016c7ad6bac8c16a5369516840269d53ce45f5c25a5f92fedebe16a042fd56324e01c23a8a1f018bb16cfed07c683c46250fadce006285d3df70f91537be56d
         
     | 
| 
         @@ -13,7 +13,7 @@ module Eivid 
     | 
|
| 
       13 
13 
     | 
    
         
             
                before_action :validate_video_file, only: [:upload_video]
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                def upload_video
         
     | 
| 
       16 
     | 
    
         
            -
                  record = UploadService.upload(owner: @owner, user: @user, video_file: video_params["video_file"])   
         
     | 
| 
      
 16 
     | 
    
         
            +
                  record = UploadService.upload(owner: @owner, user: @user, video_file: video_params["video_file"], video_title: video_title)   
         
     | 
| 
       17 
17 
     | 
    
         
             
                  render json: record
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
         @@ -44,5 +44,10 @@ module Eivid 
     | 
|
| 
       44 
44 
     | 
    
         
             
                  params.permit("video_file")
         
     | 
| 
       45 
45 
     | 
    
         
             
                end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
      
 47 
     | 
    
         
            +
                def video_title
         
     | 
| 
      
 48 
     | 
    
         
            +
                  title = video_params["video_file"].original_filename
         
     | 
| 
      
 49 
     | 
    
         
            +
                  title.include?('.') ? title.split('.')[0..-2].join('.') : title
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       47 
52 
     | 
    
         
             
              end
         
     | 
| 
       48 
53 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,7 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Eivid
         
     | 
| 
       2 
2 
     | 
    
         
             
              class CheckVimeoStatusJob < ApplicationJob
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
                retry_on 
     | 
| 
      
 4 
     | 
    
         
            +
                retry_on(VideoUnavailableError, wait: 10.seconds, attempts: 50) do |job, error|
         
     | 
| 
      
 5 
     | 
    
         
            +
                  raise Eivid::VideoUnavailableAllAttemptsFailedError, "failed after the set max attempts (#{job.executions} times)"
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                discard_on ActiveJob::DeserializationError
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       5 
10 
     | 
    
         
             
                after_perform :poll_vimeo_urls
         
     | 
| 
       6 
11 
     | 
    
         | 
| 
       7 
12 
     | 
    
         
             
                def perform(video_record:)
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Eivid
         
     | 
| 
      
 2 
     | 
    
         
            +
              class GetVimeoHdUrlJob < ApplicationJob
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                include Eivid::GetVimeoUrlsMixin
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                def perform(video_record:, vimeo_id:)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @video_record = video_record
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @vimeo_id     = vimeo_id
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  set_response
         
     | 
| 
      
 11 
     | 
    
         
            +
                  set_url_hd
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  return unless @url_hd
         
     | 
| 
      
 14 
     | 
    
         
            +
                  update_record
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                private
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def update_record
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @video_record.update(url_hd: @url_hd)
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,7 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Eivid
         
     | 
| 
       2 
2 
     | 
    
         
             
              class GetVimeoUrlsJob < ApplicationJob
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
                 
     | 
| 
      
 4 
     | 
    
         
            +
                include Eivid::GetVimeoUrlsMixin
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                retry_on(VideoUrlsUnavailableError, wait: 10.seconds, attempts: 50) do |job, error| 
         
     | 
| 
      
 7 
     | 
    
         
            +
                  raise Eivid::VideoUrlsAllAttemptsFailedError, "failed after the set max attempts (#{job.executions} times)"
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                discard_on ActiveJob::DeserializationError
         
     | 
| 
       5 
11 
     | 
    
         | 
| 
       6 
12 
     | 
    
         
             
                def perform(video_record:, vimeo_id:)
         
     | 
| 
       7 
13 
     | 
    
         
             
                  @video_record = video_record
         
     | 
| 
         @@ -16,47 +22,33 @@ module Eivid 
     | 
|
| 
       16 
22 
     | 
    
         
             
                  validate_url_thumbnail
         
     | 
| 
       17 
23 
     | 
    
         | 
| 
       18 
24 
     | 
    
         
             
                  update_record
         
     | 
| 
      
 25 
     | 
    
         
            +
                  schedule_hd_url_job
         
     | 
| 
       19 
26 
     | 
    
         
             
                  notify_front
         
     | 
| 
       20 
27 
     | 
    
         
             
                end
         
     | 
| 
       21 
28 
     | 
    
         | 
| 
       22 
29 
     | 
    
         
             
                private
         
     | 
| 
       23 
30 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                def  
     | 
| 
       25 
     | 
    
         
            -
                   
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                def set_url_sd
         
     | 
| 
       29 
     | 
    
         
            -
                  @url_sd = dig_video_url :sd
         
     | 
| 
      
 31 
     | 
    
         
            +
                def notify_front
         
     | 
| 
      
 32 
     | 
    
         
            +
                  data = { video: @video_record.slice(:id, :user_id), progress: { percentage: 100, step: "All video versions are available on Vimeo." } }
         
     | 
| 
      
 33 
     | 
    
         
            +
                  NotifyFrontService.progress('notify_method_on_versions_available', data)
         
     | 
| 
       30 
34 
     | 
    
         
             
                end
         
     | 
| 
       31 
35 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                def  
     | 
| 
       33 
     | 
    
         
            -
                  @url_hd  
     | 
| 
      
 36 
     | 
    
         
            +
                def update_record
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @video_record.update(uploaded: true, url_sd: @url_sd, url_hd: @url_hd, url_thumbnail: @url_thumbnail)
         
     | 
| 
       34 
38 
     | 
    
         
             
                end
         
     | 
| 
       35 
39 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                def  
     | 
| 
       37 
     | 
    
         
            -
                   
     | 
| 
      
 40 
     | 
    
         
            +
                def schedule_hd_url_job
         
     | 
| 
      
 41 
     | 
    
         
            +
                  Eivid::GetVimeoHdUrlJob.set(wait: 5.minutes).perform_later(video_record: @video_record, vimeo_id: @vimeo_id)
         
     | 
| 
       38 
42 
     | 
    
         
             
                end
         
     | 
| 
       39 
43 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                def set_url_thumbnail
         
     | 
| 
       41 
     | 
    
         
            -
                  @url_thumbnail = @response&.dig(:pictures, :sizes)&.find { |url| url[:width] == 640 && url[:height] == 360 }&.dig(:link_with_play_button)
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
44 
     | 
    
         | 
| 
       44 
45 
     | 
    
         
             
                def validate_url_presence
         
     | 
| 
       45 
     | 
    
         
            -
                  raise Eivid::VideoUrlsUnavailableError unless  
     | 
| 
      
 46 
     | 
    
         
            +
                  raise Eivid::VideoUrlsUnavailableError unless @url_thumbnail && @url_sd
         
     | 
| 
       46 
47 
     | 
    
         
             
                end
         
     | 
| 
       47 
48 
     | 
    
         | 
| 
       48 
49 
     | 
    
         
             
                def validate_url_thumbnail
         
     | 
| 
       49 
50 
     | 
    
         
             
                  raise Eivid::VideoUrlsUnavailableError if @url_thumbnail.include? 'video%2Fdefault'
         
     | 
| 
       50 
51 
     | 
    
         
             
                end
         
     | 
| 
       51 
52 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                def update_record
         
     | 
| 
       53 
     | 
    
         
            -
                  @video_record.update(uploaded: true, url_sd: @url_sd, url_hd: @url_hd, url_thumbnail: @url_thumbnail)
         
     | 
| 
       54 
     | 
    
         
            -
                end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                def notify_front
         
     | 
| 
       57 
     | 
    
         
            -
                  data = { video: @video_record.slice(:id, :user_id), progress: { percentage: 100, step: "All video versions are available on Vimeo." } }
         
     | 
| 
       58 
     | 
    
         
            -
                  NotifyFrontService.progress('notify_method_on_versions_available', data)
         
     | 
| 
       59 
     | 
    
         
            -
                end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
53 
     | 
    
         
             
              end
         
     | 
| 
       62 
54 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Eivid::GetVimeoUrlsMixin
         
     | 
| 
      
 2 
     | 
    
         
            +
              extend ActiveSupport::Concern
         
     | 
| 
      
 3 
     | 
    
         
            +
              included do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                private
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def set_response
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @response = Eivid::RequestService.get_video @vimeo_id
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def set_url_sd
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @url_sd = dig_video_url :sd
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def set_url_hd
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @url_hd = dig_video_url :hd
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def dig_video_url(definition)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @response[:files]&.find { |video| video[:quality] == definition.to_s }&.dig(:link)
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def set_url_thumbnail
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @url_thumbnail = find_high_res_thumbnail || find_low_res_thumbnail
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def find_high_res_thumbnail
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @response&.dig(:pictures, :sizes)&.find { |url| url[:width] == 960 && url[:height] == 540 }&.dig(:link_with_play_button)
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                def find_low_res_thumbnail
         
     | 
| 
      
 32 
     | 
    
         
            +
                  @response&.dig(:pictures, :sizes)&.find { |url| url[:width] == 640 && url[:height] == 360 }&.dig(:link_with_play_button)
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -12,5 +12,7 @@ module Eivid::Concerns::MainApp::VideoConcerns 
     | 
|
| 
       12 
12 
     | 
    
         
             
                scope :has_processed_video,   -> { joins(:videos).where('eivid_videos.uploaded': true).distinct }
         
     | 
| 
       13 
13 
     | 
    
         
             
                scope :has_unprocessed_video, -> { joins(:videos).where('eivid_videos.uploaded' => false).distinct }
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
      
 15 
     | 
    
         
            +
                scope :has_video_from_user,   -> (user_id) { joins(:videos).where('eivid_videos.user_id = ?', user_id) }
         
     | 
| 
      
 16 
     | 
    
         
            +
                
         
     | 
| 
       15 
17 
     | 
    
         
             
              end
         
     | 
| 
       16 
18 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,9 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Eivid::UploadService   
         
     | 
| 
       2 
2 
     | 
    
         
             
              class << self
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
                def upload(owner:, user: nil, video_file:)
         
     | 
| 
      
 4 
     | 
    
         
            +
                def upload(owner:, user: nil, video_file:, video_title:)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  @video_file           = video_file
         
     | 
| 
       6 
     | 
    
         
            -
                  @video_record         = Eivid::Video.create(owner_id: owner.id, user_id: user&.id)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @video_record         = Eivid::Video.create(owner_id: owner.id, user_id: user&.id, title: video_title)
         
     | 
| 
       7 
7 
     | 
    
         
             
                  @user                 = user
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @file_name, @file_ext = @video_file.original_filename.split('.') 
         
     | 
| 
       9 
9 
     | 
    
         | 
    
        data/lib/eivid/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: eivid
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.8
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Jurriaan Schrofer
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021-08- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-08-23 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rails
         
     | 
| 
         @@ -71,11 +71,15 @@ files: 
     | 
|
| 
       71 
71 
     | 
    
         
             
            - app/errors/eivid/maximum_vimeo_poll_reached_error.rb
         
     | 
| 
       72 
72 
     | 
    
         
             
            - app/errors/eivid/video_file_not_present_error.rb
         
     | 
| 
       73 
73 
     | 
    
         
             
            - app/errors/eivid/video_file_size_too_big_error.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
            - app/errors/eivid/video_unavailable_all_attempts_failed_error.rb
         
     | 
| 
       74 
75 
     | 
    
         
             
            - app/errors/eivid/video_unavailable_error.rb
         
     | 
| 
      
 76 
     | 
    
         
            +
            - app/errors/eivid/video_urls_all_attempts_failed_error.rb
         
     | 
| 
       75 
77 
     | 
    
         
             
            - app/errors/eivid/video_urls_unavailable_error.rb
         
     | 
| 
       76 
78 
     | 
    
         
             
            - app/jobs/eivid/application_job.rb
         
     | 
| 
       77 
79 
     | 
    
         
             
            - app/jobs/eivid/check_vimeo_status_job.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
            - app/jobs/eivid/get_vimeo_hd_url_job.rb
         
     | 
| 
       78 
81 
     | 
    
         
             
            - app/jobs/eivid/get_vimeo_urls_job.rb
         
     | 
| 
      
 82 
     | 
    
         
            +
            - app/jobs/eivid/get_vimeo_urls_mixin.rb
         
     | 
| 
       79 
83 
     | 
    
         
             
            - app/jobs/eivid/upload_vimeo_job.rb
         
     | 
| 
       80 
84 
     | 
    
         
             
            - app/mailers/eivid/application_mailer.rb
         
     | 
| 
       81 
85 
     | 
    
         
             
            - app/models/eivid/application_record.rb
         
     | 
| 
         @@ -111,6 +115,7 @@ files: 
     | 
|
| 
       111 
115 
     | 
    
         
             
            - db/migrate/20210419122001_change_url_to_embedded_url.rb
         
     | 
| 
       112 
116 
     | 
    
         
             
            - db/migrate/20210419122752_add_video_urls_to_videos.rb
         
     | 
| 
       113 
117 
     | 
    
         
             
            - db/migrate/20210420120017_add_user_id_to_eivid_videos.rb
         
     | 
| 
      
 118 
     | 
    
         
            +
            - db/migrate/20210818121057_add_title_to_video.rb
         
     | 
| 
       114 
119 
     | 
    
         
             
            - lib/eivid.rb
         
     | 
| 
       115 
120 
     | 
    
         
             
            - lib/eivid/engine.rb
         
     | 
| 
       116 
121 
     | 
    
         
             
            - lib/eivid/version.rb
         
     |