Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

YouTubeChat provider #215

Merged
merged 44 commits into from
Oct 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
2818d5b
Started
csharpfritz Sep 21, 2023
244736f
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 21, 2023
a5c4c55
Merged
csharpfritz Sep 21, 2023
58609e7
Fixed brackets
csharpfritz Sep 21, 2023
f627fc0
Added StartAsync to SocialMediaProviders - fixes #94
csharpfritz Sep 21, 2023
210a6b4
Merge branch 'feature_YoutubeChat' of github.com:csharpfritz/TagzApp …
csharpfritz Sep 21, 2023
ffe5d56
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 21, 2023
1d23047
WIP
csharpfritz Sep 25, 2023
4e81c1c
merged
csharpfritz Sep 26, 2023
a1b1c00
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 26, 2023
f220b05
WIP
csharpfritz Sep 26, 2023
e8d2a54
Merge branch 'main' into feature_YoutubeChat
csharpfritz Sep 26, 2023
42efa7c
Merge branch 'feature_YoutubeChat' of github.com:csharpfritz/TagzApp …
csharpfritz Sep 26, 2023
78c7604
Removed the YouTubeScraper
csharpfritz Sep 26, 2023
f5b7ca4
Fixed repeated emotes in TwitchChat
csharpfritz Sep 26, 2023
a09238e
Now retrieving YouTube events for the current user
csharpfritz Sep 26, 2023
21e270f
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 26, 2023
29b948e
Now fetching channel information
csharpfritz Sep 26, 2023
6a13365
Merge branch 'feature_YoutubeChat' of github.com:csharpfritz/TagzApp …
csharpfritz Sep 26, 2023
bb45e56
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 26, 2023
50a072b
Fixed missing implementation
csharpfritz Sep 26, 2023
dd0cd4e
Merge branch 'feature_YoutubeChat' of github.com:csharpfritz/TagzApp …
csharpfritz Sep 26, 2023
86921bc
Added StartAsync to SocialMediaProviders - fixes #94
csharpfritz Sep 21, 2023
0535866
Merge branch 'feature_YoutubeChat' of github.com:csharpfritz/TagzApp …
csharpfritz Sep 26, 2023
b4bcde0
Conditionally loading Google auth if configured
csharpfritz Sep 26, 2023
4c2c54d
Merge branch 'main' into feature_YoutubeChat
csharpfritz Sep 28, 2023
8ae6aef
WIP - connecting YouTubeChat
csharpfritz Sep 28, 2023
c286557
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 28, 2023
101b93f
YouTubeChat is working!
csharpfritz Sep 29, 2023
592aa96
Merge branch 'feature_YoutubeChat' of github.com:csharpfritz/TagzApp …
csharpfritz Sep 29, 2023
acc5aec
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 29, 2023
3ecad10
Cleaned up broken image links
csharpfritz Sep 29, 2023
e86a51c
Merge branch 'feature_YoutubeChat' of github.com:csharpfritz/TagzApp …
csharpfritz Sep 29, 2023
19dbee0
Applying formatting changes through GitHub Actions
github-actions[bot] Sep 29, 2023
2d0d949
Tuning YouTube request parms
csharpfritz Oct 1, 2023
3b8b6d0
Merge branch 'feature_YoutubeChat' of github.com:csharpfritz/TagzApp …
csharpfritz Oct 1, 2023
6750e4f
Improved startup database migration
csharpfritz Oct 3, 2023
8ec072c
Allow Sqlite database to be created
csharpfritz Oct 3, 2023
7c84a4f
Allow Sqlite database to be migrated
csharpfritz Oct 3, 2023
a408353
Fixed bad data handling issue on App Configuration
csharpfritz Oct 3, 2023
382f0ce
Completed saving YouTubeChat configuration
csharpfritz Oct 5, 2023
55d5a70
Applying formatting changes through GitHub Actions
github-actions[bot] Oct 5, 2023
ecea782
Loading and starting chat if config is already defined
csharpfritz Oct 5, 2023
4b5a04d
Fixed save operation
csharpfritz Oct 5, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions scripts/removeMigration
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/bash
dotnet ef migrations remove --context TagzApp.Storage.Postgres.TagzAppContext -p ../src/TagzApp.Storage.Postgres/ -s ../src/TagzApp.Web
3 changes: 3 additions & 0 deletions src/TagzApp.Common/IApplicationConfigurationRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@ namespace TagzApp.Common;
public interface IApplicationConfigurationRepository
{
Task SetValues(ApplicationConfiguration config);

Task SetValue(string key, string value);

}
10 changes: 9 additions & 1 deletion src/TagzApp.Common/IConfigureProvider.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace TagzApp.Common;

