Skip to content

Commit b2328c0

Browse files
authored
Merge pull request #79 from ashikns/auto-refresh
Auto refresh files and folders
2 parents 256a881 + 83ebed5 commit b2328c0

File tree

9 files changed

+443
-466
lines changed

9 files changed

+443
-466
lines changed

Files UWP/AddItem.xaml.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ private async void ListView_ItemClick(object sender, ItemClickEventArgs e)
4242
var userInput = GenericFileBrowser.inputForRename;
4343
if (userInput != null)
4444
{
45-
await folderToCreateItem.CreateFolderAsync(userInput, CreationCollisionOption.FailIfExists);
46-
App.ViewModel.FilesAndFolders.Add(new ListedItem(){ FileName = userInput, FileDate = "Now", EmptyImgVis = Visibility.Collapsed, FolderImg = Visibility.Visible, FileIconVis = Visibility.Collapsed, FileType = "Folder", FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + userInput) });
45+
var folder = await folderToCreateItem.CreateFolderAsync(userInput, CreationCollisionOption.FailIfExists);
46+
App.ViewModel.AddFileOrFolder(new ListedItem(folder.FolderRelativeId){ FileName = userInput, FileDateReal = DateTimeOffset.Now, EmptyImgVis = Visibility.Collapsed, FolderImg = Visibility.Visible, FileIconVis = Visibility.Collapsed, FileType = "Folder", FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + userInput) });
4747
}
4848
}
4949
else if ((e.ClickedItem as AddListItem).Header == "Text Document")
@@ -52,8 +52,8 @@ private async void ListView_ItemClick(object sender, ItemClickEventArgs e)
5252
var userInput = GenericFileBrowser.inputForRename;
5353
if (userInput != null)
5454
{
55-
await folderToCreateItem.CreateFileAsync(userInput + ".txt", CreationCollisionOption.FailIfExists);
56-
App.ViewModel.FilesAndFolders.Add(new ListedItem() { FileName = userInput, FileDate = "Now", EmptyImgVis = Visibility.Visible, FolderImg = Visibility.Collapsed, FileIconVis = Visibility.Collapsed, FileType = "Text Document", FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + userInput + ".txt"), DotFileExtension = ".txt" });
55+
var folder = await folderToCreateItem.CreateFileAsync(userInput + ".txt", CreationCollisionOption.FailIfExists);
56+
App.ViewModel.AddFileOrFolder(new ListedItem(folder.FolderRelativeId) { FileName = userInput, FileDateReal = DateTimeOffset.Now, EmptyImgVis = Visibility.Visible, FolderImg = Visibility.Collapsed, FileIconVis = Visibility.Collapsed, FileType = "Text Document", FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + userInput + ".txt"), DotFileExtension = ".txt" });
5757
}
5858
}
5959
else if ((e.ClickedItem as AddListItem).Header == "Bitmap Image")
@@ -62,9 +62,8 @@ private async void ListView_ItemClick(object sender, ItemClickEventArgs e)
6262
var userInput = GenericFileBrowser.inputForRename;
6363
if (userInput != null)
6464
{
65-
await folderToCreateItem.CreateFileAsync(userInput + ".bmp", CreationCollisionOption.FailIfExists);
66-
App.ViewModel.FilesAndFolders.Add(new ListedItem() { FileName = userInput, FileDate = "Now", EmptyImgVis = Visibility.Visible, FolderImg = Visibility.Collapsed, FileIconVis = Visibility.Collapsed, FileType = "BMP File", FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + userInput + ".bmp"), DotFileExtension = ".bmp" });
67-
65+
var folder = await folderToCreateItem.CreateFileAsync(userInput + ".bmp", CreationCollisionOption.FailIfExists);
66+
App.ViewModel.AddFileOrFolder(new ListedItem(folder.FolderRelativeId) { FileName = userInput, FileDateReal = DateTimeOffset.Now, EmptyImgVis = Visibility.Visible, FolderImg = Visibility.Collapsed, FileIconVis = Visibility.Collapsed, FileType = "BMP File", FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + userInput + ".bmp"), DotFileExtension = ".bmp" });
6867
}
6968
}
7069
}

