Browse Source

Add 'width' to conflict resolver

Fixes #194
Antony Male 10 years ago
parent
commit
d0f29a1c89

+ 2 - 0
src/SyncTrayzor/Pages/ConflictResolution/ConflictOptionViewModel.cs

@@ -1,5 +1,6 @@
 using Stylet;
 using SyncTrayzor.Services.Conflicts;
+using SyncTrayzor.Utils;
 using System;
 using System.IO;
 
@@ -13,6 +14,7 @@ namespace SyncTrayzor.Pages.ConflictResolution
 
         public DateTime DateCreated => this.ConflictOption.Created;
         public DateTime LastModified => this.ConflictOption.LastModified;
+        public string Size => FormatUtils.BytesToHuman(this.ConflictOption.SizeBytes, 1);
 
         public ConflictOptionViewModel(ConflictOption conflictOption)
         {

+ 14 - 4
src/SyncTrayzor/Pages/ConflictResolution/ConflictResolutionView.xaml

@@ -47,6 +47,7 @@
                         <ColumnDefinition Width="{Binding View.Columns[0].ActualWidth, ElementName=SelectConflictOptions}"/>
                         <ColumnDefinition Width="{Binding View.Columns[1].ActualWidth, ElementName=SelectConflictOptions}"/>
                         <ColumnDefinition Width="{Binding View.Columns[2].ActualWidth, ElementName=SelectConflictOptions}"/>
+                        <ColumnDefinition Width="{Binding View.Columns[3].ActualWidth, ElementName=SelectConflictOptions}"/>
                     </Grid.ColumnDefinitions>
                     <Grid.RowDefinitions>
                         <RowDefinition/>
@@ -64,10 +65,12 @@
 
                     <TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource Header}" Text="{l:Loc ConflictResolutionView_Header_OriginalFile}"/>
                     <TextBlock Grid.Row="0" Grid.Column="1" Style="{StaticResource Header}" Text="{l:Loc ConflictResolutionView_Header_LastModified}"/>
+                    <TextBlock Grid.Row="0" Grid.Column="2" Style="{StaticResource Header}" Text="{l:Loc ConflictResolutionView_Header_Size}"/>
 
                     <TextBlock Grid.Row="1" Grid.Column="0" Style="{StaticResource Value}" Text="{Binding SelectedConflict.FileName}"/>
                     <TextBlock Grid.Row="1" Grid.Column="1" Style="{StaticResource Value}" Text="{Binding SelectedConflict.LastModified}"/>
-                    <Button Grid.Row="1" Grid.Column="2"
+                    <TextBlock Grid.Row="1" Grid.Column="2" Style="{StaticResource Value}" Text="{Binding SelectedConflict.Size}"/>
+                    <Button Grid.Row="1" Grid.Column="3"
                                 HorizontalAlignment="Left"
                                 Style="{StaticResource Value}"
                                 Padding="5,0"
@@ -98,9 +101,16 @@
                                     </DataTemplate>
                                 </GridViewColumn.CellTemplate>
                             </GridViewColumn>
-                            <GridViewColumn
-                                Header="{l:Loc ConflictResolutionView_Header_ConflictCreated}"
-                                DisplayMemberBinding="{Binding DateCreated}"/>
+                            <GridViewColumn Header="{l:Loc ConflictResolutionView_Header_ConflictCreated}"
+                                            DisplayMemberBinding="{Binding DateCreated}"/>
+                            <GridViewColumn Header="{l:Loc ConflictResolutionView_Header_Size}">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <!-- The size in the 'Original File' table may be smaller - hack by adding padding here (which does make it look better anyway) -->
+                                        <TextBlock Margin="0,0,20,0" Text="{Binding Size}"/>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
                             <GridViewColumn>
                                 <GridViewColumn.CellTemplate>
                                     <DataTemplate>

+ 2 - 0
src/SyncTrayzor/Pages/ConflictResolution/ConflictViewModel.cs

@@ -27,6 +27,8 @@ namespace SyncTrayzor.Pages.ConflictResolution
         public BindableCollection<ConflictOptionViewModel> ConflictOptions { get; }
 
         public Icon Icon { get; }
+
+        public string Size => FormatUtils.BytesToHuman(this.ConflictSet.File.SizeBytes, 1);
         
 
         public ConflictViewModel(ConflictSet conflictSet, string folderName)

