Skip to content

Commit

Permalink
Feature Request: Put a link icon in the stream line which gives a URL…
Browse files Browse the repository at this point in the history
… to the stream in the all SG group

Fixes #138
  • Loading branch information
SenexCrenshaw committed Oct 31, 2023
1 parent 633f49c commit 7b3e66f
Show file tree
Hide file tree
Showing 8 changed files with 98 additions and 2 deletions.
7 changes: 7 additions & 0 deletions StreamMasterAPI/Controllers/StreamGroupsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -357,4 +357,11 @@ private string GetUrl()
return url;
}

[HttpGet]
[Route("[action]")]
public async Task<ActionResult<string?>> GetStreamGroupVideoStreamUrl(string VideoStreamId)
{
string? res = await Mediator.Send(new GetStreamGroupVideoStreamUrl(VideoStreamId)).ConfigureAwait(false);
return Ok(res);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,10 @@ public async Task UpdateStreamGroup(UpdateStreamGroupRequest request)
{
await mediator.Send(request).ConfigureAwait(false);
}

public async Task<string?> GetStreamGroupVideoStreamUrl(string VideoStreamId)
{
string? res = await mediator.Send(new GetStreamGroupVideoStreamUrl(VideoStreamId)).ConfigureAwait(false);
return res;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ namespace StreamMasterApplication.StreamGroups;

public interface IStreamGroupController
{
Task<ActionResult<string?>> GetStreamGroupVideoStreamUrl(string VideoStreamId);
Task<ActionResult> CreateStreamGroup(CreateStreamGroupRequest request);

Task<ActionResult> DeleteStreamGroup(DeleteStreamGroupRequest request);
Expand All @@ -29,10 +30,11 @@ public interface IStreamGroupController
}

public interface IStreamGroupDB
{}
{ }

public interface IStreamGroupHub
{
Task<string?> GetStreamGroupVideoStreamUrl(string VideoStreamId);
Task CreateStreamGroup(CreateStreamGroupRequest request);

Task DeleteStreamGroup(DeleteStreamGroupRequest request);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using Microsoft.AspNetCore.Http;

using StreamMasterApplication.Common.Extensions;

using StreamMasterDomain.Authentication;

using System.Text.Json;
using System.Web;

namespace StreamMasterApplication.StreamGroups.Queries;

public record GetStreamGroupVideoStreamUrl(string VideoStreamId) : IRequest<string?>;

internal class GetStreamGroupVideoStreamUrlHandler(IHttpContextAccessor httpContextAccessor, ILogger<GetStreamGroupVideoStreamUrl> logger, IRepositoryWrapper repository, IMapper mapper, ISettingsService settingsService, IPublisher publisher, ISender sender, IHubContext<StreamMasterHub, IStreamMasterHub> hubContext, IMemoryCache memoryCache) : BaseMediatorRequestHandler(logger, repository, mapper, settingsService, publisher, sender, hubContext, memoryCache), IRequestHandler<GetStreamGroupVideoStreamUrl, string?>
{
public async Task<string?> Handle(GetStreamGroupVideoStreamUrl request, CancellationToken cancellationToken = default)
{
if (string.IsNullOrEmpty(request.VideoStreamId))
{
return null;
}
VideoStreamDto? videoStream = await Repository.VideoStream.GetVideoStreamById(request.VideoStreamId).ConfigureAwait(false);
if (videoStream == null)
{
return null;
}

Setting setting = await GetSettingsAsync();

string encodedName = HttpUtility.HtmlEncode(videoStream.User_Tvg_name).Trim()
.Replace("/", "")
.Replace(" ", "_");

string encodedNumbers = 0.EncodeValues128(request.VideoStreamId, setting.ServerKey);
string url = httpContextAccessor.GetUrl();
string videoUrl = $"{url}/api/videostreams/stream/{encodedNumbers}/{encodedName}";

string jsonString = JsonSerializer.Serialize(videoUrl);

return jsonString;

}
}
2 changes: 1 addition & 1 deletion streammasterwebui/components/buttons/LinkButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export const LinkButton = ({ link }: { readonly link: string }) => {
title="Copy link to clipboard"
>
{/* Conditionally render the icon based on the copied state */}
<i className={copied ? 'pi pi-copy' : 'pi pi-bookmark-fill'} />
<i className={copied ? 'pi pi-copy' : 'pi pi-bookmark'} />
</a>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { LinkButton } from '@components/buttons/LinkButton';
import { useStreamGroupsGetStreamGroupVideoStreamUrlQuery, type VideoStreamDto } from '@lib/iptvApi';
import { skipToken } from '@reduxjs/toolkit/query';
import { memo, useEffect } from 'react';

interface VideoStreamCopyLinkDialogProperties {
readonly iconFilled?: boolean | undefined;
readonly onClose?: () => void;
readonly value?: VideoStreamDto | undefined;
}

const VideoStreamCopyLinkDialog = ({ iconFilled, onClose, value }: VideoStreamCopyLinkDialogProperties) => {
const url = useStreamGroupsGetStreamGroupVideoStreamUrlQuery(value?.id ?? skipToken);

useEffect(() => {
if (!url.isLoading) {
console.log(url);
}
}, [url]);

return <LinkButton link={url.data ?? ''} />;
};

VideoStreamCopyLinkDialog.displayName = 'VideoStreamCopyLinkDialog';

export default memo(VideoStreamCopyLinkDialog);
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import VideoStreamSetTimeShiftsDialog from '@components/videoStream/VideoStreamS
import DataSelector from '@components/dataSelector/DataSelector';
import AutoSetChannelNumbers from '@components/videoStream/AutoSetChannelNumbers';
import VideoStreamAddDialog from '@components/videoStream/VideoStreamAddDialog';
import VideoStreamCopyLinkDialog from '@components/videoStream/VideoStreamCopyLinkDialog';
import VideoStreamDeleteDialog from '@components/videoStream/VideoStreamDeleteDialog';
import VideoStreamEditDialog from '@components/videoStream/VideoStreamEditDialog';
import VideoStreamResetLogoDialog from '@components/videoStream/VideoStreamResetLogoDialog';
Expand Down Expand Up @@ -74,6 +75,7 @@ const ChannelGroupVideoStreamDataSelector = ({ enableEdit: propsEnableEdit, id,
const targetActionBodyTemplate = useCallback(
(data: VideoStreamDto) => (
<div className="flex p-0 justify-content-end align-items-center">
<VideoStreamCopyLinkDialog value={data} />
<VideoStreamSetTimeShiftDialog iconFilled={false} value={data} />
<VideoStreamResetLogoDialog value={data} />
<VideoStreamSetLogoFromEPGDialog value={data} />
Expand Down
10 changes: 10 additions & 0 deletions streammasterwebui/lib/iptvApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,13 @@ const injectedRtkApi = api
query: (queryArg) => ({ url: `/api/streamgroups/updatestreamgroup`, method: 'PATCH', body: queryArg }),
invalidatesTags: ['StreamGroups']
}),
streamGroupsGetStreamGroupVideoStreamUrl: build.query<
StreamGroupsGetStreamGroupVideoStreamUrlApiResponse,
StreamGroupsGetStreamGroupVideoStreamUrlApiArg
>({
query: (queryArg) => ({ url: `/api/streamgroups/getstreamgroupvideostreamurl`, params: { VideoStreamId: queryArg } }),
providesTags: ['StreamGroups']
}),
streamGroupVideoStreamsGetStreamGroupVideoStreamIds: build.query<
StreamGroupVideoStreamsGetStreamGroupVideoStreamIdsApiResponse,
StreamGroupVideoStreamsGetStreamGroupVideoStreamIdsApiArg
Expand Down Expand Up @@ -933,6 +940,8 @@ export type StreamGroupsGetPagedStreamGroupsApiArg = {
};
export type StreamGroupsUpdateStreamGroupApiResponse = unknown;
export type StreamGroupsUpdateStreamGroupApiArg = UpdateStreamGroupRequest;
export type StreamGroupsGetStreamGroupVideoStreamUrlApiResponse = /** status 200 */ string;
export type StreamGroupsGetStreamGroupVideoStreamUrlApiArg = string;
export type StreamGroupVideoStreamsGetStreamGroupVideoStreamIdsApiResponse = /** status 200 */ VideoStreamIsReadOnly[];
export type StreamGroupVideoStreamsGetStreamGroupVideoStreamIdsApiArg = number;
export type StreamGroupVideoStreamsGetPagedStreamGroupVideoStreamsApiResponse = /** status 200 */ PagedResponseOfVideoStreamDto;
Expand Down Expand Up @@ -2031,6 +2040,7 @@ export const {
useStreamGroupsGetStreamGroupM3UQuery,
useStreamGroupsGetPagedStreamGroupsQuery,
useStreamGroupsUpdateStreamGroupMutation,
useStreamGroupsGetStreamGroupVideoStreamUrlQuery,
useStreamGroupVideoStreamsGetStreamGroupVideoStreamIdsQuery,
useStreamGroupVideoStreamsGetPagedStreamGroupVideoStreamsQuery,
useStreamGroupVideoStreamsSetVideoStreamRanksMutation,
Expand Down

0 comments on commit 7b3e66f

Please sign in to comment.