Skip to content

Commit 72620da

Browse files
authored
Refactor PreviewViewModel (#9379)
1 parent ba6624b commit 72620da

18 files changed

+314
-405
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using System;
2+
3+
namespace Files.Shared.Extensions
4+
{
5+
public static class StringExtensions
6+
{
7+
/// <summary>Gets the leftmost <paramref name="length" /> characters from a string.</summary>
8+
/// <param name="value">The string to retrieve the substring from.</param>
9+
/// <param name="length">The number of characters to retrieve.</param>
10+
/// <returns>The substring.</returns>
11+
public static string Left(this string value, int length)
12+
{
13+
if (value is null)
14+
{
15+
throw new ArgumentNullException(nameof(value));
16+
}
17+
if (length < 0)
18+
{
19+
throw new ArgumentOutOfRangeException(nameof(length), length, "Length is less than zero");
20+
}
21+
if (length > value.Length)
22+
{
23+
return value;
24+
}
25+
return value.Substring(0, length);
26+
}
27+
28+
/// <summary>Gets the rightmost <paramref name="length" /> characters from a string.</summary>
29+
/// <param name="value">The string to retrieve the substring from.</param>
30+
/// <param name="length">The number of characters to retrieve.</param>
31+
/// <returns>The substring.</returns>
32+
public static string Right(this string value, int length)
33+
{
34+
if (value is null)
35+
{
36+
throw new ArgumentNullException(nameof(value));
37+
}
38+
if (length < 0)
39+
{
40+
throw new ArgumentOutOfRangeException(nameof(length), length, "Length is less than zero");
41+
}
42+
if (length > value.Length)
43+
{
44+
return value;
45+
}
46+
return value.Substring(value.Length - length);
47+
}
48+
}
49+
}

src/Files.Uwp/Extensions/StringExtensions.cs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using ByteSizeLib;
2+
using Files.Shared.Extensions;
23
using Microsoft.Toolkit.Uwp;
34
using System;
45
using System.Collections.Generic;
@@ -53,24 +54,6 @@ public static string WithEnding(this string str, string ending)
5354
return result;
5455
}
5556

56-
/// <summary>Gets the rightmost <paramref name="length" /> characters from a string.</summary>
57-
/// <param name="value">The string to retrieve the substring from.</param>
58-
/// <param name="length">The number of characters to retrieve.</param>
59-
/// <returns>The substring.</returns>
60-
public static string Right(this string value, int length)
61-
{
62-
if (value == null)
63-
{
64-
throw new ArgumentNullException("value");
65-
}
66-
if (length < 0)
67-
{
68-
throw new ArgumentOutOfRangeException("length", length, "Length is less than zero");
69-
}
70-
71-
return (length < value.Length) ? value.Substring(value.Length - length) : value;
72-
}
73-
7457
private static readonly Dictionary<string, string> abbreviations = new Dictionary<string, string>()
7558
{
7659
{ "KiB", "KiloByteSymbol".GetLocalized() },

src/Files.Uwp/Helpers/AdaptiveLayoutHelpers.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
using Files.Backend.Services.Settings;
1+
using CommunityToolkit.Mvvm.DependencyInjection;
2+
using Files.Backend.Services.Settings;
23
using Files.Uwp.ViewModels;
34
using Files.Uwp.ViewModels.Previews;
4-
using CommunityToolkit.Mvvm.DependencyInjection;
55
using System;
66
using System.Linq;
77
using Windows.Storage;
@@ -108,11 +108,11 @@ public static bool PredictLayoutMode(FolderSettingsViewModel folderSettings, Ite
108108

109109
mediaCount = filesystemViewModel.FilesAndFolders.Where((item) =>
110110
{
111-
return !string.IsNullOrEmpty(item.FileExtension) && MediaPreviewViewModel.Extensions.Any((ext) => item.FileExtension.Equals(ext, StringComparison.OrdinalIgnoreCase));
111+
return !string.IsNullOrEmpty(item.FileExtension) && MediaPreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant());
112112
}).Count();
113113
imagesCount = filesystemViewModel.FilesAndFolders.Where((item) =>
114114
{
115-
return !string.IsNullOrEmpty(item.FileExtension) && ImagePreviewViewModel.Extensions.Any((ext) => item.FileExtension.Equals(ext, StringComparison.OrdinalIgnoreCase));
115+
return !string.IsNullOrEmpty(item.FileExtension) && ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant());
116116
}).Count();
117117
foldersCount = filesystemViewModel.FilesAndFolders.Where((item) => item.PrimaryItemAttribute == StorageItemTypes.Folder).Count();
118118
miscFilesCount = allItemsCount - (mediaCount + imagesCount + foldersCount);

