|
4 | 4 | using System.Threading.Tasks;
|
5 | 5 |
|
6 | 6 | using Avalonia.Controls;
|
| 7 | +using Avalonia.Platform.Storage; |
7 | 8 | using Avalonia.Threading;
|
8 | 9 |
|
9 | 10 | using CommunityToolkit.Mvvm.ComponentModel;
|
@@ -157,9 +158,45 @@ public ContextMenu MakeContextMenu(Models.Stash stash)
|
157 | 158 | ev.Handled = true;
|
158 | 159 | };
|
159 | 160 |
|
| 161 | + var patch = new MenuItem(); |
| 162 | + patch.Header = App.Text("StashCM.SaveAsPatch"); |
| 163 | + patch.Icon = App.CreateMenuIcon("Icons.Diff"); |
| 164 | + patch.Click += async (_, e) => |
| 165 | + { |
| 166 | + var storageProvider = App.GetStorageProvider(); |
| 167 | + if (storageProvider == null) |
| 168 | + return; |
| 169 | + |
| 170 | + var options = new FilePickerSaveOptions(); |
| 171 | + options.Title = App.Text("StashCM.SaveAsPatch"); |
| 172 | + options.DefaultExtension = ".patch"; |
| 173 | + options.FileTypeChoices = [new FilePickerFileType("Patch File") { Patterns = ["*.patch"] }]; |
| 174 | + |
| 175 | + var storageFile = await storageProvider.SaveFilePickerAsync(options); |
| 176 | + if (storageFile != null) |
| 177 | + { |
| 178 | + var opts = new List<Models.DiffOption>(); |
| 179 | + foreach (var c in _changes) |
| 180 | + { |
| 181 | + if (_untrackedChanges.Contains(c.Path)) |
| 182 | + opts.Add(new Models.DiffOption("4b825dc642cb6eb9a060e54bf8d69288fbee4904", _selectedStash.Parents[2], c)); |
| 183 | + else |
| 184 | + opts.Add(new Models.DiffOption(_selectedStash.Parents[0], _selectedStash.SHA, c)); |
| 185 | + } |
| 186 | + |
| 187 | + var succ = await Task.Run(() => Commands.SaveChangesAsPatch.ProcessStashChanges(_repo.FullPath, opts, storageFile.Path.LocalPath)); |
| 188 | + if (succ) |
| 189 | + App.SendNotification(_repo.FullPath, App.Text("SaveAsPatchSuccess")); |
| 190 | + } |
| 191 | + |
| 192 | + e.Handled = true; |
| 193 | + }; |
| 194 | + |
160 | 195 | var menu = new ContextMenu();
|
161 | 196 | menu.Items.Add(apply);
|
162 | 197 | menu.Items.Add(drop);
|
| 198 | + menu.Items.Add(new MenuItem { Header = "-" }); |
| 199 | + menu.Items.Add(patch); |
163 | 200 | return menu;
|
164 | 201 | }
|
165 | 202 |
|
|
0 commit comments