Expand All @@ -16,3 +17,10 @@ public interface IConfigureProvider
Task<IServiceCollection> RegisterServices(IServiceCollection services, CancellationToken cancellationToken = default);

}

public interface INeedConfiguration
{

void SetConfiguration(IConfiguration configuration);

}
6 changes: 6 additions & 0 deletions src/TagzApp.Common/ISocialMediaProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,10 @@ public interface ISocialMediaProvider
/// <returns></returns>
Task<IEnumerable<Content>> GetContentForHashtag(Hashtag tag, DateTimeOffset since);

/// <summary>
/// Start the provider
/// </summary>
/// <returns></returns>
Task StartAsync();

}
2 changes: 2 additions & 0 deletions src/TagzApp.Common/InMemoryContentMessaging.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ public void StartProviders(IEnumerable<ISocialMediaProvider> providers, Cancella

var lastQueryTime = DateTimeOffset.UtcNow.AddHours(-1);

await provider.StartAsync();

while (!cancellationToken.IsCancellationRequested)
{
if (!_Actions.Any())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,6 @@ public async Task<ProviderConfiguration> GetConfigurationSettingsAsync(string na
providerConfig.ConfigurationSettings!.Add(configSetting.Key, configSetting.Value ?? string.Empty);
}

return await Task.FromResult(providerConfig);
return providerConfig;
}
}
20 changes: 19 additions & 1 deletion src/TagzApp.Common/Models/ApplicationConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,16 @@ public class ApplicationConfiguration
private string _WaterfallHeaderMarkdown = "# Welcome to TagzApp";
private string _WaterfallHeaderCss = string.Empty;

private string _YouTubeChatConfig = "{}";

[Required, MaxLength(30)]
public string SiteName
{
get => _SiteName;
set
{
_SiteName = value;
ChangedSettings.RemoveAll(s => s.Id == SettingsKeys.SiteName);
ChangedSettings.Add(new Settings(SettingsKeys.SiteName, value));
}
}
Expand All @@ -30,6 +33,7 @@ public string WaterfallHeaderMarkdown
set
{
_WaterfallHeaderMarkdown = value;
ChangedSettings.RemoveAll(s => s.Id == SettingsKeys.WaterfallHeaderMarkdown);
ChangedSettings.Add(new Settings(SettingsKeys.WaterfallHeaderMarkdown, value));
}
}
Expand All @@ -41,18 +45,31 @@ public string WaterfallHeaderCss
set
{
_WaterfallHeaderCss = value;
ChangedSettings.RemoveAll(s => s.Id == SettingsKeys.WaterfallHeaderCss);
ChangedSettings.Add(new Settings(SettingsKeys.WaterfallHeaderCss, value));
}
}

public string YouTubeChatConfiguration
{
get { return _YouTubeChatConfig; }
set
{
_YouTubeChatConfig = value;
ChangedSettings.RemoveAll(s => s.Id == SettingsKeys.YouTubeChatConfiguration);
ChangedSettings.Add(new Settings(SettingsKeys.YouTubeChatConfiguration, value));
}
}

