|
|
|
@ -156,6 +156,7 @@
|
|
|
|
|
|
|
|
|
|
if ($suppress_processing) return;
|
|
|
|
|
|
|
|
|
|
$this->language_flag = $details['language_flag'] ?? $this->get_language_flag();
|
|
|
|
|
$this->extract_tags_from_description();
|
|
|
|
|
$this->tags = isset($details['tags'])
|
|
|
|
|
? CommunityTag::from_details_array($details['tags'])
|
|
|
|
@ -179,16 +180,12 @@
|
|
|
|
|
public function get_language_flag(): string {
|
|
|
|
|
global $languages;
|
|
|
|
|
|
|
|
|
|
$room_identifier = $this->get_room_identifier();
|
|
|
|
|
$server_pubkey = $this->server->get_pubkey();
|
|
|
|
|
|
|
|
|
|
if (isset($this->language_flag)) {
|
|
|
|
|
return $this->language_flag;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Latter only applies to fetching stage
|
|
|
|
|
// where the language flag is serialized into JSON.
|
|
|
|
|
// Later stages deserialize the property and detect it above.
|
|
|
|
|
$room_identifier = $this->get_room_identifier();
|
|
|
|
|
$server_pubkey = $this->server->get_pubkey();
|
|
|
|
|
|
|
|
|
|
if (isset($languages[$room_identifier])) {
|
|
|
|
|
return $languages[$room_identifier];
|
|
|
|
@ -666,6 +663,12 @@
|
|
|
|
|
**/
|
|
|
|
|
private array $pubkey_candidates = [];
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var array[] $_intermediate_room_data
|
|
|
|
|
* Array of room details fetched before constructing room objects.
|
|
|
|
|
*/
|
|
|
|
|
private ?array $_intermediate_room_data = null;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var CommunityRoom[]|null $rooms
|
|
|
|
|
* Array of Communities hosted by this server.
|
|
|
|
@ -872,6 +875,7 @@
|
|
|
|
|
*/
|
|
|
|
|
function jsonSerialize(): array {
|
|
|
|
|
$details = get_object_vars($this);
|
|
|
|
|
unset($details['_intermediate_room_data']);
|
|
|
|
|
unset($details['room_hints']);
|
|
|
|
|
unset($details['merge_error']);
|
|
|
|
|
unset($details['pubkey_candidates']);
|
|
|
|
@ -1002,6 +1006,7 @@
|
|
|
|
|
$fetch_job = function() use ($server, &$reachable_servers): Generator {
|
|
|
|
|
if (!yield from $server->fetch_rooms_coroutine()) return;
|
|
|
|
|
if (!yield from $server->fetch_pubkey_coroutine()) return;
|
|
|
|
|
$server->construct_rooms();
|
|
|
|
|
$reachable_servers[] = $server;
|
|
|
|
|
};
|
|
|
|
|
// passthrough hack
|
|
|
|
@ -1310,7 +1315,7 @@
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->rooms = CommunityRoom::from_details_array($this, $room_data);
|
|
|
|
|
$this->_intermediate_room_data = $room_data;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
@ -1324,7 +1329,7 @@
|
|
|
|
|
|
|
|
|
|
$base_url = $this->base_url;
|
|
|
|
|
|
|
|
|
|
if (empty($this->rooms)) {
|
|
|
|
|
if (empty($this->_intermediate_room_data)) {
|
|
|
|
|
log_warning("Server $base_url has no rooms to poll for public key");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
@ -1335,7 +1340,11 @@
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$preview_url = $this->rooms[0]->get_preview_url();
|
|
|
|
|
// This is ugly. 'RoomBuilder' would be better.
|
|
|
|
|
$preview_url = CommunityRoom::_from_intermediate_data(
|
|
|
|
|
$this,
|
|
|
|
|
$this->_intermediate_room_data[0]
|
|
|
|
|
)->get_preview_url();
|
|
|
|
|
|
|
|
|
|
log_info("Fetching pubkey from $preview_url");
|
|
|
|
|
$room_view_response = yield from FetchingCoroutine
|
|
|
|
|