Skip to content

Commit 4dbe2bc

Browse files
committedFeb 12, 2024·
Small fixes
1 parent 0c3a848 commit 4dbe2bc

File tree

9 files changed

+109
-102
lines changed

9 files changed

+109
-102
lines changed
 

‎src/SIQuester/SIQuester.ViewModel/ContentItemsViewModel.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ internal ContentItemViewModel Add(string contentType, string value, string place
125125
return contentItem;
126126
}
127127

128-
protected override void OnCurrentItemChanged(ContentItemViewModel oldValue, ContentItemViewModel newValue)
128+
protected override void OnCurrentItemChanged(ContentItemViewModel? oldValue, ContentItemViewModel? newValue)
129129
{
130130
base.OnCurrentItemChanged(oldValue, newValue);
131131

@@ -503,7 +503,7 @@ private bool AddContentFile(string contentType)
503503
Duration = document.GetDurationByContentType(contentType),
504504
});
505505

506-
Insert(index + 1, contentItemViewModel);
506+
Insert(index + 1 + (i - initialItemCount), contentItemViewModel);
507507

508508
var file = collection.Files[i];
509509

‎src/SIQuester/SIQuester.ViewModel/Model/AppSettings.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,9 @@ public FileHistory History
216216
{
217217
if (_history != value)
218218
{
219+
_history.Files.CollectionChanged -= CollectionChanged;
219220
_history = value;
221+
_history.Files.CollectionChanged += CollectionChanged;
220222
OnPropertyChanged();
221223
}
222224
}
@@ -247,9 +249,9 @@ public CostSetterList CostSetters
247249
{
248250
if (_costSetters != value)
249251
{
250-
_costSetters.CollectionChanged -= CostSetters_CollectionChanged;
252+
_costSetters.CollectionChanged -= CollectionChanged;
251253
_costSetters = value;
252-
_costSetters.CollectionChanged += CostSetters_CollectionChanged;
254+
_costSetters.CollectionChanged += CollectionChanged;
253255
OnPropertyChanged();
254256
}
255257
}
@@ -593,10 +595,11 @@ public static AppSettings Load(Stream stream)
593595

594596
public AppSettings()
595597
{
596-
_costSetters.CollectionChanged += CostSetters_CollectionChanged;
598+
_costSetters.CollectionChanged += CollectionChanged;
599+
_history.Files.CollectionChanged += CollectionChanged;
597600
}
598601

599-
private void CostSetters_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) => HasChanges = true;
602+
private void CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) => HasChanges = true;
600603

601604
public static AppSettings Create()
602605
{

‎src/SImulator/SImulator.ViewModel/Properties/Resources.Designer.cs

+19-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/SImulator/SImulator.ViewModel/Properties/Resources.resx

+7-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@
133133
<value>Соединение с демонстрационным компьютером было разорвано. Игра прекращена.</value>
134134
</data>
135135
<data name="GamePackageLoadError" xml:space="preserve">
136-
<value>Ошибка при загрузке игрового пакета: {0}</value>
136+
<value>Ошибка при загрузке игрового пакета</value>
137137
</data>
138138
<data name="GameStartError" xml:space="preserve">
139139
<value>Ошибка старта игры: {0}</value>
@@ -144,6 +144,9 @@
144144
<data name="LoggerCreationWarning" xml:space="preserve">
145145
<value>Ошибка создания файла лога: {0}. Лог записываться не будет</value>
146146
</data>
147+
<data name="LoggerInitError" xml:space="preserve">
148+
<value>Ошибка старта записи лога</value>
149+
</data>
147150
<data name="LogsFolderNotSetWarning" xml:space="preserve">
148151
<value>Папка для записи логов не задана! Логи вестись не будут</value>
149152
</data>
@@ -159,6 +162,9 @@
159162
<data name="OpenLicensesError" xml:space="preserve">
160163
<value>Ошибка при открытии папки лицензий: {0}</value>
161164
</data>
165+
<data name="PackagePreparationError" xml:space="preserve">
166+
<value>Ошибка подготовки пакета</value>
167+
</data>
162168
<data name="Pause" xml:space="preserve">
163169
<value>Приостановить</value>
164170
</data>

‎src/SImulator/SImulator.ViewModel/ViewModel/MainViewModel.cs

+41-15
Original file line numberDiff line numberDiff line change
@@ -345,15 +345,25 @@ private async Task<SIDocument> PreparePackageAsync(CancellationToken cancellatio
345345
var (filePath, isTemporary) = await _packageSource.GetPackageFileAsync(cancellationToken);
346346

347347
var tempDir = Path.Combine(Path.GetTempPath(), AppSettings.AppName, Guid.NewGuid().ToString());
348+
SIDocument document;
348349

349-
var document = await SIDocument.ExtractToFolderAndLoadAsync(
350-
filePath,
351-
tempDir,
352-
cancellationToken: cancellationToken);
353-
354-
if (isTemporary)
350+
try
355351
{
356-
File.Delete(filePath);
352+
document = await SIDocument.ExtractToFolderAndLoadAsync(
353+
filePath,
354+
tempDir,
355+
cancellationToken: cancellationToken);
356+
}
357+
catch (Exception exc)
358+
{
359+
throw new Exception($"Extraction error. Extraction path: {tempDir}", exc);
360+
}
361+
finally
362+
{
363+
if (isTemporary)
364+
{
365+
File.Delete(filePath);
366+
}
357367
}
358368

359369
return document;
@@ -375,7 +385,7 @@ private EngineOptions GetEngineOptions()
375385
};
376386
}
377387

