Merge pull request #32626 from nextcloud/backport/32618/stable22

[stable22] Fix status handling
This commit is contained in:
Joas Schilling 2022-05-31 10:02:51 +02:00 committed by GitHub
commit b6a4e3bbba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 18 deletions

View file

@ -161,7 +161,7 @@ var b={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus:function(e,t
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/var z={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus:function(e,t){var n=t.statusType;e.status=n,e.statusIsUserDefined=!0},setPredefinedMessage:function(e,t){var n=t.messageId,a=t.clearAt,r=t.message,s=t.icon;e.messageId=n,e.messageIsPredefined=!0,e.message=r,e.icon=s,e.clearAt=a},setCustomMessage:function(e,t){var n=t.message,a=t.icon,r=t.clearAt;e.messageId=null,e.messageIsPredefined=!1,e.message=n,e.icon=a,e.clearAt=r},clearMessage:function(e){e.messageId=null,e.messageIsPredefined=!1,e.message=null,e.icon=null,e.clearAt=null},loadStatusFromServer:function(e,t){var n=t.status,a=t.statusIsUserDefined,r=t.message,s=t.icon,o=t.clearAt,i=t.messageIsPredefined,l=t.messageId;e.status=n,e.statusIsUserDefined=a,e.message=r,e.icon=s,e.clearAt=o,e.messageIsPredefined=i,e.messageId=l}},getters:{},actions:{setStatus:function(e,t){return W(regeneratorRuntime.mark((function n(){var a,r,o,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=e.commit,o=e.state,i=t.statusType,n.next=4,O(i);case 4:r("setStatus",{statusType:i}),Object(R.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(a=Object(s.getCurrentUser)())||void 0===a?void 0:a.uid});case 6:case"end":return n.stop()}}),n)})))()},setPredefinedMessage:function(e,t){return W(regeneratorRuntime.mark((function n(){var a,r,o,i,l,u,c,d,m,p;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=e.commit,o=e.rootState,i=e.state,l=t.messageId,u=t.clearAt,c=I(u),n.next=5,F(l,c);case 5:d=o.predefinedStatuses.predefinedStatuses.find((function(e){return e.id===l})),m=d.message,p=d.icon,r("setPredefinedMessage",{messageId:l,clearAt:c,message:m,icon:p}),Object(R.emit)("user_status:status.updated",{status:i.status,message:i.message,icon:i.icon,clearAt:i.clearAt,userId:null===(a=Object(s.getCurrentUser)())||void 0===a?void 0:a.uid});case 9:case"end":return n.stop()}}),n)})))()},setCustomMessage:function(e,t){return W(regeneratorRuntime.mark((function n(){var a,r,o,i,l,u,c;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=e.commit,o=e.state,i=t.message,l=t.icon,u=t.clearAt,c=I(u),n.next=5,E(i,l,c);case 5:r("setCustomMessage",{message:i,icon:l,clearAt:c}),Object(R.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(a=Object(s.getCurrentUser)())||void 0===a?void 0:a.uid});case 7:case"end":return n.stop()}}),n)})))()},clearMessage:function(e){return W(regeneratorRuntime.mark((function t(){var n,a,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=e.commit,r=e.state,t.next=3,H();case 3:a("clearMessage"),Object(R.emit)("user_status:status.updated",{status:r.status,message:r.message,icon:r.icon,clearAt:r.clearAt,userId:null===(n=Object(s.getCurrentUser)())||void 0===n?void 0:n.uid});case 5:case"end":return t.stop()}}),t)})))()},reFetchStatusFromServer:function(e){return W(regeneratorRuntime.mark((function t(){var n,a;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.commit,t.next=3,j();case 3:a=t.sent,n("loadStatusFromServer",a);case 5:case"end":return t.stop()}}),t)})))()},setStatusFromHeartbeat:function(e,t){return W(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(0,e.commit)("loadStatusFromServer",t);case 2:case"end":return n.stop()}}),n)})))()},loadStatusFromInitialState:function(e){(0,e.commit)("loadStatusFromServer",Object(A.loadState)("user_status","status"))}}};
*/var z={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus:function(e,t){var n=t.statusType;e.status=n,e.statusIsUserDefined=!0},setPredefinedMessage:function(e,t){var n=t.messageId,a=t.clearAt,r=t.message,s=t.icon;e.messageId=n,e.messageIsPredefined=!0,e.message=r,e.icon=s,e.clearAt=a},setCustomMessage:function(e,t){var n=t.message,a=t.icon,r=t.clearAt;e.messageId=null,e.messageIsPredefined=!1,e.message=n,e.icon=a,e.clearAt=r},clearMessage:function(e){e.messageId=null,e.messageIsPredefined=!1,e.message=null,e.icon=null,e.clearAt=null},loadStatusFromServer:function(e,t){var n=t.status,a=t.statusIsUserDefined,r=t.message,s=t.icon,o=t.clearAt,i=t.messageIsPredefined,l=t.messageId;e.status=n,e.message=r,e.icon=s,void 0!==a&&(e.statusIsUserDefined=a),void 0!==o&&(e.clearAt=o),void 0!==i&&(e.messageIsPredefined=i),void 0!==l&&(e.messageId=l)}},getters:{},actions:{setStatus:function(e,t){return W(regeneratorRuntime.mark((function n(){var a,r,o,i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=e.commit,o=e.state,i=t.statusType,n.next=4,O(i);case 4:r("setStatus",{statusType:i}),Object(R.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(a=Object(s.getCurrentUser)())||void 0===a?void 0:a.uid});case 6:case"end":return n.stop()}}),n)})))()},setPredefinedMessage:function(e,t){return W(regeneratorRuntime.mark((function n(){var a,r,o,i,l,u,c,d,m,p;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=e.commit,o=e.rootState,i=e.state,l=t.messageId,u=t.clearAt,c=I(u),n.next=5,F(l,c);case 5:d=o.predefinedStatuses.predefinedStatuses.find((function(e){return e.id===l})),m=d.message,p=d.icon,r("setPredefinedMessage",{messageId:l,clearAt:c,message:m,icon:p}),Object(R.emit)("user_status:status.updated",{status:i.status,message:i.message,icon:i.icon,clearAt:i.clearAt,userId:null===(a=Object(s.getCurrentUser)())||void 0===a?void 0:a.uid});case 9:case"end":return n.stop()}}),n)})))()},setCustomMessage:function(e,t){return W(regeneratorRuntime.mark((function n(){var a,r,o,i,l,u,c;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return r=e.commit,o=e.state,i=t.message,l=t.icon,u=t.clearAt,c=I(u),n.next=5,E(i,l,c);case 5:r("setCustomMessage",{message:i,icon:l,clearAt:c}),Object(R.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(a=Object(s.getCurrentUser)())||void 0===a?void 0:a.uid});case 7:case"end":return n.stop()}}),n)})))()},clearMessage:function(e){return W(regeneratorRuntime.mark((function t(){var n,a,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=e.commit,r=e.state,t.next=3,H();case 3:a("clearMessage"),Object(R.emit)("user_status:status.updated",{status:r.status,message:r.message,icon:r.icon,clearAt:r.clearAt,userId:null===(n=Object(s.getCurrentUser)())||void 0===n?void 0:n.uid});case 5:case"end":return t.stop()}}),t)})))()},reFetchStatusFromServer:function(e){return W(regeneratorRuntime.mark((function t(){var n,a;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.commit,t.next=3,j();case 3:a=t.sent,n("loadStatusFromServer",a);case 5:case"end":return t.stop()}}),t)})))()},setStatusFromHeartbeat:function(e,t){return W(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(0,e.commit)("loadStatusFromServer",t);case 2:case"end":return n.stop()}}),n)})))()},loadStatusFromInitialState:function(e){(0,e.commit)("loadStatusFromServer",Object(A.loadState)("user_status","status"))}}};
/**
* @copyright Copyright (c) 2020 Georg Ehrke
*
@ -207,4 +207,4 @@ r.default.use(L.a);var $=new L.a.Store({modules:{predefinedStatuses:b,userStatus
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/a.nc=btoa(Object(s.getRequestToken)()),a.p=OC.linkTo("user_status","js/"),r.default.prototype.t=t,r.default.prototype.$t=t;n.default=new r.default({el:'li[data-id="user_status-menuitem"]',name:"UserStatusRoot",render:function(e){return e(M)},store:$});document.addEventListener("DOMContentLoaded",(function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",(function(e){return new(r.default.extend(M))({propsData:{inline:!0},store:$}).$mount(e)}))}))}]);
//# sourceMappingURL=user-status-menu.js.map?v=f3b1fe9cd3f0f2dc44ab
//# sourceMappingURL=user-status-menu.js.map?v=15efa5a67fc399dbab15

File diff suppressed because one or more lines are too long

View file

@ -45,18 +45,17 @@ class UserLiveStatusListener implements IEventListener {
/** @var UserStatusMapper */
private $mapper;
/** @var StatusService */
private $statusService;
/** @var ITimeFactory */
private $timeFactory;
/**
* UserLiveStatusListener constructor.
*
* @param UserStatusMapper $mapper
* @param ITimeFactory $timeFactory
*/
public function __construct(UserStatusMapper $mapper,
StatusService $statusService,
ITimeFactory $timeFactory) {
$this->mapper = $mapper;
$this->statusService = $statusService;
$this->timeFactory = $timeFactory;
}
@ -71,7 +70,7 @@ class UserLiveStatusListener implements IEventListener {
$user = $event->getUser();
try {
$userStatus = $this->mapper->findByUserId($user->getUID());
$userStatus = $this->statusService->findByUserId($user->getUID());
} catch (DoesNotExistException $ex) {
$userStatus = new UserStatus();
$userStatus->setUserId($user->getUID());

View file

@ -130,12 +130,23 @@ const mutations = {
*/
loadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {
state.status = status
state.statusIsUserDefined = statusIsUserDefined
state.message = message
state.icon = icon
state.clearAt = clearAt
state.messageIsPredefined = messageIsPredefined
state.messageId = messageId
// Don't overwrite certain values if the refreshing comes in via short updates
// E.g. from talk participant list which only has the status, message and icon
if (typeof statusIsUserDefined !== 'undefined') {
state.statusIsUserDefined = statusIsUserDefined
}
if (typeof clearAt !== 'undefined') {
state.clearAt = clearAt
}
if (typeof messageIsPredefined !== 'undefined') {
state.messageIsPredefined = messageIsPredefined
}
if (typeof messageId !== 'undefined') {
state.messageId = messageId
}
},
}

View file

@ -30,6 +30,7 @@ use OCA\UserStatus\Db\UserStatus;
use OCA\UserStatus\Db\UserStatusMapper;
use OCA\UserStatus\Listener\UserDeletedListener;
use OCA\UserStatus\Listener\UserLiveStatusListener;
use OCA\UserStatus\Service\StatusService;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\EventDispatcher\GenericEvent;
@ -41,7 +42,8 @@ class UserLiveStatusListenerTest extends TestCase {
/** @var UserStatusMapper|\PHPUnit\Framework\MockObject\MockObject */
private $mapper;
/** @var StatusService|\PHPUnit\Framework\MockObject\MockObject */
private $statusService;
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
private $timeFactory;
@ -52,8 +54,9 @@ class UserLiveStatusListenerTest extends TestCase {
parent::setUp();
$this->mapper = $this->createMock(UserStatusMapper::class);
$this->statusService = $this->createMock(StatusService::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->listener = new UserLiveStatusListener($this->mapper, $this->timeFactory);
$this->listener = new UserLiveStatusListener($this->mapper, $this->statusService, $this->timeFactory);
}
/**
@ -85,12 +88,12 @@ class UserLiveStatusListenerTest extends TestCase {
$userStatus->setStatusTimestamp($previousTimestamp);
$userStatus->setIsUserDefined($previousIsUserDefined);
$this->mapper->expects($this->once())
$this->statusService->expects($this->once())
->method('findByUserId')
->with($userId)
->willReturn($userStatus);
} else {
$this->mapper->expects($this->once())
$this->statusService->expects($this->once())
->method('findByUserId')
->with($userId)
->willThrowException(new DoesNotExistException(''));