Skip to content

Commit 56c8508

Browse files
committed
disable publish in offline mode
1 parent 746d9a5 commit 56c8508

File tree

4 files changed

+87
-18
lines changed

4 files changed

+87
-18
lines changed

src/ui/viewmodels/CodeNotesViewModel.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include "data\context\GameContext.hh"
77

8+
#include "services\IConfiguration.hh"
89
#include "services\ServiceLocator.hh"
910

1011
#include "ui\EditorTheme.hh"
@@ -19,7 +20,8 @@ namespace viewmodels {
1920
const StringModelProperty CodeNotesViewModel::ResultCountProperty("CodeNotesViewModel", "ResultCount", L"0/0");
2021
const StringModelProperty CodeNotesViewModel::FilterValueProperty("CodeNotesViewModel", "FilterValue", L"");
2122
const BoolModelProperty CodeNotesViewModel::OnlyUnpublishedFilterProperty("CodeNotesViewModel", "OnlyUnpublishedFilter", false);
22-
const BoolModelProperty CodeNotesViewModel::IsSelectionUnpublishedProperty("CodeNotesViewModel", "IsSelectionUnpublished", false);
23+
const BoolModelProperty CodeNotesViewModel::CanRevertCurrentAddressNoteProperty("CodeNotesViewModel", "CanRevertCurrentAddressNote", false);
24+
const BoolModelProperty CodeNotesViewModel::CanPublishCurrentAddressNoteProperty("CodeNotesViewModel", "CanPublishCurrentAddressNote", false);
2325

2426
const StringModelProperty CodeNotesViewModel::CodeNoteViewModel::LabelProperty("CodeNoteViewModel", "Label", L"");
2527
const StringModelProperty CodeNotesViewModel::CodeNoteViewModel::NoteProperty("CodeNoteViewModel", "Note", L"");
@@ -282,7 +284,11 @@ void CodeNotesViewModel::OnSelectedItemsChanged()
282284
}
283285
}
284286

285-
SetValue(IsSelectionUnpublishedProperty, bHasModifiedSelectedItem);
287+
const bool bOffline = ra::services::ServiceLocator::Get<ra::services::IConfiguration>()
288+
.IsFeatureEnabled(ra::services::Feature::Offline);
289+
290+
SetValue(CanPublishCurrentAddressNoteProperty, bHasModifiedSelectedItem && !bOffline);
291+
SetValue(CanRevertCurrentAddressNoteProperty, bHasModifiedSelectedItem);
286292
}
287293

288294
void CodeNotesViewModel::BookmarkSelected() const
@@ -340,6 +346,9 @@ void CodeNotesViewModel::GetSelectedModifiedNoteAddresses(std::vector<ra::ByteAd
340346

341347
void CodeNotesViewModel::PublishSelected()
342348
{
349+
if (!CanPublishCurrentAddressNote())
350+
return;
351+
343352
std::vector<ra::ByteAddress> vNotesToPublish;
344353
GetSelectedModifiedNoteAddresses(vNotesToPublish);
345354

src/ui/viewmodels/CodeNotesViewModel.hh

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,22 @@ public:
177177
/// <summary>
178178
/// The <see cref="ModelProperty" /> for whether or not the current selection includes unpublished items.
179179
/// </summary>
180-
static const BoolModelProperty IsSelectionUnpublishedProperty;
180+
static const BoolModelProperty CanRevertCurrentAddressNoteProperty;
181181

182182
/// <summary>
183183
/// Gets whether or not the current selection includes unpublished items.
184184
/// </summary>
185-
const bool IsSelectionUnpublished() const { return GetValue(IsSelectionUnpublishedProperty); }
185+
const bool CanRevertCurrentAddressNote() const { return GetValue(CanRevertCurrentAddressNoteProperty); }
186+
187+
/// <summary>
188+
/// The <see cref="ModelProperty" /> for whether or not the current selection can be published.
189+
/// </summary>
190+
static const BoolModelProperty CanPublishCurrentAddressNoteProperty;
191+
192+
/// <summary>
193+
/// Gets whether or notthe current selection can be published.
194+
/// </summary>
195+
const bool CanPublishCurrentAddressNote() const { return GetValue(CanPublishCurrentAddressNoteProperty); }
186196

187197
void PublishSelected();
188198
void RevertSelected();

src/ui/win32/CodeNotesDialog.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ CodeNotesDialog::CodeNotesDialog(CodeNotesViewModel& vmCodeNotes)
141141
}
142142
});
143143

144-
m_bindWindow.BindEnabled(IDC_RA_PUBLISH_NOTE, CodeNotesViewModel::IsSelectionUnpublishedProperty);
145-
m_bindWindow.BindEnabled(IDC_RA_REVERT_NOTE, CodeNotesViewModel::IsSelectionUnpublishedProperty);
144+
m_bindWindow.BindEnabled(IDC_RA_PUBLISH_NOTE, CodeNotesViewModel::CanPublishCurrentAddressNoteProperty);
145+
m_bindWindow.BindEnabled(IDC_RA_REVERT_NOTE, CodeNotesViewModel::CanRevertCurrentAddressNoteProperty);
146146

