private void Player_SongChanged(object sender, EventArgs e)
        {
            if (!InFullscreen)
            {
                Mouse.OverrideCursor = null;
            }
            CurrentTrack        = Player.Metadata;
            Title               = $"{string.Join(", ", CurrentTrack.Artists)} - {CurrentTrack.Title} | {WindowName}";
            TitleLabel.Text     = CurrentTrack.Title;
            ArtistLabel.Text    = string.Join(", ", CurrentTrack.Artists) == "" ? Properties.Resources.MAINWINDOW_NOARTIST : string.Join(", ", CurrentTrack.Artists);
            ProgressBar.Maximum = Player.CurrentBackend.TotalTime.TotalSeconds;
            if (Player.CurrentBackend.TotalTime.TotalSeconds != 0)
            {
                ProgressIndicator2.Text = Player.CurrentBackend.TotalTime.ToString(@"mm\:ss");
            }
            else
            {
                ProgressIndicator2.Text = "∞";
            }
            SetIntegrations(PlaybackStatus.Playing);
            UpdatePlayButtonState();
            if (CurrentTrack.CoverArt is null)
            {
                CoverArtBox.Source = null;
                SetCoverArtVisibility(false);
            }
            else
            {
                CoverArtBox.Source = BitmapFrame.Create(new MemoryStream(CurrentTrack.CoverArt), BitmapCreateOptions.None, BitmapCacheOption.None);
                SetCoverArtVisibility(true);
            }
            ProgressTimer.Start();
            if (PauseAfterCurrentTrack && !Player.Paused)
            {
                PlayPauseMethod();
                PauseAfterCurrentTrack = false;
            }

            LoggingHandler.Log("Changing tracks!");
        }
        public Pomodoro(IUserInterface ui, ISettings settings)
        {
            Duration = settings.PomodoroDuration.ToString();

            Begin = new DelegateCommand(
                canExecute: _ => !_inProgress,
                execute: _ =>
            {
                _inProgress = true;
                Begin.RaiseCanExecuteChanged();

                Progress.Start();
            });

            Progress = new ProgressTimer(ui, settings.PomodoroDuration,
                                         onComplete: () =>
            {
                _inProgress = false;
                Begin.RaiseCanExecuteChanged();

                ui.TransitionToPage <Break>();
            });
        }
Beispiel #3
0
 public override void Start(object sender)
 {
     if (sender is Ellipse)
     {
         Ellipse     pointShape = (Ellipse)sender;
         HandlePoint point      = CanvasHolder.GetHandlePointByShape(pointShape);
         if (point is AnchorPoint)
         {
             CanvasHolder.SelectHandlePoint(point);
             moveAnchor = true;
             ProgressTimer.Start();
         }
     }
     else if (sender is Shape)
     {
         Shape       shape         = (Shape)sender;
         ShapeHolder shapeHolder   = CanvasHolder.GetShapeHolderByShape(shape);
         AnchorPoint anchorPoint   = shapeHolder.AnchorPoint;
         Point       mousePosition = Mouse.GetPosition(CanvasHolder.Canvas);
         if (anchorPoint == null)
         {
             anchorPoint             = new AnchorPoint(mousePosition, shapeHolder);
             shapeHolder.AnchorPoint = anchorPoint;
             CanvasHolder.SelectHandlePoint(anchorPoint);
             moveAnchor = true;
             ProgressTimer.Start();
         }
         else
         {
             position    = mousePosition;
             oldDistance = getDistance(anchorPoint.Position, mousePosition);
             moveAnchor  = false;
             ProgressTimer.Start();
         }
     }
 }
