From d7016e57b46c37382f4b8074c5adb053555ff9dc Mon Sep 17 00:00:00 2001 From: Eugene Burmakin Date: Sat, 27 Dec 2025 20:41:35 +0100 Subject: [PATCH] Add flags and chart to email --- Gemfile | 1 - Gemfile.lock | 3 - app/assets/svg/icons/lucide/outline/mail.svg | 1 + app/controllers/shared/digests_controller.rb | 1 + app/controllers/users/digests_controller.rb | 1 + app/mailers/users/digests_mailer.rb | 21 +----- .../users/digests/chart_image_generator.rb | 42 ----------- app/services/users/safe_settings.rb | 4 +- app/views/users/digests/chart.html.erb | 75 ------------------- app/views/users/digests/public_year.html.erb | 10 ++- app/views/users/digests/show.html.erb | 10 ++- .../digests_mailer/year_end_digest.html.erb | 30 +++++++- config/initializers/grover.rb | 10 --- .../previews/users/digests_mailer_preview.rb | 10 +++ 14 files changed, 60 insertions(+), 159 deletions(-) create mode 100644 app/assets/svg/icons/lucide/outline/mail.svg delete mode 100644 app/services/users/digests/chart_image_generator.rb delete mode 100644 app/views/users/digests/chart.html.erb delete mode 100644 config/initializers/grover.rb create mode 100644 spec/mailers/previews/users/digests_mailer_preview.rb diff --git a/Gemfile b/Gemfile index 8e680206..3d1e1649 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,6 @@ gem 'foreman' gem 'geocoder', github: 'Freika/geocoder', branch: 'master' gem 'gpx' gem 'groupdate' -gem 'grover' gem 'h3', '~> 3.7' gem 'httparty' gem 'importmap-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 3de76f0f..d7203d5e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -204,8 +204,6 @@ GEM rake groupdate (6.7.0) activesupport (>= 7.1) - grover (1.2.4) - nokogiri (~> 1) h3 (3.7.4) ffi (~> 1.9) rgeo-geojson (~> 2.1) @@ -659,7 +657,6 @@ DEPENDENCIES geocoder! gpx groupdate - grover h3 (~> 3.7) httparty importmap-rails diff --git a/app/assets/svg/icons/lucide/outline/mail.svg b/app/assets/svg/icons/lucide/outline/mail.svg new file mode 100644 index 00000000..f4046c96 --- /dev/null +++ b/app/assets/svg/icons/lucide/outline/mail.svg @@ -0,0 +1 @@ + diff --git a/app/controllers/shared/digests_controller.rb b/app/controllers/shared/digests_controller.rb index fe3855f9..9e390041 100644 --- a/app/controllers/shared/digests_controller.rb +++ b/app/controllers/shared/digests_controller.rb @@ -2,6 +2,7 @@ class Shared::DigestsController < ApplicationController helper Users::DigestsHelper + helper CountryFlagHelper before_action :authenticate_user!, except: [:show] before_action :authenticate_active_user!, only: [:update] diff --git a/app/controllers/users/digests_controller.rb b/app/controllers/users/digests_controller.rb index a6f050b9..5016b81f 100644 --- a/app/controllers/users/digests_controller.rb +++ b/app/controllers/users/digests_controller.rb @@ -2,6 +2,7 @@ class Users::DigestsController < ApplicationController helper Users::DigestsHelper + helper CountryFlagHelper before_action :authenticate_user! before_action :authenticate_active_user!, only: [:create] diff --git a/app/mailers/users/digests_mailer.rb b/app/mailers/users/digests_mailer.rb index 0f5f1e00..48467a9e 100644 --- a/app/mailers/users/digests_mailer.rb +++ b/app/mailers/users/digests_mailer.rb @@ -2,35 +2,16 @@ class Users::DigestsMailer < ApplicationMailer helper Users::DigestsHelper + helper CountryFlagHelper def year_end_digest @user = params[:user] @digest = params[:digest] @distance_unit = @user.safe_settings.distance_unit || 'km' - # Generate chart image - @chart_image_name = generate_chart_attachment - mail( to: @user.email, subject: "Your #{@digest.year} Year in Review - Dawarich" ) end - - private - - def generate_chart_attachment - image_data = Users::Digests::ChartImageGenerator.new(@digest, distance_unit: @distance_unit).call - filename = 'monthly_distance_chart.png' - - attachments.inline[filename] = { - mime_type: 'image/png', - content: image_data - } - - filename - rescue StandardError => e - Rails.logger.error("Failed to generate chart image: #{e.message}") - nil - end end diff --git a/app/services/users/digests/chart_image_generator.rb b/app/services/users/digests/chart_image_generator.rb deleted file mode 100644 index cdb09ff9..00000000 --- a/app/services/users/digests/chart_image_generator.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -module Users - module Digests - class ChartImageGenerator - def initialize(digest, distance_unit: 'km') - @digest = digest - @distance_unit = distance_unit - end - - def call - html = render_chart_html - generate_image(html) - end - - private - - attr_reader :digest, :distance_unit - - def render_chart_html - ApplicationController.render( - template: 'user/digests/chart', - layout: false, - assigns: { - monthly_distances: digest.monthly_distances, - distance_unit: distance_unit - } - ) - end - - def generate_image(html) - grover = Grover.new( - html, - format: 'png', - viewport: { width: 600, height: 320 }, - wait_until: 'networkidle0' - ) - grover.to_png - end - end - end -end diff --git a/app/services/users/safe_settings.rb b/app/services/users/safe_settings.rb index 909854b4..6c6daad1 100644 --- a/app/services/users/safe_settings.rb +++ b/app/services/users/safe_settings.rb @@ -141,7 +141,9 @@ class Users::SafeSettings settings['maps_maplibre_style'] end - def digest_emails_enabled? + def digest_emails_enabled settings['digest_emails_enabled'] != false end + + alias digest_emails_enabled? digest_emails_enabled end diff --git a/app/views/users/digests/chart.html.erb b/app/views/users/digests/chart.html.erb deleted file mode 100644 index 14450be6..00000000 --- a/app/views/users/digests/chart.html.erb +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - -
- -
- - - diff --git a/app/views/users/digests/public_year.html.erb b/app/views/users/digests/public_year.html.erb index f7481791..00bfbe1b 100644 --- a/app/views/users/digests/public_year.html.erb +++ b/app/views/users/digests/public_year.html.erb @@ -108,7 +108,10 @@