147147
using namespace ra::bitwise_ops;
148148
SetAnchor(IDC_RA_FILTER_VALUE, Anchor::Top | Anchor::Left | Anchor::Right);

tests/ui/viewmodels/CodeNotesViewModel_Tests.cpp

Lines changed: 62 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
630630
notes.Notes().GetItemAt(7)->SetSelected(true); // 0x22
631631
notes.Notes().GetItemAt(13)->SetSelected(true); // 0x40
632632

633-
Assert::IsTrue(notes.IsSelectionUnpublished());
633+
Assert::IsTrue(notes.CanPublishCurrentAddressNote());
634+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
634635

635636
bool bWindowSeen = false;
636637
notes.mockDesktop.ExpectWindow<ra::ui::viewmodels::MessageBoxViewModel>([&bWindowSeen](ra::ui::viewmodels::MessageBoxViewModel& vmMessageBox)
@@ -647,7 +648,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
647648
Assert::IsTrue(bWindowSeen);
648649

649650
AssertRow(notes, 4, 0x0016, L"0x0016", L"[32-bit] Score");
650-
Assert::IsFalse(notes.IsSelectionUnpublished());
651+
Assert::IsFalse(notes.CanPublishCurrentAddressNote());
652+
Assert::IsFalse(notes.CanRevertCurrentAddressNote());
651653
}
652654

653655
TEST_METHOD(TestRevertSingleReject)
@@ -668,7 +670,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
668670
notes.Notes().GetItemAt(7)->SetSelected(true); // 0x22
669671
notes.Notes().GetItemAt(13)->SetSelected(true); // 0x40
670672

671-
Assert::IsTrue(notes.IsSelectionUnpublished());
673+
Assert::IsTrue(notes.CanPublishCurrentAddressNote());
674+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
672675

673676
bool bWindowSeen = false;
674677
notes.mockDesktop.ExpectWindow<ra::ui::viewmodels::MessageBoxViewModel>([&bWindowSeen](ra::ui::viewmodels::MessageBoxViewModel&)
@@ -681,7 +684,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
681684
Assert::IsTrue(bWindowSeen);
682685

683686
AssertRow(notes, 4, 0x0016, L"0x0016", L"Changed 20");
684-
Assert::IsTrue(notes.IsSelectionUnpublished());
687+
Assert::IsTrue(notes.CanPublishCurrentAddressNote());
688+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
685689
}
686690

687691
TEST_METHOD(TestRevertMultiple)
@@ -702,7 +706,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
702706
notes.Notes().GetItemAt(7)->SetSelected(true); // 0x22
703707
notes.Notes().GetItemAt(13)->SetSelected(true); // 0x40
704708

705-
Assert::IsTrue(notes.IsSelectionUnpublished());
709+
Assert::IsTrue(notes.CanPublishCurrentAddressNote());
710+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
706711

707712
bool bWindowSeen = false;
708713
notes.mockDesktop.ExpectWindow<ra::ui::viewmodels::MessageBoxViewModel>([&bWindowSeen](ra::ui::viewmodels::MessageBoxViewModel& vmMessageBox)
@@ -720,7 +725,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
720725

721726
AssertRow(notes, 4, 0x0016, L"0x0016", L"[32-bit] Score");
722727
AssertRow(notes, 13, 0x0040, L"0x0040\n- 0x0049", L"[10 bytes] Inventory");
723-
Assert::IsFalse(notes.IsSelectionUnpublished());
728+
Assert::IsFalse(notes.CanPublishCurrentAddressNote());
729+
Assert::IsFalse(notes.CanRevertCurrentAddressNote());
724730
}
725731

726732
TEST_METHOD(TestPublishSingle)
@@ -742,7 +748,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
742748
notes.Notes().GetItemAt(7)->SetSelected(true); // 0x22
743749
notes.Notes().GetItemAt(13)->SetSelected(true); // 0x40
744750

745-
Assert::IsTrue(notes.IsSelectionUnpublished());
751+
Assert::IsTrue(notes.CanPublishCurrentAddressNote());
752+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
746753

747754
bool bWindowSeen = false;
748755
notes.mockDesktop.ExpectWindow<ra::ui::viewmodels::MessageBoxViewModel>([&bWindowSeen](ra::ui::viewmodels::MessageBoxViewModel&)
@@ -755,12 +762,51 @@ TEST_CLASS(CodeNotesViewModel_Tests)
755762
Assert::IsFalse(bWindowSeen);
756763

757764
AssertRow(notes, 4, 0x0016, L"0x0016", L"Changed 20");
758-
Assert::IsFalse(notes.IsSelectionUnpublished());
765+
Assert::IsFalse(notes.CanPublishCurrentAddressNote());
766+
Assert::IsFalse(notes.CanRevertCurrentAddressNote());
759767

760768
Assert::AreEqual({1}, notes.GetPublishedAddresses().size());
761769
Assert::AreEqual({0x0016}, notes.GetPublishedAddresses().at(0));
762770
}
763771