Beispiel #4
0
        protected override void WndProc(ref Message m)
        {
            //Debug.WriteLine(m);

            switch (m.Msg)
            {
            case 0x0201:     // WM_LBUTTONDOWN
            case 0x0202:     // WM_LBUTTONUP
            case 0x0207:     // WM_MBUTTONDOWN
            case 0x0208:     // WM_MBUTTONUP
            case 0x020b:     // WM_XBUTTONDOWN
            case 0x020c:     // WM_XBUTTONUP
            case 0x020A:     // WM_MOUSEWHEEL
            case 0x0100:     // WM_KEYDOWN
            case 0x0101:     // WM_KEYUP
            case 0x0104:     // WM_SYSKEYDOWN
            case 0x0105:     // WM_SYSKEYUP
            case 0x319:      // WM_APPCOMMAND
                if (mp.WindowHandle != IntPtr.Zero)
                {
                    Native.SendMessage(mp.WindowHandle, m.Msg, m.WParam, m.LParam);
                }
                break;

            case 0x0200:     // WM_MOUSEMOVE
            {
                Point pos = PointToClient(Cursor.Position);
                mp.command($"mouse {pos.X} {pos.Y}");
                if (CursorHelp.IsPosDifferent(LastCursorPosChanged))
                {
                    CursorHelp.Show();
                }
            }
            break;

            case 0x2a3:                  // WM_MOUSELEAVE
                mp.command("mouse 1 1"); // osc won't always auto hide
                break;

            case 0x203:     // Native.WM.LBUTTONDBLCLK
            {
                Point pos = PointToClient(Cursor.Position);
                mp.command($"mouse {pos.X} {pos.Y} 0 double");
            }
            break;

            case 0x02E0:     // WM_DPICHANGED
                if (!WasShown)
                {
                    break;
                }
                var r2 = Marshal.PtrToStructure <Native.RECT>(m.LParam);
                Native.SetWindowPos(Handle, IntPtr.Zero, r2.Left, r2.Top, r2.Width, r2.Height, 0);
                break;

            case 0x0214:     // WM_SIZING
                var rc = Marshal.PtrToStructure <Native.RECT>(m.LParam);
                var r  = rc;
                NativeHelp.SubtractWindowBorders(Handle, ref r);
                int  c_w = r.Right - r.Left, c_h = r.Bottom - r.Top;
                Size s = mp.VideoSize;
                if (s == Size.Empty)
                {
                    s = new Size(16, 9);
                }
                float aspect    = s.Width / (float)s.Height;
                int   d_w       = Convert.ToInt32(c_h * aspect - c_w);
                int   d_h       = Convert.ToInt32(c_w / aspect - c_h);
                int[] d_corners = { d_w, d_h, -d_w, -d_h };
                int[] corners   = { rc.Left, rc.Top, rc.Right, rc.Bottom };
                int   corner    = NativeHelp.GetResizeBorder(m.WParam.ToInt32());
                if (corner >= 0)
                {
                    corners[corner] -= d_corners[corner];
                }
                Marshal.StructureToPtr <Native.RECT>(new Native.RECT(corners[0], corners[1], corners[2], corners[3]), m.LParam, false);
                m.Result = new IntPtr(1);
                return;

            case 0x004A:     // WM_COPYDATA
                var      copyData = (Native.COPYDATASTRUCT)m.GetLParam(typeof(Native.COPYDATASTRUCT));
                string[] files    = copyData.lpData.Split('\n');
                string   mode     = files[0];
                files = files.Skip(1).ToArray();

                switch (mode)
                {
                case "single":
                    mp.Load(files, true, Control.ModifierKeys.HasFlag(Keys.Control));
                    break;

                case "queue":
                    foreach (string file in files)
                    {
                        mp.commandv("loadfile", file, "append");
                    }
                    break;
                }

                Activate();
                return;
            }

            if (m.Msg == TaskbarButtonCreatedMessage && mp.TaskbarProgress)
            {
                Taskbar = new Taskbar(Handle);
                ProgressTimer.Start();
            }

            base.WndProc(ref m);
        }
