278 lines
9.5 KiB
C#
278 lines
9.5 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Threading;
|
|
using System.Xml.Serialization;
|
|
using Microsoft.Win32;
|
|
|
|
namespace MyApp
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
ProgramData data = new ProgramData();
|
|
string fileName = "";
|
|
int currentlyPlaying = 0;
|
|
bool progresBarDragging = false;
|
|
EditWindow? editWindow = null;
|
|
public DispatcherTimer timer = new DispatcherTimer();
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
this.DataContext = this;
|
|
PlayListView.ItemsSource = data.PlayList;
|
|
|
|
timer.Interval = TimeSpan.FromMinutes(1);
|
|
timer.Tick += AutoUpdate;
|
|
}
|
|
|
|
private void AutoUpdate(object? sender, EventArgs e)
|
|
{
|
|
Save();
|
|
}
|
|
void Save()
|
|
{
|
|
if (fileName == "")
|
|
{
|
|
SaveFileDialog dialog = new SaveFileDialog();
|
|
dialog.FileName = "Save";
|
|
dialog.DefaultExt = "*.xml";
|
|
dialog.Filter = "Data|*.xml";
|
|
dialog.RestoreDirectory = true;
|
|
|
|
if (dialog.ShowDialog() == true)
|
|
{
|
|
fileName = dialog.FileName;
|
|
}
|
|
}
|
|
|
|
if (fileName != "")
|
|
{
|
|
using (StreamWriter sw = new StreamWriter(fileName))
|
|
{
|
|
XmlSerializer xml = new XmlSerializer(typeof(ProgramData));
|
|
xml.Serialize(sw, data);
|
|
}
|
|
}
|
|
|
|
}
|
|
void Load()
|
|
{
|
|
if (fileName == "") return;
|
|
using (StreamReader sr = new StreamReader(fileName))
|
|
{
|
|
XmlSerializer xml = new XmlSerializer(typeof(ProgramData));
|
|
|
|
if (xml.Deserialize(sr) is ProgramData m)
|
|
{
|
|
data = m;
|
|
PlayListView.ItemsSource = data.PlayList;
|
|
|
|
if(data.AutoSave) timer.Start();
|
|
else timer.Stop();
|
|
}
|
|
}
|
|
}
|
|
void Window_Closing(object sender, CancelEventArgs e)
|
|
{
|
|
if(fileName == "")
|
|
{
|
|
MessageBoxResult result = MessageBox.Show("Data was not saved.\n Do you want to save it?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning);
|
|
if (result == MessageBoxResult.Yes)
|
|
{
|
|
//e.Cancel = true;
|
|
Save();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Save();
|
|
}
|
|
}
|
|
private void PlayButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!MediaPlayer.IsPlaying())
|
|
{
|
|
PlayPouseImg.Source = new BitmapImage(new Uri("pack://application:,,,/assets/pause_icon.png"));
|
|
MediaPlayer.Play();
|
|
}
|
|
else
|
|
{
|
|
PlayPouseImg.Source = new BitmapImage(new Uri("pack://application:,,,/assets/play_icon.png"));
|
|
MediaPlayer.Pause();
|
|
}
|
|
}
|
|
private void Stop_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
MediaPlayer.Stop();
|
|
ProgresBar.Value = 0;
|
|
CurrentTime.Content = TimeSpan.FromSeconds(0).ToString(@"hh\:mm\:ss");
|
|
PlayPouseImg.Source = new BitmapImage(new Uri("pack://application:,,,/assets/play_icon.png"));
|
|
|
|
}
|
|
private void Rewind_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
data.PlayList[currentlyPlaying].IsPlaying = false;
|
|
currentlyPlaying--;
|
|
if (currentlyPlaying < 0)
|
|
{
|
|
currentlyPlaying = 0;
|
|
}
|
|
MediaPlayer.ChangeContent(data.PlayList[currentlyPlaying].FilePath);
|
|
data.PlayList[currentlyPlaying].IsPlaying = true;
|
|
}
|
|
private void Forward_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
data.PlayList[currentlyPlaying].IsPlaying = false;
|
|
currentlyPlaying++;
|
|
if (currentlyPlaying >= data.PlayList.Count)
|
|
{
|
|
currentlyPlaying = data.PlayList.Count - 1;
|
|
}
|
|
MediaPlayer.ChangeContent(data.PlayList[currentlyPlaying].FilePath);
|
|
data.PlayList[currentlyPlaying].IsPlaying = true;
|
|
}
|
|
private void ProgresBar_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
|
|
{
|
|
progresBarDragging = false;
|
|
MediaPlayer.ChangeTime(ProgresBar.Value);
|
|
}
|
|
private void ProgresBar_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
|
|
{
|
|
progresBarDragging = true;
|
|
}
|
|
private void PlayListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (PlayListView.SelectedItem is Media m)
|
|
{
|
|
data.PlayList[currentlyPlaying].IsPlaying = false;
|
|
m.IsPlaying = true;
|
|
MediaPlayer.ChangeContent(m.FilePath);
|
|
MediaPlayer.Play();
|
|
PlayPouseImg.Source = new BitmapImage(new Uri("pack://application:,,,/assets/pause_icon.png"));
|
|
currentlyPlaying = PlayListView.SelectedIndex;
|
|
}
|
|
}
|
|
private void PlayListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
if (PlayListView.SelectedItem is Media m)
|
|
{
|
|
data.SelectedItem = m;
|
|
if (editWindow != null)
|
|
{
|
|
if (data.SelectedItem == null) { editWindow.Close(); }
|
|
else { editWindow.DataContext = data.SelectedItem; }
|
|
}
|
|
}
|
|
}
|
|
private void MenuItem_Exit_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Application.Current.Shutdown();
|
|
}
|
|
private void MenuItem_Add_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var dialog = new OpenFileDialog();
|
|
//dialog.FileName = "Document"; // Default file name
|
|
dialog.DefaultExt = "*.*"; // Default file extension
|
|
dialog.Filter = "All files|*.*|Video media|*.mkv;*.wmv;*.mp4"; // Filter files by extension
|
|
dialog.Multiselect = true;
|
|
|
|
bool? result = dialog.ShowDialog();
|
|
if (result == true)
|
|
{
|
|
|
|
string[] files = dialog.FileNames;
|
|
foreach(string file in files)
|
|
{
|
|
string filename = file.Split("\\").Last();
|
|
data.PlayList.Add(new Media(filename, file));
|
|
}
|
|
|
|
}
|
|
}
|
|
private void MenuItem_Remove_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if(PlayListView.SelectedItem is Media m)
|
|
{
|
|
if(editWindow != null) { editWindow.Close(); }
|
|
data.PlayList.Remove(m);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Nothing was selected");
|
|
}
|
|
|
|
}
|
|
private void MenuItem_Settings_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
SettingsWindow? settingsWindow = new SettingsWindow(data);
|
|
settingsWindow.Owner = this;
|
|
settingsWindow.ShowDialog();
|
|
|
|
}
|
|
private void MenuItem_Save_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Save();
|
|
}
|
|
private void MenuItem_Edit_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if(!(PlayListView.SelectedItem is Media)) return;
|
|
if(editWindow == null)
|
|
{
|
|
editWindow = new EditWindow(data);
|
|
editWindow.Owner = this;
|
|
editWindow.Show();
|
|
}
|
|
if (!editWindow.IsLoaded)
|
|
{
|
|
editWindow = new EditWindow(data);
|
|
editWindow.Owner = this;
|
|
editWindow.Show();
|
|
}
|
|
}
|
|
private void MenuItem_Load_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
OpenFileDialog dialog = new OpenFileDialog();
|
|
dialog.FileName = "Save"; // Default file name
|
|
dialog.DefaultExt = "*.xml"; // Default file extension
|
|
dialog.Filter = "Data|*.xml"; // Filter files by extension
|
|
|
|
bool? result = dialog.ShowDialog();
|
|
if (result == true)
|
|
{
|
|
fileName = dialog.FileName;
|
|
Load();
|
|
}
|
|
}
|
|
private void MediaPlayer_OnTimeChage(object sender, double time)
|
|
{
|
|
if (!progresBarDragging)
|
|
{
|
|
ProgresBar.Value = time;
|
|
CurrentTime.Content = TimeSpan.FromSeconds(time).ToString(@"hh\:mm\:ss");
|
|
}
|
|
}
|
|
private void MediaPlayer_OnMediaLoad(object sender, bool loded, double totalTimeInMilS)
|
|
{
|
|
if (loded)
|
|
{
|
|
ProgresBar.Minimum = 0;
|
|
ProgresBar.Maximum = totalTimeInMilS;
|
|
TotalTime.Content = TimeSpan.FromSeconds(totalTimeInMilS).ToString(@"hh\:mm\:ss");
|
|
}
|
|
else
|
|
{
|
|
PlayPouseImg.Source = new BitmapImage(new Uri("pack://application:,,,/assets/play_icon.png"));
|
|
}
|
|
}
|
|
}
|
|
}
|