[AI] add Song metadata getters/setters for CCLI, category, notes
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
parent
3351b7f138
commit
83fb1a71f4
125
php/src/Song.php
125
php/src/Song.php
|
|
@ -5,6 +5,8 @@ declare(strict_types=1);
|
||||||
namespace ProPresenter\Parser;
|
namespace ProPresenter\Parser;
|
||||||
|
|
||||||
use Rv\Data\Presentation;
|
use Rv\Data\Presentation;
|
||||||
|
use Rv\Data\Presentation\CCLI;
|
||||||
|
use Rv\Data\UUID;
|
||||||
|
|
||||||
class Song
|
class Song
|
||||||
{
|
{
|
||||||
|
|
@ -63,6 +65,118 @@ class Song
|
||||||
$this->presentation->setName($name);
|
$this->presentation->setName($name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getCcliAuthor(): string
|
||||||
|
{
|
||||||
|
return $this->presentation->getCcli()?->getAuthor() ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCcliAuthor(string $author): void
|
||||||
|
{
|
||||||
|
$this->ensureCcli()->setAuthor($author);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCcliSongTitle(): string
|
||||||
|
{
|
||||||
|
return $this->presentation->getCcli()?->getSongTitle() ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCcliSongTitle(string $title): void
|
||||||
|
{
|
||||||
|
$this->ensureCcli()->setSongTitle($title);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCcliPublisher(): string
|
||||||
|
{
|
||||||
|
return $this->presentation->getCcli()?->getPublisher() ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCcliPublisher(string $publisher): void
|
||||||
|
{
|
||||||
|
$this->ensureCcli()->setPublisher($publisher);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCcliCopyrightYear(): int
|
||||||
|
{
|
||||||
|
return $this->presentation->getCcli()?->getCopyrightYear() ?? 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCcliCopyrightYear(int $year): void
|
||||||
|
{
|
||||||
|
$this->ensureCcli()->setCopyrightYear($year);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCcliSongNumber(): int
|
||||||
|
{
|
||||||
|
return $this->presentation->getCcli()?->getSongNumber() ?? 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCcliSongNumber(int $number): void
|
||||||
|
{
|
||||||
|
$this->ensureCcli()->setSongNumber($number);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCcliDisplay(): bool
|
||||||
|
{
|
||||||
|
return $this->presentation->getCcli()?->getDisplay() ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCcliDisplay(bool $display): void
|
||||||
|
{
|
||||||
|
$this->ensureCcli()->setDisplay($display);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCcliArtistCredits(): string
|
||||||
|
{
|
||||||
|
return $this->presentation->getCcli()?->getArtistCredits() ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCcliArtistCredits(string $credits): void
|
||||||
|
{
|
||||||
|
$this->ensureCcli()->setArtistCredits($credits);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCcliAlbum(): string
|
||||||
|
{
|
||||||
|
return $this->presentation->getCcli()?->getAlbum() ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCcliAlbum(string $album): void
|
||||||
|
{
|
||||||
|
$this->ensureCcli()->setAlbum($album);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCategory(): string
|
||||||
|
{
|
||||||
|
return $this->presentation->getCategory();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCategory(string $category): void
|
||||||
|
{
|
||||||
|
$this->presentation->setCategory($category);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNotes(): string
|
||||||
|
{
|
||||||
|
return $this->presentation->getNotes();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setNotes(string $notes): void
|
||||||
|
{
|
||||||
|
$this->presentation->setNotes($notes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSelectedArrangementUuid(): string
|
||||||
|
{
|
||||||
|
return $this->presentation->getSelectedArrangement()?->getString() ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSelectedArrangementUuid(string $uuid): void
|
||||||
|
{
|
||||||
|
$arrangementUuid = new UUID();
|
||||||
|
$arrangementUuid->setString($uuid);
|
||||||
|
$this->presentation->setSelectedArrangement($arrangementUuid);
|
||||||
|
}
|
||||||
|
|
||||||
public function getGroups(): array
|
public function getGroups(): array
|
||||||
{
|
{
|
||||||
return $this->groups;
|
return $this->groups;
|
||||||
|
|
@ -125,4 +239,15 @@ class Song
|
||||||
{
|
{
|
||||||
return $this->presentation;
|
return $this->presentation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function ensureCcli(): CCLI
|
||||||
|
{
|
||||||
|
$ccli = $this->presentation->getCcli();
|
||||||
|
if ($ccli === null) {
|
||||||
|
$ccli = new CCLI();
|
||||||
|
$this->presentation->setCcli($ccli);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ccli;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
79
php/tests/SongMetadataTest.php
Normal file
79
php/tests/SongMetadataTest.php
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace ProPresenter\Parser\Tests;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\Attributes\Test;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use ProPresenter\Parser\Song;
|
||||||
|
use Rv\Data\Presentation;
|
||||||
|
|
||||||
|
class SongMetadataTest extends TestCase
|
||||||
|
{
|
||||||
|
#[Test]
|
||||||
|
public function ccliAuthorRoundTripWorks(): void
|
||||||
|
{
|
||||||
|
$song = new Song(new Presentation());
|
||||||
|
|
||||||
|
$song->setCcliAuthor('Author Name');
|
||||||
|
|
||||||
|
$this->assertSame('Author Name', $song->getCcliAuthor());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Test]
|
||||||
|
public function ccliSongNumberRoundTripWorks(): void
|
||||||
|
{
|
||||||
|
$song = new Song(new Presentation());
|
||||||
|
|
||||||
|
$song->setCcliSongNumber(123456);
|
||||||
|
|
||||||
|
$this->assertSame(123456, $song->getCcliSongNumber());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Test]
|
||||||
|
public function categoryRoundTripWorks(): void
|
||||||
|
{
|
||||||
|
$song = new Song(new Presentation());
|
||||||
|
|
||||||
|
$song->setCategory('Worship');
|
||||||
|
|
||||||
|
$this->assertSame('Worship', $song->getCategory());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Test]
|
||||||
|
public function notesRoundTripWorks(): void
|
||||||
|
{
|
||||||
|
$song = new Song(new Presentation());
|
||||||
|
|
||||||
|
$song->setNotes('Use acoustic intro');
|
||||||
|
|
||||||
|
$this->assertSame('Use acoustic intro', $song->getNotes());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Test]
|
||||||
|
public function selectedArrangementUuidRoundTripWorks(): void
|
||||||
|
{
|
||||||
|
$song = new Song(new Presentation());
|
||||||
|
$uuid = '12345678-1234-4234-8234-123456789abc';
|
||||||
|
|
||||||
|
$song->setSelectedArrangementUuid($uuid);
|
||||||
|
|
||||||
|
$this->assertSame($uuid, $song->getSelectedArrangementUuid());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Test]
|
||||||
|
public function ccliGettersReturnDefaultsWithoutCcliData(): void
|
||||||
|
{
|
||||||
|
$song = new Song(new Presentation());
|
||||||
|
|
||||||
|
$this->assertSame('', $song->getCcliAuthor());
|
||||||
|
$this->assertSame('', $song->getCcliSongTitle());
|
||||||
|
$this->assertSame('', $song->getCcliPublisher());
|
||||||
|
$this->assertSame(0, $song->getCcliCopyrightYear());
|
||||||
|
$this->assertSame(0, $song->getCcliSongNumber());
|
||||||
|
$this->assertFalse($song->getCcliDisplay());
|
||||||
|
$this->assertSame('', $song->getCcliArtistCredits());
|
||||||
|
$this->assertSame('', $song->getCcliAlbum());
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue