diff --git a/jam-ui/src/components/page/JKMusicSessionsHistory.js b/jam-ui/src/components/page/JKMusicSessionsHistory.js index 6bb972889..33df2ae27 100644 --- a/jam-ui/src/components/page/JKMusicSessionsHistory.js +++ b/jam-ui/src/components/page/JKMusicSessionsHistory.js @@ -17,7 +17,7 @@ const JKMusicSessionsHistory = () => { const sessions = useSelector(state => state.sessionsHistory.sessions); const loadingStatus = useSelector(state => state.sessionsHistory.status); const [offset, setOffset] = useState(0); - const LIMIT = 10; + const LIMIT = 50; useEffect(() => { const options = { @@ -27,6 +27,10 @@ const JKMusicSessionsHistory = () => { dispatch(fetchSessionsHistory(options)); }, [offset]); + const handleNextPage = () => { + setOffset(offset + LIMIT); + }; + return ( @@ -38,12 +42,16 @@ const JKMusicSessionsHistory = () => { {greaterThan.sm ? (
- +
) : ( - + )} diff --git a/jam-ui/src/components/profile/JKUserLatencyBadge.js b/jam-ui/src/components/profile/JKUserLatencyBadge.js index 4b64d883c..c7ff9bdfc 100644 --- a/jam-ui/src/components/profile/JKUserLatencyBadge.js +++ b/jam-ui/src/components/profile/JKUserLatencyBadge.js @@ -17,6 +17,10 @@ const JKUserLatency = ({user, showAll, showBadgeOnly}) => { ); }; -JKUserLatency.propTypes = { user: PropTypes.object.isRequired }; +JKUserLatency.propTypes = { + user: PropTypes.object.isRequired, + showAll: PropTypes.bool, + showBadgeOnly: PropTypes.bool +}; export default JKUserLatency; diff --git a/jam-ui/src/components/sessions/JKSessionsHistoryItem.js b/jam-ui/src/components/sessions/JKSessionsHistoryItem.js index aa885dd5f..dff006d0c 100644 --- a/jam-ui/src/components/sessions/JKSessionsHistoryItem.js +++ b/jam-ui/src/components/sessions/JKSessionsHistoryItem.js @@ -6,33 +6,54 @@ import JKInstrumentIcon from '../profile/JKInstrumentIcon'; import JKSessionUser from './JKSessionUser'; import JKUserLatencyBadge from '../profile/JKUserLatencyBadge'; import { useTranslation } from 'react-i18next'; +import { useAuth } from '../../context/UserAuth'; +import { fetchUserLatencies } from '../../store/features/latencySlice'; const JKSessionsHistoryItem = ({ session_id, sessionGroup }) => { const { greaterThan } = useResponsive(); const { sessionDescription, sessionDateTime } = useSessionHelper(sessionGroup[0]); const [participants, setParticipants] = useState([]); const { t } = useTranslation(); + const { currentUser } = useAuth(); useEffect(() => { + console.log('sessionGroup', sessionGroup); setParticipants( - sessionGroup.map(history => ({ - id: history.user_id, - user: { + sessionGroup.map(history => { + const participant = { id: history.user_id, - photo_url: history.photo_url, - first_name: history.first_name, - last_name: history.last_name, - name: `${history.first_name} ${history.last_name}` - }, - tracks: history.instruments.split('|').map((instrument, index) => ({ - id: index, - instrument_id: instrument, - instrument: instrument - })) - })) + user: { + id: history.user_id, + photo_url: history.photo_url, + first_name: history.first_name, + last_name: history.last_name, + name: `${history.first_name} ${history.last_name}` + } + }; + if (history.instrments) { + participant.tracks = history.instrments.split('|').map((instrument, index) => ({ + id: index, + instrument_id: instrument, + instrument: instrument + })); + } + + return participant; + }) ); }, [sessionGroup]); + + useEffect(() => { + + if (participants.length > 0 && currentUser) { + const currentUserId = currentUser.id; + const otherUserIds = participants.filter(p => p.id !== currentUserId).map(p => p.id); + console.log('X_DEBUG_ JKSessionsHistoryItem', currentUserId, otherUserIds); + fetchUserLatencies({ currentUserId, otherUserIds}); + } + }, [participants]); + // const formattedDate = date => { // const d = new Date(date); // return d.toLocaleDateString('en-us', { @@ -73,7 +94,7 @@ const JKSessionsHistoryItem = ({ session_id, sessionGroup }) => { ))} - {participants.map(participant => ( + {participants.filter(p => p.user.id !== currentUser.id).map(participant => ( @@ -85,7 +106,7 @@ const JKSessionsHistoryItem = ({ session_id, sessionGroup }) => { {participants.map(participant => ( - {participant.tracks.map(track => ( + {participant.tracks && participant.tracks.map(track => ( { +const JKSessionsHistoryList = ({ sessions, onNextPage, isLoading }) => { const sessionsById = groupByKey(sessions, 'session_id'); const { t } = useTranslation(); @@ -31,8 +32,23 @@ const JKSessionsHistoryList = ({ sessions }) => { ))} + ); }; +JKSessionsHistoryList.propTypes = { + sessions: PropTypes.array.isRequired, + onNextPage: PropTypes.func.isRequired, + isLoading: PropTypes.bool +}; + export default JKSessionsHistoryList; diff --git a/jam-ui/src/components/sessions/JKSessionsHistorySwiper.js b/jam-ui/src/components/sessions/JKSessionsHistorySwiper.js index 2f843ee24..1aabab7e3 100644 --- a/jam-ui/src/components/sessions/JKSessionsHistorySwiper.js +++ b/jam-ui/src/components/sessions/JKSessionsHistorySwiper.js @@ -20,7 +20,7 @@ import { Card, CardBody, CardHeader } from 'reactstrap'; SwiperCore.use([Navigation, Pagination, Scrollbar, A11y]); -const JKSessionsHistorySwiper = ({ sessions }) => { +const JKSessionsHistorySwiper = ({ sessions, onNextPage }) => { const sessionsById = groupByKey(sessions, 'session_id'); const { t } = useTranslation(); @@ -32,7 +32,7 @@ const JKSessionsHistorySwiper = ({ sessions }) => { //onSlideChange={() => console.log('slide change')} onSlideNextTransitionEnd={swiper => { if(swiper.isEnd){ - //goNextPage() + onNextPage() } }} pagination={{ @@ -68,6 +68,7 @@ const JKSessionsHistorySwiper = ({ sessions }) => { JKSessionsHistorySwiper.propTypes = { sessions: PropTypes.arrayOf(PropTypes.instanceOf(Object)).isRequired, + onNextPage: PropTypes.func.isRequired }; export default JKSessionsHistorySwiper; diff --git a/jam-ui/src/components/sessions/JKUseSessionHelper.js b/jam-ui/src/components/sessions/JKUseSessionHelper.js index d78beaa07..6b8521d42 100644 --- a/jam-ui/src/components/sessions/JKUseSessionHelper.js +++ b/jam-ui/src/components/sessions/JKUseSessionHelper.js @@ -18,13 +18,17 @@ const useSessionHelper = (session) => { const sessionDateTime = session => { const date = new Date(session.created_at); const d = new Date(date); - return d.toLocaleDateString('en-us', { - weekday: 'long', - year: 'numeric', - month: 'short', - day: 'numeric', - timeZoneName: 'short' - }); + // return d.toLocaleDateString('en-us', { + // weekday: 'long', + // year: 'numeric', + // month: 'short', + // day: 'numeric', + // timeZoneName: 'short' + // }); + return new Intl.DateTimeFormat('en-US', { + dateStyle: 'full', + timeStyle: 'long', + }).format(date); }; return { diff --git a/jam-ui/src/store/features/latencySlice.js b/jam-ui/src/store/features/latencySlice.js index 111e32dce..49f5e0ce1 100644 --- a/jam-ui/src/store/features/latencySlice.js +++ b/jam-ui/src/store/features/latencySlice.js @@ -11,6 +11,7 @@ export const fetchUserLatencies = createAsyncThunk( 'latency/fetchUserLatencies', async (options, thunkAPI) => { const { currentUserId, otherUserIds } = options + console.log('X_DEBUG_ fetchUserLatencies', currentUserId, otherUserIds) const response = await getLatencyToUsers(currentUserId, otherUserIds) return response.json() } diff --git a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb index 8bb38cde7..2c4108565 100644 --- a/ruby/lib/jam_ruby/app/mailers/user_mailer.rb +++ b/ruby/lib/jam_ruby/app/mailers/user_mailer.rb @@ -31,9 +31,9 @@ module JamRuby sendgrid_recipients([user.email]) sendgrid_substitute('@USERID', [user.id]) - mail(:to => user.email, :subject => "Please confirm your JamKazam email") do |format| + mail(:to => user.email, :subject => "Please confirm your JamKazam email address") do |format| format.text - format.html + format.html { render layout: "user_mailer_beta" } end end diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.html.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.html.erb index 358f0f2b1..92fee1d6b 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.html.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.html.erb @@ -1,9 +1,34 @@ <% provide(:title, 'Welcome to JamKazam!') %> -

We’re delighted you have joined our community of <%= APP_CONFIG.musician_count %> musicians. We’d like to send you an orientation email with information and resource links that will help you get the most out of JamKazam. Please click here to confirm this email has reached you successfully and we will then send the orientation email.

+

+ <%= I18n.t 'user_mailer.confirm_email.paragraph1' -%> +

-

If you have received this email but aren’t familiar with JamKazam or JamTracks, then someone has registered at our website using your email address, and you can just ignore and delete this email.

+ -

Best Regards,
- Team JamKazam +

+ <%= I18n.t 'user_mailer.confirm_email.paragraph2' -%> +

+ +

<%= I18n.t 'user_mailer.confirm_email.best_wishes' -%>
+ <%= I18n.t 'user_mailer.confirm_email.signature' -%>

\ No newline at end of file diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.html.erb.backup b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.html.erb.backup new file mode 100644 index 000000000..358f0f2b1 --- /dev/null +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.html.erb.backup @@ -0,0 +1,9 @@ +<% provide(:title, 'Welcome to JamKazam!') %> + +

We’re delighted you have joined our community of <%= APP_CONFIG.musician_count %> musicians. We’d like to send you an orientation email with information and resource links that will help you get the most out of JamKazam. Please click here to confirm this email has reached you successfully and we will then send the orientation email.

+ +

If you have received this email but aren’t familiar with JamKazam or JamTracks, then someone has registered at our website using your email address, and you can just ignore and delete this email.

+ +

Best Regards,
+ Team JamKazam +

\ No newline at end of file diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.text.erb index 129da288d..c465f5ea9 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.text.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.text.erb @@ -1,8 +1,8 @@ -Welcome to JamKazam! +<%= I18n.t 'user_mailer.confirm_email.paragraph1' -%> -We’re delighted you have joined our community of <%= APP_CONFIG.musician_count %> musicians. We’d like to send you an orientation email with information and resource links that will help you get the most out of JamKazam. Please click <%= @signup_confirm_url %> to confirm this email has reached you successfully and we will then send the orientation email. +<%= @signup_confirm_url %> -If you have received this email but aren’t familiar with JamKazam or JamTracks, then someone has registered at our website using your email address, and you can just ignore and delete this email. +<%= I18n.t 'user_mailer.confirm_email.paragraph2' -%> -Best Regards, -Team JamKazam \ No newline at end of file +<%= I18n.t 'user_mailer.confirm_email.best_wishes' -%> +<%= I18n.t 'user_mailer.confirm_email.signature' -%> \ No newline at end of file diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.text.erb.backup b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.text.erb.backup new file mode 100644 index 000000000..129da288d --- /dev/null +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/confirm_email.text.erb.backup @@ -0,0 +1,8 @@ +Welcome to JamKazam! + +We’re delighted you have joined our community of <%= APP_CONFIG.musician_count %> musicians. We’d like to send you an orientation email with information and resource links that will help you get the most out of JamKazam. Please click <%= @signup_confirm_url %> to confirm this email has reached you successfully and we will then send the orientation email. + +If you have received this email but aren’t familiar with JamKazam or JamTracks, then someone has registered at our website using your email address, and you can just ignore and delete this email. + +Best Regards, +Team JamKazam \ No newline at end of file diff --git a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians_match.text.erb b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians_match.text.erb index 30d6cb449..e372b88ef 100644 --- a/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians_match.text.erb +++ b/ruby/lib/jam_ruby/app/views/jam_ruby/user_mailer/new_musicians_match.text.erb @@ -2,7 +2,7 @@ Hi <%= @user.first_name %>, <% end %> -The following musicians have joined JamKazam within the last week and have low internet latency to you that will support enjoyable sessions. If you'd like to make more musical connections, we encourage you to use the links below to send these new users a welcome message and perhaps arrange a session to play together. +<%= I18n.t 'user_mailer.new_musicians_match.paragraph1' -%> <% @musicians_data.each do | data | -%> @@ -13,20 +13,20 @@ The following musicians have joined JamKazam within the last week and have low i latency = latencies.find{|l| l[:user_id] == musician.id } -%> <%= musician.first_name %> <%= musician.last_name %> - Latency To You: <%= latency_info(latency) %> + <%= I18n.t 'user_mailer.new_musicians_match.latency_to_you' -%>: <%= latency_info(latency) %> <% if musician.last_active_timestamp -%> - Last Active On: <%= time_ago_in_words(Time.at(musician.last_active_timestamp)) %> ago + <%= I18n.t 'user_mailer.new_musicians_match.last_active' -%>: <%= time_ago_in_words(Time.at(musician.last_active_timestamp)) %> ago <% end -%> <% musician.musician_instruments.each do |mi| -%> <%= mi.description %> (<%= @instrument_proficiencies[mi.proficiency_level.to_s.to_sym] %>) <% end -%> - View Profile: <%= APP_CONFIG.spa_origin -%>/friends?id=<%= musician.id %>&open=details - Send Message: <%= APP_CONFIG.spa_origin -%>/friends?id=<%= musician.id %>&open=message - Send Friend Request: <%= APP_CONFIG.spa_origin -%>/friends?id=<%= musician.id %>&open=connect + <%= I18n.t 'user_mailer.new_musicians_match.view_profile' -%>: <%= APP_CONFIG.spa_origin -%>/friends?id=<%= musician.id %>&open=details + <%= I18n.t 'user_mailer.new_musicians_match.send_message' -%>: <%= APP_CONFIG.spa_origin -%>/friends?id=<%= musician.id %>&open=message + <%= I18n.t 'user_mailer.new_musicians_match.send_friend_request' -%>: <%= APP_CONFIG.spa_origin -%>/friends?id=<%= musician.id %>&open=connect <% end -%> <% end -%> - To find great musical matches across the entire JamKazam commiunity and make new connections, use the link below to access our musician search feature. This let you filter JamKazammers by latency, instruments, skill level, genre interests, last active day and more. + <%= I18n.t 'user_mailer.new_musicians_match.paragraph2' -%> - Search JamKazam Musicians: <%= APP_CONFIG.spa_origin -%>/friends \ No newline at end of file + <%= I18n.t 'user_mailer.new_musicians_match.search_musicians' -%>: <%= APP_CONFIG.spa_origin -%>/friends \ No newline at end of file diff --git a/ruby/lib/jam_ruby/app/views/layouts/user_mailer_beta.html.erb b/ruby/lib/jam_ruby/app/views/layouts/user_mailer_beta.html.erb index d5417be56..58824245a 100644 --- a/ruby/lib/jam_ruby/app/views/layouts/user_mailer_beta.html.erb +++ b/ruby/lib/jam_ruby/app/views/layouts/user_mailer_beta.html.erb @@ -18,45 +18,47 @@ " >
- " alt="JamKazam" /> + " alt="JamKazam" />
<%= yield %> + <% if @user && @user.unsubscribe_token -%> +

+ <%= I18n.t "mailer_layout.footer.paragraph1" -%> JamKazam. <%= I18n.t "mailer_layout.footer.unsubscribe" -%> +

+ <% end -%> + +

+ <%= I18n.t "mailer_layout.footer.copyright" -%> +

+ diff --git a/ruby/lib/jam_ruby/lib/email_new_musician_match.rb b/ruby/lib/jam_ruby/lib/email_new_musician_match.rb index b55200ac0..bc3ab6534 100644 --- a/ruby/lib/jam_ruby/lib/email_new_musician_match.rb +++ b/ruby/lib/jam_ruby/lib/email_new_musician_match.rb @@ -6,10 +6,10 @@ module JamRuby JOINED_WITHIN_DAYS = 7 ACTIVE_WITHIN_DAYS = 30 - PRIORITY_RECIPIENTS = %w(seth@jamkazam.com david@jamkazam.com peter@jamkazam.com nuwan@jamkazam.com).freeze + PRIORITY_RECIPIENTS = %w(seth@jamkazam.com david@jamkazam.com peter@jamkazam.com nuwan@jamkazam.com murali@jamkazam.com bob@jamkazam.com jorge@jamkazam.com).freeze def self.subject - "New musicians with good Internet connections to you have joined JamKazam!" + I18n.t 'user_mailer.new_musicians_match.subject' end def self.send_new_musicians @@ -33,7 +33,6 @@ module JamRuby end begin - recipients = User.where("users.subscribe_email = ? AND users.subscribe_email_for_user_match = ? AND NOT COALESCE(users.user_match_email_sent_at, ?) > ?", @@ -41,12 +40,17 @@ module JamRuby CASE WHEN users.email IN ('#{PRIORITY_RECIPIENTS.map {|str| "\"#{str}\""}.join(',')}') THEN 0 ELSE 1 END, last_active_at DESC").select("users.*, GREATEST(updated_at, last_jam_updated_at) AS last_active_at").limit(LIMIT) + + # If the flag is set to send user match email only to jamkazam team + if Rails.application.config.send_user_match_mail_only_to_jamkazam_team + recipients = recipients.where(email: PRIORITY_RECIPIENTS) + end AdminMailer.ugly({to: APP_CONFIG.user_match_monitoring_email, subject:"Weekly user match email sending job started.", body: "#{email_sending.sent_user_ids.any?? "This job is resuming. It was originally started at #{email_sending.created_at} and has been sent to #{email_sending.sent_user_ids.size} user(s) so far." : "This job was started at #{email_sending.created_at}" }. It will send to total of #{ recipients.size } users."}).deliver_now - recipients.find_each do |user| + recipients.find_each do |user| ip_address = user.last_jam_addr.blank?? '127.0.0.1' : IPAddr.new(user.last_jam_addr, Socket::AF_INET).to_s matched_musician_data = [] diff --git a/ruby/spec/jam_ruby/lib/email_new_musician_match_spec.rb b/ruby/spec/jam_ruby/lib/email_new_musician_match_spec.rb index 56eca0494..5ce5de145 100644 --- a/ruby/spec/jam_ruby/lib/email_new_musician_match_spec.rb +++ b/ruby/spec/jam_ruby/lib/email_new_musician_match_spec.rb @@ -23,6 +23,7 @@ describe EmailNewMusicianMatch do ActionMailer::Base.deliveries = [] User.delete_all allow(JamRuby::MusicianFilter).to receive(:filter).and_return(search_result) + Rails.application.config.send_user_match_mail_only_to_jamkazam_team = false end after(:each) do @@ -46,6 +47,14 @@ describe EmailNewMusicianMatch do JamRuby::EmailNewMusicianMatch.send_new_musicians end + it "delivers only to priority recipients" do + Rails.application.config.send_user_match_mail_only_to_jamkazam_team = true + allow(UserMailer).to receive(:new_musicians_match).and_return(mail) + expect(mail).to receive(:deliver_now).exactly(1).times #only to the priority user seth@jamkazam + JamRuby::EmailNewMusicianMatch.send_new_musicians + end + + xit "delivers to priority recipients first" do JamRuby::EmailNewMusicianMatch.send_new_musicians raise ActionMailer::Base.deliveries.map{|d| d['to'].to_s }.inspect #.include?("seth@example.com").should be_truthy diff --git a/web/Gemfile.alt b/web/Gemfile.alt index df438d16e..4b79bebf2 100644 --- a/web/Gemfile.alt +++ b/web/Gemfile.alt @@ -159,7 +159,7 @@ gem 'logging', '1.7.2' gem 'rack-cors', '~> 1.0', '>= 1.0.6' -gem 'mailcatcher' +#gem 'mailcatcher' if ENV['FASTER_PATH'] == '1' diff --git a/web/config/application.rb b/web/config/application.rb index 0aa9e312c..d43bbd722 100644 --- a/web/config/application.rb +++ b/web/config/application.rb @@ -518,5 +518,6 @@ if defined?(Bundler) config.manual_override_installer_ends_with = "JamKazam-1.0.3776.dmg" config.spa_origin = "http://beta.jamkazam.local:4000" config.user_match_monitoring_email = "user_match_monitoring_email@jamkazam.com" + config.send_user_match_mail_only_to_jamkazam_team = true end end diff --git a/web/config/environments/development.rb b/web/config/environments/development.rb index 0c8e8bd91..5de879b92 100644 --- a/web/config/environments/development.rb +++ b/web/config/environments/development.rb @@ -26,8 +26,8 @@ SampleApp::Application.configure do # Don't care if the mailer can't send config.action_mailer.raise_delivery_errors = false - config.action_mailer.delivery_method = :smtp - config.action_mailer.smtp_settings = { address: '127.0.0.1', port: 1025, domain: '127.0.0.1' } + #config.action_mailer.delivery_method = :smtp + #config.action_mailer.smtp_settings = { address: '127.0.0.1', port: 1025, domain: '127.0.0.1' } # Print deprecation notices to the Rails logger config.active_support.deprecation = :log @@ -123,6 +123,8 @@ SampleApp::Application.configure do config.session_cookie_domain = ".jamkazam.local" - config.action_controller.asset_host = 'http://localhost:3000' + config.action_controller.asset_host = 'http://www.jamkazam.local:3000/assets' config.action_mailer.asset_host = config.action_controller.asset_host + + config.send_user_match_mail_only_to_jamkazam_team = false end diff --git a/web/config/locales/en.yml b/web/config/locales/en.yml index 97c8dafd1..cb4cdf309 100644 --- a/web/config/locales/en.yml +++ b/web/config/locales/en.yml @@ -6,8 +6,22 @@ en: attributes: user: password_digest: "Password" + mailer_layout: + footer: + paragraph1: "This email was sent to you because you have an account at" + unsubscribe: "Unsubscribe" + copyright: "Copyright © 2024 JamKazam, Inc. All rights reserved." user_mailer: + confirm_email: + subject: "Please confirm your JamKazam email address" + paragraph1: "Thanks for signing up with JamKazam! Please click the button below to confirm your email for use with JamKazam. We do not sell or share our users’ emails. We only use your email to send you information and updates about the JamKazam service." + confirm_email: "Confirm Email Address" + paragraph2: " If you have received this email but aren’t familiar with JamKazam, someone has registered at our website using your email address, and you can use the unsubscribe link below to stop receiving emails from us." + best_wishes: "Best Regards," + signature: "Team JamKazam" + new_musicians_match: + subject: "New musicians with good Internet connections to you have joined JamKazam!" greeting: "Hi" paragraph1: "The following musicians have joined JamKazam within the last week and have low internet latency to you that will support enjoyable sessions. If you'd like to make more musical connections, we encourage you to use the links below to send these new users a welcome message and perhaps arrange a session to play together." latency_to_you: "Latency to You" diff --git a/web/config/locales/es.yml b/web/config/locales/es.yml index 91d6d1468..7bc3962d0 100644 --- a/web/config/locales/es.yml +++ b/web/config/locales/es.yml @@ -6,7 +6,29 @@ en: attributes: user: password_digest: "Password" + mailer_layout: + footer: + paragraph1: "This email was sent to you because you have an account at" + unsubscribe: "Unsubscribe" + copyright: "Copyright © 2024 JamKazam, Inc. All rights reserved." user_mailer: + confirm_email: + subject: "Please confirm your JamKazam email address" + paragraph1: "Thanks for signing up with JamKazam! Please click the button below to confirm your email for use with JamKazam. We do not sell or share our users’ emails. We only use your email to send you information and updates about the JamKazam service." + confirm_email: "Confirm Email Address" + paragraph2: " If you have received this email but aren’t familiar with JamKazam, someone has registered at our website using your email address, and you can use the unsubscribe link below to stop receiving emails from us." + best_wishes: "Best Regards," + signature: "Team JamKazam" + new_musicians_match: + subject: "New musicians with good Internet connections to you have joined JamKazam!" greeting: "Hola" - view_profile: "Ver Perfil" + paragraph1: "The following musicians have joined JamKazam within the last week and have low internet latency to you that will support enjoyable sessions. If you'd like to make more musical connections, we encourage you to use the links below to send these new users a welcome message and perhaps arrange a session to play together." + latency_to_you: "Latency to You" + last_active: "Last Active" + ago: "ago" + view_profile: "View Profile" + send_message: "Send Message" + send_friend_request: "Send Friend Request" + paragraph2: "To find great musical matches across the entire JamKazam commiunity and make new connections, use the button below to access our musician search feature. This let you filter JamKazammers by latency, instruments, skill level, genre interests, last active day and more." + search_musicians: "Search JamKazam Musicians"