using System;
using System.IO;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using Microsoft.Surface;
using Microsoft.Surface.Presentation;
using Microsoft.Surface.Presentation.Controls;
using System.Collections.Generic;
using System.Windows.Media.Imaging;
using System.Xml.Serialization;
using System.Reflection;
namespace FingersDance.Control.ListVideo
{
public partial class UserControlListVideo
{
//Creation d'un Event pour Chaque Item Video
public event EventHandler EH_ItemVideo1_ContactDown;
public event EventHandler EH_ItemVideo2_ContactDown;
public string path = "";
static Dictionary<string, ListVideoItem> _Videos = new Dictionary<string, ListVideoItem>();
public UserControlListVideo()
{
this.InitializeComponent();
LoadList();
UpdateList();
// Insert code required on object creation below this point.
}
//Event appelé lors de la selection d'un Item dans la Video List
private void ItemVideo_ContactTapGesture(object sender, Microsoft.Surface.Presentation.ContactEventArgs e)
{
path = ((CustomListBoxItem)sender).Path;
if (EH_ItemVideo1_ContactDown != null)
EH_ItemVideo1_ContactDown(this, new EventArgs());
}
private void ItemVideo_Click(object sender, System.Windows.RoutedEventArgs e)
{
path = ((CustomListBoxItem)sender).Path;
if (EH_ItemVideo1_ContactDown != null)
EH_ItemVideo1_ContactDown(this, new EventArgs());
}
private void ButtonImporter_ContactDown(object sender, Microsoft.Surface.Presentation.ContactEventArgs e)
{
AddVideoToList();
}
private void ButtonImporter_Click(object sender, System.Windows.RoutedEventArgs e)
{
AddVideoToList();
}
private void AddVideoToList()
{
try
{
string[] Files = new string[1];
if (System.IO.Directory.Exists(PathImporter.Text))
Files = System.IO.Directory.GetFiles(PathImporter.Text);
else
if (System.IO.File.Exists(PathImporter.Text))
Files[0] = PathImporter.Text;
if (Files != null)
{
foreach (string elt in Files)
if (elt.ToLower().EndsWith(".wmv")) // .....
try
{
ListVideoItem newItem = new ListVideoItem();
Image item = getFirstPreview(elt);
if (item != null && !_Videos.ContainsKey(elt))
{
newItem.Name = elt.Split('\\')[elt.Split('\\').Length - 1].Split('.')[0];
newItem.Path = elt;
newItem.Preview = elt.Replace(".wmv", ".jpg");
_Videos.Add(newItem.Path, newItem);
}
}
catch (Exception ex) { }
UpdateList();
SaveList();
}
}
catch (Exception) { }
}
Image getFirstPreview(string path)
{
MediaPlayer _player = new MediaPlayer();
_player.Open(new Uri(path));
_player.Play();
_player.Position = new TimeSpan(0, 0, 5);
System.Threading.Thread.Sleep(800);
RenderTargetBitmap target = new RenderTargetBitmap(100, 100, 1 / 100, 1 / 100, PixelFormats.Pbgra32);
DrawingVisual visual = new DrawingVisual();
DrawingContext context = visual.RenderOpen();
Rect frameRect = new Rect();
frameRect.Height = target.Height;
frameRect.Width = target.Width;
context.DrawVideo(_player, frameRect);
context.Close();
target.Render(visual);
Image _prev = new Image();
_prev.Source = BitmapFrame.Create(target).GetAsFrozen() as BitmapFrame;
_player.Stop();
return _prev;
}
private void RefreshButton_ContactDown(object sender, Microsoft.Surface.Presentation.ContactEventArgs e)
{
LoadList();
UpdateList();
}
private void RefreshButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
LoadList();
UpdateList();
}
void LoadList()
{
_Videos.Clear();
StreamReader reader = null;
FileInfo assemblyPath = new FileInfo(Assembly.GetExecutingAssembly().Location);
DirectoryInfo info = assemblyPath.Directory;
try
{
reader = new StreamReader(info.FullName.ToString() + "\\Resources\\videos.xml");
XmlSerializer serializer = new XmlSerializer(typeof(List<ListVideoItem>));
List<ListVideoItem> temp = (List<ListVideoItem>)serializer.Deserialize(reader);
foreach (ListVideoItem elt in temp)
if (!elt.Preview.Equals("") && !_Videos.ContainsKey(elt.Path))
_Videos.Add(elt.Path, elt);
reader.Close();
}
catch (Exception e)
{
if (reader != null)
reader.Close();
}
}
void SaveList()
{
StreamWriter writter = null;
FileInfo assemblyPath = new FileInfo(Assembly.GetExecutingAssembly().Location);
DirectoryInfo info = assemblyPath.Directory;
try
{
writter = new StreamWriter(info.FullName.ToString() + "\\Resources\\videos.xml");
XmlSerializer serializer = new XmlSerializer(typeof(List<ListVideoItem>));
List<ListVideoItem> temp = new List<ListVideoItem>();
foreach (KeyValuePair<string, ListVideoItem> elt in _Videos)
temp.Add(elt.Value);
serializer.Serialize(writter, temp);
writter.Close();
}
catch (Exception e)
{
if (writter != null)
writter.Close();
}
}
void UpdateList()
{
stackPanel.Children.Clear();
foreach (KeyValuePair<string, ListVideoItem> elt in _Videos)
{
try
{
if (!elt.Value.Preview.Equals(""))
{
MediaElement item = new MediaElement();
item.Source = new Uri(elt.Value.Preview);
item.Width = 100;
item.Height = 100;
CustomListBoxItem Contener = new CustomListBoxItem();
Contener.Content = item;
Contener.Path = elt.Value.Path;
Contener.Name = elt.Value.Name;
Contener.ContactTapGesture += ItemVideo_ContactTapGesture;
stackPanel.Children.Add(Contener);
}
}
catch (Exception e)
{ }
}
}
}
}