378-
private IGameLogger CreateLogger()
388+
private IGameLogger CreateGameLogger()
379389
{
380390
if (Settings.SaveLogs)
381391
{
@@ -424,7 +434,16 @@ private async Task Start_Executed(object? _)
424434
_start.CanBeExecuted = false;
425435
IsStarting = true;
426436

427-
var document = await PreparePackageAsync(_cancellationTokenSource.Token);
437+
SIDocument document;
438+
439+
try
440+
{
441+
document = await PreparePackageAsync(_cancellationTokenSource.Token);
442+
}
443+
catch (Exception exc)
444+
{
445+
throw new Exception(Resources.PackagePreparationError, exc);
446+
}
428447

429448
ISIEngine engine;
430449

@@ -443,7 +462,7 @@ private async Task Start_Executed(object? _)
443462
}
444463
catch (Exception exc)
445464
{
446-
throw new Exception(string.Format(Resources.GamePackageLoadError, exc.Message));
465+
throw new Exception(Resources.GamePackageLoadError, exc);
447466
}
448467

449468
var presentationListener = new PresentationListener(engine);
@@ -457,15 +476,24 @@ private async Task Start_Executed(object? _)
457476
presentationController.UpdateShowPlayers(SettingsViewModel.Model.ShowPlayers);
458477
presentationController.Error += ShowError;
459478

460-
var logger = CreateLogger();
479+
IGameLogger gameLogger;
480+
481+
try
482+
{
483+
gameLogger = CreateGameLogger();
484+
}
485+
catch (Exception exc)
486+
{
487+
throw new Exception(Resources.LoggerInitError, exc);
488+
}
461489

462490
var game = new GameViewModel(
463491
SettingsViewModel,
464492
engine,
465493
presentationListener,
466494
presentationController,
467495
Players,
468-
logger);
496+
gameLogger);
469497

470498
Game = game;
471499

