1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-22 23:02:42 +01:00

Clean up Conpherence Transactions and notifications

Summary: Does a few things. Turns off feed stories (again), removes "action" transactions from notificiations, and only updates message count on actual messages. This feels a bit cleaner and less spammy... I guess... I think @epriestley will really like it and do me a favor or something.

Test Plan: Pull up two windows. test a message, see message count on second screen. Edit a topic or title, get no notification. At all. Ever.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin, epriestley

Differential Revision: https://secure.phabricator.com/D17674
This commit is contained in:
Chad Little 2017-04-12 20:44:32 -07:00
parent ada9046e31
commit 03f2a41b16
5 changed files with 62 additions and 120 deletions

View file

@ -7,7 +7,7 @@
*/ */
return array( return array(
'names' => array( 'names' => array(
'conpherence.pkg.css' => 'b5ee2073', 'conpherence.pkg.css' => 'f8390290',
'conpherence.pkg.js' => '281b1a73', 'conpherence.pkg.js' => '281b1a73',
'core.pkg.css' => '30a64ed6', 'core.pkg.css' => '30a64ed6',
'core.pkg.js' => 'fbc1c380', 'core.pkg.js' => 'fbc1c380',
@ -49,7 +49,7 @@ return array(
'rsrc/css/application/conpherence/header-pane.css' => '4082233d', 'rsrc/css/application/conpherence/header-pane.css' => '4082233d',
'rsrc/css/application/conpherence/menu.css' => '5abfb32d', 'rsrc/css/application/conpherence/menu.css' => '5abfb32d',
'rsrc/css/application/conpherence/message-pane.css' => 'd1fc13e1', 'rsrc/css/application/conpherence/message-pane.css' => 'd1fc13e1',
'rsrc/css/application/conpherence/notification.css' => '965db05b', 'rsrc/css/application/conpherence/notification.css' => 'cef0a3fc',
'rsrc/css/application/conpherence/participant-pane.css' => '604a8b02', 'rsrc/css/application/conpherence/participant-pane.css' => '604a8b02',
'rsrc/css/application/conpherence/transaction.css' => '85129c68', 'rsrc/css/application/conpherence/transaction.css' => '85129c68',
'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4', 'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4',
@ -556,7 +556,7 @@ return array(
'conpherence-header-pane-css' => '4082233d', 'conpherence-header-pane-css' => '4082233d',
'conpherence-menu-css' => '5abfb32d', 'conpherence-menu-css' => '5abfb32d',
'conpherence-message-pane-css' => 'd1fc13e1', 'conpherence-message-pane-css' => 'd1fc13e1',
'conpherence-notification-css' => '965db05b', 'conpherence-notification-css' => 'cef0a3fc',
'conpherence-participant-pane-css' => '604a8b02', 'conpherence-participant-pane-css' => '604a8b02',
'conpherence-thread-manager' => 'c8b5ee6f', 'conpherence-thread-manager' => 'c8b5ee6f',
'conpherence-transaction-css' => '85129c68', 'conpherence-transaction-css' => '85129c68',

View file

@ -20,7 +20,7 @@ final class ConpherenceNotificationPanelController
->withPHIDs(array_keys($participant_data)) ->withPHIDs(array_keys($participant_data))
->needProfileImage(true) ->needProfileImage(true)
->needTransactions(true) ->needTransactions(true)
->setTransactionLimit(50) ->setTransactionLimit(100)
->needParticipantCache(true) ->needParticipantCache(true)
->execute(); ->execute();
} }

View file

@ -87,9 +87,9 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
public function getTransactionTypes() { public function getTransactionTypes() {
$types = parent::getTransactionTypes(); $types = parent::getTransactionTypes();
$types[] = PhabricatorTransactions::TYPE_COMMENT;
$types[] = ConpherenceTransaction::TYPE_PARTICIPANTS; $types[] = ConpherenceTransaction::TYPE_PARTICIPANTS;
$types[] = PhabricatorTransactions::TYPE_COMMENT;
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
$types[] = PhabricatorTransactions::TYPE_JOIN_POLICY; $types[] = PhabricatorTransactions::TYPE_JOIN_POLICY;
@ -101,25 +101,6 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
return pht('%s created this room.', $author); return pht('%s created this room.', $author);
} }
protected function shouldPublishFeedStory(
PhabricatorLiskDAO $object,
array $xactions) {
foreach ($xactions as $xaction) {
switch ($xaction->getTransactionType()) {
case ConpherenceThreadTitleTransaction::TRANSACTIONTYPE:
case ConpherenceThreadTopicTransaction::TRANSACTIONTYPE:
case ConpherenceThreadPictureTransaction::TRANSACTIONTYPE:
return true;
default:
return false;
}
}
return true;
}
protected function getCustomTransactionOldValue( protected function getCustomTransactionOldValue(
PhabricatorLiskDAO $object, PhabricatorLiskDAO $object,
PhabricatorApplicationTransaction $xaction) { PhabricatorApplicationTransaction $xaction) {
@ -338,40 +319,40 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
switch ($xaction->getTransactionType()) { switch ($xaction->getTransactionType()) {
case PhabricatorTransactions::TYPE_COMMENT: case PhabricatorTransactions::TYPE_COMMENT:
$message_count++; $message_count++;
// update everyone's participation status on a message -only-
$xaction_phid = $xaction->getPHID();
$behind = ConpherenceParticipationStatus::BEHIND;
$up_to_date = ConpherenceParticipationStatus::UP_TO_DATE;
$participants = $object->getParticipants();
$user = $this->getActor();
$time = time();
foreach ($participants as $phid => $participant) {
if ($phid != $user->getPHID()) {
if ($participant->getParticipationStatus() != $behind) {
$participant->setBehindTransactionPHID($xaction_phid);
$participant->setSeenMessageCount(
$object->getMessageCount() - $message_count);
}
$participant->setParticipationStatus($behind);
$participant->setDateTouched($time);
} else {
$participant->setSeenMessageCount($object->getMessageCount());
$participant->setBehindTransactionPHID($xaction_phid);
$participant->setParticipationStatus($up_to_date);
$participant->setDateTouched($time);
}
$participant->save();
}
PhabricatorUserCache::clearCaches(
PhabricatorUserMessageCountCacheType::KEY_COUNT,
array_keys($participants));
break; break;
} }
} }
// update everyone's participation status on the last xaction -only-
$xaction = end($xactions);
$xaction_phid = $xaction->getPHID();
$behind = ConpherenceParticipationStatus::BEHIND;
$up_to_date = ConpherenceParticipationStatus::UP_TO_DATE;
$participants = $object->getParticipants();
$user = $this->getActor();
$time = time();
foreach ($participants as $phid => $participant) {
if ($phid != $user->getPHID()) {
if ($participant->getParticipationStatus() != $behind) {
$participant->setBehindTransactionPHID($xaction_phid);
$participant->setSeenMessageCount(
$object->getMessageCount() - $message_count);
}
$participant->setParticipationStatus($behind);
$participant->setDateTouched($time);
} else {
$participant->setSeenMessageCount($object->getMessageCount());
$participant->setBehindTransactionPHID($xaction_phid);
$participant->setParticipationStatus($up_to_date);
$participant->setDateTouched($time);
}
$participant->save();
}
PhabricatorUserCache::clearCaches(
PhabricatorUserMessageCountCacheType::KEY_COUNT,
array_keys($participants));
if ($xactions) { if ($xactions) {
$data = array( $data = array(
'type' => 'message', 'type' => 'message',

View file

@ -240,71 +240,33 @@ final class ConpherenceThread extends ConpherenceDAO
$transactions = array(); $transactions = array();
} }
if ($transactions) {
$subtitle_mode = 'message';
} else {
$subtitle_mode = 'recent';
}
$lucky_phid = head($this->getOtherRecentParticipantPHIDs($viewer));
if ($lucky_phid) {
$lucky_handle = $handles[$lucky_phid];
} else {
// This will be just the user talking to themselves. Weirdo.
$lucky_handle = reset($handles);
}
$img_src = $this->getProfileImageURI(); $img_src = $this->getProfileImageURI();
$message_title = null; $message_transaction = null;
if ($subtitle_mode == 'message') { foreach ($transactions as $transaction) {
$message_transaction = null;
$action_transaction = null;
foreach ($transactions as $transaction) {
if ($message_transaction || $action_transaction) {
break;
}
switch ($transaction->getTransactionType()) {
case PhabricatorTransactions::TYPE_COMMENT:
$message_transaction = $transaction;
break;
case ConpherenceThreadTitleTransaction::TRANSACTIONTYPE:
case ConpherenceThreadTopicTransaction::TRANSACTIONTYPE:
case ConpherenceThreadPictureTransaction::TRANSACTIONTYPE:
case ConpherenceTransaction::TYPE_PARTICIPANTS:
$action_transaction = $transaction;
break;
default:
break;
}
}
if ($message_transaction) { if ($message_transaction) {
$message_handle = $handles[$message_transaction->getAuthorPHID()]; break;
$message_title = sprintf(
'%s: %s',
$message_handle->getName(),
id(new PhutilUTF8StringTruncator())
->setMaximumGlyphs(60)
->truncateString(
$message_transaction->getComment()->getContent()));
} }
if ($action_transaction) { switch ($transaction->getTransactionType()) {
$message_title = id(clone $action_transaction) case PhabricatorTransactions::TYPE_COMMENT:
->setRenderingTarget(PhabricatorApplicationTransaction::TARGET_TEXT) $message_transaction = $transaction;
->getTitle(); break;
default:
break;
} }
} }
switch ($subtitle_mode) { if ($message_transaction) {
case 'recent': $message_handle = $handles[$message_transaction->getAuthorPHID()];
$subtitle = $this->getRecentParticipantsString($viewer); $subtitle = sprintf(
break; '%s: %s',
case 'message': $message_handle->getName(),
if ($message_title) { id(new PhutilUTF8StringTruncator())
$subtitle = $message_title; ->setMaximumGlyphs(60)
} else { ->truncateString(
$subtitle = $this->getRecentParticipantsString($viewer); $message_transaction->getComment()->getContent()));
} } else {
break; // Kinda lame, but maybe add last message to cache?
$subtitle = pht('No recent messages');
} }
$user_participation = $this->getParticipantIfExists($viewer->getPHID()); $user_participation = $this->getParticipantIfExists($viewer->getPHID());

View file

@ -8,7 +8,7 @@
.phabricator-notification .conpherence-menu-item-view { .phabricator-notification .conpherence-menu-item-view {
display: block; display: block;
height: 46px; height: 48px;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
text-decoration: none; text-decoration: none;
@ -23,8 +23,8 @@
left: 8px; left: 8px;
display: block; display: block;
position: absolute; position: absolute;
width: 30px; width: 32px;
height: 30px; height: 32px;
background-size: 100%; background-size: 100%;
border-radius: 3px; border-radius: 3px;
} }
@ -33,7 +33,7 @@
.conpherence-menu-item-title { .conpherence-menu-item-title {
display: block; display: block;
margin-top: 8px; margin-top: 8px;
margin-left: 46px; margin-left: 48px;
text-align: left; text-align: left;
font-weight: bold; font-weight: bold;
font-size: {$normalfontsize}; font-size: {$normalfontsize};
@ -49,8 +49,7 @@
display: block; display: block;
color: {$lightgreytext}; color: {$lightgreytext};
font-size: {$smallestfontsize}; font-size: {$smallestfontsize};
margin-top: 2px; margin-left: 48px;
margin-left: 46px;
width: 290px; width: 290px;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;