82 lines
2.9 KiB
C#
82 lines
2.9 KiB
C#
using System.Text;
|
|
using Windows.Media.Control;
|
|
|
|
Console.OutputEncoding = Encoding.UTF8;
|
|
Console.Title = "MusicBridge Agent";
|
|
|
|
Console.WriteLine("Подключаемся к медиаплееру Windows...");
|
|
|
|
var manager =
|
|
await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();
|
|
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
var session = manager.GetCurrentSession();
|
|
|
|
if (session is null)
|
|
{
|
|
Console.Clear();
|
|
Console.WriteLine("MUSICBRIDGE");
|
|
Console.WriteLine();
|
|
Console.WriteLine("Медиаплеер не найден.");
|
|
Console.WriteLine("Включи музыку в браузере или приложении.");
|
|
}
|
|
else
|
|
{
|
|
var media = await session.TryGetMediaPropertiesAsync();
|
|
var playback = session.GetPlaybackInfo();
|
|
var timeline = session.GetTimelineProperties();
|
|
var position = timeline.Position;
|
|
var updatedAt = timeline.LastUpdatedTime;
|
|
var now = DateTimeOffset.UtcNow;
|
|
|
|
if (playback.PlaybackStatus ==
|
|
GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing
|
|
&& updatedAt > DateTimeOffset.UnixEpoch
|
|
&& updatedAt <= now)
|
|
{
|
|
var elapsed = (now - updatedAt).TotalSeconds;
|
|
var rate = playback.PlaybackRate ?? 1.0;
|
|
|
|
position += TimeSpan.FromSeconds(elapsed * rate);
|
|
}
|
|
|
|
if (position < timeline.StartTime)
|
|
position = timeline.StartTime;
|
|
|
|
if (timeline.EndTime > timeline.StartTime
|
|
&& position > timeline.EndTime)
|
|
position = timeline.EndTime;
|
|
|
|
Console.Clear();
|
|
Console.WriteLine("MUSICBRIDGE");
|
|
Console.WriteLine();
|
|
Console.WriteLine($"Трек: {media.Title}");
|
|
Console.WriteLine($"Исполнитель: {media.Artist}");
|
|
Console.WriteLine($"Состояние: {playback.PlaybackStatus}");
|
|
Console.WriteLine($"Позиция: {FormatTime(position)}");
|
|
Console.WriteLine($"От плеера: {FormatTime(timeline.Position)}");
|
|
Console.WriteLine($"Обновлено: {updatedAt.ToLocalTime():HH:mm:ss}");
|
|
Console.WriteLine($"Конец трека: {FormatTime(timeline.EndTime)}");
|
|
Console.WriteLine($"Источник: {session.SourceAppUserModelId}");
|
|
}
|
|
|
|
Console.WriteLine();
|
|
Console.WriteLine("Выход: Ctrl + C");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Не удалось прочитать плеер: {ex.Message}");
|
|
}
|
|
|
|
await Task.Delay(1000);
|
|
}
|
|
|
|
static string FormatTime(TimeSpan time)
|
|
{
|
|
return time.TotalHours >= 1
|
|
? $"{(int)time.TotalHours}:{time.Minutes:00}:{time.Seconds:00}"
|
|
: $"{(int)time.TotalMinutes}:{time.Seconds:00}";
|
|
} |