src/Files.Uwp/ViewModels/ItemViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,7 @@ await dispatcherQueue.EnqueueAsync(async () =>
936936
await item.FileImage.SetSourceAsync(Thumbnail);
937937
if (!string.IsNullOrEmpty(item.FileExtension) &&
938938
!item.IsShortcutItem && !item.IsExecutable &&
939-
!ImagePreviewViewModel.Extensions.Contains(item.FileExtension, StringComparer.OrdinalIgnoreCase))
939+
!ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()))
940940
{
941941
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
942942
}
@@ -965,7 +965,7 @@ await dispatcherQueue.EnqueueAsync(async () =>
965965
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
966966
if (!string.IsNullOrEmpty(item.FileExtension) &&
967967
!item.IsShortcutItem && !item.IsExecutable &&
968-
!ImagePreviewViewModel.Extensions.Contains(item.FileExtension, StringComparer.OrdinalIgnoreCase))
968+
!ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()))
969969
{
970970
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
971971
}

src/Files.Uwp/ViewModels/PreviewPaneViewModel.cs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
using Files.Shared.Enums;
2-
using Files.Uwp.Filesystem;
1+
using CommunityToolkit.Mvvm.ComponentModel;
2+
using CommunityToolkit.Mvvm.DependencyInjection;
3+
using CommunityToolkit.Mvvm.Input;
34
using Files.Backend.Services.Settings;
5+
using Files.Shared.Enums;
6+
using Files.Shared.EventArguments;
7+
using Files.Uwp.Filesystem;
48
using Files.Uwp.UserControls.FilePreviews;
59
using Files.Uwp.ViewModels.Previews;
6-
using CommunityToolkit.Mvvm.ComponentModel;
7-
using CommunityToolkit.Mvvm.DependencyInjection;
8-
using CommunityToolkit.Mvvm.Input;
910
using System;
1011
using System.Diagnostics;
1112
using System.Threading;
@@ -14,7 +15,6 @@
1415
using Windows.Storage;
1516
using Windows.UI.Xaml;
1617
using Windows.UI.Xaml.Controls;
17-
using Files.Shared.EventArguments;
1818

