Added back logic to queue play state change events to trigger state:push

This commit is contained in:
Abdulmhsen B. A. A
2022-08-02 19:57:20 +03:00
parent ee45378e75
commit efcc388dbf
3 changed files with 30 additions and 6 deletions

View File

@@ -65,6 +65,7 @@ class RequestsCommand extends Command
return self::SUCCESS;
}
$queued = [];
$requests = $this->cache->get('requests', []);
if (count($requests) < 1) {
@@ -85,6 +86,10 @@ class RequestsCommand extends Command
Options::DEBUG_TRACE => $input->getOption('trace')
]);
$fn = function (iState $state) use (&$queued) {
$queued[$state->id] = $state;
};
foreach ($requests as $request) {
$entity = ag($request, 'entity');
assert($entity instanceof iState);
@@ -100,9 +105,14 @@ class RequestsCommand extends Command
$this->mapper->add($entity, [
Options::IMPORT_METADATA_ONLY => (bool)ag($options, Options::IMPORT_METADATA_ONLY),
Options::STATE_UPDATE_EVENT => $fn,
]);
}
foreach ($queued as $item) {
queuePush($item);
}
$operations = $this->mapper->commit();
$a = [

View File

@@ -104,6 +104,7 @@ final class DirectMapper implements iImport
$metadataOnly = true === (bool)ag($opts, Options::IMPORT_METADATA_ONLY);
$inDryRunMode = $this->inDryRunMode();
$onStateUpdate = ag($opts, Options::STATE_UPDATE_EVENT, null);
/**
* Handle adding new item logic.
@@ -149,6 +150,10 @@ final class DirectMapper implements iImport
$entity->id = random_int((int)(PHP_INT_MAX / 2), PHP_INT_MAX);
} else {
$entity = $this->db->insert($entity);
if (null !== $onStateUpdate && true === $entity->isWatched()) {
$onStateUpdate($entity);
}
}
$this->logger->notice('MAPPER: [%(backend)] added [%(title)] as new item.', [
@@ -256,6 +261,10 @@ final class DirectMapper implements iImport
if (false === $inDryRunMode) {
$this->db->update($local);
if (null !== $onStateUpdate) {
$onStateUpdate($local);
}
}
$this->logger->notice('MAPPER: [%(backend)] marked [%(title)] as unplayed.', [
@@ -351,12 +360,12 @@ final class DirectMapper implements iImport
}
$keys = $opts['diff_keys'] ?? array_flip(
array_keys_diff(
base: array_flip(iState::ENTITY_KEYS),
list: iState::ENTITY_IGNORE_DIFF_CHANGES,
has: false
)
);
array_keys_diff(
base: array_flip(iState::ENTITY_KEYS),
list: iState::ENTITY_IGNORE_DIFF_CHANGES,
has: false
)
);
if (true === (clone $cloned)->apply(entity: $entity, fields: $keys)->isChanged(fields: $keys)) {
try {
@@ -373,6 +382,10 @@ final class DirectMapper implements iImport
if ($cloned->isWatched() !== $local->isWatched()) {
$message = 'MAPPER: [%(backend)] updated and marked [%(title)] as [%(state)].';
if (null !== $onStateUpdate) {
$onStateUpdate($local);
}
}
if (count($changes) >= 1) {

View File

@@ -20,6 +20,7 @@ final class Options
public const MISMATCH_DEEP_SCAN = 'MISMATCH_DEEP_SCAN';
public const DISABLE_GUID = 'DISABLE_GUID';
public const LIBRARY_SEGMENT = 'LIBRARY_SEGMENT';
public const STATE_UPDATE_EVENT = 'STATE_UPDATE_EVENT';
private function __construct()
{