Beispiel #5
0
        protected override void WndProc(ref Message m)
        {
            //Debug.WriteLine(m);

            switch (m.Msg)
            {
            case 0x201:     // WM_LBUTTONDOWN
            case 0x202:     // WM_LBUTTONUP
            case 0x207:     // WM_MBUTTONDOWN
            case 0x208:     // WM_MBUTTONUP
            case 0x20b:     // WM_XBUTTONDOWN
            case 0x20c:     // WM_XBUTTONUP
            case 0x20A:     // WM_MOUSEWHEEL
            case 0x100:     // WM_KEYDOWN
            case 0x101:     // WM_KEYUP
            case 0x104:     // WM_SYSKEYDOWN
            case 0x105:     // WM_SYSKEYUP
            {
                bool skip = m.Msg == 0x100 && LastAppCommand != 0 &&
                            (Environment.TickCount - LastAppCommand) < 1000;

                if (core.WindowHandle != IntPtr.Zero && !skip)
                {
                    m.Result = WinAPI.SendMessage(core.WindowHandle, m.Msg, m.WParam, m.LParam);
                }
            }
            break;

            case 0x319:     // WM_APPCOMMAND
            {
                string value = mpvHelp.WM_APPCOMMAND_to_mpv_key((int)(m.LParam.ToInt64() >> 16 & ~0xf000));

                if (value != null)
                {
                    core.command("keypress " + value);
                    m.Result       = new IntPtr(1);
                    LastAppCommand = Environment.TickCount;
                    return;
                }
            }
            break;

            case 0x0200:     // WM_MOUSEMOVE
                if (Environment.TickCount - LastCycleFullscreen > 500)
                {
                    Point pos = PointToClient(Cursor.Position);
                    core.command($"mouse {pos.X} {pos.Y}");
                }

                if (CursorHelp.IsPosDifferent(LastCursorPosition))
                {
                    CursorHelp.Show();
                }
                break;

            case 0x2a3:     // WM_MOUSELEAVE
                //osc won't auto hide after mouse left window in borderless mode
                core.command($"mouse {ClientSize.Width / 2} {ClientSize.Height / 3}");
                break;

            case 0x203:     // WM_LBUTTONDBLCLK
            {
                Point pos = PointToClient(Cursor.Position);
                core.command($"mouse {pos.X} {pos.Y} 0 double");
            }
            break;

            case 0x02E0:     // WM_DPICHANGED
            {
                if (!WasShown())
                {
                    break;
                }

                WinAPI.RECT rect = Marshal.PtrToStructure <WinAPI.RECT>(m.LParam);
                WinAPI.SetWindowPos(Handle, IntPtr.Zero, rect.Left, rect.Top, rect.Width, rect.Height, 0);
            }
            break;

            case 0x0214:     // WM_SIZING
            {
                var rc = Marshal.PtrToStructure <WinAPI.RECT>(m.LParam);
                var r  = rc;
                NativeHelp.SubtractWindowBorders(Handle, ref r);
                int  c_w = r.Right - r.Left, c_h = r.Bottom - r.Top;
                Size s = core.VideoSize;

                if (s == Size.Empty)
                {
                    s = new Size(16, 9);
                }

                float aspect = s.Width / (float)s.Height;
                int   d_w    = (int)(c_h * aspect - c_w);
                int   d_h    = (int)(c_w / aspect - c_h);

                Debug.WriteLine(d_w);
                Debug.WriteLine(d_h);

                int d_w2 = (int)(c_h * aspect - c_w);
                int d_h2 = (int)(c_w / aspect - c_h);

                Debug.WriteLine(d_w2);
                Debug.WriteLine(d_h2);

                int[] d_corners = { d_w, d_h, -d_w, -d_h };
                int[] corners   = { rc.Left, rc.Top, rc.Right, rc.Bottom };
                int   corner    = NativeHelp.GetResizeBorder(m.WParam.ToInt32());

                if (corner >= 0)
                {
                    corners[corner] -= d_corners[corner];
                }

                Marshal.StructureToPtr <WinAPI.RECT>(new WinAPI.RECT(corners[0], corners[1], corners[2], corners[3]), m.LParam, false);
                m.Result = new IntPtr(1);
            }
                return;

            case 0x004A:     // WM_COPYDATA
            {
                var      copyData = (WinAPI.COPYDATASTRUCT)m.GetLParam(typeof(WinAPI.COPYDATASTRUCT));
                string[] files    = copyData.lpData.Split('\n');
                string   mode     = files[0];
                files = files.Skip(1).ToArray();

                switch (mode)
                {
                case "single":
                    core.LoadFiles(files, true, Control.ModifierKeys.HasFlag(Keys.Control));
                    break;

                case "queue":
                    foreach (string file in files)
                    {
                        core.commandv("loadfile", file, "append");
                    }
                    break;
                }

                Activate();
            }
                return;
            }

            if (m.Msg == TaskbarButtonCreatedMessage && core.TaskbarProgress)
            {
                Taskbar = new Taskbar(Handle);
                ProgressTimer.Start();
            }

            // beep sound when closed using taskbar due to exception
            if (!IsDisposed)
            {
                base.WndProc(ref m);
            }
        }
Beispiel #6
0
 public override void Finish()
 {
     ProgressTimer.Stop();
 }
Beispiel #7
0
 public Break(IUserInterface ui, ISettings settings)
 {
     Progress = new ProgressTimer(ui, settings.BreakDuration, () => ui.TransitionToPage <Pomodoro>());
     Progress.Start();
 }
Beispiel #8
0
 public override void Finish()
 {
     ProgressTimer.Stop();
     moveAnchor = false;
 }
Beispiel #9
0
 public override void Finish()
 {
     ProgressTimer.Stop();
     CanvasHolder.UnselectHandlePoint();
 }
 public void SetTimer(ProgressTimer value)
 {
     this.timer = value;
 }
Beispiel #11
0
 public void StartTimer()
 {
     OnlyUpdateTime = true;
     ProgressTimer.Start();
 }
