@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

After a reconnect, repaint Conpherence thread state

Summary: Ref T12566. When we reconnect, refresh the current thread even if we replayed notifications.

Test Plan:
- Clicked the "Repaint" button, saw the thread refresh.
- Clicked the "Reconnect" button, saw the thread reresh.
- Launched `aphlict debug`, killed it, restarted it, saw the thread refresh after reconnect.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T12566

Differential Revision: https://secure.phabricator.com/D17713

+84 -55
+51 -51
resources/celerity/map.php
··· 10 10 'conpherence.pkg.css' => 'a34d59bd', 11 11 'conpherence.pkg.js' => '5f86c17d', 12 12 'core.pkg.css' => '959330a2', 13 - 'core.pkg.js' => '2e969052', 14 - 'darkconsole.pkg.js' => '31272f61', 13 + 'core.pkg.js' => '349e50d5', 14 + 'darkconsole.pkg.js' => '1f9a31bc', 15 15 'differential.pkg.css' => '90b30783', 16 16 'differential.pkg.js' => 'ddfeb49b', 17 17 'diffusion.pkg.css' => '91c5d3a6', ··· 361 361 'rsrc/image/texture/table_header.png' => '5c433037', 362 362 'rsrc/image/texture/table_header_hover.png' => '038ec3b9', 363 363 'rsrc/image/texture/table_header_tall.png' => 'd56b434f', 364 - 'rsrc/js/application/aphlict/Aphlict.js' => '9b5dda26', 364 + 'rsrc/js/application/aphlict/Aphlict.js' => '6304947a', 365 365 'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => 'caade6f2', 366 - 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => 'd82b1ff9', 366 + 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '06e7f30e', 367 367 'rsrc/js/application/aphlict/behavior-aphlict-status.js' => '5e2634b9', 368 368 'rsrc/js/application/aphlict/behavior-desktop-notifications-control.js' => 'd5a2d665', 369 369 'rsrc/js/application/calendar/behavior-day-view.js' => '4b3c4443', 370 370 'rsrc/js/application/calendar/behavior-event-all-day.js' => 'b41537c9', 371 371 'rsrc/js/application/calendar/behavior-month-view.js' => 'fe33e256', 372 372 'rsrc/js/application/config/behavior-reorder-fields.js' => 'b6993408', 373 - 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => 'c8b5ee6f', 373 + 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => 'dd84a70f', 374 374 'rsrc/js/application/conpherence/behavior-conpherence-search.js' => '9bbf3762', 375 375 'rsrc/js/application/conpherence/behavior-durable-column.js' => 'aa3bd034', 376 376 'rsrc/js/application/conpherence/behavior-menu.js' => '80dda04a', ··· 522 522 'rsrc/js/core/behavior-workflow.js' => '0a3f3021', 523 523 'rsrc/js/core/darkconsole/DarkLog.js' => 'c8e1ffe3', 524 524 'rsrc/js/core/darkconsole/DarkMessage.js' => 'c48cccdd', 525 - 'rsrc/js/core/darkconsole/behavior-dark-console.js' => '2a228a94', 525 + 'rsrc/js/core/darkconsole/behavior-dark-console.js' => '17bb8539', 526 526 'rsrc/js/core/phtize.js' => 'd254d646', 527 527 'rsrc/js/phui/behavior-phui-dropdown-menu.js' => 'b95d6f7d', 528 528 'rsrc/js/phui/behavior-phui-file-upload.js' => 'b003d4fb', ··· 560 560 'conpherence-message-pane-css' => '14199428', 561 561 'conpherence-notification-css' => 'cef0a3fc', 562 562 'conpherence-participant-pane-css' => '26a3ce56', 563 - 'conpherence-thread-manager' => 'c8b5ee6f', 563 + 'conpherence-thread-manager' => 'dd84a70f', 564 564 'conpherence-transaction-css' => '85129c68', 565 565 'd3' => 'a11a5ff2', 566 566 'differential-changeset-view-css' => '41af6d25', ··· 583 583 'herald-rule-editor' => 'd6a7e717', 584 584 'herald-test-css' => 'a52e323e', 585 585 'inline-comment-summary-css' => '51efda3a', 586 - 'javelin-aphlict' => '9b5dda26', 586 + 'javelin-aphlict' => '6304947a', 587 587 'javelin-behavior' => '61cbc29a', 588 588 'javelin-behavior-aphlict-dropdown' => 'caade6f2', 589 - 'javelin-behavior-aphlict-listen' => 'd82b1ff9', 589 + 'javelin-behavior-aphlict-listen' => '06e7f30e', 590 590 'javelin-behavior-aphlict-status' => '5e2634b9', 591 591 'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884', 592 592 'javelin-behavior-aphront-drag-and-drop-textarea' => '484a6e22', ··· 605 605 'javelin-behavior-conpherence-pontificate' => '55616e04', 606 606 'javelin-behavior-conpherence-search' => '9bbf3762', 607 607 'javelin-behavior-countdown-timer' => 'e4cc26b3', 608 - 'javelin-behavior-dark-console' => '2a228a94', 608 + 'javelin-behavior-dark-console' => '17bb8539', 609 609 'javelin-behavior-dashboard-async-panel' => '469c0d9e', 610 610 'javelin-behavior-dashboard-move-panels' => '408bf173', 611 611 'javelin-behavior-dashboard-query-panel-select' => '453c5375', ··· 947 947 'javelin-stratcom', 948 948 'javelin-workflow', 949 949 ), 950 + '06e7f30e' => array( 951 + 'javelin-behavior', 952 + 'javelin-aphlict', 953 + 'javelin-stratcom', 954 + 'javelin-request', 955 + 'javelin-uri', 956 + 'javelin-dom', 957 + 'javelin-json', 958 + 'javelin-router', 959 + 'javelin-util', 960 + 'javelin-leader', 961 + 'javelin-sound', 962 + 'phabricator-notification', 963 + ), 950 964 '0825c27a' => array( 951 965 'javelin-behavior', 952 966 'javelin-dom', ··· 1016 1030 'javelin-dom', 1017 1031 'javelin-history', 1018 1032 ), 1033 + '17bb8539' => array( 1034 + 'javelin-behavior', 1035 + 'javelin-stratcom', 1036 + 'javelin-util', 1037 + 'javelin-dom', 1038 + 'javelin-request', 1039 + 'phabricator-keyboard-shortcut', 1040 + 'phabricator-darklog', 1041 + 'phabricator-darkmessage', 1042 + ), 1019 1043 '185bbd53' => array( 1020 1044 'javelin-install', 1021 1045 ), ··· 1089 1113 'javelin-install', 1090 1114 'javelin-util', 1091 1115 ), 1092 - '2a228a94' => array( 1093 - 'javelin-behavior', 1094 - 'javelin-stratcom', 1095 - 'javelin-util', 1096 - 'javelin-dom', 1097 - 'javelin-request', 1098 - 'phabricator-keyboard-shortcut', 1099 - 'phabricator-darklog', 1100 - 'phabricator-darkmessage', 1101 - ), 1102 1116 '2b8de964' => array( 1103 1117 'javelin-install', 1104 1118 'javelin-util', ··· 1376 1390 '62dfea03' => array( 1377 1391 'javelin-install', 1378 1392 'javelin-util', 1393 + ), 1394 + '6304947a' => array( 1395 + 'javelin-install', 1396 + 'javelin-util', 1397 + 'javelin-websocket', 1398 + 'javelin-leader', 1399 + 'javelin-json', 1379 1400 ), 1380 1401 '635de1ec' => array( 1381 1402 'javelin-behavior', ··· 1679 1700 'aphront-typeahead-control-css', 1680 1701 'phui-tag-view-css', 1681 1702 ), 1682 - '9b5dda26' => array( 1683 - 'javelin-install', 1684 - 'javelin-util', 1685 - 'javelin-websocket', 1686 - 'javelin-leader', 1687 - 'javelin-json', 1688 - ), 1689 1703 '9bbf3762' => array( 1690 1704 'javelin-behavior', 1691 1705 'javelin-dom', ··· 1967 1981 'c7ccd872' => array( 1968 1982 'phui-fontkit-css', 1969 1983 ), 1970 - 'c8b5ee6f' => array( 1971 - 'javelin-dom', 1972 - 'javelin-util', 1973 - 'javelin-stratcom', 1974 - 'javelin-install', 1975 - 'javelin-aphlict', 1976 - 'javelin-workflow', 1977 - 'javelin-router', 1978 - 'javelin-behavior-device', 1979 - 'javelin-vector', 1980 - ), 1981 1984 'c90a04fc' => array( 1982 1985 'javelin-dom', 1983 1986 'javelin-dynval', ··· 2086 2089 'javelin-dom', 2087 2090 'phabricator-draggable-list', 2088 2091 ), 2089 - 'd82b1ff9' => array( 2092 + 'd835b03a' => array( 2090 2093 'javelin-behavior', 2091 - 'javelin-aphlict', 2092 - 'javelin-stratcom', 2093 - 'javelin-request', 2094 - 'javelin-uri', 2095 2094 'javelin-dom', 2096 - 'javelin-json', 2097 - 'javelin-router', 2098 2095 'javelin-util', 2099 - 'javelin-leader', 2100 - 'javelin-sound', 2101 - 'phabricator-notification', 2096 + 'phabricator-shaped-request', 2102 2097 ), 2103 - 'd835b03a' => array( 2104 - 'javelin-behavior', 2098 + 'dd84a70f' => array( 2105 2099 'javelin-dom', 2106 2100 'javelin-util', 2107 - 'phabricator-shaped-request', 2101 + 'javelin-stratcom', 2102 + 'javelin-install', 2103 + 'javelin-aphlict', 2104 + 'javelin-workflow', 2105 + 'javelin-router', 2106 + 'javelin-behavior-device', 2107 + 'javelin-vector', 2108 2108 ), 2109 2109 'de2e896f' => array( 2110 2110 'javelin-behavior',
+11
src/applications/console/plugin/DarkConsoleRealtimePlugin.php
··· 24 24 25 25 $reconnect_label = pht('Reconnect'); 26 26 $replay_label = pht('Replay'); 27 + $repaint_label = pht('Repaint'); 27 28 28 29 $buttons = phutil_tag( 29 30 'div', ··· 50 51 array( 51 52 'action' => 'replay', 52 53 'label' => $replay_label, 54 + )), 55 + id(new PHUIButtonView()) 56 + ->setIcon('fa-paint-brush') 57 + ->setColor(PHUIButtonView::GREY) 58 + ->setText($repaint_label) 59 + ->addSigil('dark-console-realtime-action') 60 + ->setMetadata( 61 + array( 62 + 'action' => 'repaint', 63 + 'label' => $repaint_label, 53 64 )), 54 65 )); 55 66
+7 -4
webroot/rsrc/js/application/aphlict/Aphlict.js
··· 99 99 // after other tabs have had a chance to subscribe. Do this before we 100 100 // broadcast that the connection status is now open. 101 101 if (this._isReconnect) { 102 - setTimeout(JX.bind(this, this._reconnect), 100); 102 + setTimeout(JX.bind(this, this._didReconnect), 100); 103 103 } 104 104 105 105 this._broadcastStatus('open'); 106 106 JX.Leader.broadcast(null, {type: 'aphlict.getsubscribers'}); 107 107 }, 108 108 109 - _reconnect: function() { 109 + _didReconnect: function() { 110 110 this.replay(); 111 - 112 - JX.Leader.broadcast(null, {type: 'aphlict.reconnect', data: null}); 111 + this.reconnect(); 113 112 }, 114 113 115 114 replay: function() { ··· 118 117 }; 119 118 120 119 JX.Leader.broadcast(null, {type: 'aphlict.replay', data: replay}); 120 + }, 121 + 122 + reconnect: function() { 123 + JX.Leader.broadcast(null, {type: 'aphlict.reconnect', data: null}); 121 124 }, 122 125 123 126 _close: function() {
+4
webroot/rsrc/js/application/aphlict/behavior-aphlict-listen.js
··· 53 53 case 'notification.individual': 54 54 JX.Stratcom.invoke('aphlict-notification-message', null, message.data); 55 55 break; 56 + 57 + case 'aphlict.reconnect': 58 + JX.Stratcom.invoke('aphlict-reconnect', null, message.data); 59 + break; 56 60 } 57 61 } 58 62
+8
webroot/rsrc/js/application/conpherence/ConpherenceThreadManager.js
··· 240 240 this._updateThread(); 241 241 })); 242 242 243 + // If we see a reconnect, always update the thread state. 244 + JX.Stratcom.listen( 245 + 'aphlict-reconnect', 246 + null, 247 + JX.bind(this, function() { 248 + this._updateThread(); 249 + })); 250 + 243 251 JX.Stratcom.listen( 244 252 'click', 245 253 'show-older-messages',
+3
webroot/rsrc/js/core/darkconsole/behavior-dark-console.js
··· 395 395 case 'replay': 396 396 JX.Aphlict.getInstance().replay(); 397 397 break; 398 + case 'repaint': 399 + JX.Aphlict.getInstance().reconnect(); 400 + break; 398 401 } 399 402 400 403 });