@@ -52,7 +52,7 @@ def initWebView
52
52
@web_view . setUIDelegate self
53
53
@web_view . setPolicyDelegate self
54
54
55
- url = NSURL . URLWithString "https://idobata.io/users/sign_in "
55
+ url = NSURL . URLWithString "https://idobata.io/#/ "
56
56
request = NSURLRequest . requestWithURL url
57
57
@web_view . mainFrame . loadRequest request
58
58
end
@@ -61,20 +61,16 @@ def notify(data)
61
61
data = BW ::JSON . parse data . to_s . dataUsingEncoding ( NSUTF8StringEncoding )
62
62
63
63
notification = NSUserNotification . alloc . init . tap do |n |
64
- n . title = "#{ data [ 'sender_name ' ] } \u25b8 #{ data [ 'room_name ' ] } "
65
- n . informativeText = data [ 'body_plain ' ]
64
+ n . title = "#{ data [ 'sender ' ] } \u25b8 #{ data [ 'roomName ' ] } "
65
+ n . informativeText = data [ 'text ' ]
66
66
n . soundName = NSUserNotificationDefaultSoundName
67
- keys = [
68
- "organization_slug" ,
69
- "room_name" ,
70
- ]
71
- n . userInfo = data . select { |key , val | keys . include? key }
67
+ n . userInfo = { "url" => data [ 'url' ] }
72
68
end
73
69
74
- sender_icon_url = data [ 'sender_icon_url ' ]
75
- if sender_icon_url . length > 0
76
- notification . contentImage = fetchIconImage sender_icon_url
77
- end
70
+ sender_icon_url = data [ 'iconUrl ' ]
71
+ if sender_icon_url
72
+ notification . contentImage = fetchIconImage sender_icon_url
73
+ end
78
74
79
75
NSUserNotificationCenter . defaultUserNotificationCenter . tap do |center |
80
76
center . delegate = self
@@ -113,19 +109,19 @@ def fetchIconImage(url)
113
109
return image
114
110
end
115
111
116
- def locateToRoom ( organization , room_name )
112
+ def locateTo ( url )
117
113
window_object = @web_view . windowScriptObject
118
114
window_object . evaluateWebScript <<-CODE
119
- location.href = "#/organization/ #{ organization } /room/ #{ room_name } " ;
115
+ location.href = ' #{ url } ' ;
120
116
CODE
121
117
@web_view . display
122
118
end
123
119
124
120
# called when frame loading finished
125
- def webView ( sender , didFinishLoadForFrame :frame )
121
+ def webView ( sender , didStartProvisionalLoadForFrame :frame )
126
122
sender . windowScriptObject . evaluateWebScript <<-CODE
127
123
(function(){
128
- var onMessageCreated = function(user) {
124
+ var onMessageCreated = function(user, store, router ) {
129
125
return function(data){
130
126
var notify = false;
131
127
var mode = window.butter.notificationMode();
@@ -137,7 +133,18 @@ def webView(sender, didFinishLoadForFrame:frame)
137
133
}
138
134
}
139
135
if (notify) {
140
- butter.notify(JSON.stringify(data.message));
136
+ store.find('message', data.message.id).then(function(message) {
137
+ var roomUrl = '/' + router.generate('room.index', message.get('room'));
138
+ var roomName = message.get('room.organization.name').toString() + ' / ' + message.get('room.name').toString();
139
+ var payload = {
140
+ sender: data.message.senderName,
141
+ roomName: roomName,
142
+ text: data.message.bodyPlain,
143
+ iconUrl: data.message.senderIconUrl,
144
+ url: roomUrl
145
+ };
146
+ window.butter.notify(JSON.stringify(payload));
147
+ });
141
148
}
142
149
};
143
150
};
@@ -151,8 +158,10 @@ def webView(sender, didFinishLoadForFrame:frame)
151
158
152
159
var pusher = container.lookup('pusher:main');
153
160
var user = container.lookup('service:session').get('user');
161
+ var store = container.lookup('store:main');
162
+ var router = container.lookup('router:main');
154
163
155
- pusher.bind('message:created', onMessageCreated(user));
164
+ pusher.bind('message:created', onMessageCreated(user, store, router ));
156
165
user.addObserver('totalUnreadMessagesCount', onUnreadCountUpdated);
157
166
onUnreadCountUpdated.apply(user);
158
167
});
@@ -188,7 +197,7 @@ def webView(sender, decidePolicyForNewWindowAction:info, request:request, frame:
188
197
189
198
def webView ( sender , runJavaScriptAlertPanelWithMessage :message , initiatedByFrame :frame )
190
199
puts "ALERT: #{ message } "
191
- NSRunAlertPanel "alert" , message , "OK" , nil , nil
200
+ # NSRunAlertPanel "alert", message, "OK", nil, nil
192
201
end
193
202
194
203
def webView ( sender , runJavaScriptConfirmPanelWithMessage :message , initiatedByFrame :frame )
@@ -216,7 +225,7 @@ def userNotificationCenter(center, shouldPresentNotification:notification)
216
225
217
226
def userNotificationCenter ( center , didActivateNotification :notification )
218
227
info = notification . userInfo
219
- locateToRoom info [ "organization_slug" ] , info [ "room_name" ]
228
+ locateTo info [ 'url' ]
220
229
center . removeDeliveredNotification notification
221
230
end
222
231
end
0 commit comments