@@ -492,9 +520,7 @@ private async Task Start_Executed(object? _)
492520
}
493521
catch (Exception exc)
494522
{
495-
var reason = exc.InnerException ?? exc;
496-
497-
PlatformManager.Instance.ShowMessage(string.Format(Resources.GameStartError, reason.Message), false);
523+
PlatformManager.Instance.ShowMessage(string.Format(Resources.GameStartError, exc), false);
498524

499525
_game?.CloseMainView();
500526

‎src/SImulator/SImulator/CommandWindow.xaml

+26-71
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
<ResourceDictionary.MergedDictionaries>
3737
<ResourceDictionary Source="Windows8Styles.xaml" />
3838
</ResourceDictionary.MergedDictionaries>
39-
39+
4040
<my:ScreenConverter x:Key="ScreenConverter1" />
4141
<my:CollectionsConverter x:Key="CollectionsConverter" />
4242
<my:PlacementConverter x:Key="PlacementConverter" />
@@ -51,7 +51,7 @@
5151
<my:LanguageConverter x:Key="LanguageConverter" />
5252

5353
<my:PlayersConverter x:Key="PlayersConverter" />
54-
54+
5555
<my:EqualityConverter x:Key="Equality" />
5656

5757
<my:KeyConverter x:Key="KeyConverter" />
@@ -156,12 +156,12 @@
156156
<Setter Property="Padding" Value="0" />
157157
<Setter Property="FontSize" Value="20" />
158158
<Setter Property="Foreground" Value="#FF2B2B2B"/>
159-
159+
160160
<Setter Property="ContentTemplate">
161161
<Setter.Value>
162162
<DataTemplate>
163163
<TextBlock Name="tb" Text="?" Foreground="#FF404040" LineStackingStrategy="BlockLineHeight" LineHeight="21" />
164-
164+
165165
<DataTemplate.Triggers>
166166
<Trigger Property="IsEnabled" Value="False">
167167
<Setter TargetName="tb" Property="Foreground" Value="Gray" />
@@ -171,11 +171,11 @@
171171
</Setter.Value>
172172
</Setter>
173173
</Style>
174-
174+
175175
<Style x:Key="TimeButton" TargetType="Button" BasedOn="{StaticResource ToolButton}">
176176
<Setter Property="Command" Value="{Binding}" />
177177
<Setter Property="ToolTip" Value="{Binding Name}" />
178-
178+
179179
<Setter Property="ContentTemplate">
180180
<Setter.Value>
181181
<DataTemplate>
@@ -186,10 +186,10 @@
186186
</DataTemplate>
187187
</Setter.Value>
188188
</Setter>
189-
189+
190190
<Setter Property="Width" Value="35" />
191191
<Setter Property="Padding" Value="3,5" />
192-
192+
193193
<Style.Triggers>
194194
<Trigger Property="Command" Value="{x:Null}">
195195
<Setter Property="IsEnabled" Value="False" />
@@ -208,7 +208,7 @@
208208
<GeometryDrawing
209209
Geometry="M0,0L1,0L1,4L0,4z"
210210
Brush="{Binding RelativeSource={RelativeSource AncestorType=Button},Path=Foreground}" />
211-
211+
212212
<GeometryDrawing
213213
Geometry="M2,0L3,0L3,4L2,4z"
214214
Brush="{Binding RelativeSource={RelativeSource AncestorType=Button},Path=Foreground}" />
@@ -338,7 +338,7 @@
338338
<WrapPanel />
339339
</ItemsPanelTemplate>
340340
</ItemsControl.ItemsPanel>
341-
341+
342342
<ItemsControl.ItemTemplate>
343343
<DataTemplate DataType="uim:ItemViewModel">
344344
<Button
@@ -387,7 +387,7 @@
387387
</DataTrigger>
388388
</ControlTemplate.Triggers>
389389
</ControlTemplate>
390-
390+
391391
<uic:TemplateConverter x:Key="Selector">
392392
<uic:TemplateConverter.DefaultTemplate>
393393
<DataTemplate>
@@ -399,27 +399,27 @@
399399
Margin="30" />
400400
</DataTemplate>
401401
</uic:TemplateConverter.DefaultTemplate>
402-
402+
403403
<uic:TemplateConverter.Templates>
404404
<DataTemplate x:Key="{x:Static uim:TableStage.Sign}">
405405
<TextBlock Text="{x:Static lp:Resources.HintIntro}" HorizontalAlignment="Center" VerticalAlignment="Center" />
406406
</DataTemplate>
407-
407+
408408
<DataTemplate x:Key="{x:Static uim:TableStage.GameThemes}">
409409
<TextBlock Text="{x:Static lp:Resources.HintGameThemes}" HorizontalAlignment="Center" VerticalAlignment="Center" />
410410
</DataTemplate>
411-
411+
412412
<DataTemplate x:Key="{x:Static uim:TableStage.Round}">
413413
<TextBlock
414414
Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=local:CommandWindow, AncestorLevel=1}, Path=DataContext.Game.ActiveRound.Name}"
415415
HorizontalAlignment="Center"
416416
VerticalAlignment="Center" />
417417
</DataTemplate>
418-
418+
419419
<DataTemplate x:Key="{x:Static uim:TableStage.RoundThemes}">
420420
<TextBlock Text="(Темы раунда)" HorizontalAlignment="Center" VerticalAlignment="Center" />
421421
</DataTemplate>
422-
422+
423423
<DataTemplate x:Key="{x:Static uim:TableStage.RoundTable}">
424424
<Grid>
425425
<ItemsControl ItemsSource="{Binding RoundInfo}">
@@ -428,15 +428,15 @@
428428
<UniformGrid Columns="1" />
429429
</ItemsPanelTemplate>
430430
</ItemsControl.ItemsPanel>
431-
431+
432432
<ItemsControl.ItemTemplate>
433433
<DataTemplate>
434434
<Grid>
435435
<Grid.ColumnDefinitions>
436436
<ColumnDefinition Width="2*" />
437437
<ColumnDefinition Width="5*" />
438438
</Grid.ColumnDefinitions>
439-
439+
440440
<Border>
441441
<TextBlock
442442
Text="{Binding Name}"
@@ -446,14 +446,14 @@
446446
TextWrapping="Wrap"
447447
Margin="2" />
448448
</Border>
449-
449+
450450
<ItemsControl ItemsSource="{Binding Questions}" Grid.Column="1" BorderBrush="Gray">
451451
<ItemsControl.ItemsPanel>
452452
<ItemsPanelTemplate>
453453
<UniformGrid Rows="1" />
454454
</ItemsPanelTemplate>
455455
</ItemsControl.ItemsPanel>
456-
456+
457457
<ItemsControl.ItemTemplate>
458458
<DataTemplate>
459459
<Button
@@ -463,7 +463,7 @@
463463
CommandParameter="{Binding}"
464464
Content="{Binding Price}"
465465
Margin="-1,-1,0,0" />
466-
466+
467467
<DataTemplate.Triggers>
468468
<DataTrigger Binding="{Binding Price}" Value="-1">
469469
<Setter TargetName="but" Property="Content" Value="" />
@@ -526,7 +526,7 @@
526526
<StackPanel.Resources>
527527
<CollectionViewSource x:Key="Parameters" Source="{Binding Parameters}" Filter="Parameters_Filter" />
528528
</StackPanel.Resources>
529-
529+
530530
<TextBlock
531531
Text="{Binding TypeName, Converter={StaticResource QuestionTypeConverter}}"
532532
TextWrapping="Wrap"
@@ -549,19 +549,19 @@
549549
</ItemsControl>
550550
</StackPanel>
551551
</DataTemplate>
552-
552+
553553
<DataTemplate x:Key="{x:Static uim:TableStage.Question}">
554554
<ContentControl
555555
Template="{StaticResource QuestGrid}"
556556
DataContext="{Binding
557557
RelativeSource={RelativeSource FindAncestor, AncestorType=local:CommandWindow, AncestorLevel=1},
558558
Path=DataContext.Game}" />
559559
</DataTemplate>
560-
560+
561561
<DataTemplate x:Key="{x:Static uim:TableStage.QuestionPrice}">
562562
<TextBlock Text="{Binding Text}" HorizontalAlignment="Center" VerticalAlignment="Center" />
563563
</DataTemplate>
564-
564+
565565
<DataTemplate x:Key="{x:Static uim:TableStage.Theme}">
566566
<TextBlock Text="{Binding Text}" HorizontalAlignment="Center" VerticalAlignment="Center" />
567567
</DataTemplate>
@@ -871,54 +871,9 @@
871871
</DataTrigger>
872872
</DataTemplate.Triggers>
873873
</DataTemplate>
874-
</ResourceDictionary>
874+
</ResourceDictionary>
875875
</Window.Resources>
876876