Files UWP/Filesystem/ItemViewModel.cs

Lines changed: 318 additions & 384 deletions
Large diffs are not rendered by default.

Files UWP/Filesystem/ListedItem.cs

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,65 @@
1-
using Windows.UI.Xaml;
1+
using System;
2+
using Windows.UI.Xaml;
23
using Windows.UI.Xaml.Media.Imaging;
34

45
namespace Files.Filesystem
56
{
67
public class ListedItem
78
{
9+
public string FolderRelativeId { get; }
10+
811
public Visibility FolderImg { get; set; }
912
public Visibility FileIconVis { get; set; }
1013
public Visibility EmptyImgVis { get; set; }
1114
public BitmapImage FileImg { get; set; }
1215
public string FileName { get; set; }
13-
public string FileDate { get; set; }
16+
public string FileDate { get; private set; }
1417
public string FileType { get; set; }
1518
public string DotFileExtension { get; set; }
1619
public string FilePath { get; set; }
1720
public string FileSize { get; set; }
18-
public ListedItem()
21+
22+
public DateTimeOffset FileDateReal
23+
{
24+
get { return _fileDataReal; }
25+
set
26+
{
27+
FileDate = GetFriendlyDate(value);
28+
_fileDataReal = value;
29+
}
30+
}
31+
32+
private DateTimeOffset _fileDataReal;
33+
34+
public ListedItem(string folderRelativeId)
35+
{
36+
FolderRelativeId = folderRelativeId;
37+
}
38+
39+
public static string GetFriendlyDate(DateTimeOffset d)
1940
{
41+
var elapsed = DateTimeOffset.Now - d;
2042

43+
if (elapsed.TotalDays > 7)
44+
{
45+
return d.ToString("D");
46+
}
47+
else if (elapsed.TotalDays > 1)
48+
{
49+
return $"{elapsed.Days} days ago";
50+
}
51+
else if (elapsed.TotalHours > 1)
52+
{
53+
return $"{elapsed.Hours} hours ago";
54+
}
55+
else if (elapsed.TotalMinutes > 1)
56+
{
57+
return $"{elapsed.Minutes} minutes ago";
58+
}
59+
else
60+
{
61+
return $"{elapsed.Seconds} seconds ago";
62+
}
2163
}
2264
}
2365
}

