Desktop notifications
This commit is contained in:
		
							parent
							
								
									e616ffc5d6
								
							
						
					
					
						commit
						fb48cc3b74
					
				
					 3 changed files with 15 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
import api, { getLinks } from '../api'
 | 
			
		||||
import Immutable from 'immutable';
 | 
			
		||||
import IntlMessageFormat from 'intl-messageformat';
 | 
			
		||||
 | 
			
		||||
import { fetchRelationships } from './accounts';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +22,7 @@ const fetchRelatedRelationships = (dispatch, notifications) => {
 | 
			
		|||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export function updateNotifications(notification) {
 | 
			
		||||
export function updateNotifications(notification, intlMessages, intlLocale) {
 | 
			
		||||
  return dispatch => {
 | 
			
		||||
    dispatch({
 | 
			
		||||
      type: NOTIFICATIONS_UPDATE,
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +32,12 @@ export function updateNotifications(notification) {
 | 
			
		|||
    });
 | 
			
		||||
 | 
			
		||||
    fetchRelatedRelationships(dispatch, [notification]);
 | 
			
		||||
 | 
			
		||||
    // Desktop notifications
 | 
			
		||||
    const title = new IntlMessageFormat(intlMessages[`notification.${notification.type}`], intlLocale).format({ name: notification.account.display_name.length > 0 ? notification.account.display_name : notification.account.username });
 | 
			
		||||
    const body  = $('<p>').html(notification.status ? notification.status.content : '').text();
 | 
			
		||||
 | 
			
		||||
    new Notification(title, { body });
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,8 +60,10 @@ const Mastodon = React.createClass({
 | 
			
		|||
  mixins: [PureRenderMixin],
 | 
			
		||||
 | 
			
		||||
  componentWillMount() {
 | 
			
		||||
    store.dispatch(setAccessToken(this.props.token));
 | 
			
		||||
    store.dispatch(setAccountSelf(JSON.parse(this.props.account)));
 | 
			
		||||
    const { token, account, locale } = this.props;
 | 
			
		||||
 | 
			
		||||
    store.dispatch(setAccessToken(token));
 | 
			
		||||
    store.dispatch(setAccountSelf(JSON.parse(account)));
 | 
			
		||||
 | 
			
		||||
    if (typeof App !== 'undefined') {
 | 
			
		||||
      this.subscription = App.cable.subscriptions.create('TimelineChannel', {
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +80,7 @@ const Mastodon = React.createClass({
 | 
			
		|||
            case 'block':
 | 
			
		||||
              return store.dispatch(refreshTimeline('mentions', true));
 | 
			
		||||
            case 'notification':
 | 
			
		||||
              return store.dispatch(updateNotifications(JSON.parse(data.message)));
 | 
			
		||||
              return store.dispatch(updateNotifications(JSON.parse(data.message), getMessagesForLocale(locale), locale));
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ class ApplicationController < ActionController::Base
 | 
			
		|||
  rescue_from ActiveRecord::RecordNotFound, with: :not_found
 | 
			
		||||
 | 
			
		||||
  before_action :store_current_location, except: :raise_not_found, unless: :devise_controller?
 | 
			
		||||
  before_action :set_locale, if: 'user_signed_in?'
 | 
			
		||||
  before_action :set_locale
 | 
			
		||||
 | 
			
		||||
  def raise_not_found
 | 
			
		||||
    raise ActionController::RoutingError, "No route matches #{params[:unmatched_route]}"
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ class ApplicationController < ActionController::Base
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def set_locale
 | 
			
		||||
    I18n.locale = current_user.locale || I18n.default_locale
 | 
			
		||||
    I18n.locale = current_user.try(:locale) || I18n.default_locale
 | 
			
		||||
  rescue I18n::InvalidLocale
 | 
			
		||||
    I18n.locale = I18n.default_locale
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue