Horizon – Diff between revs 8 and 27
?pathlinks?
Rev 8 | Rev 27 | |||
---|---|---|---|---|
1 | using System; |
1 | using System; |
|
- | 2 | using System.Security.Policy; |
||
- | 3 | using System.Threading; |
||
2 | using System.Windows.Forms; |
4 | using System.Windows.Forms; |
|
- | 5 | using System.Windows.Markup; |
||
3 | using Be.Windows.Forms; |
6 | using Be.Windows.Forms; |
|
4 | using Horizon.Database; |
7 | using Horizon.Database; |
|
5 | using Horizon.Utilities; |
8 | using Horizon.Utilities; |
|
- | 9 | using Serilog; |
||
6 | |
10 | |
|
7 | namespace Horizon.Snapshots |
11 | namespace Horizon.Snapshots |
|
8 | { |
12 | { |
|
9 | public partial class HexViewForm : Form |
13 | public partial class HexViewForm : Form |
|
10 | { |
14 | { |
|
11 | #region Public Events & Delegates |
15 | #region Public Events & Delegates |
|
12 | |
16 | |
|
13 | public event EventHandler<SaveDataEventArgs> SaveData; |
17 | public event EventHandler<SaveDataEventArgs> SaveData; |
|
14 | |
18 | |
|
15 | #endregion |
19 | #endregion |
|
16 | |
20 | |
|
17 | #region Public Methods |
21 | #region Public Methods |
|
18 | |
22 | |
|
19 | public void UpdateData(byte[] data) |
23 | public void UpdateData(byte[] data) |
|
20 | { |
24 | { |
|
21 | hexBox1.InvokeIfRequired(hexBox => |
25 | hexBox1.InvokeIfRequired(hexBox => |
|
22 | { |
26 | { |
|
23 | _originalData = (byte[])data.Clone(); |
27 | _originalData = (byte[])data.Clone(); |
|
24 | |
28 | |
|
25 | _dynamicByteProvider = new DynamicByteProvider(data); |
29 | _dynamicByteProvider = new DynamicByteProvider(data); |
|
26 | hexBox.ByteProvider = _dynamicByteProvider; |
30 | hexBox.ByteProvider = _dynamicByteProvider; |
|
27 | hexBox.Refresh(); |
31 | hexBox.Refresh(); |
|
28 | }); |
32 | }); |
|
29 | } |
33 | } |
|
30 | |
34 | |
|
31 | #endregion |
35 | #endregion |
|
32 | |
36 | |
|
33 | #region Private Delegates, Events, Enums, Properties, Indexers and Fields |
37 | #region Private Delegates, Events, Enums, Properties, Indexers and Fields |
|
34 | |
38 | |
|
35 | private readonly SnapshotDatabase _snapshotDatabase; |
39 | private readonly SnapshotDatabase _snapshotDatabase; |
|
36 | |
40 | |
|
37 | private DynamicByteProvider _dynamicByteProvider; |
41 | private DynamicByteProvider _dynamicByteProvider; |
|
38 | |
- | ||
39 | private string _hash; |
- | ||
40 | |
- | ||
41 | private byte[] _originalData; |
42 | private byte[] _originalData; |
|
- | 43 | private string _hash; |
||
- | 44 | private readonly CancellationToken _cancellationToken; |
||
42 | |
45 | |
|
43 | #endregion |
46 | #endregion |
|
44 | |
47 | |
|
45 | #region Constructors, Destructors and Finalizers |
48 | #region Constructors, Destructors and Finalizers |
|
46 | |
49 | |
|
47 | public HexViewForm() |
50 | public HexViewForm() |
|
48 | { |
51 | { |
|
49 | InitializeComponent(); |
52 | InitializeComponent(); |
|
50 | } |
53 | } |
|
51 | |
54 | |
|
52 | public HexViewForm(SnapshotDatabase snapshotDatabase, string hash, byte[] data) : this() |
55 | public HexViewForm(string hash, SnapshotDatabase snapshotDatabase, CancellationToken cancellationToken) : this() |
|
53 | { |
- | ||
54 | _originalData = (byte[])data.Clone(); |
56 | { |
|
55 | _hash = hash; |
- | ||
56 | |
57 | _hash = hash; |
|
57 | _snapshotDatabase = snapshotDatabase; |
58 | _snapshotDatabase = snapshotDatabase; |
|
58 | _snapshotDatabase.SnapshotDataUpdate += SnapshotDatabaseSnapshotDataUpdate; |
- | ||
59 | |
- | ||
60 | _dynamicByteProvider = new DynamicByteProvider(data); |
59 | _snapshotDatabase.SnapshotDataUpdate += SnapshotDatabaseSnapshotDataUpdate; |
|
61 | hexBox1.ByteProvider = _dynamicByteProvider; |
60 | _cancellationToken = cancellationToken; |
|
62 | } |
61 | } |
|
63 | |
62 | |
|
64 | /// <summary> |
63 | /// <summary> |
|
65 | /// Clean up any resources being used. |
64 | /// Clean up any resources being used. |
|
66 | /// </summary> |
65 | /// </summary> |
|
67 | /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> |
66 | /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> |
|
68 | protected override void Dispose(bool disposing) |
67 | protected override void Dispose(bool disposing) |
|
69 | { |
68 | { |
|
70 | if (disposing && components != null) |
69 | if (disposing && components != null) |
|
71 | { |
70 | { |
|
72 | components.Dispose(); |
71 | components.Dispose(); |
|
73 | } |
72 | } |
|
74 | |
73 | |
|
75 | _snapshotDatabase.SnapshotDataUpdate -= SnapshotDatabaseSnapshotDataUpdate; |
74 | _snapshotDatabase.SnapshotDataUpdate -= SnapshotDatabaseSnapshotDataUpdate; |
|
76 | |
75 | |
|
77 | base.Dispose(disposing); |
76 | base.Dispose(disposing); |
|
78 | } |
77 | } |
|
79 | |
78 | |
|
80 | #endregion |
79 | #endregion |
|
81 | |
80 | |
|
82 | #region Event Handlers |
81 | #region Event Handlers |
|
83 | private void HexViewForm_Load(object sender, EventArgs e) |
82 | private async void HexViewForm_Load(object sender, EventArgs e) |
|
84 | { |
83 | { |
|
85 | Utilities.WindowState.FormTracker.Track(this); |
84 | Utilities.WindowState.FormTracker.Track(this); |
|
- | 85 | |
||
- | 86 | try |
||
- | 87 | { |
||
- | 88 | using var memoryStream = await _snapshotDatabase.RetrieveFileStreamAsync(_hash, _cancellationToken); |
||
- | 89 | |
||
- | 90 | if (memoryStream == null) |
||
- | 91 | { |
||
- | 92 | return; |
||
- | 93 | } |
||
- | 94 | |
||
- | 95 | var data = memoryStream.ToArray(); |
||
- | 96 | |
||
- | 97 | _originalData = (byte[])data.Clone(); |
||
- | 98 | |
||
- | 99 | _dynamicByteProvider = new DynamicByteProvider(data); |
||
- | 100 | hexBox1.ByteProvider = _dynamicByteProvider; |
||
- | 101 | } |
||
- | 102 | catch (Exception exception) |
||
- | 103 | { |
||
- | 104 | Log.Error(exception, "Could not retrieve snapshot data."); |
||
- | 105 | } |
||
86 | } |
106 | } |
|
87 | private void SnapshotDatabaseSnapshotDataUpdate(object sender, SnapshotDataUpdateEventArgs e) |
107 | private void SnapshotDatabaseSnapshotDataUpdate(object sender, SnapshotDataUpdateEventArgs e) |
|
88 | { |
108 | { |
|
89 | switch (e) |
109 | switch (e) |
|
90 | { |
110 | { |
|
91 | case SnapshotDataUpdateSuccessEventArgs snapshotDataUpdateSuccessEventArgs: |
111 | case SnapshotDataUpdateSuccessEventArgs snapshotDataUpdateSuccessEventArgs: |
|
92 | _hash = snapshotDataUpdateSuccessEventArgs.NewHash; |
112 | _hash = snapshotDataUpdateSuccessEventArgs.NewHash; |
|
93 | |
113 | |
|
94 | statusStrip1.InvokeIfRequired(statusStrip => |
114 | statusStrip1.InvokeIfRequired(statusStrip => |
|
95 | { |
115 | { |
|
96 | toolStripProgressBar1.Value = toolStripProgressBar1.Maximum; |
116 | toolStripProgressBar1.Value = toolStripProgressBar1.Maximum; |
|
97 | toolStripStatusLabel1.Text = "Data saved."; |
117 | toolStripStatusLabel1.Text = "Data saved."; |
|
98 | }); |
118 | }); |
|
99 | break; |
119 | break; |
|
100 | case SnapshotDataUpdateFailureEventArgs _: |
120 | case SnapshotDataUpdateFailureEventArgs _: |
|
101 | statusStrip1.InvokeIfRequired(statusStrip => |
121 | statusStrip1.InvokeIfRequired(statusStrip => |
|
102 | { |
122 | { |
|
103 | toolStripProgressBar1.Value = toolStripProgressBar1.Minimum; |
123 | toolStripProgressBar1.Value = toolStripProgressBar1.Minimum; |
|
104 | toolStripStatusLabel1.Text = "Could not save data."; |
124 | toolStripStatusLabel1.Text = "Could not save data."; |
|
105 | }); |
125 | }); |
|
106 | break; |
126 | break; |
|
107 | } |
127 | } |
|
108 | } |
128 | } |
|
109 | |
129 | |
|
110 | private void SaveToolStripMenuItem_Click(object sender, EventArgs e) |
130 | private void SaveToolStripMenuItem_Click(object sender, EventArgs e) |
|
111 | { |
131 | { |
|
112 | if (_dynamicByteProvider.HasChanges()) |
132 | if (_dynamicByteProvider.HasChanges()) |
|
113 | { |
133 | { |
|
114 | _dynamicByteProvider.ApplyChanges(); |
134 | _dynamicByteProvider.ApplyChanges(); |
|
115 | |
135 | |
|
116 | statusStrip1.InvokeIfRequired(statusStrip => |
136 | statusStrip1.InvokeIfRequired(statusStrip => |
|
117 | { |
137 | { |
|
118 | toolStripProgressBar1.Value = toolStripProgressBar1.Minimum; |
138 | toolStripProgressBar1.Value = toolStripProgressBar1.Minimum; |
|
119 | toolStripStatusLabel1.Text = "Saving."; |
139 | toolStripStatusLabel1.Text = "Saving."; |
|
120 | }); |
140 | }); |
|
121 | |
141 | |
|
122 | SaveData?.Invoke(this, new SaveDataEventArgs(_hash, _dynamicByteProvider.Bytes.ToArray())); |
142 | SaveData?.Invoke(this, new SaveDataEventArgs(_hash, _dynamicByteProvider.Bytes.ToArray())); |
|
123 | } |
143 | } |
|
124 | } |
144 | } |
|
125 | |
145 | |
|
126 | private void ReloadToolStripMenuItem_Click(object sender, EventArgs e) |
146 | private void ReloadToolStripMenuItem_Click(object sender, EventArgs e) |
|
127 | { |
147 | { |
|
128 | hexBox1.InvokeIfRequired(hexBox => |
148 | hexBox1.InvokeIfRequired(hexBox => |
|
129 | { |
149 | { |
|
130 | _dynamicByteProvider = new DynamicByteProvider(_originalData); |
150 | _dynamicByteProvider = new DynamicByteProvider(_originalData); |
|
131 | hexBox.ByteProvider = _dynamicByteProvider; |
151 | hexBox.ByteProvider = _dynamicByteProvider; |
|
132 | hexBox.Refresh(); |
152 | hexBox.Refresh(); |
|
133 | }); |
153 | }); |
|
134 | } |
154 | } |
|
135 | |
155 | |
|
136 | #endregion |
156 | #endregion |
|
137 | |
157 | |
|
138 | |
158 | |
|
139 | } |
159 | } |
|
140 | } |
160 | } |
|
141 | |
161 | |
|
142 |
|
162 |
|
|
143 | |
163 | |
|
144 | |
164 | |
|
145 | |
165 | |