mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-08-17 00:31:42 +02:00
Configuration
Core
Bridge
Controls
Handling
Notification
Screenshot
FormNotificationBase.Designer.cs
FormNotificationBase.cs
FormNotificationMain.Designer.cs
FormNotificationMain.cs
FormNotificationTweet.Designer.cs
FormNotificationTweet.cs
SoundNotification.cs
TweetNotification.cs
Other
Utils
FormBrowser.Designer.cs
FormBrowser.cs
FormBrowser.resx
TrayIcon.Designer.cs
TrayIcon.cs
Plugins
Properties
Resources
Updates
bld
lib
subprocess
tests
.gitignore
LICENSE.md
Program.cs
README.md
Reporter.cs
TweetDuck.csproj
TweetDuck.sln
TweetDuck.sln.DotSettings
_postbuild.bat
packages.config
142 lines
4.5 KiB
C#
142 lines
4.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using TweetDuck.Plugins;
|
|
using System.Windows.Forms;
|
|
using TweetDuck.Core.Utils;
|
|
|
|
namespace TweetDuck.Core.Notification{
|
|
sealed partial class FormNotificationTweet : FormNotificationMain{
|
|
private const int NonIntrusiveIdleLimit = 30;
|
|
private const int TrimMinimum = 32;
|
|
|
|
private bool IsCursorOverNotificationArea => new Rectangle(PrimaryLocation, Size).Contains(Cursor.Position);
|
|
|
|
private readonly Queue<TweetNotification> tweetQueue = new Queue<TweetNotification>(4);
|
|
private bool needsTrim;
|
|
|
|
public FormNotificationTweet(FormBrowser owner, PluginManager pluginManager) : base(owner, pluginManager, true){
|
|
InitializeComponent();
|
|
|
|
Program.UserConfig.MuteToggled += Config_MuteToggled;
|
|
Disposed += (sender, args) => Program.UserConfig.MuteToggled -= Config_MuteToggled;
|
|
|
|
if (Program.UserConfig.MuteNotifications){
|
|
PauseNotification();
|
|
}
|
|
}
|
|
|
|
private void FormNotificationTweet_FormClosing(object sender, FormClosingEventArgs e){
|
|
if (e.CloseReason == CloseReason.UserClosing){
|
|
tweetQueue.Clear(); // already canceled
|
|
TrimQueue();
|
|
}
|
|
}
|
|
|
|
private void TrimQueue(){
|
|
if (needsTrim){
|
|
tweetQueue.TrimExcess();
|
|
needsTrim = false;
|
|
}
|
|
}
|
|
|
|
// event handlers
|
|
|
|
private void Config_MuteToggled(object sender, EventArgs e){
|
|
if (Program.UserConfig.MuteNotifications){
|
|
PauseNotification();
|
|
}
|
|
else{
|
|
ResumeNotification();
|
|
}
|
|
}
|
|
|
|
private void timerCursorCheck_Tick(object sender, EventArgs e){
|
|
if (!IsCursorOverNotificationArea){
|
|
ResumeNotification();
|
|
timerCursorCheck.Stop();
|
|
}
|
|
}
|
|
|
|
private void timerIdlePauseCheck_Tick(object sender, EventArgs e){
|
|
if (NativeMethods.GetIdleSeconds() < Program.UserConfig.NotificationIdlePauseSeconds){
|
|
ResumeNotification();
|
|
timerIdlePauseCheck.Stop();
|
|
}
|
|
}
|
|
|
|
// notification methods
|
|
|
|
public override void ShowNotification(TweetNotification notification){
|
|
if (IsPaused){
|
|
tweetQueue.Enqueue(notification);
|
|
}
|
|
else{
|
|
tweetQueue.Enqueue(notification);
|
|
UpdateTitle();
|
|
|
|
if (totalTime == 0){
|
|
LoadNextNotification();
|
|
}
|
|
}
|
|
|
|
needsTrim |= tweetQueue.Count >= TrimMinimum;
|
|
}
|
|
|
|
public override void FinishCurrentNotification(){
|
|
if (tweetQueue.Count > 0){
|
|
LoadNextNotification();
|
|
}
|
|
else{
|
|
HideNotification(true);
|
|
TrimQueue();
|
|
}
|
|
}
|
|
|
|
public override void ResumeNotification(){
|
|
bool wasPaused = IsPaused;
|
|
base.ResumeNotification();
|
|
|
|
if (wasPaused && !IsPaused && !pausedDuringNotification && tweetQueue.Count > 0){
|
|
LoadNextNotification();
|
|
}
|
|
}
|
|
|
|
private void LoadNextNotification(){
|
|
if (!IsNotificationVisible){
|
|
if (Program.UserConfig.NotificationNonIntrusiveMode && IsCursorOverNotificationArea && NativeMethods.GetIdleSeconds() < NonIntrusiveIdleLimit){
|
|
if (!timerCursorCheck.Enabled){
|
|
PauseNotification();
|
|
timerCursorCheck.Start();
|
|
}
|
|
|
|
return;
|
|
}
|
|
else if (Program.UserConfig.NotificationIdlePauseSeconds > 0 && NativeMethods.GetIdleSeconds() >= Program.UserConfig.NotificationIdlePauseSeconds){
|
|
if (!timerIdlePauseCheck.Enabled){
|
|
PauseNotification();
|
|
timerIdlePauseCheck.Start();
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
LoadTweet(tweetQueue.Dequeue());
|
|
}
|
|
|
|
protected override void UpdateTitle(){
|
|
base.UpdateTitle();
|
|
|
|
if (tweetQueue.Count > 0){
|
|
Text = Text+" ("+tweetQueue.Count+" more left)";
|
|
}
|
|
}
|
|
|
|
protected override void OnNotificationReady(){
|
|
UpdateTitle();
|
|
base.OnNotificationReady();
|
|
}
|
|
}
|
|
}
|