public static implicit operator Dictionary<string, string?>(ApplicationConfiguration config)
{

return new Dictionary<string, string?>
{
{ SettingsKeys.SiteName, config.SiteName },
{ SettingsKeys.WaterfallHeaderMarkdown, config.WaterfallHeaderMarkdown },
{ SettingsKeys.WaterfallHeaderCss, config.WaterfallHeaderCss }
{ SettingsKeys.WaterfallHeaderCss, config.WaterfallHeaderCss },
{ SettingsKeys.YouTubeChatConfiguration, config.YouTubeChatConfiguration }
};

}
Expand All @@ -68,6 +85,7 @@ private class SettingsKeys
public const string SiteName = "ApplicationConfiguration:SiteName";
public const string WaterfallHeaderMarkdown = "ApplicationConfiguration:WaterfallHeaderMarkdown";
public const string WaterfallHeaderCss = "ApplicationConfiguration:WaterfallHeaderCss";
public const string YouTubeChatConfiguration = "ApplicationConfiguration:YouTubeChatConfiguration";

}

Expand Down
6 changes: 1 addition & 5 deletions src/TagzApp.Common/Models/ProviderConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@ public class ProviderConfiguration
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public Dictionary<string, string>? ConfigurationSettings { get; set; }
public Dictionary<string, string>? ConfigurationSettings { get; set; } = new(StringComparer.OrdinalIgnoreCase);
public bool Activated { get; set; }

public ProviderConfiguration()
{
ConfigurationSettings = new Dictionary<string, string>();
}
}
6 changes: 5 additions & 1 deletion src/TagzApp.Communication/BaseProviderManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,15 @@ private async Task ConfigureProviders(IEnumerable<IConfigureProvider> configurat

foreach (var provider in configurationProviders)
{
if (provider is INeedConfiguration)
{
((INeedConfiguration)provider).SetConfiguration(_Configuration);
}
await provider.RegisterServices(_Services);
}

_Services.AddPolicies(_Configuration);

_Services.AddSingleton<IConfiguration>(_Configuration);
var sp = _Services.BuildServiceProvider();
socialMediaProviders.AddRange(sp.GetServices<ISocialMediaProvider>());
Providers = socialMediaProviders;
Expand Down
5 changes: 5 additions & 0 deletions src/TagzApp.Providers.Blazot/BlazotProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,9 @@ public async Task<IEnumerable<Content>> GetContentForHashtag(Hashtag tag, DateTi

return _ContentConverter.ConvertToContent(transmissions, tag);
}

public Task StartAsync()
{
return Task.CompletedTask;
}
}
191 changes: 98 additions & 93 deletions src/TagzApp.Providers.Mastodon/MastodonProvider.cs

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions src/TagzApp.Providers.TwitchChat/ChatClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,12 @@ internal static List<Emote> IdentifyEmotes(string msg)
foreach (var emote in emotesRaw)
{
var parts = emote.Split(":");
var positions = parts[1].Split("-");
emotes.Add(new Emote(int.Parse(positions[0]), int.Parse(positions[1]) - int.Parse(positions[0]) + 1, $"https://static-cdn.jtvnw.net/emoticons/v2/{parts[0]}/static/light/2.0"));
var entries = parts[1].Split(",");
foreach (var entry in entries)
{
var positions = entry.Split("-");
emotes.Add(new Emote(int.Parse(positions[0]), int.Parse(positions[1]) - int.Parse(positions[0]) + 1, $"https://static-cdn.jtvnw.net/emoticons/v2/{parts[0]}/static/light/2.0"));
}
}
}

Expand Down
7 changes: 6 additions & 1 deletion src/TagzApp.Providers.TwitchChat/TwitchChatProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ public TwitchChatProvider(TwitchChatConfiguration settings, ILogger<TwitchChatPr
_Settings = settings;
_Logger = logger;
_ProfileRepository = new TwitchProfileRepository(_Settings.ClientId, _Settings.ClientSecret, clientFactory.CreateClient("TwitchProfile"));
ListenForMessages();
}

internal TwitchChatProvider(IOptions<TwitchChatConfiguration> settings, ILogger<TwitchChatProvider> logger, IChatClient chatClient)
Expand Down Expand Up @@ -122,4 +121,10 @@ public void Dispose()
Dispose(disposing: true);
GC.SuppressFinalize(this);
}

public Task StartAsync()
{
ListenForMessages();
return Task.CompletedTask;
}
}
Loading