1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-17 06:02:55 +08:00

Merge pull request #8 from angelaz1/jcramos/ctrl_shift_t

Ctrl+Shift+t Chat Shortcut
This commit is contained in:
Angela Zhang 2020-12-15 16:54:11 -06:00 committed by GitHub
commit 456c0751fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 7 deletions

View File

@ -33,6 +33,14 @@ namespace osu.Game.Online.Chat
private readonly BindableList<Channel> availableChannels = new BindableList<Channel>(); private readonly BindableList<Channel> availableChannels = new BindableList<Channel>();
private readonly BindableList<Channel> joinedChannels = new BindableList<Channel>(); private readonly BindableList<Channel> joinedChannels = new BindableList<Channel>();
// Keeps a list of closed channels. More recently closed channels appear at higher indeces
private readonly BindableList<Channel> closedChannels = new BindableList<Channel>();
// For efficiency purposes, this constant bounds the number of closed channels we store.
// This number is somewhat arbitrary; future developers are free to modify it.
// Must be a positive number.
private const int closed_channels_max_size = 50;
/// <summary> /// <summary>
/// The currently opened channel /// The currently opened channel
/// </summary> /// </summary>
@ -408,6 +416,16 @@ namespace osu.Game.Online.Chat
joinedChannels.Remove(channel); joinedChannels.Remove(channel);
// Prevent the closedChannel list from exceeding the max size
// by removing the oldest element
if (closedChannels.Count >= closed_channels_max_size)
{
closedChannels.RemoveAt(0);
}
// insert at the end of the closedChannels list
closedChannels.Insert(closedChannels.Count, channel);
if (channel.Joined.Value) if (channel.Joined.Value)
{ {
api.Queue(new LeaveChannelRequest(channel)); api.Queue(new LeaveChannelRequest(channel));
@ -415,6 +433,34 @@ namespace osu.Game.Online.Chat
} }
} }
/// <summary>
/// Opens the most recently closed channel that has not
/// already been reopened
/// Works similarly to reopening the last closed tab on a web browser.
/// </summary>
public void JoinLastClosedChannel()
{
if (closedChannels.Count <= 0)
{
return;
}
Channel lastClosedChannel = closedChannels.Last();
closedChannels.Remove(lastClosedChannel);
// If the user already joined the channel, try the next
// channel in the list
if (joinedChannels.IndexOf(lastClosedChannel) >= 0)
{
JoinLastClosedChannel();
}
else
{
JoinChannel(lastClosedChannel);
}
}
private long lastMessageId; private long lastMessageId;
private bool channelsInitialised; private bool channelsInitialised;

View File

@ -359,15 +359,27 @@ namespace osu.Game.Overlays
if (e.ControlPressed) if (e.ControlPressed)
{ {
switch (e.Key) if (e.ShiftPressed)
{ {
case Key.W: switch (e.Key)
channelManager.LeaveChannel(channelManager.CurrentChannel.Value); {
return true; case Key.T:
channelManager.JoinLastClosedChannel();
return true;
}
}
else
{
switch (e.Key)
{
case Key.W:
channelManager.LeaveChannel(channelManager.CurrentChannel.Value);
return true;
case Key.T: case Key.T:
ChannelTabControl.SelectChannelSelectorTab(); ChannelTabControl.SelectChannelSelectorTab();
return true; return true;
}
} }
} }