877-
<Window.TaskbarItemInfo>
878-
<TaskbarItemInfo Description="SImulator">
879-
<TaskbarItemInfo.ThumbButtonInfos>
880-
<ThumbButtonInfo Description="{x:Static lp:Resources.Back}" Command="{Binding Game.Back}">
881-
<ThumbButtonInfo.ImageSource>
882-
<DrawingImage>
883-
<DrawingImage.Drawing>
884-
<GeometryDrawing
885-
Geometry="M0,0L-17.3,10L0,20z"
886-
Pen="{StaticResource TaskbarPen}"
887-
Brush="{StaticResource TaskbarBrush}" />
888-
</DrawingImage.Drawing>
889-
</DrawingImage>
890-
</ThumbButtonInfo.ImageSource>
891-
</ThumbButtonInfo>
892-
893-
<ThumbButtonInfo Description="{x:Static lp:Resources.Next}" Command="{Binding Game.Next}">
894-
<ThumbButtonInfo.ImageSource>
895-
<DrawingImage>
896-
<DrawingImage.Drawing>
897-
<GeometryDrawing
898-
Geometry="M0,0L17.3,10L0,20z"
899-
Pen="{StaticResource TaskbarPen}"
900-
Brush="{StaticResource TaskbarBrush}" />
901-
</DrawingImage.Drawing>
902-
</DrawingImage>
903-
</ThumbButtonInfo.ImageSource>
904-
</ThumbButtonInfo>
905-
906-
<ThumbButtonInfo Description="{x:Static lp:Resources.Stop}" Command="{Binding Game.Stop}">
907-
<ThumbButtonInfo.ImageSource>
908-
<DrawingImage>
909-
<DrawingImage.Drawing>
910-
<GeometryDrawing
911-
Geometry="M0,0L20,0L20,20L0,20z"
912-
Pen="{StaticResource TaskbarPen}"
913-
Brush="{StaticResource TaskbarBrush}" />
914-
</DrawingImage.Drawing>
915-
</DrawingImage>
916-
</ThumbButtonInfo.ImageSource>
917-
</ThumbButtonInfo>
918-
</TaskbarItemInfo.ThumbButtonInfos>
919-
</TaskbarItemInfo>
920-
</Window.TaskbarItemInfo>
921-
922877
<TabControl TabStripPlacement="Left" Background="White" BorderThickness="1,0,0,0" Padding="6,4,4,4" Margin="-2,0,0,0">
923878
<TabItem
924879
Header="{x:Static lp:Resources.Start}"