Files UWP/GenericFileBrowser.xaml.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
112112
{
113113
base.OnNavigatedTo(eventArgs);
114114
var parameters = (string)eventArgs.Parameter;
115-
App.ViewModel.FilesAndFolders.Clear();
115+
App.ViewModel.CancelLoadAndClearFiles();
116116
App.ViewModel.Universal.path = parameters;
117117
App.ViewModel.AddItemsToCollectionAsync(App.ViewModel.Universal.path, GenericItemView);
118118
if (parameters.Equals(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)))
@@ -332,11 +332,7 @@ private async void VisiblePath_TextChanged(object sender, KeyRoutedEventArgs e)
332332
var CurrentInput = PathBox.Text;
333333
if (CurrentInput != App.ViewModel.Universal.path)
334334
{
335-
if (App.ViewModel.tokenSource != null)
336-
{
337-
App.ViewModel.tokenSource.Cancel();
338-
App.ViewModel.FilesAndFolders.Clear();
339-
}
335+
App.ViewModel.CancelLoadAndClearFiles();
340336

341337
if (CurrentInput == "Home" || CurrentInput == "home")
342338
{

Files UWP/Interacts/Interaction.cs

Lines changed: 57 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using System.Collections;
2121
using Windows.Foundation;
2222
using Windows.UI.Xaml.Controls.Primitives;
23+
using System.IO;
2324

2425
namespace Files.Interacts
2526
{
@@ -60,7 +61,7 @@ public static async void List_ItemClick(object sender, DoubleTappedRoutedEventAr
6061
App.ViewModel.TextState.isVisible = Visibility.Collapsed;
6162
History.ForwardList.Clear();
6263
App.ViewModel.FS.isEnabled = false;
63-
App.ViewModel.FilesAndFolders.Clear();
64+
App.ViewModel.CancelLoadAndClearFiles();
6465
if (clickedOnItem.FilePath == Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))
6566
{
6667
App.PathText.Text = "Desktop";
@@ -221,7 +222,7 @@ public static async void List_ItemClick(object sender, DoubleTappedRoutedEventAr
221222
App.ViewModel.TextState.isVisible = Visibility.Collapsed;
222223
History.ForwardList.Clear();
223224
App.ViewModel.FS.isEnabled = false;
224-
App.ViewModel.FilesAndFolders.Clear();
225+
App.ViewModel.CancelLoadAndClearFiles();
225226
if (clickedOnItem.FilePath == Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))
226227
{
227228
App.PathText.Text = "Desktop";
@@ -454,7 +455,7 @@ public static async void OpenItem_Click(object sender, RoutedEventArgs e)
454455
App.ViewModel.TextState.isVisible = Visibility.Collapsed;
455456
History.ForwardList.Clear();
456457
App.ViewModel.FS.isEnabled = false;
457-
App.ViewModel.FilesAndFolders.Clear();
458+
App.ViewModel.CancelLoadAndClearFiles();
458459
App.ViewModel.Universal.path = RowData.FilePath;
459460
App.ViewModel.AddItemsToCollectionAsync(App.ViewModel.Universal.path, GenericFileBrowser.GFBPageName);
460461
}
@@ -476,7 +477,7 @@ public static async void OpenItem_Click(object sender, RoutedEventArgs e)
476477
App.ViewModel.TextState.isVisible = Visibility.Collapsed;
477478
History.ForwardList.Clear();
478479
App.ViewModel.FS.isEnabled = false;
479-
App.ViewModel.FilesAndFolders.Clear();
480+
App.ViewModel.CancelLoadAndClearFiles();
480481
App.ViewModel.Universal.path = RowData.FilePath;
481482
App.ViewModel.AddItemsToCollectionAsync(RowData.FilePath, PhotoAlbum.PAPageName);
482483
}
@@ -567,7 +568,7 @@ public static async void DeleteItem_Click(object sender, RoutedEventArgs e)
567568
await item.DeleteAsync(StorageDeleteOption.Default);
568569

569570
}
570-
App.ViewModel.FilesAndFolders.Remove(storItem);
571+
App.ViewModel.RemoveFileOrFolder(storItem);
571572
}
572573
Debug.WriteLine("Ended for loop");
573574
History.ForwardList.Clear();
@@ -594,7 +595,7 @@ public static async void DeleteItem_Click(object sender, RoutedEventArgs e)
594595
await item.DeleteAsync(StorageDeleteOption.Default);
595596

596597
}
597-
App.ViewModel.FilesAndFolders.Remove(storItem);
598+
App.ViewModel.RemoveFileOrFolder(storItem);
598599
}
599600
Debug.WriteLine("Ended for loop");
600601
History.ForwardList.Clear();
@@ -625,16 +626,36 @@ public static async void RenameItem_Click(object sender, RoutedEventArgs e)
625626
{
626627
var item = await StorageFolder.GetFolderFromPathAsync(RowData.FilePath);
627628
await item.RenameAsync(input, NameCollisionOption.FailIfExists);
628-
App.ViewModel.FilesAndFolders.Remove(RowData);
629-
App.ViewModel.FilesAndFolders.Add(new ListedItem() { FileName = input, FileDate = "Now", EmptyImgVis = Visibility.Collapsed, FolderImg = Visibility.Visible, FileIconVis = Visibility.Collapsed, FileType = "Folder", FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + input) });
629+
App.ViewModel.RemoveFileOrFolder(RowData);
630+
App.ViewModel.AddFileOrFolder(new ListedItem(item.FolderRelativeId)
631+
{
632+
FileName = input,
633+
FileDateReal = DateTimeOffset.Now,
634+
EmptyImgVis = Visibility.Collapsed,
635+
FolderImg = Visibility.Visible,
636+
FileIconVis = Visibility.Collapsed,
637+
FileType = "Folder",
638+
FileImg = null,
639+
FilePath = Path.Combine(App.ViewModel.Universal.path, input)
640+
});
630641
}
631642
else
632643
{
633644
var item = await StorageFile.GetFileFromPathAsync(RowData.FilePath);
634645
await item.RenameAsync(input + RowData.DotFileExtension, NameCollisionOption.FailIfExists);
635-
App.ViewModel.FilesAndFolders.Remove(RowData);
636-
App.ViewModel.FilesAndFolders.Add(new ListedItem() { FileName = input, FileDate = "Now", EmptyImgVis = Visibility.Visible, FolderImg = Visibility.Collapsed, FileIconVis = Visibility.Collapsed, FileType = RowData.FileType, FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + input + RowData.DotFileExtension), DotFileExtension = RowData.DotFileExtension });
637-
646+
App.ViewModel.RemoveFileOrFolder(RowData);
647+
App.ViewModel.AddFileOrFolder(new ListedItem(item.FolderRelativeId)
648+
{
649+
FileName = input,
650+
FileDateReal = DateTimeOffset.Now,
651+
EmptyImgVis = Visibility.Visible,
652+
FolderImg = Visibility.Collapsed,
653+
FileIconVis = Visibility.Collapsed,
654+
FileType = RowData.FileType,
655+
FileImg = null,
656+
FilePath = Path.Combine(App.ViewModel.Universal.path, input + RowData.DotFileExtension),
657+
DotFileExtension = RowData.DotFileExtension
658+
});
638659
}
639660
}
640661

