Skip to content

Commit 115ead2

Browse files
committed
Merge pull request #278 from huboard/discorick/refreshing_stale_issues
Syncs board after a period of inactivity
2 parents d65842f + 87ca4b1 commit 115ead2

17 files changed

Lines changed: 327 additions & 9 deletions

File tree

app/assets/stylesheets/_colors.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ $lighterGrey: #CCC;
22
$lightGrey: #999;
33
$grey: #666;
44
$darkGrey: #444;
5+
$navGrey: #F3F3F3;
56

67
$red: red;
78

app/assets/stylesheets/components/_flash-message.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
background: $hb-red;
3434
}
3535

36+
.progress.message {
37+
background: $navGrey;
38+
box-shadow: -1px 2px 2px rgba($navGrey, 0.5);
39+
color: $hb-purple-dark;
40+
}
41+
3642
.hb-spinner {
3743
position: relative;
3844
float: right;

app/controllers/api/issues_controller.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ def issue
66
render json: api.issue(params[:number])
77
end
88

9+
def issues
10+
api = huboard.board(params[:user], params[:repo])
11+
render json: api.issues(params[:label], params[:options])
12+
end
13+
914
def details
1015
api = huboard.board(params[:user], params[:repo])
1116
render json: api.issue(params[:number]).activities

config/routes.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373

7474
#Issues
7575
get 'issues/:number' => 'issues#issue'
76+
get 'issues' => 'issues#issues'
7677
get 'issues/:number/details' => 'issues#details'
7778
get 'issues/:number/status' => 'issues#status'
7879
post 'issues' => 'issues#open_issue'

ember-app/app/controllers/application.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Ember from 'ember';
22
import BoardSubscriptions from "app/mixins/subscriptions/board";
33
import Messaging from "app/mixins/messaging";
4+
import { throttledObserver } from 'app/utilities/observers';
45

56
var ApplicationController = Ember.Controller.extend(
67
BoardSubscriptions, Messaging, {
@@ -24,6 +25,21 @@ var ApplicationController = Ember.Controller.extend(
2425

2526
//Fix the need to delay event subscriptions
2627
subscribeDisabled: true,
28+
29+
//Browser Session Checker
30+
boardSyncing: Ember.inject.service(),
31+
checkBrowserSession: throttledObserver(function(){
32+
var lastFocus = this.get('browser-session.lastFocus');
33+
var _self = this;
34+
if(lastFocus >= 30000){
35+
var since = new Date(new Date().getTime() - lastFocus);
36+
return this.get('boardSyncing').syncIssues(this.get('model.board'), {since: since.toISOString()});
37+
}
38+
39+
if(lastFocus >= 8.64e+7){ //One Day
40+
this.send('sessionErrorHandler');
41+
}
42+
},'browser-session.lastFocus', 30000).on('init')
2743
});
2844

2945
export default ApplicationController;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import BrowserSession from 'app/services/browser-session';
2+
3+
export function initialize(container, application){
4+
application.register('browser-session:main', BrowserSession);
5+
application.inject('controller', 'browser-session', 'browser-session:main');
6+
application.inject('component', 'browser-session', 'browser-session:main');
7+
}
8+
9+
export default {
10+
name: 'browser-session',
11+
after: 'advanceReadiness',
12+
initialize: initialize
13+
}
14+

ember-app/app/models/model.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ var HuBoardModel = Ember.Object.extend(
1010
_onInit: function(){
1111
this.set('content', this.get('data'));
1212
}.on('init'),
13+
onDataChanged: function(){
14+
this.set('content', this.get('data'));
15+
}.observes('data'),
1316
ajax: ajax
1417
});
1518

ember-app/app/models/new/board.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,16 @@ var Board = Model.extend({
112112
return issue.data.assignee && issue.data.assignee.login === assignee.login;
113113
});
114114
});
115-
}).property("assignees.[]", "issues.@each.assignee")
115+
}).property("assignees.[]", "issues.@each.assignee"),
116+
fetchIssues: function(options){
117+
var promises = this.get('repos').map((repo)=>{
118+
return repo.fetchIssues(options);
119+
});
120+
121+
return Ember.RSVP.all(promises).then((issues)=>{
122+
return _.flatten(issues);
123+
});
124+
}
116125
});
117126

118127
Board.reopenClass({

ember-app/app/models/new/repo.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,11 @@ var Repo = Model.extend({
222222
},
223223
assigneesLength: function(){
224224
return this.get("assignees.length");
225-
}.property("assignees.[]")
225+
}.property("assignees.[]"),
226+
fetchIssues: function(options){
227+
var url = `/api/${this.get('data.repo.full_name')}/issues`
228+
return Ember.$.getJSON(url,{ options: options });
229+
}
226230
});
227231

228232
export default Repo;

ember-app/app/router.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Router.map(function() {
3030

3131
});
3232

33+
this.resource("sync-issues");
3334
this.route("unauthorized");
3435
});
3536

0 commit comments

Comments
 (0)