Beispiel #12
0
        private static async Task <ConcurrentDictionary <string, FileInfo> > GetFileSystemEntriesAsync(
            FileInfo pathFileInfo,
            ConcurrentBag <Task> tasks,
            IProgress <FileSystemEnumerationProgress> progress,
            IReadOnlyList <string> directoryExclusions = null,
            ConcurrentDictionary <string, FileInfo> fileSystemEntries = null,
            bool continueOnUnauthorizedAccessExceptions = true,
            bool continueOnPathTooLongExceptions        = true)
        {
            #region Validation
            if (directoryExclusions == null)
            {
                directoryExclusions = new List <string>();
            }
            if (fileSystemEntries == null)
            {
                fileSystemEntries = new ConcurrentDictionary <string, FileInfo>(StringComparer.OrdinalIgnoreCase);
            }
            if (pathFileInfo == null)
            {
                throw new ArgumentNullException("pathFileInfo");
            }
            #endregion

            try {
                await Task.Run(() => {
                    try {
                        lock (TasksCreatedCompletedLockObject) {
                            TasksCreated++;
                        }

                        if ((progress != null) && (fileSystemEntries.Count > 0))
                        {
                            lock (ProgressTimer) {
                                int progressTimerTotalSeconds = (int)ProgressTimer.Elapsed.TotalSeconds;
                                if (progressTimerTotalSeconds == 30)
                                {
                                    ProgressTimer.Restart();
                                    progress.Report(new FileSystemEnumerationProgress()
                                    {
                                        FileSystemEntries = fileSystemEntries.Count, CurrentFilePath = pathFileInfo.FullName
                                    });
                                }
                            }
                        }

                        if (!pathFileInfo.Attributes.HasFlag(FileAttributes.Directory))
                        {
                            throw new ArgumentException($"Path is not a directory: {pathFileInfo.FullName}");
                        }

                        foreach (var fileSystemEntryPath in Directory.EnumerateFileSystemEntries(
                                     pathFileInfo.FullName, "*", SearchOption.TopDirectoryOnly))
                        {
                            FileInfo childFileInfo = null;

                            childFileInfo        = new FileInfo(fileSystemEntryPath);
                            FileInfo placeHolder = null;
                            fileSystemEntries.AddOrUpdate(childFileInfo.FullName, childFileInfo, (TKey, TOldValue) => placeHolder);

                            if (childFileInfo.Attributes.HasFlag(FileAttributes.Directory) &&
                                !childFileInfo.Attributes.HasFlag(FileAttributes.ReparsePoint))
                            {
                                if (directoryExclusions.Any(x => childFileInfo.FullName.IndexOf(x, StringComparison.OrdinalIgnoreCase) > -1))
                                {
                                    continue;
                                }

                                tasks.Add(Task.Run(async() => {
                                    await GetFileSystemEntriesAsync(
                                        pathFileInfo: childFileInfo,
                                        tasks: tasks,
                                        progress: progress,
                                        directoryExclusions: directoryExclusions,
                                        fileSystemEntries: fileSystemEntries,
                                        continueOnUnauthorizedAccessExceptions: continueOnUnauthorizedAccessExceptions,
                                        continueOnPathTooLongExceptions: continueOnPathTooLongExceptions);
                                }));
                            } // if (childFileInfo.Attributes.HasFlag()
                        }     // foreach (var fileSystemEntryPath in Directory.EnumerateFileSystemEntries(
                    }
                    finally {
                        lock (TasksCreatedCompletedLockObject) {
                            TasksCompleted++;
                        }
                    }
                }); // await Task.Run(() => {
            }
            catch (UnauthorizedAccessException e) {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"[ThreadId: {Thread.CurrentThread.ManagedThreadId}] {Extensions.CurrentMethodName()} pathFileInfo.FullName: {pathFileInfo.FullName} UnauthorizedAccessException: {e.Message ?? "NULL"}");
                Console.ResetColor();
                if (!continueOnUnauthorizedAccessExceptions)
                {
                    throw;
                }
            }
            catch (PathTooLongException e) {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"[ThreadId: {Thread.CurrentThread.ManagedThreadId}] {Extensions.CurrentMethodName()} pathFileInfo.FullName: {pathFileInfo.FullName} PathTooLongException: {e.Message ?? "NULL"}");
                Console.ResetColor();
                if (!continueOnPathTooLongExceptions)
                {
                    throw;
                }
            }
            catch (AggregateException ae) {
                Debug.WriteLine($"InnerException count: {ae.Flatten().InnerExceptions.Count}");
            }
            catch (Exception e) {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"[ThreadId: {Thread.CurrentThread.ManagedThreadId}] {Extensions.CurrentMethodName()} path: {pathFileInfo.FullName} child path: {pathFileInfo.FullName} Exception: {e.VerboseExceptionString()}");
                Console.ResetColor();
                throw;
            }

            return(fileSystemEntries);
        }
Beispiel #13
0
 void Start()
 {
     progressTimer = FindObjectOfType <ProgressTimer>();
 }
Beispiel #14
0
 private void StopTimers()
 {
     RefreshTimer?.Stop();
     ProgressTimer?.Stop();
     RefreshProgress = 0;
 }
Beispiel #15
0
 private void ProgressBar_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
 {
     isDragging = true;
     ProgressTimer.Stop();
 }