1919
namespace Files.Uwp.ViewModels
2020
{
@@ -160,56 +160,57 @@ private async Task<UserControl> GetBuiltInPreviewControlAsync(ListedItem item, b
160160
}
161161

162162
var ext = item.FileExtension.ToLowerInvariant();
163-
if (MediaPreviewViewModel.Extensions.Contains(ext))
163+
164+
if (MediaPreviewViewModel.ContainsExtension(ext))
164165
{
165166
var model = new MediaPreviewViewModel(item);
166167
await model.LoadAsync();
167168
return new MediaPreview(model);
168169
}
169170

170-
if (MarkdownPreviewViewModel.Extensions.Contains(ext))
171+
if (MarkdownPreviewViewModel.ContainsExtension(ext))
171172
{
172173
var model = new MarkdownPreviewViewModel(item);
173174
await model.LoadAsync();
174175
return new MarkdownPreview(model);
175176
}
176177

177-
if (ImagePreviewViewModel.Extensions.Contains(ext))
178+
if (ImagePreviewViewModel.ContainsExtension(ext))
178179
{
179180
var model = new ImagePreviewViewModel(item);
180181
await model.LoadAsync();
181182
return new ImagePreview(model);
182183
}
183184

184-
if (TextPreviewViewModel.Extensions.Contains(ext))
185+
if (TextPreviewViewModel.ContainsExtension(ext))
185186
{
186187
var model = new TextPreviewViewModel(item);
187188
await model.LoadAsync();
188189
return new TextPreview(model);
189190
}
190191

191-
if (PDFPreviewViewModel.Extensions.Contains(ext))
192+
if (PDFPreviewViewModel.ContainsExtension(ext))
192193
{
193194
var model = new PDFPreviewViewModel(item);
194195
await model.LoadAsync();
195196
return new PDFPreview(model);
196197
}
197198

198-
if (HtmlPreviewViewModel.Extensions.Contains(ext))
199+
if (HtmlPreviewViewModel.ContainsExtension(ext))
199200
{
200201
var model = new HtmlPreviewViewModel(item);
201202
await model.LoadAsync();
202203
return new HtmlPreview(model);
203204
}
204205

205-
if (RichTextPreviewViewModel.Extensions.Contains(ext))
206+
if (RichTextPreviewViewModel.ContainsExtension(ext))
206207
{
207208
var model = new RichTextPreviewViewModel(item);
208209
await model.LoadAsync();
209210
return new RichTextPreview(model);
210211
}
211212

212-
if (CodePreviewViewModel.Extensions.Contains(ext))
213+
if (CodePreviewViewModel.ContainsExtension(ext))
213214
{
214215
var model = new CodePreviewViewModel(item);
215216
await model.LoadAsync();

src/Files.Uwp/ViewModels/Previews/ArchivePreviewViewModel.cs

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,51 +11,33 @@ namespace Files.Uwp.ViewModels.Previews
1111
{
1212
public class ArchivePreviewViewModel : BasePreviewModel
1313
{
14-
public static List<string> Extensions => new List<string>()
15-
{
16-
".zip",
17-
};
14+
public ArchivePreviewViewModel(ListedItem item) : base(item) {}
1815

19-
public ArchivePreviewViewModel(ListedItem item) : base(item)
20-
{
21-
}
22-
23-
public override async Task<List<FileProperty>> LoadPreviewAndDetails()
16+
public override async Task<List<FileProperty>> LoadPreviewAndDetailsAsync()
2417
{
2518
var details = new List<FileProperty>();
26-
using ZipFile zipFile = new ZipFile(await Item.ItemFile.OpenStreamForReadAsync());
19+
using ZipFile zipFile = new(await Item.ItemFile.OpenStreamForReadAsync());
2720
zipFile.IsStreamOwner = true;
2821

29-
var folderCount = 0;
30-
var fileCount = 0;
22+
long fileCount = 0;
23+
long folderCount;
3124
long totalSize = 0;
3225

3326
foreach (ZipEntry entry in zipFile)
3427
{
3528
if (entry.IsFile)
3629
{
37-
fileCount++;
30+
++fileCount;
3831
totalSize += entry.Size;
3932
}
40-
else
41-
{
42-
folderCount++;
43-
}
4433
}
34+
folderCount = zipFile.Count - fileCount;
4535

46-
details.Add(new FileProperty()
47-
{
48-
NameResource = "PropertyItemCount",
49-
Value = string.Format("DetailsArchiveItemCount".GetLocalized(), zipFile.Count, fileCount, folderCount),
50-
});
51-
52-
details.Add(new FileProperty()
53-
{
54-
NameResource = "PropertyUncompressedSize",
55-
Value = totalSize.ToLongSizeString(),
56-
});
36+
string propertyItemCount = string.Format("DetailsArchiveItemCount".GetLocalized(), zipFile.Count, fileCount, folderCount);
37+
details.Add(GetFileProperty("PropertyItemCount", propertyItemCount));
38+
details.Add(GetFileProperty("PropertyUncompressedSize", totalSize.ToLongSizeString()));
5739

58-
_ = await base.LoadPreviewAndDetails(); // Loads the thumbnail preview
40+
_ = await base.LoadPreviewAndDetailsAsync(); // Loads the thumbnail preview
5941
return details;
6042
}
6143
}

0 commit comments

Comments
 (0)