From 63de1e398f7ed7266b170fcbe9fe7f29da66a212 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Mon, 23 May 2016 09:40:04 +0100 Subject: [PATCH 1/6] Added force sync param to party and tavern requests --- test/spec/controllers/partyCtrlSpec.js | 9 ++++++--- website/client/js/controllers/partyCtrl.js | 21 ++++++++++++++------- website/client/js/controllers/tavernCtrl.js | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/test/spec/controllers/partyCtrlSpec.js b/test/spec/controllers/partyCtrlSpec.js index 00d3e676c5..433bd6d0fe 100644 --- a/test/spec/controllers/partyCtrlSpec.js +++ b/test/spec/controllers/partyCtrlSpec.js @@ -48,12 +48,15 @@ describe("Party Controller", function() { inject(function(_$state_) { var state = _$state_; sandbox.stub(state, 'is').returns(true); + var syncParty = sinon.stub(groups.Group, 'syncParty') syncParty.returns(Promise.resolve(groupResponse)); + + var froceSyncParty = sinon.stub(groups, 'party') + froceSyncParty.returns(Promise.resolve(groupResponse)); + $controller('PartyCtrl', { $scope: scope, $state: state, User: User }); - // @TODO: I have update the party ctrl to sync the user whenever it is called rather than only on the party page - // Since I have cached the promise, this should not be a performance issue, but let's keep this test here in case anything breaks. - // expect(state.is).to.be.calledOnce; // ensure initialization worked as desired + expect(state.is).to.be.calledOnce; }); }; diff --git a/website/client/js/controllers/partyCtrl.js b/website/client/js/controllers/partyCtrl.js index 64070734bf..d1981b643e 100644 --- a/website/client/js/controllers/partyCtrl.js +++ b/website/client/js/controllers/partyCtrl.js @@ -11,13 +11,20 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User',' $scope.inviteOrStartParty = Groups.inviteOrStartParty; $scope.loadWidgets = Social.loadWidgets; - Groups.Group.syncParty() - .then(function successCallback(group) { - $rootScope.party = $scope.group = group; - checkForNotifications(); - }, function errorCallback(response) { - $rootScope.party = $scope.group = $scope.newGroup = { type: 'party' }; - }); + function handlePartyResponse (group) { + $rootScope.party = $scope.group = group; + checkForNotifications(); + } + + function handlePartyError (response) { + $rootScope.party = $scope.group = $scope.newGroup = { type: 'party' }; + } + + if ($state.is('options.social.party')) { + Groups.party(true).then(handlePartyResponse, handlePartyError); + } else { + Groups.Group.syncParty().then(handlePartyResponse, handlePartyError); + } function checkForNotifications () { // Checks if user's party has reached 2 players for the first time. diff --git a/website/client/js/controllers/tavernCtrl.js b/website/client/js/controllers/tavernCtrl.js index 77056e07a2..fd090cd642 100644 --- a/website/client/js/controllers/tavernCtrl.js +++ b/website/client/js/controllers/tavernCtrl.js @@ -2,7 +2,7 @@ habitrpg.controller("TavernCtrl", ['$scope', 'Groups', 'User', 'Challenges', function($scope, Groups, User, Challenges) { - Groups.tavern() + Groups.tavern(true) .then(function (tavern) { $scope.group = tavern; Challenges.getGroupChallenges($scope.group._id) From 0d2aa4e43af3be64206c26c0822d235f37acba6a Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Mon, 23 May 2016 07:13:53 -0500 Subject: [PATCH 2/6] fix: Fetches the party in the header on initial party page load If the party page is refreshed, the header wasn't populating. This fetches the party in the header _and_ the party page --- website/client/js/controllers/partyCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/client/js/controllers/partyCtrl.js b/website/client/js/controllers/partyCtrl.js index d1981b643e..5c4bfc442c 100644 --- a/website/client/js/controllers/partyCtrl.js +++ b/website/client/js/controllers/partyCtrl.js @@ -20,7 +20,7 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User',' $rootScope.party = $scope.group = $scope.newGroup = { type: 'party' }; } - if ($state.is('options.social.party')) { + if ($state.is('options.social.party') && $rootScope.party) { Groups.party(true).then(handlePartyResponse, handlePartyError); } else { Groups.Group.syncParty().then(handlePartyResponse, handlePartyError); From 0b87777e2619028079faaf4f7b5fa52e443f8d1b Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Mon, 23 May 2016 07:15:46 -0500 Subject: [PATCH 3/6] feat: Show loading state on party page when party isn't ready --- common/locales/en/groups.json | 2 +- website/client/js/controllers/partyCtrl.js | 5 ++++- website/views/options/social/party.jade | 4 ++-- website/views/options/social/party/start-a-party.jade | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/common/locales/en/groups.json b/common/locales/en/groups.json index 4d8ea0716c..76d1cf7837 100644 --- a/common/locales/en/groups.json +++ b/common/locales/en/groups.json @@ -36,7 +36,7 @@ "invitedToNewParty": "You were invited to join a party! Do you want to leave this party and join <%= partyName %>?", "joinNewParty": "Join New Party", "declineInvitation": "Decline Invitation", - "loadingNewParty": "Your new party is loading. Please wait...", + "loadingNewParty": "Your party is loading. Please wait...", "newMsg": "New message in \"<%= name %>\"", "chat": "Chat", "sendChat": "Send Chat", diff --git a/website/client/js/controllers/partyCtrl.js b/website/client/js/controllers/partyCtrl.js index 5c4bfc442c..3bbdff1d54 100644 --- a/website/client/js/controllers/partyCtrl.js +++ b/website/client/js/controllers/partyCtrl.js @@ -21,6 +21,7 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User',' } if ($state.is('options.social.party') && $rootScope.party) { + $scope.group = {loadingParty: true} Groups.party(true).then(handlePartyResponse, handlePartyError); } else { Groups.Group.syncParty().then(handlePartyResponse, handlePartyError); @@ -47,6 +48,8 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User',' } $scope.create = function(group) { + group.loadingParty = true; + if (!group.name) group.name = env.t('possessiveParty', {name: User.user.profile.name}); Groups.Group.create(group) .then(function(response) { @@ -141,7 +144,7 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User',' Groups.Group.leave(Groups.data.party._id, false) .then(function() { $rootScope.party = $scope.group = { - loadingNewParty: true + loadingParty: true }; $scope.join({ id: newPartyId, name: newPartyName }); }); diff --git a/website/views/options/social/party.jade b/website/views/options/social/party.jade index 6f0229152d..ed3fe9189b 100644 --- a/website/views/options/social/party.jade +++ b/website/views/options/social/party.jade @@ -1,13 +1,13 @@ include ../../shared/avatar/generated_avatar script(type='text/ng-template', id='partials/options.social.party.html') - div(ng-if='group.loadingNewParty') + div(ng-if='group.loadingParty') include ./party/loading-new-party div(ng-if='group._id') include ./party/leave-party-and-join-another include ./group - div(ng-if='!group._id && !group.loadingNewParty') + div(ng-if='!group._id && !group.loadingParty') include ./party/party-invitation include ./party/start-a-party diff --git a/website/views/options/social/party/start-a-party.jade b/website/views/options/social/party/start-a-party.jade index 49d9768b2d..b6946ed0aa 100644 --- a/website/views/options/social/party/start-a-party.jade +++ b/website/views/options/social/party/start-a-party.jade @@ -19,5 +19,5 @@ .row.row-margin .btn.btn-primary(ng-click='inviteOrStartParty(group)')=env.t('inviteFriendsNow') - .btn.btn-default(ng-click='create(newGroup); group.loadingNewParty = true')=env.t('inviteFriendsLater') + .btn.btn-default(ng-click='create(newGroup)')=env.t('inviteFriendsLater') .btn.btn-default(ng-click='openModal("user-id",{track:"Join Existing Party"})')=env.t('joinExistingParty') From 3f8ab017ce732083328c5c19531e23bb2edfc56b Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Tue, 7 Jun 2016 08:52:01 -0500 Subject: [PATCH 4/6] fix: Prevent tavern from syncing every time a user goes to the tavern page --- website/client/js/controllers/tavernCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/client/js/controllers/tavernCtrl.js b/website/client/js/controllers/tavernCtrl.js index fd090cd642..77056e07a2 100644 --- a/website/client/js/controllers/tavernCtrl.js +++ b/website/client/js/controllers/tavernCtrl.js @@ -2,7 +2,7 @@ habitrpg.controller("TavernCtrl", ['$scope', 'Groups', 'User', 'Challenges', function($scope, Groups, User, Challenges) { - Groups.tavern(true) + Groups.tavern() .then(function (tavern) { $scope.group = tavern; Challenges.getGroupChallenges($scope.group._id) From 48957369f3bf3fd02ea818ff120cf06127779ed0 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Tue, 7 Jun 2016 08:52:28 -0500 Subject: [PATCH 5/6] fix: Prevent group not found message when reloading party page --- website/client/js/controllers/partyCtrl.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/client/js/controllers/partyCtrl.js b/website/client/js/controllers/partyCtrl.js index 3bbdff1d54..ffc810251f 100644 --- a/website/client/js/controllers/partyCtrl.js +++ b/website/client/js/controllers/partyCtrl.js @@ -7,6 +7,7 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User',' $scope.type = 'party'; $scope.text = window.env.t('party'); + $scope.group = {loadingParty: true} $scope.inviteOrStartParty = Groups.inviteOrStartParty; $scope.loadWidgets = Social.loadWidgets; @@ -20,8 +21,7 @@ habitrpg.controller("PartyCtrl", ['$rootScope','$scope','Groups','Chat','User',' $rootScope.party = $scope.group = $scope.newGroup = { type: 'party' }; } - if ($state.is('options.social.party') && $rootScope.party) { - $scope.group = {loadingParty: true} + if ($state.is('options.social.party') && $rootScope.party && $rootScope.party.id) { Groups.party(true).then(handlePartyResponse, handlePartyError); } else { Groups.Group.syncParty().then(handlePartyResponse, handlePartyError); From 5beb6106c911daded65b069bdd97c14822e47983 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Tue, 7 Jun 2016 12:36:07 -0500 Subject: [PATCH 6/6] fix: Go to loaded party page when inviting friends to party --- website/client/js/controllers/inviteToGroupCtrl.js | 9 ++++----- website/client/js/services/groupServices.js | 8 ++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/website/client/js/controllers/inviteToGroupCtrl.js b/website/client/js/controllers/inviteToGroupCtrl.js index a986cd768c..a4b8495a27 100644 --- a/website/client/js/controllers/inviteToGroupCtrl.js +++ b/website/client/js/controllers/inviteToGroupCtrl.js @@ -48,14 +48,13 @@ habitrpg.controller('InviteToGroupCtrl', ['$scope', '$rootScope', 'User', 'Group .then(function() { Notification.text(window.env.t('invitationsSent')); _resetInvitees(); - var redirectTo = '/#/options/groups/' if ($scope.group.type === 'party') { - redirectTo += 'party'; - } else { - redirectTo += ('guilds/' + $scope.group._id); + Groups.removePartyCache(); + $rootScope.$state.go('options.social.party'); + return; } - $rootScope.hardRedirect(redirectTo); + $rootScope.hardRedirect('/#/options/groups/guilds/' + $scope.group._id); }, function(){ _resetInvitees(); }); diff --git a/website/client/js/services/groupServices.js b/website/client/js/services/groupServices.js index 1411e5e2cb..c3f74ca0f8 100644 --- a/website/client/js/services/groupServices.js +++ b/website/client/js/services/groupServices.js @@ -110,6 +110,7 @@ angular.module('habitrpg') //On page load, multiple controller request the party. //So, we cache the promise until the first result is returned var _cachedPartyPromise; + function party (forceUpdate) { if (_cachedPartyPromise && !forceUpdate) return _cachedPartyPromise.promise; _cachedPartyPromise = $q.defer(); @@ -150,6 +151,10 @@ angular.module('habitrpg') return _cachedPartyPromise.promise; } + function removePartyCache () { + _cachedPartyPromise = null; + } + function publicGuilds () { var deferred = $q.defer(); @@ -207,8 +212,10 @@ angular.module('habitrpg') function inviteOrStartParty (group) { Analytics.track({'hitType':'event','eventCategory':'button','eventAction':'click','eventLabel':'Invite Friends'}); + if (group.type === "party" || $location.$$path === "/options/groups/party") { group.type = 'party'; + $rootScope.openModal('invite-party', { controller:'InviteToGroupCtrl', resolve: { @@ -227,6 +234,7 @@ angular.module('habitrpg') myGuilds: myGuilds, tavern: tavern, inviteOrStartParty: inviteOrStartParty, + removePartyCache: removePartyCache, data: data, Group: Group,