MainPage.xaml.cs (103772B)
1 // Copyright (c) Microsoft. All rights reserved. 2 3 using Windows.UI.Xaml; 4 using Windows.UI.Xaml.Controls; 5 using Windows.UI.Xaml.Controls.Primitives; 6 using Windows.UI.Xaml.Input; 7 using Windows.UI.Xaml.Media; 8 using Windows.UI.Xaml.Navigation; 9 using System; 10 using System.Collections.Generic; 11 using Windows.Phone.UI.Input; 12 using Windows.UI.Xaml.Media.Animation; 13 using System.Collections.ObjectModel; 14 using Windows.UI.ViewManagement; 15 using Windows.Storage; 16 using Windows.Media.Playback; 17 using System.Threading.Tasks; 18 using TagLib; 19 using System.IO; 20 using Windows.UI.Xaml.Media.Imaging; 21 using System.IO.Compression; 22 using System.Runtime.InteropServices.WindowsRuntime; 23 using Windows.ApplicationModel.DataTransfer; 24 using Windows.Foundation; 25 using System.Linq; 26 using Windows.Storage.FileProperties; 27 using Coding4Fun.Toolkit.Controls; 28 using Windows.ApplicationModel.Activation; 29 using Windows.Storage.Streams; 30 using Windows.Storage.Pickers; 31 using Windows.Storage.AccessCache; 32 using Windows.Phone.Devices.Notification; 33 using System.Runtime.InteropServices; 34 using Windows.Media; 35 using System.Text; 36 37 namespace File360 38 { 39 public sealed partial class MainPage : Page, IFolderPickerContinuable 40 { 41 42 43 44 //[DllImport("KernelBase.dll")] 45 //public static extern void KernelDll(); 46 #region Variables 47 48 public bool GridType = true; 49 public ItemsControl musicItemsControlGrid = null; 50 51 #region SettingsVaribles 52 ApplicationDataContainer settings = ApplicationData.Current.LocalSettings; 53 StorageFolder folder; 54 BitmapImage niy = new BitmapImage(new Uri("ms-appx:///Assets/IMG-20150528-WA0003.jpg", UriKind.Absolute)); 55 ImageSource musicCoverArt = null; 56 IReadOnlyList<IStorageItem> Items; 57 58 ObservableCollection<sdlist> sd = new ObservableCollection<sdlist>(); 59 ObservableCollection<MusicList> music = new ObservableCollection<MusicList>(); 60 ObservableCollection<PictureList> picture = new ObservableCollection<PictureList>(); 61 ObservableCollection<VideoList> video = new ObservableCollection<VideoList>(); 62 63 public IStorageFolder CurrentFolder = null; 64 ScrollViewer gridScrollViewer; 65 TextBlock txtBlockRe = null; 66 ItemsControl itemsControlGrid = null; 67 List<IStorageItem> SelectedItems = new List<IStorageItem>(); 68 bool InZipRoot = false; 69 70 #region LibraryVariables 71 public bool IsVideoLibraryOpen = false; 72 public bool IsPictureLibraryOpen = false; 73 public bool IsMusicLibraryOpen = false; 74 #endregion 75 76 bool singleTap = true; 77 78 App app = (App)Application.Current; 79 bool IsSDLoading = true; 80 bool IsPhoneLoading = true; 81 private bool IsMediaOpen = false; 82 private DispatcherTimer musicDispatcher = new DispatcherTimer(); 83 84 #region FileOperationVariables 85 bool IS_FILE_MOVE = false; 86 #endregion 87 88 #region MusicVariables 89 SystemMediaTransportControls systemControls; 90 string title = String.Empty; 91 string artist = String.Empty; 92 #endregion 93 94 95 #endregion 96 97 public MainPage() 98 { 99 100 this.InitializeComponent(); 101 SDGridView.ItemsSource = sd; 102 SideMenu.InitializeDrawerLayout(); 103 Addresser.InitializeComponent(); 104 #region MusicPlayerInitialization 105 106 107 // Hook up app to system transport controls. 108 109 systemControls = SystemMediaTransportControls.GetForCurrentView(); 110 111 systemControls.ButtonPressed += async (sender, args) => 112 { 113 switch (args.Button) 114 115 { 116 117 case SystemMediaTransportControlsButton.Play: 118 119 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => 120 121 { 122 mediaPlayer.Play(); 123 124 }); 125 126 break; 127 128 case SystemMediaTransportControlsButton.Pause: 129 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => 130 131 { 132 133 mediaPlayer.Pause(); 134 135 }); 136 137 break; 138 139 default: 140 141 break; 142 143 } 144 }; 145 146 // Register to handle the following system transpot control buttons. 147 148 systemControls.IsPlayEnabled = true; 149 150 systemControls.IsPauseEnabled = true; 151 #endregion 152 musicCoverArt = niy; 153 #region SettingsSerializer 154 if (settings.Values.Count == 0) 155 { 156 settings.Values["userName"] = "User"; 157 app.UserName = (string)settings.Values["userName"]; 158 settings.Values["itemType"] = 1; 159 GridType = (int)settings.Values["itemType"] == 1; 160 161 settings.Values["musicPlayer"] = "1"; 162 settings.Values["picturesPlayer"] = "1"; 163 settings.Values["videoPlayer"] = "1"; 164 settings.Values["ebookViewer"] = "1"; 165 settings.Values["musThumbnail"] = "0"; 166 settings.Values["vidThumbnail"] = "0"; 167 settings.Values["picThumbnail"] = "0"; 168 } 169 else 170 { 171 app.UserName = (string)settings.Values["userName"]; 172 GridType = (int)settings.Values["itemType"] == 1; 173 } 174 ChangeTemplate(); 175 #endregion 176 #region Orientation 177 Window.Current.SizeChanged += Current_SizeChanged; 178 #endregion 179 #region MediaPlayerDispatcherInitialization 180 musicDispatcher.Interval = TimeSpan.FromMilliseconds(1000); 181 182 mediaPlayer.MediaFailed += async (s, t) => 183 { 184 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate 185 { 186 UpdateMusic("no media", "", TimeSpan.FromSeconds(0)); 187 musicSlider.Value = 0; 188 playPause.Content = "5"; 189 currentDuration.Text = "--:--"; 190 mediaDuration.Text = "--:--"; 191 if (musicDispatcher.IsEnabled) 192 musicDispatcher.Stop(); 193 }); 194 }; 195 196 mediaPlayer.MediaEnded += async (s, t) => 197 { 198 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate 199 { 200 UpdateMusic("no media", "", mediaPlayer.NaturalDuration.TimeSpan); 201 musicSlider.Value = 0; 202 playPause.Content = "5"; 203 currentDuration.Text = "--:--"; 204 mediaDuration.Text = "--:--"; 205 musicDispatcher.Stop(); 206 }); 207 }; 208 musicDispatcher.Tick += (s, t) => 209 { 210 musicSlider.Value = mediaPlayer.Position.TotalSeconds; 211 currentDuration.Text = mediaPlayer.Position.Minutes + ":" + mediaPlayer.Position.Seconds; 212 213 }; 214 #endregion 215 #region CriticalStartup 216 HideStatusBar(); 217 Loaded += MainPageLoaded; 218 HardwareButtons.BackPressed += HardwareButtons_BackPressed; 219 #endregion 220 } 221 222 223 #region FileOperationsNotifier 224 225 private void PasteBarSelectionChanged(object sender, SelectionChangedEventArgs e) 226 { 227 if (PasteFlipView.SelectedIndex == 0) 228 IS_FILE_MOVE = false; 229 else IS_FILE_MOVE = true; 230 } 231 #endregion 232 233 #region MainEvents 234 private void MainPageLoaded(object sender, RoutedEventArgs e) 235 { 236 SDLoad.Begin(); 237 PhoneLoad.Begin(); 238 GetSDRoot(); 239 gridScrollViewer = SDGridView.GetFirstLogicalChildByType<ScrollViewer>(false); 240 gridScrollViewer.VerticalScrollMode = ScrollMode.Auto; 241 LoadMemoryData(); 242 //SettingsTab.Height = Window.Current.Bounds.Width * 2 / 3; 243 PasteFlipView.SelectionChanged += PasteBarSelectionChanged; 244 AppearancePanel.Begin(); 245 SubFrame.ContentTransitions = new TransitionCollection { new PaneThemeTransition { Edge = EdgeTransitionLocation.Bottom } }; 246 247 } 248 private async void HideStatusBar() 249 { 250 StatusBar statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView(); 251 252 // Hide the status bar 253 await statusBar.HideAsync(); 254 } 255 public void OpenDialog() 256 { 257 if (!this.DialogBox.IsOpen) 258 { 259 this.DialogBox.IsOpen = true; 260 this.DialogBox.LeftButtonHandler += ExitApplicaton; 261 } 262 } 263 #region Navigaion Methods 264 protected override void OnNavigatedTo(NavigationEventArgs e) 265 { 266 267 } 268 #endregion 269 270 #region BackButtonHandler 271 public async void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) 272 { 273 e.Handled = true; 274 if (PictureDisplayer.Visibility == Visibility.Visible) 275 { 276 PictureFlipView.Items.Clear(); 277 PictureDisplayer.Visibility = Visibility.Collapsed; 278 } 279 else if (FileMoveDialog.Visibility == Visibility.Visible) 280 { 281 CloseDialog(2); 282 } 283 else if (SubFrameGrid.Visibility == Visibility.Visible) 284 { 285 CloseDialog(0); 286 } 287 else if (IsMediaOpen) 288 { 289 MediaOpenRev.Begin(); 290 IsMediaOpen = false; 291 } 292 293 else if (SortMenu.Visibility == Visibility.Visible) 294 { 295 SortMenu.Visibility = Visibility.Collapsed; 296 } 297 else if (WebBrowser.Visibility == Visibility.Visible) 298 { 299 WebBrowser.Visibility = Visibility.Collapsed; 300 } 301 else if (this.SideMenu.IsDrawerOpen == true) 302 { 303 this.SideMenu.CloseDrawer(); 304 } 305 else if (SDGridView.SelectionMode == ListViewSelectionMode.Multiple) 306 { 307 UnselectAll(); 308 } 309 else if (InZipRoot) 310 { 311 GetFilesAndFolder(CurrentFolder); 312 InZipRoot = false; 313 } 314 else if (!this.Addresser.Root) 315 { 316 try 317 { 318 int curFoldCharNm = CurrentFolder.Path.LastIndexOf(CurrentFolder.Name); 319 StorageFolder sf = await StorageFolder.GetFolderFromPathAsync(CurrentFolder.Path.Remove(curFoldCharNm)); 320 this.Addresser.RemoveLast(); 321 GetFilesAndFolder(sf); 322 } 323 catch { } 324 } 325 else 326 { 327 OpenDialog(); 328 } 329 } 330 #endregion 331 332 #endregion 333 #region Music 334 #region MusicEvents 335 //private void MusicSegmentChanged(object sender, RangeBaseValueChangedEventArgs e) 336 //{ 337 // // if (!(mediaPlayer.CurrentState == MediaPlayerState.Closed)) 338 // // { 339 // // if (mediaPlayer.CanSeek) 340 // // { 341 // // mediaPlayer.Position = TimeSpan.FromSeconds(e.NewValue); 342 // // } 343 // // } 344 // // else 345 // // { 346 // // musicSlider.Value = 0; 347 // // } 348 //} 349 internal async void PlayMedia(IStorageFile selectedItem) 350 { 351 352 mediaPlayer.Source = new Uri(selectedItem.Path); 353 354 mediaPlayer.MediaOpened += async (s, t) => 355 { 356 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, delegate 357 { 358 musicSlider.Maximum = mediaPlayer.NaturalDuration.TimeSpan.TotalSeconds; 359 playPause.Content = "8"; 360 UpdateMusic(title, artist, mediaPlayer.NaturalDuration.TimeSpan); 361 musicDispatcher.Start(); 362 }); 363 }; 364 mediaPlayer.Play(); 365 366 #region TagLib AlbumArt 367 Tag tags = null; 368 var fileStream = await selectedItem.OpenStreamForReadAsync(); 369 try 370 { 371 var tagFile = TagLib.File.Create(new StreamFileAbstraction(selectedItem.Name, fileStream, fileStream)); 372 if (selectedItem.FileType == ".mp3" || selectedItem.FileType == ".wma") 373 tags = tagFile.GetTag(TagTypes.Id3v2); 374 else if (selectedItem.FileType == ".m4a") 375 tags = tagFile.GetTag(TagLib.TagTypes.MovieId); 376 try 377 { 378 title = tags.Title; 379 } 380 catch (NullReferenceException) 381 { 382 title = selectedItem.Name; 383 } 384 try 385 { 386 artist = String.Concat(tags.Performers); 387 } 388 catch (NullReferenceException) 389 { 390 artist = String.Empty; 391 } 392 if (tags.Pictures != null) 393 { 394 try 395 { 396 MemoryStream ms = new MemoryStream(tags.Pictures[0].Data.Data); 397 WriteableBitmap wm = null; 398 var wwmV = wm.FromStream(ms, Windows.Graphics.Imaging.BitmapPixelFormat.Unknown); 399 await wwmV.ContinueWith(delegate 400 { 401 #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed 402 Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => 403 #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed 404 { 405 ms.Dispose(); 406 ImageBrush im = new ImageBrush(); 407 im.ImageSource = wwmV.Result; 408 im.Stretch = Stretch.UniformToFill; 409 musicArt.Visibility = Visibility.Collapsed; 410 imageContainerMedia.Background = im; 411 }); 412 }); 413 } 414 415 catch (IndexOutOfRangeException) 416 { 417 imageContainerMedia.Background = (SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]; 418 musicArt.Visibility = Visibility.Visible; 419 } 420 catch (UnauthorizedAccessException) 421 { 422 } 423 #endregion 424 } 425 else 426 { 427 imageContainerMedia.Background = (SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]; 428 musicArt.Visibility = Visibility.Visible; 429 } 430 } 431 catch 432 { 433 imageContainerMedia.Background = (SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]; 434 musicArt.Visibility = Visibility.Visible; 435 } 436 MusicStatusUpdate(); 437 } 438 439 private void UpdateMusic(string songName, string songArtist, TimeSpan duration) 440 { 441 try 442 { 443 SongName.Text = songName; 444 SongArtist.Text = songArtist; 445 mediaDuration.Text = duration.Minutes + ":" + duration.Seconds; 446 } 447 catch 448 { 449 SongName.Text = "no media"; 450 SongArtist.Text = ""; 451 mediaDuration.Text = "--:--"; 452 } 453 } 454 #endregion 455 #region MusicMenu 456 public void MusicMenuClick() 457 { 458 if (IsMediaOpen) 459 { 460 MediaOpenRev.Begin(); 461 IsMediaOpen = false; 462 //OpenMusic.Content = "u"; 463 return; 464 } 465 else if (!IsMediaOpen) 466 { 467 //BitmapImage bm = new BitmapImage(new Uri("ms-appx:///SampleData/SampleDataSource1/SampleDataSource1_Files/image01.png", UriKind.RelativeOrAbsolute)); 468 //var wb = await WinRTXamlToolkit.Imaging.WriteableBitmapFromBitmapImageExtension.FromBitmapImage(bm); 469 //ColorSampler cs = new ColorSampler(); 470 //WriteableBitmap wd = wb; 471 //MusicDock.Background = new SolidColorBrush(cs.GetPixel(wd)); 472 MediaOpen.Begin(); 473 IsMediaOpen = true; 474 //OpenMusic.Content = "d"; 475 return; 476 } 477 } 478 479 private void PlayCurrent(object sender, RoutedEventArgs e) 480 { 481 if (mediaPlayer.CurrentState == MediaElementState.Playing) 482 { 483 mediaPlayer.Pause(); 484 playPause.Content = "5"; 485 DurationBlink.Begin(); 486 } 487 else if (mediaPlayer.CurrentState == MediaElementState.Paused) 488 { 489 mediaPlayer.Play(); 490 playPause.Content = "8"; 491 DurationBlink.Stop(); 492 } 493 494 else if (mediaPlayer.CurrentState == MediaElementState.Stopped) 495 { 496 KnownFolders.MusicLibrary.GetFilesAsync().Completed += (es,st)=> 497 { 498 mediaPlayer.Source = new Uri(es.GetResults().First().Path); 499 mediaPlayer.Play(); 500 playPause.Content = "8"; 501 }; 502 503 } 504 505 } 506 #endregion 507 #endregion 508 509 #region MediaMaipulations 510 private void mediaFragManipDelta(object sender, ManipulationDeltaRoutedEventArgs e) 511 { 512 if (e.Cumulative.Translation.X > 0) 513 MediaFragment.RenderTransform = new CompositeTransform { TranslateX = e.Cumulative.Translation.X }; 514 else if (e.Delta.Translation.X < -25) 515 { 516 MediaOpen.Begin(); 517 IsMediaOpen = true; 518 } 519 } 520 521 private void mediaFragManipCompleted(object sender, ManipulationCompletedRoutedEventArgs e) 522 { 523 var transform = (CompositeTransform)MediaFragment.RenderTransform; 524 if (transform == null) return; 525 var up = transform.TranslateX; 526 527 var snapLimit = ActualHeight / 1.1; 528 529 // Get init position of _listFragment 530 var initialPosition = ActualHeight; 531 532 // If current left coordinate is smaller than snap limit, close drawer 533 if (Math.Abs(initialPosition - up) < snapLimit) 534 { 535 MediaOpenRev.Begin(); 536 IsMediaOpen = false; 537 } 538 else 539 { 540 MediaOpen.Begin(); 541 IsMediaOpen = true; 542 } 543 } 544 #endregion 545 546 #region NotifyHelpers 547 public void NotifyUser(string info) 548 { 549 statusMsg.Text = info; 550 } 551 552 public void AI(string header, string msg) 553 { 554 aiText.Text = header; 555 aiSubText.Text = msg; 556 aiBorder.Visibility = Visibility.Visible; 557 DispatcherTimer dt = new DispatcherTimer(); 558 dt.Interval = new TimeSpan(0, 0, 4); 559 dt.Tick += delegate 560 { 561 aiBorder.Visibility = Visibility.Collapsed; 562 dt.Stop(); 563 }; 564 dt.Start(); 565 } 566 #endregion 567 #region Pictures 568 569 570 public void DisplayPhoto(IStorageFile selectedItem) 571 { 572 FlipViewItem fvi = new FlipViewItem(); 573 ScrollViewer scv = new ScrollViewer(); 574 Image im = new Image(); 575 BitmapImage bi = new BitmapImage(new Uri(selectedItem.Path)); 576 im.Source = bi; 577 scv.Content = im; 578 fvi.Content = scv; 579 PictureFlipView.Items.Add(fvi); 580 PictureDisplayer.Visibility = Visibility.Visible; 581 } 582 583 #endregion 584 585 586 #region MainGrid 587 public void CloseDrawer() 588 { 589 SideMenu.CloseDrawer(); 590 } 591 592 593 594 private void ChangeTemplate() 595 { 596 if (!GridType) 597 { 598 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; 599 SDGridView.ItemTemplate = (DataTemplate)Resources["ListFoldersView"]; 600 gridList.ContentText = "list"; 601 gridList.ImageText = "b"; 602 settings.Values["itemType"] = 0; 603 GridType = false; 604 } 605 else 606 { 607 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 608 SDGridView.ItemTemplate = (DataTemplate)Resources["GridFoldersView"]; 609 gridList.ContentText = "grid"; 610 gridList.ImageText = "N"; 611 settings.Values["itemType"] = 1; 612 GridType = true; 613 } 614 } 615 616 private async void GetSDRoot() 617 { 618 619 if (ApplicationData.Current.LocalSettings.Values.ContainsKey("FolderTokenSettingsKey")) 620 { 621 string token = (string)ApplicationData.Current.LocalSettings.Values["FolderTokenSettingsKey"]; 622 // if we do, use it to get the StorageFolder instance 623 folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token); 624 this.Addresser.Reset(); 625 try 626 { 627 GetFilesAndFolder(folder); 628 RootFolder.Text = "3"; 629 IsMusicLibraryOpen = false; 630 IsVideoLibraryOpen = false; 631 IsPictureLibraryOpen = false; 632 } 633 catch (Exception ex) 634 { 635 ShowStatus(ex.Message); 636 //AI("no sdcard is detected", 2); 637 } 638 } 639 } 640 641 642 #region UserFolderCommunication 643 644 645 private void Reset() 646 { 647 SDGridView.ItemsSource = null; 648 sd.Clear(); 649 } 650 651 652 #endregion 653 #region OrientationHelpers 654 private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) 655 { 656 //var b = Window.Current.Bounds; 657 VisualStateManager.GoToState(this, "Portrait", false); 658 } 659 public bool IsVertical() 660 { 661 if (Window.Current.Bounds.Height > Window.Current.Bounds.Width) return true; 662 else return false; 663 } 664 #endregion 665 #endregion 666 667 668 669 #region ExitApplication 670 671 private void ExitApplicaton(object sender, RoutedEventArgs e) 672 { 673 Application.Current.Exit(); 674 } 675 #endregion 676 #region FileLister 677 public async void GetFilesAndFolder(IStorageFolder anyFolder) 678 { 679 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, async delegate 680 { 681 ShowStatus(anyFolder.Path); 682 if (anyFolder != null) 683 { 684 Items = null; 685 sd.Clear(); 686 SDGridView.ItemsSource = null; 687 CurrentFolder = anyFolder; 688 Items = await anyFolder.GetItemsAsync(); 689 if (Items.Count == 0) 690 { 691 CurrentFolder = anyFolder; 692 headerText.Text = anyFolder.Name; 693 sd.Clear(); 694 switch (anyFolder.Path) 695 { 696 case @"D:\Documents": 697 //display documents missing sad face 698 break; 699 case @"D:\Music": 700 //display music missing sad face 701 break; 702 case @"D:\Videos": 703 //display videos missing sad face 704 break; 705 case @"D:\Pictures": 706 //display pictures missing sad face 707 break; 708 default: 709 EmptyFolderStack.Visibility = Visibility.Visible; 710 //default options for other empty folders 711 break; 712 713 } 714 return; 715 } 716 //if (GridType) 717 // SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 718 //else SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; 719 else 720 { 721 EmptyFolderStack.Visibility = Visibility.Collapsed; 722 foreach (IStorageItem Data in Items) 723 { 724 if (Data.IsOfType(StorageItemTypes.Folder)) 725 { 726 IStorageFolder Folder; 727 Folder = (IStorageFolder)Data; 728 //IReadOnlyList<IStorageItem> item = await Folder.GetItemsAsync(); 729 headerText.Text = anyFolder.Name; 730 if (CurrentFolder.Path == @"D:\") 731 { 732 if (Folder.Name == "Videos") sd.Add(new sdlist(Folder.Name, "o", "")); 733 else if (Folder.Name == "Pictures") sd.Add(new sdlist(Folder.Name, "f", "")); 734 else if (Folder.Name == "Music") sd.Add(new sdlist(Folder.Name, "g", "")); 735 else if (Folder.Name == "Downloads") sd.Add(new sdlist(Folder.Name, "e", "")); 736 else if (Folder.Name == "Documents") sd.Add(new sdlist(Folder.Name, "n", "")); 737 else sd.Add(new sdlist(Folder.Name, "h", "")); 738 } 739 else sd.Add(new sdlist(Folder.Name, "h", "")); 740 } 741 if (Data.IsOfType(StorageItemTypes.File)) 742 { 743 IStorageFile File = (IStorageFile)Data; 744 string fn = File.Name; 745 string fi = File.FileType; 746 #region FileTypes 747 if (fi == ".mp3") 748 { 749 if (((string)settings.Values["musThumbnail"] == "1")) 750 { 751 752 #region Mp3 753 754 //var fileStream = await File.OpenStreamForReadAsync(); 755 //var tagFile = TagLib.File.Create(new StreamFileAbstraction(File.Name, fileStream, fileStream)); 756 //var tags = tagFile.GetTag(TagTypes.Id3v2); 757 //try 758 //{ 759 // if (tags.Pictures != null) 760 // { 761 // MemoryStream ms = new MemoryStream(tags.Pictures[0].Data.Data); 762 // WriteableBitmap wm = null; 763 // WriteableBitmap wwm = await wm.FromStream(ms, Windows.Graphics.Imaging.BitmapPixelFormat.Unknown); 764 765 // ms.Dispose(); 766 // ImageBrush im = new ImageBrush(); 767 // im.ImageSource = wwm; 768 // im.Stretch = Stretch.UniformToFill; 769 // sd.Add(new sdlist(fn, im, "")); 770 // #endregion 771 // } 772 //} 773 //catch (IndexOutOfRangeException ex) 774 //{ 775 // BitmapImage bm = new BitmapImage(new Uri("ms-appx:///Assets/IMG-20150528-WA0003.jpg", UriKind.Absolute)); 776 // ImageBrush im = new ImageBrush(); 777 // im.ImageSource = bm; 778 // sd.Add(new sdlist(fn, im, "")); 779 //} 780 //catch (Exception ex) 781 //{ 782 // AI(ex.Message, 2); 783 //} 784 #endregion 785 } 786 else sd.Add(new sdlist(fn, "m")); 787 788 } 789 else if (fi == ".wma") 790 { 791 if (((string)settings.Values["musThumbnail"] == "1")) 792 { } 793 #region wma-work in progress 794 795 //var fileStream = await File.OpenStreamForReadAsync(); 796 //var tagFile = TagLib.File.Create(new StreamFileAbstraction(File.Name, fileStream, fileStream)); 797 //var tags = tagFile.GetTag(TagTypes.Id3v2); 798 //try 799 //{ 800 // if (tags.Pictures != null) 801 // { 802 // MemoryStream ms = new MemoryStream(tags.Pictures[0].Data.Data); 803 // WriteableBitmap wm = null; 804 // WriteableBitmap wwm = await wm.FromStream(ms, Windows.Graphics.Imaging.BitmapPixelFormat.Unknown); 805 806 // ms.Dispose(); 807 // ImageBrush im = new ImageBrush(); 808 // im.ImageSource = wwm; 809 // im.Stretch = Stretch.UniformToFill; 810 // sd.Add(new sdlist(fn, im, "")); 811 // #endregion 812 // } 813 //} 814 //catch (IndexOutOfRangeException ex) 815 //{ 816 // BitmapImage bm = new BitmapImage(new Uri("ms-appx:///Assets/IMG-20150528-WA0003.jpg", UriKind.Absolute)); 817 // ImageBrush im = new ImageBrush(); 818 // im.ImageSource = bm; 819 // sd.Add(new sdlist(fn, im, "")); 820 //} 821 //catch (Exception ex) 822 //{ 823 // AI(ex.Message, 2); 824 //} 825 #endregion 826 else sd.Add(new sdlist(fn, "m")); 827 828 } 829 else if (fi == ".docx") 830 { 831 sd.Add(new sdlist(fn, "k")); 832 833 } 834 else if (fi == ".png") 835 { 836 if (((string)settings.Values["picThumbnail"] == "1")) 837 await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); 838 else sd.Add(new sdlist(fn, "p")); 839 } 840 else if (fi == ".jpg") 841 { 842 if (((string)settings.Values["picThumbnail"] == "1")) 843 await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); 844 else sd.Add(new sdlist(fn, "p")); 845 } 846 else if (fi == ".mp4") 847 { 848 if (((string)settings.Values["vidThumbnail"] == "1")) 849 { 850 try 851 { 852 await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); 853 } 854 catch 855 { 856 sd.Add(new sdlist(fn, "v")); 857 } 858 } 859 else sd.Add(new sdlist(fn, "v")); 860 } 861 else if (fi == ".mov") 862 { 863 if (((string)settings.Values["vidThumbnail"] == "1")) 864 { 865 try 866 { 867 await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); 868 } 869 catch 870 { 871 sd.Add(new sdlist(fn, "v")); 872 } 873 } 874 else sd.Add(new sdlist(fn, "v")); 875 } 876 else if (fi == ".zip") 877 { 878 sd.Add(new sdlist(fn, "z")); 879 880 } 881 else if (fi == ".cs") 882 { 883 sd.Add(new sdlist(fn, "c")); 884 } 885 else if (fi == ".pdf") 886 { 887 sd.Add(new sdlist(fn, "b")); 888 } 889 else if (fi == ".vcf") 890 { 891 sd.Add(new sdlist(fn, "l")); 892 } 893 else if (fi == ".doc") 894 { 895 sd.Add(new sdlist(fn, "k")); 896 } 897 else if (fi == ".xlx") 898 { 899 sd.Add(new sdlist(fn, "j")); 900 } 901 else if (fi == ".xlsx") 902 { 903 sd.Add(new sdlist(fn, "j")); 904 } 905 else if (fi == ".7z") 906 { 907 sd.Add(new sdlist(fn, "7")); 908 } 909 else if (fi == ".xml") 910 { 911 sd.Add(new sdlist(fn, "x")); 912 } 913 else if (fi == ".txt") 914 { 915 sd.Add(new sdlist(fn, "a")); 916 } 917 else if (fi == ".rar") 918 { 919 sd.Add(new sdlist(fn, "r")); 920 } 921 else 922 { 923 sd.Add(new sdlist(fn, "i")); 924 925 } 926 #endregion 927 } 928 } 929 } 930 } 931 //else AI("This folder contains no items", 2); 932 SDGridView.ItemsSource = sd; 933 }); 934 } 935 936 #endregion 937 #region LateralMenu 938 private void Menu_Click(object sender, RoutedEventArgs e) 939 { 940 if (SideMenu.IsDrawerOpen == false) 941 { 942 SideMenu.OpenDrawer(); 943 } 944 else 945 { 946 SideMenu.CloseDrawer(); 947 } 948 } 949 #endregion 950 #region ListBox 951 Object preObj = null; 952 Object curObj = null; 953 SideBarMenuButton stkChildren = null; 954 955 private void SideMenuLeft_SelectionChanged(object sender, SelectionChangedEventArgs e) 956 { 957 ListBox lBox = (ListBox)sender; 958 curObj = lBox.SelectedItem; 959 stkChildren = (SideBarMenuButton)curObj; 960 if (stkChildren.ContentText == "Settings") return; 961 if (preObj != null) 962 { 963 SideBarMenuButton preSBMB = (SideBarMenuButton)preObj; 964 preSBMB.BackgroundColor = null; 965 } 966 preObj = curObj; 967 stkChildren.BackgroundColor = (SolidColorBrush)Application.Current.Resources["PhoneAccentBrush"]; 968 } 969 #endregion 970 #region MenuHandlers 971 #region SDCard 972 private async void SDCardEnumerator(object sender, RoutedEventArgs e) 973 { 974 if (IsSDLoading) 975 { 976 textBlock.Visibility = Visibility.Visible; 977 } 978 if (!IsSDLoading) 979 { 980 StorageFolder folder; 981 // check if we already have a token 982 if (ApplicationData.Current.LocalSettings.Values.ContainsKey("FolderTokenSettingsKey")) 983 { 984 string token = (string)ApplicationData.Current.LocalSettings.Values["FolderTokenSettingsKey"]; 985 // if we do, use it to get the StorageFolder instance 986 folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token); 987 this.Addresser.Reset(); 988 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, delegate 989 { 990 IsMusicLibraryOpen = false; 991 IsVideoLibraryOpen = false; 992 IsPictureLibraryOpen = false; 993 headerText.Text = "SD Card"; 994 RootFolder.Text = "3"; 995 if (GridType) 996 { 997 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 998 SDGridView.ItemTemplate = (DataTemplate)Resources["GridFoldersView"]; 999 } 1000 else 1001 { 1002 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; 1003 SDGridView.ItemTemplate = (DataTemplate)Resources["ListFoldersView"]; 1004 } 1005 GetFilesAndFolder(folder); 1006 }); 1007 } 1008 else 1009 { 1010 // if we don't, this is the first time the code is being executed; user has to give 1011 // us a consent to use the folder 1012 FolderPicker folderPicker = new FolderPicker(); 1013 folderPicker.FileTypeFilter.Add("*"); 1014 folderPicker.PickFolderAndContinue(); 1015 1016 } 1017 } 1018 } 1019 #endregion 1020 #region Phone 1021 private void PhoneStorageEnumerator(object sender, TappedRoutedEventArgs e) 1022 { 1023 1024 } 1025 #endregion 1026 #region Pictures 1027 private async void PicturesLibraryTapped(object sender, RoutedEventArgs e) 1028 { 1029 IsPictureLibraryOpen = true; 1030 var picturesAlbums = await KnownFolders.PicturesLibrary.GetItemsAsync(); 1031 if (picturesAlbums.Count != 0) 1032 { 1033 sd.Clear(); 1034 SDGridView.ItemsSource = null; 1035 headerText.Text = "Pictures"; 1036 RootFolder.Text = "M"; 1037 this.Addresser.Reset(); 1038 SDGridView.ItemTemplate = (DataTemplate)Resources["PicturesView"]; 1039 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1040 Items = picturesAlbums; 1041 foreach (var pFo in picturesAlbums) 1042 { 1043 try 1044 { 1045 if (pFo.IsOfType(StorageItemTypes.Folder)) 1046 await GetThumbnailImageAsync((StorageFolder)pFo, ThumbnailMode.PicturesView); 1047 else await GetThumbnailImageAsync((StorageFile)pFo, ThumbnailMode.PicturesView); 1048 } 1049 catch (Exception ex) 1050 { 1051 ShowStatus(ex.Message + ex.Source + ex.StackTrace); 1052 } 1053 1054 } 1055 SDGridView.ItemsSource = sd; 1056 } 1057 else 1058 { 1059 AI("no pictures", "there no pictures in your phone"); 1060 } 1061 } 1062 1063 private void SettingsPage(object sender, RoutedEventArgs e) 1064 { 1065 1066 if (!Frame.Navigate(typeof(SettingsPage))) 1067 { 1068 throw new Exception("Failed to create scenario list"); 1069 } 1070 } 1071 1072 #endregion 1073 #region Video 1074 private async void VideoLibraryTapped(object sender, RoutedEventArgs e) 1075 { 1076 Items = await KnownFolders.VideosLibrary.GetItemsAsync(); 1077 if (Items.Count != 0) 1078 { 1079 sd.Clear(); 1080 SDGridView.ItemsSource = null; 1081 SDGridView.ItemTemplate = VideosView; 1082 SDGridView.ItemsPanel = GridViewItemsPanel; 1083 this.Addresser.Reset(); 1084 RootFolder.Text = ")"; 1085 headerText.Text = "Videos"; 1086 IsVideoLibraryOpen = true; 1087 foreach (var pFo in Items) 1088 { 1089 try 1090 { 1091 if (pFo.IsOfType(StorageItemTypes.Folder)) 1092 await GetThumbnailImageAsync((StorageFolder)pFo, ThumbnailMode.VideosView); 1093 else await GetThumbnailImageAsync((StorageFile)pFo, ThumbnailMode.VideosView); 1094 } 1095 catch (Exception) 1096 { 1097 //AI(ex.Message + ex.Source + ex.StackTrace, 2); 1098 } 1099 1100 } 1101 SDGridView.ItemsSource = sd; 1102 } 1103 else 1104 { 1105 AI("no videos", "there no videos in your phone"); 1106 } 1107 } 1108 1109 private void ChangeListSource(int listType) 1110 { 1111 SDGridView.ItemsSource = null; 1112 switch (listType) 1113 { 1114 1115 case 0: 1116 sd.Clear(); 1117 SDGridView.ItemsSource = sd; 1118 break; 1119 case 1: 1120 music.Clear(); 1121 SDGridView.ItemsSource = music; 1122 IsMusicLibraryOpen = true; 1123 break; 1124 case 2: 1125 picture.Clear(); 1126 SDGridView.ItemsSource = picture; 1127 IsPictureLibraryOpen = true; 1128 break; 1129 case 3: 1130 video.Clear(); 1131 SDGridView.ItemsSource = video; 1132 IsVideoLibraryOpen = true; 1133 break; 1134 default: 1135 throw new NotImplementedException(); 1136 } 1137 } 1138 1139 #region Music 1140 private async void MusicLibraryClick(object sender, RoutedEventArgs e) 1141 { 1142 var musicFolder = KnownFolders.MusicLibrary; 1143 IReadOnlyList<IStorageItem> musicItems = await musicFolder.GetItemsAsync(); 1144 ChangeListSource(1); 1145 if (musicItems.Count != 0) 1146 { 1147 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1148 SDGridView.ItemTemplate = (DataTemplate)Resources["MusicsView"]; 1149 RootFolder.Text = "y"; 1150 this.Addresser.Reset(); 1151 Items = musicItems; 1152 IsMusicLibraryOpen = true; 1153 headerText.Text = "Music"; 1154 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, async delegate 1155 { 1156 foreach (var pFo in musicItems) 1157 { 1158 try 1159 { 1160 if (pFo.IsOfType(StorageItemTypes.Folder)) 1161 { 1162 music.Add(new MusicList(pFo.Name, 0));//0 is passed as dummy count, the dummy value should be replaced by the folder's children count. 1163 } 1164 else 1165 { 1166 1167 IStorageFile File = (IStorageFile)pFo; 1168 if (File.FileType == ".mp3") 1169 { 1170 var fileStream = await File.OpenStreamForReadAsync(); 1171 var tagFile = TagLib.File.Create(new StreamFileAbstraction(File.Name, fileStream, fileStream)); 1172 var tags = tagFile.GetTag(TagTypes.Id3v2); 1173 try 1174 { 1175 if (tags.Pictures != null) 1176 { 1177 WriteableBitmap wm = null; 1178 1179 try 1180 { 1181 wm.FromByteArray(tags.Pictures[0].Data.Data); 1182 } 1183 catch (UnauthorizedAccessException) 1184 { 1185 1186 } 1187 catch (NullReferenceException) 1188 { 1189 1190 } 1191 ImageBrush im = new ImageBrush(); 1192 im.ImageSource = wm; 1193 im.Stretch = Stretch.UniformToFill; 1194 music.Add(new MusicList(tags.Title, tags.AlbumArtists[0], tags.Album, im)); 1195 #endregion 1196 } 1197 } 1198 catch (IndexOutOfRangeException) 1199 { 1200 music.Add(new MusicList(pFo.Name, tags.AlbumArtists[0], tags.Album, null)); 1201 } 1202 } 1203 else if (File.FileType == ".m4a") 1204 music.Add(new MusicList(pFo.Name,"","",null)); 1205 } 1206 } 1207 catch (Exception ex) 1208 { 1209 ShowStatus(ex.Message + ex.Source + ex.StackTrace); 1210 } 1211 } 1212 }); 1213 } 1214 else 1215 { 1216 ShowStatus("no music content can be found :("); 1217 } 1218 } 1219 1220 private async Task GetThumbnailImageAsync(StorageFile item, ThumbnailMode mode) 1221 { 1222 if (item == null) 1223 return; 1224 using (var thumbnail = await item.GetThumbnailAsync(mode)) 1225 { 1226 if (thumbnail != null) 1227 { 1228 sd.Add(new sdlist(item.DisplayName, thumbnail, "")); 1229 return; 1230 } 1231 } 1232 } 1233 //public async Task<bool> IsEmpty(IStorageFolder directory) 1234 //{ 1235 // var items = await directory.GetItemsAsync(); 1236 // ShowStatus(directory.Path); 1237 // bool isEmpty = items.Count == 0; 1238 // if (isEmpty) 1239 // { 1240 // //Storyboard story = new Storyboard(); 1241 // switch (directory.Path) 1242 // { 1243 1244 // case "D:/Documents": 1245 // //EmptyFolderStack.Visibility = Visibility.Visible; 1246 // break; 1247 // case "D:/Music": 1248 // EmptyFolderStack.Visibility = Visibility.Visible; 1249 // break; 1250 // default: 1251 // EmptyFolderStack.Visibility = Visibility.Visible; 1252 // break; 1253 1254 1255 // } 1256 // return true; 1257 // } 1258 // else 1259 // { 1260 // EmptyFolderStack.Visibility = Visibility.Collapsed; 1261 // return false; 1262 // } 1263 //} 1264 #endregion 1265 1266 #endregion 1267 #region ImageHelpers 1268 public async Task GetThumbnailImageAsync(StorageFolder item, ThumbnailMode mode) 1269 { 1270 if (item == null) 1271 return; 1272 using (var thumbnail = await item.GetThumbnailAsync(mode)) 1273 { 1274 if (thumbnail != null /*&& thumbnail.Type == ThumbnailType.Image && thumbnail.Type == ThumbnailType.Icon*/) 1275 { 1276 sd.Add(new sdlist(item.DisplayName, thumbnail, "2")); 1277 return; 1278 } 1279 } 1280 } 1281 #endregion 1282 1283 #region UI 1284 public double PicHeight 1285 { 1286 get 1287 { 1288 if (IsVertical()) return Window.Current.Bounds.Height / 3; 1289 else return Window.Current.Bounds.Width / 3; 1290 } 1291 } 1292 public double PicWidth 1293 { 1294 get 1295 { 1296 if (IsVertical()) return Window.Current.Bounds.Width / 2; 1297 else return Window.Current.Bounds.Height / 2; 1298 } 1299 } 1300 public double ImageHeight 1301 { 1302 get 1303 { 1304 if (IsVertical()) return Window.Current.Bounds.Height / 3.5; 1305 else return Window.Current.Bounds.Width / 3.5; 1306 } 1307 } 1308 public double ImageWidth 1309 { 1310 get 1311 { 1312 if (IsVertical()) return Window.Current.Bounds.Width / 2.2; 1313 else return Window.Current.Bounds.Height / 2.2; 1314 } 1315 } 1316 public double Space 1317 { 1318 get { return Window.Current.Bounds.Height / 600; } 1319 } 1320 public double GridHeight 1321 { 1322 get 1323 { 1324 if (IsVertical()) return Window.Current.Bounds.Height / 4; 1325 else return Window.Current.Bounds.Width / 4; 1326 } 1327 } 1328 public double GridWidth 1329 { 1330 get 1331 { 1332 if (IsVertical()) return Window.Current.Bounds.Width / 3; 1333 else return Window.Current.Bounds.Height / 3; 1334 } 1335 } 1336 1337 #endregion 1338 #region FolderPicker 1339 1340 1341 public void ContinueFolderPicker(FolderPickerContinuationEventArgs args) 1342 { 1343 folder = args.Folder; 1344 if (folder != null) 1345 { 1346 try 1347 { 1348 var id = folder.FolderRelativeId; 1349 if (folder != null) 1350 { 1351 if (folder.IsOfType(StorageItemTypes.Folder)) 1352 { 1353 this.Addresser.Reset(); 1354 } 1355 // after that, we can store the folder for future reuse 1356 string pickedFolderToken = StorageApplicationPermissions.FutureAccessList.Add(folder); 1357 ApplicationData.Current.LocalSettings.Values.Add("FolderTokenSettingsKey", pickedFolderToken); 1358 StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder); 1359 string mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList.Add(folder); 1360 IsMusicLibraryOpen = false; 1361 IsVideoLibraryOpen = false; 1362 IsPictureLibraryOpen = false; 1363 headerText.Text = "SD Card"; 1364 RootFolder.Text = "3"; 1365 if (GridType) 1366 { 1367 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1368 SDGridView.ItemTemplate = (DataTemplate)Resources["GridFoldersView"]; 1369 } 1370 else 1371 { 1372 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; 1373 SDGridView.ItemTemplate = (DataTemplate)Resources["ListFoldersView"]; 1374 } 1375 GetFilesAndFolder(folder); 1376 } 1377 else 1378 { 1379 return; 1380 } 1381 } 1382 catch 1383 { return; } 1384 } 1385 } 1386 #endregion 1387 #region FolderInteraction 1388 private void FolderHold(object sender, HoldingRoutedEventArgs e) 1389 { 1390 if (SDGridView.SelectionMode == ListViewSelectionMode.None) 1391 { 1392 //folderHold.Begin(); 1393 operationBar.Visibility = Windows.UI.Xaml.Visibility.Visible; 1394 //compressButton.Visibility = Visibility.Visible; 1395 //sortButton.Visibility = Visibility.Collapsed; 1396 operationBarNormal.Visibility = Visibility.Collapsed;//Start Cool Animations also :) 1397 1398 SDGridView.SelectionMode = ListViewSelectionMode.Multiple; 1399 //int index = SDGridView.Items.IndexOf(((sdlist)((ItemsControl)sender).DataContext)); 1400 //SDGridView.SelectedIndex = index; 1401 } 1402 } 1403 1404 private void ItemDoubleTap(object sender, DoubleTappedRoutedEventArgs e) 1405 { 1406 if (SDGridView.SelectionMode == ListViewSelectionMode.Multiple) return; 1407 singleTap = false; 1408 Rename((ItemsControl)sender); 1409 1410 } 1411 1412 private async void Rename(ItemsControl itemsControl) 1413 { 1414 itemsControlGrid = itemsControl; 1415 var sdl = await CurrentFolder.GetItemsAsync(); 1416 int index = SDGridView.Items.IndexOf(((sdlist)itemsControlGrid.DataContext)); 1417 var selectedItem = sdl.ElementAt(index); 1418 SDGridView.SelectedIndex = index; 1419 Windows.UI.Xaml.Controls.TextBox txtBoxRe = new Windows.UI.Xaml.Controls.TextBox(); 1420 txtBoxRe.TextAlignment = TextAlignment.Center; 1421 //txtBoxRe.Margin = new Thickness(0, 4, 0, 4); 1422 StackPanel stk = itemsControlGrid.GetFirstLogicalChildByType<StackPanel>(false); 1423 txtBlockRe = stk.GetLogicalChildrenByType<TextBlock>(false).ElementAt(0); 1424 stk.Children.Add(txtBoxRe); 1425 txtBlockRe.Visibility = Visibility.Collapsed; 1426 txtBoxRe.GotFocus += (s, ex) => 1427 { 1428 try 1429 { 1430 txtBoxRe.Select(0, txtBoxRe.Text.LastIndexOf('.')); 1431 } 1432 catch 1433 { 1434 txtBoxRe.SelectAll(); 1435 } 1436 }; 1437 txtBoxRe.LostFocus += (s, ex) => 1438 { 1439 txtBoxRe.Visibility = Visibility.Collapsed; 1440 txtBlockRe.Visibility = Visibility.Visible; 1441 }; 1442 txtBoxRe.KeyDown += async (s, ex) => 1443 { 1444 if (ex.Key == Windows.System.VirtualKey.Enter) 1445 { 1446 if (txtBoxRe.Text == String.Empty) 1447 { 1448 txtBoxRe.Visibility = Visibility.Collapsed; 1449 txtBlockRe.Visibility = Visibility.Visible; 1450 } 1451 else if (txtBoxRe.Text.Contains("/") || txtBoxRe.Text.Contains(@"\")) 1452 { 1453 AI("Cannot rename File or Folder", @"A file or folder can't contain any of the following characters: \ / : * ? " + "\"" + " < > |"); 1454 } 1455 else 1456 { 1457 try 1458 { 1459 txtBlockRe.Text = txtBoxRe.Text; 1460 txtBoxRe.Visibility = Visibility.Collapsed; 1461 txtBlockRe.Visibility = Visibility.Visible; 1462 await selectedItem.RenameAsync(txtBoxRe.Text, NameCollisionOption.GenerateUniqueName); 1463 } 1464 catch 1465 { 1466 AI("Rename operation failed", "Cannot rename this file at the moment"); 1467 } 1468 GetFilesAndFolder(CurrentFolder); 1469 } 1470 } 1471 }; 1472 txtBoxRe.Focus(FocusState.Programmatic); 1473 } 1474 1475 private async void GridItemClick(object sender, TappedRoutedEventArgs e) 1476 { 1477 e.Handled = true; 1478 ShowStatus(SDGridView.SelectedIndex.ToString()); 1479 if (SDGridView.SelectedIndex != -1) return; 1480 singleTap = true; 1481 await Task.Delay(200); 1482 itemsControlGrid = (ItemsControl)sender; 1483 //if (!singleTap) return; 1484 int index = SDGridView.Items.IndexOf((sdlist)(itemsControlGrid.DataContext)); 1485 IStorageItem selectedItem = Items.ElementAt(index); 1486 if (selectedItem.IsOfType(StorageItemTypes.Folder)) 1487 { 1488 #region Folder PopOut Animation 1489 //Storyboard story = new Storyboard(); 1490 //itemsControlGrid.RenderTransform = new CompositeTransform(); 1491 //itemsControlGrid.RenderTransformOrigin = new Point(0.5, 0.5); 1492 //CircleEase ease = new CircleEase(); 1493 //DoubleAnimation opacity = new DoubleAnimation { From = 1, To = 0, Duration = TimeSpan.FromMilliseconds(100), EasingFunction=ease }; 1494 //Storyboard.SetTargetProperty(opacity, "(UIElement.Opacity)"); 1495 //Storyboard.SetTarget(opacity, itemsControlGrid); 1496 //DoubleAnimation scaleX = new DoubleAnimation { From = 1, To = 6, Duration = TimeSpan.FromMilliseconds(100), EasingFunction = ease }; 1497 //Storyboard.SetTargetProperty(scaleX, "(UIElement.RenderTransform).(CompositeTransform.ScaleX)"); 1498 //Storyboard.SetTarget(scaleX, itemsControlGrid); 1499 //DoubleAnimation scaleY = new DoubleAnimation { From = 1, To = 6, Duration = TimeSpan.FromMilliseconds(100), EasingFunction = ease }; 1500 //Storyboard.SetTargetProperty(scaleY, "(UIElement.RenderTransform).(CompositeTransform.ScaleY)"); 1501 //Storyboard.SetTarget(scaleY, itemsControlGrid); 1502 //story.Children.Add(scaleX); 1503 //story.Children.Add(scaleY); 1504 //story.Children.Add(opacity); 1505 //story.Begin(); 1506 #endregion 1507 Addresser.Address(((IStorageFolder)selectedItem).Name, ((IStorageFolder)selectedItem).Path); 1508 if (IsVideoLibraryOpen || IsPictureLibraryOpen) 1509 { 1510 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1511 SDGridView.ItemTemplate = (DataTemplate)Resources["PicturesView"]; 1512 } 1513 else if (IsMusicLibraryOpen) 1514 { 1515 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1516 SDGridView.ItemTemplate = (DataTemplate)Resources["MusicsView"]; 1517 } 1518 GetFilesAndFolder((IStorageFolder)selectedItem); 1519 return; 1520 } 1521 else if (selectedItem.IsOfType(StorageItemTypes.File)) 1522 { 1523 ExecuteFile((IStorageFile)selectedItem); 1524 return; 1525 } 1526 } 1527 1528 private async void VideoItemClick(object sender, TappedRoutedEventArgs e) 1529 { 1530 singleTap = true; 1531 await Task.Delay(200); 1532 itemsControlGrid = (ItemsControl)sender; 1533 if (!singleTap) return; 1534 int index = SDGridView.Items.IndexOf((sdlist)(itemsControlGrid.DataContext)); 1535 IStorageItem selectedItem = Items.ElementAt(index); 1536 if (selectedItem.IsOfType(StorageItemTypes.Folder)) 1537 { 1538 Addresser.Address(((IStorageFolder)selectedItem).Name, ((IStorageFolder)selectedItem).Path); 1539 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1540 SDGridView.ItemTemplate = (DataTemplate)Resources["PicturesView"]; 1541 1542 GetFilesAndFolder((IStorageFolder)selectedItem); 1543 return; 1544 } 1545 else if (selectedItem.IsOfType(StorageItemTypes.File)) 1546 { 1547 ExecuteFile((IStorageFile)selectedItem); 1548 return; 1549 } 1550 } 1551 private async void PictureItemClick(object sender, TappedRoutedEventArgs e) 1552 { 1553 singleTap = true; 1554 await Task.Delay(200); 1555 itemsControlGrid = (ItemsControl)sender; 1556 if (!singleTap) return; 1557 int index = SDGridView.Items.IndexOf((sdlist)(itemsControlGrid.DataContext)); 1558 IStorageItem selectedItem = Items.ElementAt(index); 1559 if (selectedItem.IsOfType(StorageItemTypes.Folder)) 1560 { 1561 Addresser.Address(((IStorageFolder)selectedItem).Name, ((IStorageFolder)selectedItem).Path); 1562 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1563 SDGridView.ItemTemplate = (DataTemplate)Resources["PicturesView"]; 1564 1565 GetFilesAndFolder((IStorageFolder)selectedItem); 1566 return; 1567 } 1568 else if (selectedItem.IsOfType(StorageItemTypes.File)) 1569 { 1570 ExecuteFile((IStorageFile)selectedItem); 1571 return; 1572 } 1573 } 1574 private async void MusicItemClick(object sender, TappedRoutedEventArgs e) 1575 { 1576 singleTap = true; 1577 await Task.Delay(200); 1578 musicItemsControlGrid = (ItemsControl)sender; 1579 if (!singleTap) return; 1580 int index = SDGridView.Items.IndexOf((sdlist)(musicItemsControlGrid.DataContext)); 1581 IStorageItem selectedItem = Items.ElementAt(index); 1582 if (selectedItem.IsOfType(StorageItemTypes.Folder)) 1583 { 1584 Addresser.Address(((IStorageFolder)selectedItem).Name, ((IStorageFolder)selectedItem).Path); 1585 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1586 SDGridView.ItemTemplate = (DataTemplate)Resources["MusicsView"]; 1587 1588 GetFilesAndFolder((IStorageFolder)selectedItem); 1589 return; 1590 } 1591 else if (selectedItem.IsOfType(StorageItemTypes.File)) 1592 { 1593 ExecuteFile((IStorageFile)selectedItem); 1594 return; 1595 } 1596 } 1597 #endregion 1598 #region MusicStatusUpdater(work-in progress) 1599 public async void MusicStatusUpdate() 1600 { 1601 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate 1602 { 1603 Grid grd = null; 1604 if (!IsMusicLibraryOpen) return; 1605 grd = musicItemsControlGrid.GetFirstLogicalChildByType<Grid>(false); 1606 if (grd.Children.Count == 2) 1607 { 1608 Border brdB = grd.GetFirstLogicalChildByType<Border>(false); 1609 grd.Children.Remove(brdB); 1610 return; 1611 } 1612 Border brd = new Border(); 1613 brd.CornerRadius = new CornerRadius(150); 1614 TextBlock txt = new TextBlock(); 1615 brd.VerticalAlignment = VerticalAlignment.Center; 1616 brd.HorizontalAlignment = HorizontalAlignment.Center; 1617 brd.Background = new SolidColorBrush(Windows.UI.Color.FromArgb(200, 0, 0, 0)); 1618 txt.FontFamily = new FontFamily("Assets/Font/iconFont.ttf#iconfont"); 1619 txt.Margin = new Thickness(20); 1620 txt.FontSize = 50; 1621 txt.Foreground = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 255, 255, 255)); 1622 txt.VerticalAlignment = VerticalAlignment.Center; 1623 txt.HorizontalAlignment = HorizontalAlignment.Center; 1624 txt.Text = "2"; 1625 brd.Child = txt; 1626 grd.Children.Add(brd); 1627 }); 1628 } 1629 #endregion 1630 #region FileExecution 1631 private async void ExecuteFile(IStorageFile selectedItem) 1632 { 1633 1634 if (selectedItem.FileType == ".zip") 1635 { 1636 //var temps = await ApplicationData.Current.TemporaryFolder.GetItemsAsync(); 1637 //foreach (var temp in temps) 1638 //{ 1639 // await temp.DeleteAsync(); 1640 //} 1641 //temps = await ApplicationData.Current.TemporaryFolder.GetItemsAsync(); 1642 //if (temps.Count == 0) 1643 GetFilesAndFolder((IStorageFolder)await OpenZip(selectedItem)); 1644 } 1645 else if (selectedItem.FileType == ".mp3") 1646 { 1647 if ((string)settings.Values["musicPlayer"] == "1") 1648 PlayMedia(selectedItem); 1649 else await Windows.System.Launcher.LaunchFileAsync(selectedItem); 1650 } 1651 else if (selectedItem.FileType == ".wma") 1652 { 1653 if ((string)settings.Values["musicPlayer"] == "1") 1654 PlayMedia(selectedItem); 1655 else await Windows.System.Launcher.LaunchFileAsync(selectedItem); 1656 } 1657 else if (selectedItem.FileType == ".m4a") 1658 { 1659 if ((string)settings.Values["musicPlayer"] == "1") 1660 PlayMedia(selectedItem); 1661 else await Windows.System.Launcher.LaunchFileAsync(selectedItem); 1662 } 1663 else if (selectedItem.FileType == ".mp4") 1664 { 1665 if ((string)settings.Values["videosPlayer"] == "1") 1666 { 1667 PlayVideo(selectedItem); 1668 } 1669 else await Windows.System.Launcher.LaunchFileAsync(selectedItem); 1670 } 1671 else if (selectedItem.FileType == ".mov") 1672 { 1673 if ((string)settings.Values["videosPlayer"] == "1") 1674 { 1675 PlayVideo(selectedItem); 1676 } 1677 else await Windows.System.Launcher.LaunchFileAsync(selectedItem); 1678 } 1679 else if (selectedItem.FileType == ".jpg") 1680 { 1681 if ((string)settings.Values["picturesPlayer"] == "1") 1682 { 1683 DisplayPhoto(selectedItem); 1684 } 1685 else await Windows.System.Launcher.LaunchFileAsync(selectedItem); 1686 } 1687 else 1688 { 1689 await Windows.System.Launcher.LaunchFileAsync(selectedItem); 1690 } 1691 } 1692 1693 private void PlayVideo(IStorageFile selectedItem) 1694 { 1695 this.Frame.Navigate(typeof(VideoPage),selectedItem); 1696 //mediaPlayer.Source = new Uri(selectedItem.Path); 1697 //musicArt.Text = ""; 1698 //mediaPlayer.MediaOpened += async (s, t) => 1699 //{ 1700 // await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, delegate 1701 // { 1702 // musicSlider.Maximum = mediaPlayer.NaturalDuration.TimeSpan.TotalSeconds; 1703 // playPause.Content = "8"; 1704 // UpdateMusic(title, artist, mediaPlayer.NaturalDuration.TimeSpan); 1705 // musicDispatcher.Start(); 1706 // }); 1707 //}; 1708 //mediaPlayer.Play(); 1709 //var fileStream = await selectedItem.OpenStreamForReadAsync(); 1710 //MusicStatusUpdate(); 1711 } 1712 1713 #endregion 1714 #region ZipFileHelpers 1715 public async Task<StorageFolder> OpenZip(IStorageFile compressedFile) 1716 { 1717 try 1718 { 1719 //using (MemoryStream zipMemoryStream = new MemoryStream(WindowsRuntimeBufferExtensions.ToArray(await FileIO.ReadBufferAsync(compressedFile)))) 1720 //{ 1721 // using (ZipArchive zipArchive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Read)) 1722 // { 1723 // var files = zipArchive.Entries; 1724 // foreach (var file in files) 1725 // { 1726 // try 1727 // { 1728 // var uncompressedFol = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(file.Name, CreationCollisionOption.ReplaceExisting); 1729 // } 1730 // catch 1731 // { 1732 // var uncompressedFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(file.Name, CreationCollisionOption.ReplaceExisting); 1733 // } 1734 1735 // return ApplicationData.Current.TemporaryFolder; 1736 // } 1737 // return null; 1738 // } 1739 //} 1740 var zipArchive = new System.IO.Compression.ZipArchive(await compressedFile.OpenStreamForReadAsync()); 1741 1742 foreach (var entry in zipArchive.Entries) 1743 { 1744 using (var entryStream = entry.Open()) 1745 { 1746 if (true)//IsFileBinary(entry.Name) ? 1747 { 1748 using (BinaryReader br = new BinaryReader(entryStream)) 1749 { 1750 //var fileSize = await reader.LoadAsync((uint)entryStream.Length); 1751 var fileSize = br.BaseStream.Length; 1752 byte[] read = br.ReadBytes((int)fileSize); 1753 1754 var binaryContent = read; 1755 } 1756 } 1757 } 1758 } 1759 using (BinaryReader b = new BinaryReader(await compressedFile.OpenStreamForReadAsync())) 1760 { 1761 // Do not do this. 1762 while (b.PeekChar() != -1) 1763 { 1764 int v = b.ReadInt32(); 1765 } 1766 } 1767 } 1768 catch (Exception ex) 1769 { 1770 ShowStatus(ex.Message); 1771 return null; 1772 } 1773 return null; 1774 } 1775 1776 byte[] CentralDirImage = {50,01,05,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}; 1777 1778 public List<string> ReadCentralDir() 1779 { 1780 if (this.CentralDirImage == null) 1781 throw new InvalidOperationException("Central directory currently does not exist"); 1782 1783 List<string> result = new List<string>(); 1784 1785 for (int pointer = 0; pointer < this.CentralDirImage.Length; ) 1786 { 1787 uint signature = BitConverter.ToUInt32(CentralDirImage, pointer); 1788 if (signature != 0x02014b50) 1789 break; 1790 1791 bool encodeUTF8 = (BitConverter.ToUInt16(CentralDirImage, pointer + 8) & 0x0800) != 0; 1792 ushort method = BitConverter.ToUInt16(CentralDirImage, pointer + 10); 1793 uint modifyTime = BitConverter.ToUInt32(CentralDirImage, pointer + 12); 1794 uint crc32 = BitConverter.ToUInt32(CentralDirImage, pointer + 16); 1795 uint comprSize = BitConverter.ToUInt32(CentralDirImage, pointer + 20); 1796 uint fileSize = BitConverter.ToUInt32(CentralDirImage, pointer + 24); 1797 ushort filenameSize = BitConverter.ToUInt16(CentralDirImage, pointer + 28); 1798 ushort extraSize = BitConverter.ToUInt16(CentralDirImage, pointer + 30); 1799 ushort commentSize = BitConverter.ToUInt16(CentralDirImage, pointer + 32); 1800 uint headerOffset = BitConverter.ToUInt32(CentralDirImage, pointer + 42); 1801 uint headerSize = (uint)( 46 + filenameSize + extraSize + commentSize); 1802 1803 Encoding encoder = encodeUTF8 ? Encoding.UTF8 : Encoding.Unicode; 1804 1805 string zfe = new string(); 1806 zfe.Method = (Compression)method; 1807 zfe.FilenameInZip = encoder.GetString(CentralDirImage, pointer + 46, filenameSize); 1808 zfe.FileOffset = GetFileOffset(headerOffset); 1809 zfe.FileSize = fileSize; 1810 zfe.CompressedSize = comprSize; 1811 zfe.HeaderOffset = headerOffset; 1812 zfe.HeaderSize = headerSize; 1813 zfe.Crc32 = crc32; 1814 zfe.ModifyTime = DosTimeToDateTime(modifyTime); 1815 if (commentSize > 0) 1816 zfe.Comment = encoder.GetString(CentralDirImage, pointer + 46 + filenameSize + extraSize, commentSize); 1817 1818 result.Add(zfe); 1819 pointer += (46 + filenameSize + extraSize + commentSize); 1820 } 1821 1822 return result; 1823 } 1824 1825 1826 public async Task<StorageFile> CreateZip(StorageFile file) 1827 { 1828 if (CurrentFolder != null) 1829 { 1830 try 1831 { 1832 using (MemoryStream zipMemoryStream = new MemoryStream()) 1833 { 1834 using (System.IO.Compression.ZipArchive zipArchive = new System.IO.Compression.ZipArchive(zipMemoryStream, ZipArchiveMode.Create)) 1835 { 1836 try 1837 { 1838 byte[] buffer = WindowsRuntimeBufferExtensions.ToArray(await FileIO.ReadBufferAsync(file)); 1839 ZipArchiveEntry entry = zipArchive.CreateEntry(file.Name); 1840 using (Stream entryStream = entry.Open()) 1841 { 1842 await entryStream.WriteAsync(buffer, 0, buffer.Length); 1843 } 1844 GetFilesAndFolder(CurrentFolder); 1845 } 1846 catch (Exception ex) 1847 { 1848 ShowStatus(ex.Message); 1849 } 1850 } 1851 1852 // Created new file to store compressed files 1853 var compressedFileName = file.Name + ".zip"; 1854 StorageFile zipFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(compressedFileName, CreationCollisionOption.GenerateUniqueName); 1855 using (IRandomAccessStream zipStream = await zipFile.OpenAsync(FileAccessMode.ReadWrite)) 1856 { 1857 // Write compressed data from memory to file 1858 using (Stream outstream = zipStream.AsStreamForWrite()) 1859 { 1860 byte[] buffer = zipMemoryStream.ToArray(); 1861 outstream.Write(buffer, 0, buffer.Length); 1862 outstream.Flush(); 1863 return zipFile; 1864 } 1865 } 1866 } 1867 } 1868 catch (Exception ex) 1869 { 1870 ShowStatus(ex.Message); 1871 return null; 1872 } 1873 } 1874 else 1875 { 1876 ShowStatus("Error! This is not a valid folder"); 1877 return null; 1878 } 1879 } 1880 #endregion 1881 #region BottomBarmenuEventHandlers 1882 private void GridListChange(object sender, RoutedEventArgs e) 1883 { 1884 if (GridType) 1885 { 1886 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; 1887 SDGridView.ItemTemplate = (DataTemplate)Resources["ListFoldersView"]; 1888 gridList.ContentText = "list"; 1889 gridList.ImageText = "b"; 1890 GridType = false; 1891 } 1892 else 1893 { 1894 SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; 1895 SDGridView.ItemTemplate = (DataTemplate)Resources["GridFoldersView"]; 1896 gridList.ContentText = "grid"; 1897 gridList.ImageText = "N"; 1898 GridType = true; 1899 } 1900 } 1901 private void SelectAll(object sender, RoutedEventArgs e) 1902 { 1903 SDGridView.SelectionMode = ListViewSelectionMode.Multiple; 1904 SDGridView.SelectAll(); 1905 operationBar.Visibility = Visibility.Visible; 1906 operationBarNormal.Visibility = Visibility.Collapsed; 1907 //folderHold.Begin(); 1908 } 1909 private void selectBox_Unchecked(object sender, RoutedEventArgs e) 1910 { 1911 UnselectAll(); 1912 } 1913 public void UnselectAll() 1914 { 1915 SDGridView.SelectionMode = ListViewSelectionMode.None; 1916 operationBar.Visibility = Visibility.Collapsed; 1917 operationBarNormal.Visibility = Visibility.Visible; 1918 } 1919 #endregion 1920 #region SDGridViewSelectionChanged 1921 private void SDGridViewSelectionChanged(object sender, SelectionChangedEventArgs e) 1922 { 1923 if (SDGridView.SelectedIndex == -1) 1924 { 1925 //operationBar.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 1926 //operationBarNormal.Visibility = Visibility.Visible; 1927 //headerText.Visibility = Windows.UI.Xaml.Visibility.Visible; 1928 //folderHoldRev.Begin(); 1929 SDGridView.SelectionMode = ListViewSelectionMode.None; 1930 //SDGridView.IsItemClickEnabled = true; 1931 return; 1932 } 1933 else { return; } 1934 } 1935 #endregion 1936 1937 1938 1939 #region FileSortingMethods 1940 1941 private void OpenSortMenu(object sender, RoutedEventArgs e) 1942 { 1943 OpenSortMenuAnim.Begin(); 1944 //ToggleMenu(SortMenu); 1945 } 1946 1947 private void ToggleMenu(Panel element) 1948 { 1949 if (element.Visibility == Visibility.Visible) 1950 element.Visibility = Visibility.Collapsed; 1951 else element.Visibility = Visibility.Visible; 1952 } 1953 1954 private void SortMenuItemClick(object sender, RoutedEventArgs e) 1955 { 1956 Button bt = (Button)sender; 1957 string buttonName = bt.Content.ToString(); 1958 if (buttonName == "Name") 1959 { 1960 Sort(0); 1961 } 1962 else if (buttonName == "Type") 1963 { 1964 Sort(1); 1965 } 1966 else if (buttonName == "Size") 1967 { 1968 Sort(2); 1969 } 1970 else if (buttonName == "Date") 1971 { 1972 Sort(3); 1973 } 1974 SortMenu.Visibility = Visibility.Collapsed; 1975 } 1976 1977 public void Sort(int sortType) 1978 { 1979 try 1980 { 1981 switch (sortType) 1982 { 1983 case 0: 1984 sd.OrderBy(o => o.Name); 1985 break; 1986 case 1: 1987 sd.OrderBy(o => o.Image); 1988 break; 1989 case 2: 1990 sd.OrderBy(o => o.Name); 1991 break; 1992 case 3: 1993 sd.OrderBy(o => o.Name); 1994 break; 1995 } 1996 } 1997 catch (ArgumentNullException) 1998 { 1999 2000 } 2001 } 2002 2003 #endregion 2004 private void ListBoxSelectionChanged(object sender, SelectionChangedEventArgs e) 2005 { 2006 if (stkChildren != null && stkChildren.ContentText == "Settings") return; 2007 this.Addresser.Reset(); 2008 sd.Clear(); 2009 SDGridView.ItemsSource = null; 2010 headerText.Text = String.Empty; 2011 } 2012 private void PhoneRefreshTapped(object sender, TappedRoutedEventArgs e) 2013 { 2014 2015 } 2016 private void PhoneEnumerator(object sender, RoutedEventArgs e) 2017 { 2018 FolderPicker fp = new FolderPicker(); 2019 fp.PickFolderAndContinue(); 2020 if (IsPhoneLoading) 2021 { 2022 phoneWarning.Visibility = Visibility.Visible; 2023 } 2024 } 2025 2026 private Task LoadMemoryData() 2027 { 2028 textBlock.Visibility = Visibility.Collapsed; 2029 phoneWarning.Visibility = Visibility.Collapsed; 2030 IStorageItem sf = ApplicationData.Current.LocalFolder; 2031 2032 var properties = sf.GetBasicPropertiesAsync().Completed += (es, t) => 2033 { 2034 es.GetResults().RetrievePropertiesAsync(new[] { "System.FreeSpace" }).Completed += (ex, tx) => 2035 { 2036 var freeSpace = ex.GetResults()["System.FreeSpace"]; 2037 #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed 2038 Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => 2039 #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed 2040 { 2041 float freeSpaceGB = (float)Double.Parse((freeSpace.ToString())) / 1000000000; 2042 FreeSpace.Text = Math.Round(freeSpaceGB, 2).ToString(); 2043 sdProgbar.Maximum = 16.00; 2044 sdProgbar.Value = 16.00 - freeSpaceGB; 2045 IsSDLoading = false; 2046 IsPhoneLoading = false; 2047 SDLoad.Stop(); 2048 symbolIcon.Visibility = Visibility.Collapsed; 2049 PhoneLoad.Stop(); 2050 symbolIcon1.Visibility = Visibility.Collapsed; 2051 }); 2052 }; 2053 }; 2054 2055 return null; 2056 } 2057 2058 private void AddFile(object sender, RoutedEventArgs e) 2059 { 2060 CurrentFolder.CreateFileAsync("New File", CreationCollisionOption.GenerateUniqueName).Completed += (es,t) => 2061 { 2062 #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed 2063 Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate 2064 #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed 2065 { 2066 GetFilesAndFolder(CurrentFolder); 2067 }); 2068 }; 2069 } 2070 private void AddZip(object sender, RoutedEventArgs e) 2071 { 2072 InputPrompt ip = new InputPrompt(); 2073 ip.Completed += (async (ex, t) => 2074 { 2075 StorageFile sf = await CurrentFolder.CreateFileAsync(t.Result + ".zip", CreationCollisionOption.GenerateUniqueName); 2076 if (sf != null && CreateZip(sf).IsCompleted) 2077 { 2078 2079 GetFilesAndFolder(CurrentFolder); 2080 } 2081 }); 2082 ip.Title = "Enter file name"; 2083 ip.Show(); 2084 } 2085 2086 private void AddFolder(object sender, RoutedEventArgs e) 2087 { 2088 InputPrompt ip = new InputPrompt(); 2089 ip.Completed += (async (ex, t) => 2090 { 2091 StorageFolder sf = await CurrentFolder.CreateFolderAsync(t.Result, CreationCollisionOption.GenerateUniqueName); 2092 GetFilesAndFolder(CurrentFolder); 2093 }); 2094 ip.Title = "Enter folder name"; 2095 ip.Show(); 2096 } 2097 private async void DeleteItem(object sender, RoutedEventArgs e) 2098 { 2099 var sdl = SDGridView.SelectedItems; 2100 foreach (var sdli in sdl) 2101 { 2102 try 2103 { 2104 var si = (sdlist)sdli; 2105 IStorageItem selectedItem = Items.ElementAt(sd.IndexOf(si)); 2106 await selectedItem.DeleteAsync(); 2107 sd.Remove(si); 2108 } 2109 catch (Exception ex) 2110 { 2111 AI("Cannot Delete File", "Cannot delete file because the file may be locked"); 2112 ShowStatus(ex.Message); 2113 } 2114 } 2115 //GetFilesAndFolder(CurrentFolder); 2116 } 2117 2118 private void RenameItem(object sender, RoutedEventArgs e) 2119 { 2120 Rename((ItemsControl)sender); 2121 } 2122 2123 List<StorageFile> clipboard = new List<StorageFile>(); 2124 private void CutItems(object sender, RoutedEventArgs e) 2125 { 2126 clipboard.Clear(); 2127 var sdl = SDGridView.SelectedItems; 2128 foreach (var sdli in sdl) 2129 { 2130 try 2131 { 2132 var si = (sdlist)sdli; 2133 IStorageItem selectedItem = Items.ElementAt(sd.IndexOf(si)); 2134 if (selectedItem.IsOfType(StorageItemTypes.File)) 2135 { 2136 StorageFile sf = (StorageFile)selectedItem; 2137 2138 clipboard.Add(sf); 2139 } 2140 2141 } 2142 catch (Exception ex) 2143 { 2144 ShowStatus(ex.Message); 2145 AI("Cannot add to clipboard",ex.Message); 2146 } 2147 2148 } 2149 } 2150 2151 #region ShowStatus 2152 public void ShowStatus(string info) 2153 { 2154 NotifyUser(info); 2155 } 2156 #endregion 2157 2158 private void PasteItem(object sender, RoutedEventArgs e) 2159 { 2160 OpenDialog(2); 2161 } 2162 private void OverwriteContents(object sender, RoutedEventArgs e) 2163 { 2164 FileMoveDialog.Visibility = Visibility.Collapsed; 2165 ProgInfoView.Visibility = Visibility.Visible; 2166 int clipCount = 0; 2167 if ((clipCount = clipboard.Count) != 0) 2168 { 2169 progFileDest.Text = CurrentFolder.Name; 2170 progTotalSize.Text = clipCount.ToString(); 2171 if (IS_FILE_MOVE)//move 2172 { 2173 cmstatus.Text = "moving"; 2174 try 2175 { 2176 foreach (var item in clipboard) 2177 { 2178 progFileSource.Text = item.Name; 2179 progCurrentSize.Text = clipboard.IndexOf(item).ToString(); 2180 var tb = item.MoveAsync(CurrentFolder, item.Name, NameCollisionOption.ReplaceExisting); 2181 tb.Completed += async (i, s) => 2182 { 2183 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate 2184 { 2185 ProgInfoView.Visibility = Visibility.Collapsed; 2186 ProgressDialog.Visibility = Visibility.Collapsed; 2187 }); 2188 }; 2189 } 2190 GetFilesAndFolder(CurrentFolder); 2191 } 2192 catch (Exception ex) 2193 { 2194 AI("Error copying file", ex.Message); 2195 } 2196 } 2197 else//copy 2198 { 2199 cmstatus.Text = "copying"; 2200 try 2201 { 2202 foreach (var item in clipboard) 2203 { 2204 progFileSource.Text = item.Name; 2205 progCurrentSize.Text = clipboard.IndexOf(item).ToString(); 2206 var tb = item.CopyAsync(CurrentFolder, item.Name, NameCollisionOption.ReplaceExisting); 2207 tb.Completed += async (i, s) => 2208 { 2209 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate 2210 { 2211 ProgInfoView.Visibility = Visibility.Collapsed; 2212 ProgressDialog.Visibility = Visibility.Collapsed; 2213 }); 2214 }; 2215 } 2216 GetFilesAndFolder(CurrentFolder); 2217 } 2218 catch (Exception ex) 2219 { 2220 AI("Error copying file", ex.Message); 2221 } 2222 } 2223 } 2224 } 2225 2226 private void KeepBothFiles(object sender, RoutedEventArgs e) 2227 { 2228 FileMoveDialog.Visibility = Visibility.Collapsed; 2229 ProgInfoView.Visibility = Visibility.Visible; 2230 int clipCount = 0; 2231 if ((clipCount = clipboard.Count) != 0) 2232 { 2233 progFileDest.Text = CurrentFolder.Name; 2234 progTotalSize.Text = clipCount.ToString(); 2235 if (IS_FILE_MOVE)//move 2236 { 2237 cmstatus.Text = "moving"; 2238 try 2239 { 2240 foreach (var item in clipboard) 2241 { 2242 progFileSource.Text = item.Name; 2243 progCurrentSize.Text = clipboard.IndexOf(item).ToString(); 2244 var tb = item.MoveAsync(CurrentFolder, item.Name, NameCollisionOption.GenerateUniqueName); 2245 tb.Completed += async (i, s) => 2246 { 2247 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate 2248 { 2249 ProgInfoView.Visibility = Visibility.Collapsed; 2250 ProgressDialog.Visibility = Visibility.Collapsed; 2251 }); 2252 }; 2253 } 2254 GetFilesAndFolder(CurrentFolder); 2255 } 2256 catch (Exception ex) 2257 { 2258 AI("Error copying file", ex.Message); 2259 } 2260 } 2261 else//copy 2262 { 2263 cmstatus.Text = "copying"; 2264 try 2265 { 2266 foreach (var item in clipboard) 2267 { 2268 progFileSource.Text = item.Name; 2269 progCurrentSize.Text = clipboard.IndexOf(item).ToString(); 2270 var tb = item.CopyAsync(CurrentFolder, item.Name, NameCollisionOption.GenerateUniqueName); 2271 tb.Completed += async (i, s) => 2272 { 2273 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate 2274 { 2275 ProgInfoView.Visibility = Visibility.Collapsed; 2276 ProgressDialog.Visibility = Visibility.Collapsed; 2277 }); 2278 }; 2279 } 2280 GetFilesAndFolder(CurrentFolder); 2281 } 2282 catch (Exception ex) 2283 { 2284 AI("Error copying file", ex.Message); 2285 } 2286 } 2287 } 2288 } 2289 2290 #region InternetBrowser 2291 private void Browser(object sender, RoutedEventArgs e) 2292 { 2293 WebBrowser.Visibility = Visibility.Visible; 2294 } 2295 private void Button_Click(object sender, RoutedEventArgs e) 2296 { 2297 try 2298 { 2299 webView.Navigate(new Uri(webAddressBar.Text)); 2300 } 2301 catch 2302 { 2303 webView.Navigate(new Uri("https://www.google.com/")); 2304 } 2305 } 2306 #endregion 2307 #region FileShare 2308 private void ShareContent(object sender, RoutedEventArgs e) 2309 { 2310 DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView(); 2311 dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(ShareStorageItemsHandler); 2312 // If the user clicks the share button, invoke the share flow programatically. 2313 DataTransferManager.ShowShareUI(); 2314 } 2315 2316 private void ShareStorageItemsHandler(DataTransferManager sender, DataRequestedEventArgs e) 2317 { 2318 DataRequest request = e.Request; 2319 request.Data.Properties.Title = "File360"; 2320 request.Data.Properties.Description = "files & folders"; 2321 2322 // Because we are making async calls in the DataRequested event handler, 2323 // we need to get the deferral first. 2324 DataRequestDeferral deferral = request.GetDeferral(); 2325 2326 // Make sure we always call Complete on the deferral. 2327 try 2328 { 2329 2330 2331 var sdl = SDGridView.SelectedItems; 2332 foreach (var sdli in sdl) 2333 { 2334 try 2335 { 2336 var si = (sdlist)sdli; 2337 SelectedItems.Add(Items.ElementAt(sd.IndexOf(si))); 2338 } 2339 catch (Exception ex) 2340 { 2341 ShowStatus(ex.Message); 2342 } 2343 } 2344 2345 request.Data.SetStorageItems(SelectedItems); 2346 } 2347 finally 2348 { 2349 deferral.Complete(); 2350 } 2351 } 2352 #endregion 2353 2354 private async void DeleteThisFolder(object sender, RoutedEventArgs e) 2355 { 2356 int index = CurrentFolder.Path.LastIndexOf(CurrentFolder.Name); 2357 var sf = await StorageFolder.GetFolderFromPathAsync(CurrentFolder.Path.Remove(index)); 2358 await CurrentFolder.DeleteAsync(); 2359 GetFilesAndFolder(sf); 2360 headerText.Text = CurrentFolder.Name; 2361 this.Addresser.RemoveLast(); 2362 } 2363 2364 private async void PersonalStorageEnumerator(object sender, RoutedEventArgs e) 2365 { 2366 var HomeFolderP = ApplicationData.Current.LocalFolder; 2367 var HomeFolder = await HomeFolderP.CreateFolderAsync("Home", CreationCollisionOption.OpenIfExists); 2368 GetFilesAndFolder(HomeFolder); 2369 this.Addresser.Reset(); 2370 headerText.Text = "Home"; 2371 RootFolder.Text = "|"; 2372 } 2373 2374 private void NowPlaying(object sender, RoutedEventArgs e) 2375 { 2376 MusicMenuClick(); 2377 } 2378 2379 private async void PreviousFolder(object sender, RoutedEventArgs e) 2380 { 2381 if (!this.Addresser.Root) 2382 { 2383 try 2384 { 2385 int curFoldCharNm = CurrentFolder.Path.LastIndexOf(CurrentFolder.Name); 2386 StorageFolder sf = await StorageFolder.GetFolderFromPathAsync(CurrentFolder.Path.Remove(curFoldCharNm)); 2387 this.Addresser.RemoveLast(); 2388 GetFilesAndFolder(sf); 2389 } 2390 catch { } 2391 } 2392 else 2393 { 2394 SideMenu.OpenDrawer(); 2395 } 2396 } 2397 2398 #endregion 2399 2400 private void password_rect_Tapped(object sender, TappedRoutedEventArgs e) 2401 { 2402 OpenDialog(1); 2403 } 2404 2405 2406 //#region Bluetooth 2407 //private async void OpenBluetoothSettings(object sender, RoutedEventArgs e) 2408 //{ 2409 // await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-bluetooth:")); 2410 //} 2411 //#endregion 2412 2413 #region HelpMenu 2414 private void HelpOpen(object sender, RoutedEventArgs e) 2415 { 2416 OpenDialog(0); 2417 } 2418 2419 private void HelpPageClose(object sender, RoutedEventArgs e) 2420 { 2421 CloseDialog(0); 2422 } 2423 #endregion 2424 2425 2426 #region FTP 2427 private void OpenFTP(object sender, RoutedEventArgs e) 2428 { 2429 FTPOpen.Begin(); 2430 FTPActive.Begin(); 2431 } 2432 #endregion 2433 #region Music 2434 private void musicToggle_Checked(object sender, RoutedEventArgs e) 2435 { 2436 settings.Values["musicPlayer"] = "1"; 2437 } 2438 private void musicToggle_Unchecked(object sender, RoutedEventArgs e) 2439 { 2440 settings.Values["musicPlayer"] = "0"; 2441 } 2442 2443 private void musThumbnailToggle_Checked(object sender, RoutedEventArgs e) 2444 { 2445 settings.Values["musThumbnail"] = "1"; 2446 } 2447 2448 private void musThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) 2449 { 2450 settings.Values["musThumbnail"] = "0"; 2451 } 2452 #endregion 2453 #region Videos 2454 private void videosToggle_Checked(object sender, RoutedEventArgs e) 2455 { 2456 settings.Values["videosPlayer"] = "1"; 2457 } 2458 private void videosToggle_Unchecked(object sender, RoutedEventArgs e) 2459 { 2460 settings.Values["videosPlayer"] = "0"; 2461 } 2462 private void vidThumbnailToggle_Checked(object sender, RoutedEventArgs e) 2463 { 2464 settings.Values["vidThumbnail"] = "1"; 2465 } 2466 2467 private void vidThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) 2468 { 2469 settings.Values["vidThumbnail"] = "0"; 2470 } 2471 2472 #endregion 2473 #region Ebooks 2474 private void ebookToggle_Checked(object sender, RoutedEventArgs e) 2475 { 2476 settings.Values["ebookViewer"] = "1"; 2477 } 2478 private void ebookToggle_Unchecked(object sender, RoutedEventArgs e) 2479 { 2480 settings.Values["ebookViewer"] = "0"; 2481 } 2482 #endregion 2483 #region Pictures 2484 private void picturesToggle_Checked(object sender, RoutedEventArgs e) 2485 { 2486 settings.Values["picturesPlayer"] = "1"; 2487 } 2488 2489 private void picturesToggle_Unchecked(object sender, RoutedEventArgs e) 2490 { 2491 settings.Values["picturesPlayer"] = "0"; 2492 } 2493 2494 private void picThumbnailToggle_Checked(object sender, RoutedEventArgs e) 2495 { 2496 settings.Values["picThumbnail"] = "1"; 2497 } 2498 2499 private void picThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) 2500 { 2501 settings.Values["picThumbnail"] = "0"; 2502 } 2503 #endregion 2504 2505 #region DialogOpenClose 2506 public void OpenDialog(int dialogNo) 2507 { 2508 ProgressDialog.Visibility = Visibility.Visible; 2509 switch(dialogNo) 2510 { 2511 case 0: 2512 SubFrameGrid.Visibility = Visibility.Visible; 2513 SubFrame.Navigate(typeof(HelpPage)); 2514 SubFrameHeader.Text = "HELP"; 2515 break; 2516 2517 case 1: 2518 SubFrameGrid.Visibility = Visibility.Visible; 2519 SubFrame.Navigate(typeof(VaultPage)); 2520 SubFrameHeader.Text = "VAULT"; 2521 break; 2522 case 2: 2523 FileMoveDialog.Visibility = Visibility.Visible; 2524 break; 2525 case 3: 2526 ProgInfoView.Visibility = Visibility.Visible; 2527 break; 2528 2529 } 2530 } 2531 2532 2533 public void CloseDialog(int dialogNo) 2534 { 2535 ProgressDialog.Visibility = Visibility.Collapsed ; 2536 switch (dialogNo) 2537 { 2538 case 0: 2539 SubFrameGrid.Visibility = Visibility.Collapsed; 2540 break; 2541 2542 case 1: 2543 SubFrameGrid.Visibility = Visibility.Collapsed; 2544 break; 2545 case 2: 2546 FileMoveDialog.Visibility = Visibility.Collapsed; 2547 break; 2548 case 3: 2549 ProgInfoView.Visibility = Visibility.Collapsed; 2550 break; 2551 2552 } 2553 } 2554 #endregion 2555 2556 private void CloseDialog(object sender, RoutedEventArgs e) 2557 { 2558 CloseDialog(2); 2559 } 2560 2561 private void musicSlider_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) 2562 { 2563 ((Storyboard)Resources["SeekOpen"]).Begin(); 2564 } 2565 2566 private void musicSlider_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) 2567 { 2568 int m = (int)(e.Delta.Translation.X *0.4); 2569 if (m < 1 && m> -1) 2570 return; 2571 if (mediaPlayer.CanSeek && m > 0) 2572 { 2573 mediaPlayer.Position.Add(new TimeSpan(0, 0, m)); 2574 } 2575 else if(mediaPlayer.CanSeek) 2576 { 2577 mediaPlayer.Position.Subtract(new TimeSpan(0, 0, m)); 2578 } 2579 } 2580 2581 private void musicSlider_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) 2582 { 2583 ((Storyboard)Resources["SeekClose"]).Begin(); 2584 } 2585 2586 private void StopFTP(object sender, RoutedEventArgs e) 2587 { 2588 FTPOpen.Stop(); 2589 FTPActive.Stop(); 2590 } 2591 2592 private void searchBox_TextChanged(object sender, TextChangedEventArgs e) 2593 { 2594 try 2595 { 2596 sd.Where(x => x.Name == searchBox.Text); 2597 } 2598 catch (ArgumentNullException) 2599 { 2600 sd.Clear(); 2601 } 2602 } 2603 } 2604 }