summaryrefslogtreecommitdiff
blob: 1b2d29cba2b36094c9ac096ae1acd965162444ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php

declare( strict_types = 1 );

namespace MediaWiki\Extension\Translate\Synchronization;

use JsonSerializable;
use MediaWiki\Extension\Translate\Utilities\Json\JsonUnserializable;
use MediaWiki\Extension\Translate\Utilities\Json\JsonUnserializableTrait;

/**
 * Class encapsulating the response returned by the GroupSynchronizationCache
 * when requested for an update on a group synchronization status.
 * @author Abijeet Patro
 * @license GPL-2.0-or-later
 * @since 2020.06
 */
class GroupSynchronizationResponse implements JsonSerializable, JsonUnserializable {
	use JsonUnserializableTrait;

	/** @var MessageUpdateParameter[] */
	private $remainingMessages;
	/** @var string */
	private $groupId;
	/** @var bool */
	private $timeout;

	public function __construct(
		string $groupId, array $remainingMessages, bool $hasTimedOut
	) {
		$this->groupId = $groupId;
		$this->remainingMessages = $remainingMessages;
		$this->timeout = $hasTimedOut;
	}

	public function isDone(): bool {
		return $this->remainingMessages === [];
	}

	/** @return MessageUpdateParameter[] */
	public function getRemainingMessages(): array {
		return $this->remainingMessages;
	}

	public function getGroupId(): string {
		return $this->groupId;
	}

	public function hasTimedOut(): bool {
		return $this->timeout;
	}

	/** @return mixed[] */
	protected function toJsonArray(): array {
		return get_object_vars( $this );
	}

	public static function newFromJsonArray( array $params ) {
		return new self(
			$params['groupId'],
			$params['remainingMessages'],
			$params['timeout']
		);
	}
}