@ -27,7 +27,9 @@ declare(strict_types=1);
namespace OC\Support\Subscription ;
use OCP\AppFramework\QueryException ;
use OCP\IConfig ;
use OCP\IServerContainer ;
use OCP\Support\Subscription\Exception\AlreadyRegisteredException ;
use OCP\Support\Subscription\IRegistry ;
use OCP\Support\Subscription\ISubscription ;
@ -38,11 +40,30 @@ class Registry implements IRegistry {
/** @var ISubscription */
private $subscription = null ;
/** @var string */
private $subscriptionService = null ;
/** @var IConfig */
private $config ;
public function __construct ( IConfig $config ) {
/** @var IServerContainer */
private $container ;
public function __construct ( IConfig $config , IServerContainer $container ) {
$this -> config = $config ;
$this -> container = $container ;
}
private function getSubscription () : ? ISubscription {
if ( $this -> subscription === null && $this -> subscriptionService !== null ) {
try {
$this -> subscription = $this -> container -> query ( $this -> subscriptionService );
} catch ( QueryException $e ) {
// Ignore this
}
}
return $this -> subscription ;
}
/**
@ -55,20 +76,29 @@ class Registry implements IRegistry {
* @ since 17.0 . 0
*/
public function register ( ISubscription $subscription ) : void {
if ( $this -> subscription !== null ) {
if ( $this -> subscription !== null || $this -> subscriptionService !== null ) {
throw new AlreadyRegisteredException ();
}
$this -> subscription = $subscription ;
}
public function registerService ( string $subscriptionService ) : void {
if ( $this -> subscription !== null || $this -> subscriptionService !== null ) {
throw new AlreadyRegisteredException ();
}
$this -> subscriptionService = $subscriptionService ;
}
/**
* Fetches the list of app IDs that are supported by the subscription
*
* @ since 17.0 . 0
*/
public function delegateGetSupportedApps () : array {
if ( $this -> subscription instanceof ISupportedApps ) {
return $this -> subscription -> getSupportedApps ();
if ( $this -> getSubscription () instanceof ISupportedApps ) {
return $this -> getSubscription () -> getSupportedApps ();
}
return [];
}
@ -84,8 +114,8 @@ class Registry implements IRegistry {
return true ;
}
if ( $this -> subscription instanceof ISubscription ) {
return $this -> subscription -> hasValidSubscription ();
if ( $this -> getSubscription () instanceof ISubscription ) {
return $this -> getSubscription () -> hasValidSubscription ();
}
return false ;
}
@ -96,8 +126,8 @@ class Registry implements IRegistry {
* @ since 17.0 . 0
*/
public function delegateHasExtendedSupport () : bool {
if ( $this -> subscription instanceof ISubscription && method_exists ( $this -> subscription , 'hasExtendedSupport' )) {
return $this -> subscription -> hasExtendedSupport ();
if ( $this -> getSubscription () instanceof ISubscription && method_exists ( $this -> subscription , 'hasExtendedSupport' )) {
return $this -> getSubscription () -> hasExtendedSupport ();
}
return false ;
}