Scope folder realtime refreshes by device
This commit is contained in:
@@ -24,6 +24,7 @@ public class ConversationFolderActivity extends BossScreenActivity {
|
||||
|
||||
private String folderKey;
|
||||
private String folderName;
|
||||
private String folderDeviceId;
|
||||
private String targetProjectId;
|
||||
private ArrayList<String> targetProjectIds;
|
||||
private String targetProjectLabel;
|
||||
@@ -36,6 +37,7 @@ public class ConversationFolderActivity extends BossScreenActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
folderKey = getIntent().getStringExtra(EXTRA_FOLDER_KEY);
|
||||
folderName = getIntent().getStringExtra(EXTRA_FOLDER_NAME);
|
||||
folderDeviceId = parseFolderDeviceId(folderKey);
|
||||
targetProjectId = getIntent().getStringExtra(EXTRA_TARGET_PROJECT_ID);
|
||||
targetProjectIds = new ArrayList<>();
|
||||
String[] extraTargetProjectIds = getIntent().getStringArrayExtra(EXTRA_TARGET_PROJECT_IDS);
|
||||
@@ -137,12 +139,16 @@ public class ConversationFolderActivity extends BossScreenActivity {
|
||||
return false;
|
||||
}
|
||||
String payloadProjectId = event.payload.optString("projectId", "").trim();
|
||||
if (payloadProjectId.isEmpty()) {
|
||||
if (!payloadProjectId.isEmpty()) {
|
||||
return trackedProjectIds.contains(payloadProjectId)
|
||||
|| (!targetProjectIds.isEmpty() && targetProjectIds.contains(payloadProjectId))
|
||||
|| (targetProjectId != null && targetProjectId.equals(payloadProjectId));
|
||||
}
|
||||
String payloadDeviceId = event.payload.optString("deviceId", "").trim();
|
||||
if (payloadDeviceId.isEmpty() || folderDeviceId == null || folderDeviceId.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
return trackedProjectIds.contains(payloadProjectId)
|
||||
|| (!targetProjectIds.isEmpty() && targetProjectIds.contains(payloadProjectId))
|
||||
|| (targetProjectId != null && targetProjectId.equals(payloadProjectId));
|
||||
return payloadDeviceId.equals(folderDeviceId);
|
||||
}
|
||||
|
||||
private boolean isDuplicateRealtimeEvent(String eventFingerprint, long now) {
|
||||
@@ -175,6 +181,7 @@ public class ConversationFolderActivity extends BossScreenActivity {
|
||||
}
|
||||
|
||||
String resolvedFolderName = folder.optString("folderLabel", folderName == null ? "项目线程" : folderName);
|
||||
folderDeviceId = folder.optString("deviceId", folderDeviceId == null ? "" : folderDeviceId).trim();
|
||||
int threadCount = folder.optInt("threadCount", 0);
|
||||
configureScreen(resolvedFolderName, threadCount + " 个线程");
|
||||
appendContent(BossUi.buildSoftPanel(
|
||||
@@ -239,6 +246,17 @@ public class ConversationFolderActivity extends BossScreenActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private String parseFolderDeviceId(@Nullable String candidateFolderKey) {
|
||||
if (candidateFolderKey == null) {
|
||||
return "";
|
||||
}
|
||||
int separatorIndex = candidateFolderKey.indexOf(':');
|
||||
if (separatorIndex <= 0) {
|
||||
return "";
|
||||
}
|
||||
return candidateFolderKey.substring(0, separatorIndex).trim();
|
||||
}
|
||||
|
||||
private void renderThreadAtIndex(JSONArray threads, int index, boolean highlighted) {
|
||||
JSONObject item = threads.optJSONObject(index);
|
||||
if (item == null) return;
|
||||
|
||||
Reference in New Issue
Block a user