‎src/SImulator/SImulator/Implementation/DesktopManager.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -349,15 +349,15 @@ public override IGameLogger CreateGameLogger(string? folder)
349349
{
350350
if (folder == null)
351351
{
352-
return Logger.Create(null);
352+
return GameLogger.Create(null);
353353
}
354354

355355
if (!Directory.Exists(folder))
356356
{
357357
throw new Exception(string.Format(Resources.LogsFolderNotFound, folder));
358358
}
359359

360-
return Logger.Create(Path.Combine(folder, string.Format("{0}.log", DateTime.Now).Replace(':', '.')));
360+
return GameLogger.Create(Path.Combine(folder, string.Format("{0}.log", DateTime.Now).Replace(':', '.')));
361361
}
362362

363363
public override void ClearMedia()

‎src/SImulator/SImulator/Implementation/Logger.cs ‎src/SImulator/SImulator/Implementation/GameLogger.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33

44
namespace SImulator.Implementation;
55

6-
internal sealed class Logger : IGameLogger
6+
internal sealed class GameLogger : IGameLogger
77
{
8-
private StreamWriter _writer;
8+
private StreamWriter? _writer;
99

10-
private Logger()
10+
private GameLogger()
1111
{
1212

1313
}
1414

15-
public static Logger Create(string? filename)
15+
public static GameLogger Create(string? filename)
1616
{
17-
var logger = new Logger();
17+
var logger = new GameLogger();
1818

1919
if (filename != null)
2020
{

‎src/SImulator/SImulator/SImulator.csproj

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
<Description>SIGame emulator</Description>
88
<Copyright>Copyright © Khil-soft 2010 - 2024</Copyright>
99
<Version>$(SImulatorVersion)</Version>
10-
<OutputPath>bin\$(Configuration)\</OutputPath>
1110
<UseWPF>true</UseWPF>
1211
<UseWindowsForms>true</UseWindowsForms>
1312
<Nullable>enable</Nullable>

0 commit comments

Comments
 (0)
Please sign in to comment.