@@ -659,16 +680,36 @@ public static async void RenameItem_Click(object sender, RoutedEventArgs e)
659680
{
660681
var item = await StorageFolder.GetFolderFromPathAsync(BoxData.FilePath);
661682
await item.RenameAsync(input, NameCollisionOption.FailIfExists);
662-
App.ViewModel.FilesAndFolders.Remove(BoxData);
663-
App.ViewModel.FilesAndFolders.Add(new ListedItem() { FileName = input, FileDate = "Now", EmptyImgVis = Visibility.Collapsed, FolderImg = Visibility.Visible, FileIconVis = Visibility.Collapsed, FileType = "Folder", FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + input) });
683+
App.ViewModel.RemoveFileOrFolder(BoxData);
684+
App.ViewModel.AddFileOrFolder(new ListedItem(item.FolderRelativeId)
685+
{
686+
FileName = input,
687+
FileDateReal = DateTimeOffset.Now,
688+
EmptyImgVis = Visibility.Collapsed,
689+
FolderImg = Visibility.Visible,
690+
FileIconVis = Visibility.Collapsed,
691+
FileType = "Folder",
692+
FileImg = null,
693+
FilePath = Path.Combine(App.ViewModel.Universal.path, input)
694+
});
664695
}
665696
else
666697
{
667698
var item = await StorageFile.GetFileFromPathAsync(BoxData.FilePath);
668699
await item.RenameAsync(input + BoxData.DotFileExtension, NameCollisionOption.FailIfExists);
669-
App.ViewModel.FilesAndFolders.Remove(BoxData);
670-
App.ViewModel.FilesAndFolders.Add(new ListedItem() { FileName = input, FileDate = "Now", EmptyImgVis = Visibility.Visible, FolderImg = Visibility.Collapsed, FileIconVis = Visibility.Collapsed, FileType = BoxData.FileType, FileImg = null, FilePath = (App.ViewModel.Universal.path + "\\" + input + BoxData.DotFileExtension), DotFileExtension = BoxData.DotFileExtension });
671-
700+
App.ViewModel.RemoveFileOrFolder(BoxData);
701+
App.ViewModel.AddFileOrFolder(new ListedItem(item.FolderRelativeId)
702+
{
703+
FileName = input,
704+
FileDateReal = DateTimeOffset.Now,
705+
EmptyImgVis = Visibility.Visible,
706+
FolderImg = Visibility.Collapsed,
707+
FileIconVis = Visibility.Collapsed,
708+
FileType = BoxData.FileType,
709+
FileImg = null,
710+
FilePath = Path.Combine(App.ViewModel.Universal.path, input + BoxData.DotFileExtension),
711+
DotFileExtension = BoxData.DotFileExtension
712+
});
672713
}
673714
}
674715

