Skip to content

Commit 0bbb71d

Browse files
committed
Improved API access to Github to prevent unnecessary API calls. API responses are now cached and data is only fetched if a change is detected.
Added a new option to check for updates on startup
1 parent 169e98b commit 0bbb71d

File tree

10 files changed

+309
-60
lines changed

10 files changed

+309
-60
lines changed

DiskImageTool/App.config

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@
2828
<setting name="DragAndDrop" serializeAs="String">
2929
<value>True</value>
3030
</setting>
31+
<setting name="ChangeLogETag" serializeAs="String">
32+
<value />
33+
</setting>
34+
<setting name="AppUpdateETag" serializeAs="String">
35+
<value />
36+
</setting>
37+
<setting name="CheckUpdateOnStartup" serializeAs="String">
38+
<value>True</value>
39+
</setting>
3140
</DiskImageTool.My.MySettings>
3241
</userSettings>
3342
<runtime>

DiskImageTool/DiskImageTool.vbproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<TargetCulture>en-US</TargetCulture>
3131
<ProductName>DiskImageTool</ProductName>
3232
<PublisherName>Digitoxin</PublisherName>
33-
<ApplicationRevision>1</ApplicationRevision>
33+
<ApplicationRevision>2</ApplicationRevision>
3434
<ApplicationVersion>2.6.0.%2a</ApplicationVersion>
3535
<UseApplicationTrust>false</UseApplicationTrust>
3636
<PublishWizardCompleted>true</PublishWizardCompleted>
@@ -181,6 +181,7 @@
181181
<Compile Include="Forms\Derived\NewDirectoryForm.vb">
182182
<SubType>Form</SubType>
183183
</Compile>
184+
<Compile Include="Github.vb" />
184185
<Compile Include="HexView\HexViewDataGridInspector.vb" />
185186
<Compile Include="HexView\HexViewFunctions.vb" />
186187
<Compile Include="ImageFormats\86F\86FFloppyImage.vb" />

DiskImageTool/Github.vb

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
Module Github
2+
Private Const REPOSITORY = "https://api.github.com/repos/Digitoxin1/DiskImageTool"
3+
Private Const CHANGELOG_URL = REPOSITORY & "/releases?per_page=100"
4+
Private Const UPDATE_URL = REPOSITORY & "/releases/latest"
5+
Private Const USER_AGENT = "DiskImageTool"
6+
7+
Public Function GetAppUpdateResponse() As String
8+
Dim Response As Net.HttpWebResponse
9+
Dim ResponseText As String = ""
10+
Dim CachePath = IO.Path.Combine(IO.Path.GetTempPath(), "DiskImageTool", "AppUpdateResponse.cache")
11+
Dim ETag = My.Settings.AppUpdateETag
12+
Dim NotModified As Boolean = False
13+
14+
If Not IO.File.Exists(CachePath) Then
15+
ETag = ""
16+
End If
17+
18+
Dim Request As Net.HttpWebRequest = Net.WebRequest.Create(UPDATE_URL)
19+
Request.UserAgent = USER_AGENT
20+
If ETag <> "" Then
21+
Request.Headers.Add("if-none-match", ETag)
22+
End If
23+
24+
Try
25+
Response = Request.GetResponse
26+
Dim Reader As New IO.StreamReader(Response.GetResponseStream)
27+
ResponseText = Reader.ReadToEnd
28+
29+
My.Settings.AppUpdateETag = Response.Headers.Item("etag")
30+
IO.File.WriteAllText(CachePath, ResponseText)
31+
32+
Catch ex As Net.WebException
33+
If ex.Response IsNot Nothing Then
34+
Response = CType(ex.Response, Net.HttpWebResponse)
35+
If Response.StatusCode = Net.HttpStatusCode.NotModified Then
36+
NotModified = True
37+
End If
38+
End If
39+
Catch ex As Exception
40+
DebugException(ex)
41+
End Try
42+
43+
If NotModified Then
44+
Try
45+
ResponseText = IO.File.ReadAllText(CachePath)
46+
Catch ex As Exception
47+
DebugException(ex)
48+
End Try
49+
End If
50+
51+
Return ResponseText
52+
End Function
53+
54+
Public Function GetChangeLogResponse() As String
55+
Dim Response As Net.HttpWebResponse
56+
Dim ResponseText As String = ""
57+
Dim CachePath = IO.Path.Combine(IO.Path.GetTempPath(), "DiskImageTool", "ChangeLogResponse.cache")
58+
Dim ETag = My.Settings.ChangeLogETag
59+
Dim NotModified As Boolean = False
60+
61+
If Not IO.File.Exists(CachePath) Then
62+
ETag = ""
63+
End If
64+
65+
Dim Request As Net.HttpWebRequest = Net.WebRequest.Create(CHANGELOG_URL)
66+
Request.UserAgent = USER_AGENT
67+
If ETag <> "" Then
68+
Request.Headers.Add("if-none-match", ETag)
69+
End If
70+
71+
Try
72+
Response = Request.GetResponse
73+
Dim Reader As New IO.StreamReader(Response.GetResponseStream)
74+
ResponseText = Reader.ReadToEnd
75+
76+
My.Settings.ChangeLogETag = Response.Headers.Item("etag")
77+
IO.File.WriteAllText(CachePath, ResponseText)
78+
79+
Catch ex As Net.WebException
80+
If ex.Response IsNot Nothing Then
81+
Response = CType(ex.Response, Net.HttpWebResponse)
82+
If Response.StatusCode = Net.HttpStatusCode.NotModified Then
83+
NotModified = True
84+
End If
85+
End If
86+
Catch ex As Exception
87+
DebugException(ex)
88+
End Try
89+
90+
If NotModified Then
91+
Try
92+
ResponseText = IO.File.ReadAllText(CachePath)
93+
Catch ex As Exception
94+
DebugException(ex)
95+
End Try
96+
End If
97+
98+
Return ResponseText
99+
End Function
100+
End Module