772+
TEST_METHOD(TestPublishSingleOffline)
773+
{
774+
CodeNotesViewModelHarness notes;
775+
notes.mockConfiguration.SetFeatureEnabled(ra::services::Feature::Offline, true);
776+
notes.PopulateNotes();
777+
notes.PreparePublish();
778+
notes.SetIsVisible(true);
779+
780+
Assert::AreEqual({ 14U }, notes.Notes().Count());
781+
Assert::AreEqual(std::wstring(L""), notes.GetFilterValue());
782+
Assert::AreEqual(std::wstring(L"14/14"), notes.GetResultCount());
783+
784+
notes.mockGameContext.Assets().FindCodeNotes()->SetCodeNote(0x0016, L"Changed 20");
785+
notes.mockGameContext.Assets().FindCodeNotes()->SetCodeNote(0x0031, L"Changed 49");
786+
787+
notes.Notes().GetItemAt(0)->SetSelected(true); // 0x10
788+
notes.Notes().GetItemAt(4)->SetSelected(true); // 0x16
789+
notes.Notes().GetItemAt(7)->SetSelected(true); // 0x22
790+
notes.Notes().GetItemAt(13)->SetSelected(true); // 0x40
791+
792+
Assert::IsFalse(notes.CanPublishCurrentAddressNote());
793+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
794+
795+
bool bWindowSeen = false;
796+
notes.mockDesktop.ExpectWindow<ra::ui::viewmodels::MessageBoxViewModel>([&bWindowSeen](ra::ui::viewmodels::MessageBoxViewModel&)
797+
{
798+
bWindowSeen = true;
799+
return ra::ui::DialogResult::No;
800+
});
801+
802+
notes.PublishSelected();
803+
Assert::IsFalse(bWindowSeen);
804+
805+
AssertRow(notes, 4, 0x0016, L"0x0016", L"Changed 20");
806+
Assert::IsFalse(notes.CanPublishCurrentAddressNote());
807+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
808+
}
809+
764810
TEST_METHOD(TestPublishMultipleApprove)
765811
{
766812
CodeNotesViewModelHarness notes;
@@ -780,7 +826,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
780826
notes.Notes().GetItemAt(7)->SetSelected(true); // 0x22
781827
notes.Notes().GetItemAt(13)->SetSelected(true); // 0x40
782828

783-
Assert::IsTrue(notes.IsSelectionUnpublished());
829+
Assert::IsTrue(notes.CanPublishCurrentAddressNote());
830+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
784831

785832
bool bWindowSeen = false;
786833
notes.mockDesktop.ExpectWindow<ra::ui::viewmodels::MessageBoxViewModel>([&bWindowSeen](ra::ui::viewmodels::MessageBoxViewModel& vmMessageBox)
@@ -798,7 +845,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
798845

799846
AssertRow(notes, 4, 0x0016, L"0x0016", L"Changed 20");
800847
AssertRow(notes, 13, 0x0040, L"0x0040", L"Changed 64");
801-
Assert::IsFalse(notes.IsSelectionUnpublished());
848+
Assert::IsFalse(notes.CanPublishCurrentAddressNote());
849+
Assert::IsFalse(notes.CanRevertCurrentAddressNote());
802850

803851
Assert::AreEqual({2}, notes.GetPublishedAddresses().size());
804852
Assert::AreEqual({0x0016}, notes.GetPublishedAddresses().at(0));
@@ -824,7 +872,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
824872
notes.Notes().GetItemAt(7)->SetSelected(true); // 0x22
825873
notes.Notes().GetItemAt(13)->SetSelected(true); // 0x40
826874

827-
Assert::IsTrue(notes.IsSelectionUnpublished());
875+
Assert::IsTrue(notes.CanPublishCurrentAddressNote());
876+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
828877

829878
bool bWindowSeen = false;
830879
notes.mockDesktop.ExpectWindow<ra::ui::viewmodels::MessageBoxViewModel>([&bWindowSeen](ra::ui::viewmodels::MessageBoxViewModel& vmMessageBox)
@@ -842,7 +891,8 @@ TEST_CLASS(CodeNotesViewModel_Tests)
842891

843892
AssertRow(notes, 4, 0x0016, L"0x0016", L"Changed 20");
844893
AssertRow(notes, 13, 0x0040, L"0x0040", L"Changed 64");
845-
Assert::IsTrue(notes.IsSelectionUnpublished());
894+
Assert::IsTrue(notes.CanPublishCurrentAddressNote());
895+
Assert::IsTrue(notes.CanRevertCurrentAddressNote());
846896

847897
Assert::AreEqual({0}, notes.GetPublishedAddresses().size());
848898
}

0 commit comments

Comments
 (0)