+ 9 - 0
src/SyncTrayzor/Properties/Resources.Designer.cs

@@ -285,6 +285,15 @@ namespace SyncTrayzor.Properties {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Size.
+        /// </summary>
+        public static string ConflictResolutionView_Header_Size {
+            get {
+                return ResourceManager.GetString("ConflictResolutionView_Header_Size", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Cancel.
         /// </summary>

+ 3 - 0
src/SyncTrayzor/Properties/Resources.resx

@@ -875,4 +875,7 @@ Do you want to restart SyncTrayzor now?</value>
   <data name="ConflictResolutionView_DeleteToRecycleBin" xml:space="preserve">
     <value>Move deleted files to the recycle bin, rather than deleting permanently</value>
   </data>
+  <data name="ConflictResolutionView_Header_Size" xml:space="preserve">
+    <value>Size</value>
+  </data>
 </root>

+ 8 - 4
src/SyncTrayzor/Services/Conflicts/ConflictFileManager.cs

@@ -14,11 +14,13 @@ namespace SyncTrayzor.Services.Conflicts
     {
         public string FilePath { get; }
         public DateTime LastModified { get; }
+        public long SizeBytes { get; }
 
-        public ConflictFile(string filePath, DateTime lastModified)
+        public ConflictFile(string filePath, DateTime lastModified, long sizeBytes)
         {
             this.FilePath = filePath;
             this.LastModified = lastModified;
+            this.SizeBytes = sizeBytes;
         }
 
         public override string ToString()
@@ -33,12 +35,14 @@ namespace SyncTrayzor.Services.Conflicts
         public DateTime LastModified { get; }
 
         public DateTime Created { get; }
+        public long SizeBytes { get; }
 
-        public ConflictOption(string filePath, DateTime lastModified, DateTime created)
+        public ConflictOption(string filePath, DateTime lastModified, DateTime created, long sizeBytes)
         {
             this.FilePath = filePath;
             this.LastModified = lastModified;
             this.Created = created;
+            this.SizeBytes = sizeBytes;
         }
 
         public override string ToString()
@@ -164,8 +168,8 @@ namespace SyncTrayzor.Services.Conflicts
 
                 foreach (var kvp in conflictLookup)
                 {
-                    var file = new ConflictFile(kvp.Key, this.filesystemProvider.GetLastWriteTime(kvp.Key));
-                    var conflicts = kvp.Value.Select(x => new ConflictOption(x.FilePath, this.filesystemProvider.GetLastWriteTime(x.FilePath), x.Created)).ToList();
+                    var file = new ConflictFile(kvp.Key, this.filesystemProvider.GetLastWriteTime(kvp.Key), this.filesystemProvider.GetFileSize(kvp.Key));
+                    var conflicts = kvp.Value.Select(x => new ConflictOption(x.FilePath, this.filesystemProvider.GetLastWriteTime(x.FilePath), x.Created, this.filesystemProvider.GetFileSize(x.FilePath))).ToList();
                     subject.Next(new ConflictSet(file, conflicts));
                 }
 

+ 3 - 0
src/SyncTrayzor/Services/FilesystemProvider.cs

@@ -29,6 +29,7 @@ namespace SyncTrayzor.Services
         string[] GetDirectories(string path, string searchPattern, SearchOption searchOption);
         IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOption);
         IEnumerable<string> EnumerateDirectories(string path, string searchPattern, SearchOption searchOption);
+        long GetFileSize(string path);
     }
 
     public class FilesystemProvider : IFilesystemProvider
@@ -87,5 +88,7 @@ namespace SyncTrayzor.Services
 
         public IEnumerable<string> EnumerateDirectories(string path, string searchPattern, SearchOption searchOption)
             => Pri.LongPath.Directory.EnumerateDirectories(path, searchPattern, searchOption);
+
+        public long GetFileSize(string path) => new Pri.LongPath.FileInfo(path).Length;
     }
 }

+ 1 - 1
src/SyncTrayzor/Utils/FormatUtils.cs

@@ -17,7 +17,7 @@ namespace SyncTrayzor.Utils
                 order++;
                 bytes = bytes / 1024;
             }
-            var placesFmtString = new String('0', decimalPlaces);
+            var placesFmtString = (order > 0) ? new String('0', decimalPlaces) : String.Empty;
             return String.Format("{0:0." + placesFmtString + "}{1}", bytes, sizes[order]);
         }