DiskImageTool/ImageFormats/86F/86FImage.vb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ Namespace ImageFormats
227227
Dim AllocatedLength As UInteger
228228

229229
Dim TrackArray = GetTrackArray()
230+
Dim Reverse As Boolean = Not ReverseEndian
230231

231232
Try
232233
If IO.File.Exists(FilePath) Then
@@ -284,7 +285,7 @@ Namespace ImageFormats
284285
End If
285286

286287
If BitCellCount > 0 Then
287-
Buffer = IBM_MFM.BitsToBytes(IBM_MFM.ResizeBitstream(Track.Bitstream, BitCellCount), 0)
288+
Buffer = IBM_MFM.BitsToBytes(IBM_MFM.ResizeBitstream(Track.Bitstream, BitCellCount), 0, Reverse)
288289
fs.Write(Buffer, 0, Buffer.Length)
289290

290291
If AllocatedLength > Buffer.Length Then
@@ -294,7 +295,7 @@ Namespace ImageFormats
294295

295296
If HasSurfaceData Then
296297
If Track.SurfaceData IsNot Nothing Then
297-
Buffer = IBM_MFM.BitsToBytes(IBM_MFM.ResizeBitstream(Track.SurfaceData, BitCellCount), 0)
298+
Buffer = IBM_MFM.BitsToBytes(IBM_MFM.ResizeBitstream(Track.SurfaceData, BitCellCount), 0, Reverse)
298299
Else
299300
Buffer = New Byte(Math.Ceiling(BitCellCount / 8)) {}
300301
End If
@@ -358,6 +359,7 @@ Namespace ImageFormats
358359
Dim BitCellCount As UInteger
359360
Dim AllocatedLength As UInteger
360361
Dim Offset As UInteger
362+
Dim Reverse As Boolean = Not ReverseEndian
361363

362364
Dim Pos = 8
363365
For i = 0 To 255
@@ -381,10 +383,10 @@ Namespace ImageFormats
381383
BitCellCount = GetCalculatedBitCellCount(D86FTrack.BitRate, D86FTrack.RPM, IsMFM, RPMSlowDown, AlternateBitcellCalculation, D86FTrack.BitCellCount)
382384
AllocatedLength = GetAllocatedLength(Hole, RPMSlowDown, AlternateBitcellCalculation, D86FTrack.BitCellCount)
383385
End If
384-
D86FTrack.Bitstream = IBM_MFM.BytesToBits(Buffer, Offset + 6, BitCellCount)
386+
D86FTrack.Bitstream = IBM_MFM.BytesToBits(Buffer, Offset + 6, BitCellCount, Reverse)
385387

386388
If HasSurfaceData Then
387-
D86FTrack.SurfaceData = IBM_MFM.BytesToBits(Buffer, Offset + 6 + AllocatedLength, BitCellCount)
389+
D86FTrack.SurfaceData = IBM_MFM.BytesToBits(Buffer, Offset + 6 + AllocatedLength, BitCellCount, Reverse)
388390
End If
389391

390392
'Check for thick tracks

DiskImageTool/MainForm.Designer.vb

Lines changed: 23 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DiskImageTool/MainForm.resx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,15 @@
153153
<metadata name="MainMenuFile.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
154154
<value>False</value>
155155
</metadata>
156+
<metadata name="MenuFileSeparator1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
157+
<value>False</value>
158+
</metadata>
159+
<metadata name="MenuFileSeparator2.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
160+
<value>False</value>
161+
</metadata>
162+
<metadata name="MenuFileSeparator3.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
163+
<value>False</value>
164+
</metadata>
156165
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
157166
<data name="MenuFileOpen.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
158167
<value>
@@ -236,6 +245,12 @@
236245
<metadata name="MenuEditSeparator1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
237246
<value>False</value>
238247
</metadata>
248+
<metadata name="MenuEditSeparator2.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
249+
<value>False</value>
250+
</metadata>
251+
<metadata name="MenuEditSeparator1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
252+
<value>False</value>
253+
</metadata>
239254
<data name="MenuEditFileProperties.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
240255
<value>
241256
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
@@ -301,12 +316,18 @@
301316
<metadata name="MenuToolsSeparator.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
302317
<value>False</value>
303318
</metadata>
319+
<metadata name="MenuToolsSeparator.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
320+
<value>False</value>
321+
</metadata>
304322
<metadata name="MainMenuHelp.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
305323
<value>False</value>
306324
</metadata>
307325
<metadata name="MenuHelpSeparator.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
308326
<value>False</value>
309327
</metadata>
328+
<metadata name="MenuHelpSeparator.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
329+
<value>False</value>
330+
</metadata>
310331
<metadata name="FileMenuSeparator2.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
311332
<value>False</value>
312333
</metadata>

0 commit comments

Comments
 (0)