Skip to content

Commit

Permalink
IPCamLive support
Browse files Browse the repository at this point in the history
Resolves #276
  • Loading branch information
ttempleton committed Nov 6, 2024
1 parent 57c2dda commit 6b56b44
Show file tree
Hide file tree
Showing 8 changed files with 142 additions and 1 deletion.
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changelog

## Unreleased

### Added
- Added `spicyweb\embeddedassets\adapters\ipcamlive\Extractor`
- Added `spicyweb\embeddedassets\adapters\ipcamlive\detectors\Code`
- Added `spicyweb\embeddedassets\adapters\ipcamlive\detectors\ProviderName`
- Added `spicyweb\embeddedassets\adapters\ipcamlive\detectors\ProviderUrl`
- Added `spicyweb\embeddedassets\adapters\ipcamlive\detectors\Type`

### Changed
- The default value for `spicyweb\embeddedassets\models\Settings::$whitelist` now includes `'ipcamlive.com'`

## 5.2.0 - 2024-10-25

### Changed
Expand Down
2 changes: 2 additions & 0 deletions src/Service.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
use spicyweb\embeddedassets\adapters\default\detectors\Type as TypeDetector;
use spicyweb\embeddedassets\adapters\default\Extractor as DefaultExtractor;
use spicyweb\embeddedassets\adapters\googlemaps\Extractor as GoogleMapsExtractor;
use spicyweb\embeddedassets\adapters\ipcamlive\Extractor as IpCamLiveExtractor;
use spicyweb\embeddedassets\adapters\openstreetmap\Extractor as OpenStreetMapExtractor;
use spicyweb\embeddedassets\adapters\pbs\Extractor as PbsExtractor;
use spicyweb\embeddedassets\adapters\sharepoint\Extractor as SharepointExtractor;
Expand Down Expand Up @@ -123,6 +124,7 @@ private function _getDataFromEmbed(string $url): array
'akamaized.net' => AkamaiExtractor::class,
'bsky.app' => BlueskyExtractor::class,
'bsky.social' => BlueskyExtractor::class,
'ipcamlive.com' => IpCamLiveExtractor::class,
'pbs.org' => PbsExtractor::class,
'nhpbs.org' => PbsExtractor::class,
'openstreetmap.org' => OpenStreetMapExtractor::class,
Expand Down
29 changes: 29 additions & 0 deletions src/adapters/ipcamlive/Extractor.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

namespace spicyweb\embeddedassets\adapters\ipcamlive;

use spicyweb\embeddedassets\adapters\default\Extractor as BaseExtractor;
use spicyweb\embeddedassets\adapters\ipcamlive\detectors\Code;
use spicyweb\embeddedassets\adapters\ipcamlive\detectors\ProviderName;
use spicyweb\embeddedassets\adapters\ipcamlive\detectors\ProviderUrl;
use spicyweb\embeddedassets\adapters\ipcamlive\detectors\Type;

/**
* Embed extractor class for IPCamLive.
*
* @package spicyweb\embeddedassets\adapters\ipcamlive
* @author Spicy Web <[email protected]>
* @since 5.3.0
*/
class Extractor extends BaseExtractor
{
public function createCustomDetectors(): array
{
return [
'code' => new Code($this),
'providerName' => new ProviderName($this),
'providerUrl' => new ProviderUrl($this),
'type' => new Type($this),
] + parent::createCustomDetectors();
}
}
32 changes: 32 additions & 0 deletions src/adapters/ipcamlive/detectors/Code.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace spicyweb\embeddedassets\adapters\ipcamlive\detectors;

use craft\helpers\Html;
use Embed\Detectors\Code as BaseCodeDetector;
use Embed\EmbedCode;

/**
* Embed code detector class for IPCamLive.
*
* @package spicyweb\embeddedassets\adapters\ipcamlive\detectors
* @author Spicy Web <[email protected]>
* @since 5.3.0
*/
class Code extends BaseCodeDetector
{
public function detect(): ?EmbedCode
{
$uri = $this->extractor->getUri();

if ($uri->getPath() !== '/player/player.php') {
return null;
}

$iframe = Html::tag('iframe', '', [
'src' => (string)$uri,
]);

return new EmbedCode(htmlspecialchars_decode($iframe, ENT_QUOTES | ENT_HTML5));
}
}
20 changes: 20 additions & 0 deletions src/adapters/ipcamlive/detectors/ProviderName.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace spicyweb\embeddedassets\adapters\ipcamlive\detectors;

use Embed\Detectors\ProviderName as BaseProviderNameDetector;

/**
* Embed provider name detector class for IPCamLive.
*
* @package spicyweb\embeddedassets\adapters\ipcamlive\detectors
* @author Spicy Web <[email protected]>
* @since 5.3.0
*/
class ProviderName extends BaseProviderNameDetector
{
public function detect(): string
{
return 'IPCamLive';
}
}
21 changes: 21 additions & 0 deletions src/adapters/ipcamlive/detectors/ProviderUrl.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace spicyweb\embeddedassets\adapters\ipcamlive\detectors;

use Embed\Detectors\ProviderUrl as BaseProviderUrlDetector;
use Psr\Http\Message\UriInterface;

/**
* Embed provider URL detector class for IPCamLive.
*
* @package spicyweb\embeddedassets\adapters\ipcamlive\detectors
* @author Spicy Web <[email protected]>
* @since 5.3.0
*/
class ProviderUrl extends BaseProviderUrlDetector
{
public function detect(): UriInterface
{
return $this->extractor->resolveUri('https://www.ipcamlive.com/');
}
}
22 changes: 22 additions & 0 deletions src/adapters/ipcamlive/detectors/Type.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace spicyweb\embeddedassets\adapters\ipcamlive\detectors;

use Embed\Detectors\Detector;

/**
* Embed type detector class for IPCamLive.
*
* @package spicyweb\embeddedassets\adapters\ipcamlive\detectors
* @author Spicy Web <[email protected]>
* @since 5.3.0
*/
class Type extends Detector
{
public function detect(): ?string
{
return $this->extractor->getUri()->getPath() === '/player/player.php'
? 'rich'
: 'link';
}
}
5 changes: 4 additions & 1 deletion src/models/Settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,10 @@ class Settings extends Model
// Instagram
'instagr.am',
'instagram.com',


// IPCamLive
'ipcamlive.com',

// Kickstarter
'kickstarter.com',

Expand Down

0 comments on commit 6b56b44

Please sign in to comment.