-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPropContents.cs
More file actions
88 lines (83 loc) · 3.49 KB
/
PropContents.cs
File metadata and controls
88 lines (83 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using Reactive.Bindings;
using System.Reactive.Linq;
using Windows.Media.Control;
namespace PlayLook
{
/// <summary>
/// プロパティの内容を管理するクラス
/// </summary>
public class PropContents
{
public ReactiveProperty<string> Title { get; private set; }
public ReactiveProperty<string> Artist { get; private set; }
public ReactiveProperty<string> Album { get; private set; }
public ReactiveProperty<GlobalSystemMediaTransportControlsSessionPlaybackStatus> Status { get; private set; }
public ReactiveProperty<string> Current { get; }
public ReactiveProperty<string> Icon { get; }
private string defaltString = "No media playing";
/// <summary>
/// コンストラクタ
/// </summary>
public PropContents()
{
Title = new ReactiveProperty<string>("");
Artist = new ReactiveProperty<string>("Unknown");
Album = new ReactiveProperty<string>("");
Status = new ReactiveProperty<GlobalSystemMediaTransportControlsSessionPlaybackStatus>(GlobalSystemMediaTransportControlsSessionPlaybackStatus.Closed);
Current = new ReactiveProperty<string>("No media playing");
Icon = new ReactiveProperty<string>("VolumeOff");
Current = Title.CombineLatest(Artist, Album, Status, GenerateCurrentStatus).ToReactiveProperty<string>();
}
/// <summary>
/// PropViewに表示する情報を更新する
/// </summary>
/// <param name="title"></param>
/// <param name="artist"></param>
/// <param name="album"></param>
/// <param name="status"></param>
/// <returns></returns>
private string GenerateCurrentStatus(string title, string artist, string album, GlobalSystemMediaTransportControlsSessionPlaybackStatus status)
{
switch (status)
{
case GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing:
Icon.Value = "Play";
return SetCurrentStatus(title, artist, album);
case GlobalSystemMediaTransportControlsSessionPlaybackStatus.Paused:
Icon.Value = "Pause";
return SetCurrentStatus(title, artist, album);
case GlobalSystemMediaTransportControlsSessionPlaybackStatus.Stopped:
Icon.Value = "Stop";
return SetCurrentStatus(title, artist, album);
default:
Icon.Value = "VolumeOff";
return defaltString;
}
}
/// <summary>
/// PropViewに表示するテキストを生成する
/// </summary>
/// <param name="title"></param>
/// <param name="artist"></param>
/// <param name="album"></param>
/// <returns></returns>
private string SetCurrentStatus(string title, string artist, string album)
{
string currentStatus = "";
if ( !( artist == "Unknown" || Settings.Default.OnlyTitle ) )
{
currentStatus += $"{artist} - ";
}
if (title != "")
{
currentStatus += $"{title}";
}
else { return defaltString; }
if ( !( album == "" || Settings.Default.OnlyTitle) )
{
currentStatus += $" (from {album})";
}
return currentStatus;
}
}
}