Files UWP/MainPage.xaml.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,8 @@ private void NavView_ItemInvoked(Microsoft.UI.Xaml.Controls.NavigationView sende
151151
}
152152
else
153153
{
154-
if(App.ViewModel.tokenSource != null)
155-
{
156-
App.ViewModel.tokenSource.Cancel();
157-
App.ViewModel.FilesAndFolders.Clear();
158-
}
154+
App.ViewModel.CancelLoadAndClearFiles();
155+
159156
App.ViewModel.TextState.isVisible = Visibility.Collapsed;
160157
if (item.ToString() == "Home")
161158
{

Files UWP/Navigation/NavigationActions.cs

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,7 @@ public class NavigationActions
1111
{
1212
public static void Back_Click(object sender, RoutedEventArgs e)
1313
{
14-
if(App.ViewModel.tokenSource != null)
15-
{
16-
App.ViewModel.tokenSource.Cancel();
17-
}
18-
App.ViewModel.FilesAndFolders.Clear();
14+
App.ViewModel.CancelLoadAndClearFiles();
1915

2016
if (History.HistoryList.Count > 1)
2117
{
@@ -24,7 +20,7 @@ public static void Back_Click(object sender, RoutedEventArgs e)
2420
History.AddToForwardList(History.HistoryList[History.HistoryList.Count - 1]);
2521
History.HistoryList.RemoveAt(History.HistoryList.Count - 1);
2622

27-
App.ViewModel.FilesAndFolders.Clear();
23+
App.ViewModel.CancelLoadAndClearFiles();
2824

2925
// If the item we are navigating back to is a specific library, accomodate this.
3026
if ((History.HistoryList[History.HistoryList.Count - 1]) == Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))
@@ -160,19 +156,12 @@ public static void Back_Click(object sender, RoutedEventArgs e)
160156

161157
public static void Forward_Click(object sender, RoutedEventArgs e)
162158
{
163-
164-
if(App.ViewModel.tokenSource != null)
165-
{
166-
App.ViewModel.tokenSource.Cancel();
167-
}
168-
App.ViewModel.FilesAndFolders.Clear();
169-
159+
App.ViewModel.CancelLoadAndClearFiles();
170160

171161
if (History.ForwardList.Count() > 0)
172162
{
173163
App.ViewModel.TextState.isVisible = Visibility.Collapsed;
174-
App.ViewModel.FilesAndFolders.Clear();
175-
164+
App.ViewModel.CancelLoadAndClearFiles();
176165

177166
if ((History.ForwardList[History.ForwardList.Count() - 1]) == Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))
178167
{
@@ -313,12 +302,9 @@ public async static void Refresh_Click(object sender, RoutedEventArgs e)
313302
{
314303
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
315304
{
316-
if(App.ViewModel.tokenSource != null)
317-
{
318-
App.ViewModel.tokenSource.Cancel();
319-
}
305+
App.ViewModel.CancelLoadAndClearFiles();
306+
320307
App.ViewModel.TextState.isVisible = Visibility.Collapsed;
321-
App.ViewModel.FilesAndFolders.Clear();
322308
App.ViewModel.AddItemsToCollectionAsync(App.ViewModel.Universal.path, GenericFileBrowser.GFBPageName);
323309
if ((History.HistoryList[History.HistoryList.Count - 1]) == Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))
324310
{

0 commit comments

Comments
 (0)