mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-06-01 19:04:50 +00:00
Avatar update fixes for the contributions form.
This commit is contained in:
@@ -121,15 +121,6 @@
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>163, 48</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
||||
<value>contextMenuStrip1</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="addDisplayIDToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>162, 22</value>
|
||||
</data>
|
||||
@@ -142,18 +133,18 @@
|
||||
<data name="deleteDisplayIDToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Delete Display ID</value>
|
||||
</data>
|
||||
<data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>163, 48</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
||||
<value>contextMenuStrip1</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<metadata name="GridContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>172, 17</value>
|
||||
</metadata>
|
||||
<data name="GridContextMenu.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>173, 48</value>
|
||||
</data>
|
||||
<data name=">>GridContextMenu.Name" xml:space="preserve">
|
||||
<value>GridContextMenu</value>
|
||||
</data>
|
||||
<data name=">>GridContextMenu.Type" xml:space="preserve">
|
||||
<value>MetroFramework.Controls.MetroContextMenu, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a</value>
|
||||
</data>
|
||||
<data name="addLanguageToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>172, 22</value>
|
||||
</data>
|
||||
@@ -166,6 +157,15 @@
|
||||
<data name="removeLanguageToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Remove Language</value>
|
||||
</data>
|
||||
<data name="GridContextMenu.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>173, 48</value>
|
||||
</data>
|
||||
<data name=">>GridContextMenu.Name" xml:space="preserve">
|
||||
<value>GridContextMenu</value>
|
||||
</data>
|
||||
<data name=">>GridContextMenu.Type" xml:space="preserve">
|
||||
<value>MetroFramework.Controls.MetroContextMenu, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a</value>
|
||||
</data>
|
||||
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>321, 17</value>
|
||||
</metadata>
|
||||
@@ -333,6 +333,12 @@
|
||||
<data name="locSort.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="buttonReplaceAll" Row="1" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="dataGridViewLocEntryData" Row="2" RowSpan="1" Column="1" ColumnSpan="2" /><Control Name="menuStrip" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="textBoxReplaceAll" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="treeViewLocKeys" Row="1" RowSpan="2" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Absolute,350,Percent,100,AutoSize,0" /><Rows Styles="Absolute,23,AutoSize,0,Percent,100,Absolute,20" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="saveToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>98, 22</value>
|
||||
</data>
|
||||
<data name="saveToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Save</value>
|
||||
</data>
|
||||
<data name="fileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>37, 19</value>
|
||||
</data>
|
||||
@@ -360,12 +366,6 @@
|
||||
<data name=">>menuStrip.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="saveToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="saveToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Save</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
|
||||
@@ -1318,7 +1318,7 @@
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="fullBoxSupportToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
<value>160, 22</value>
|
||||
</data>
|
||||
<data name="fullBoxSupportToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Full Box Support</value>
|
||||
@@ -1571,7 +1571,7 @@
|
||||
</value>
|
||||
</data>
|
||||
<data name="openPckManagerToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
<value>161, 22</value>
|
||||
</data>
|
||||
<data name="openPckManagerToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Pck Manager</value>
|
||||
@@ -1589,7 +1589,7 @@
|
||||
<value>Binka -> Wav</value>
|
||||
</data>
|
||||
<data name="convertMusicFilesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
<value>161, 22</value>
|
||||
</data>
|
||||
<data name="convertMusicFilesToolStripMenuItem.Text" xml:space="preserve">
|
||||
<value>Audio Converter</value>
|
||||
@@ -4025,7 +4025,7 @@
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LittleEndianCheckBox.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>1014, 14</value>
|
||||
<value>1014, 13</value>
|
||||
</data>
|
||||
<data name="LittleEndianCheckBox.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>4, 3, 4, 3</value>
|
||||
|
||||
@@ -42,23 +42,50 @@ namespace PckStudio.ToolboxItems
|
||||
|
||||
private void LoadAuthor()
|
||||
{
|
||||
// TODO: find a better way to check if the avatar has changed since last cache.
|
||||
string cacheKey = Convert.ToBase64String(Encoding.Default.GetBytes(_contributor.AvatarUrl));
|
||||
// This should fix avatars not updating when changed on GitHub :3
|
||||
// Cache by stable user id, not by URL
|
||||
string cacheKey = $"gh-avatar-{_contributor.Id}";
|
||||
string cachedPath = ApplicationScope.DataCacher.GetCachedFilepath(cacheKey);
|
||||
|
||||
if (!ApplicationScope.DataCacher.HasFileCached(cacheKey))
|
||||
// Refresh avatars periodically
|
||||
bool needsRefresh = true;
|
||||
if (ApplicationScope.DataCacher.HasFileCached(cacheKey))
|
||||
{
|
||||
try
|
||||
{
|
||||
var age = DateTime.UtcNow - File.GetLastWriteTimeUtc(cachedPath);
|
||||
needsRefresh = age > TimeSpan.FromDays(1); // refresh daily
|
||||
}
|
||||
catch
|
||||
{
|
||||
needsRefresh = true;
|
||||
}
|
||||
}
|
||||
if (needsRefresh)
|
||||
{
|
||||
using (WebClient webClient = new WebClient())
|
||||
{
|
||||
Stream avatarImgStream = webClient.OpenRead(_contributor.AvatarUrl);
|
||||
MemoryStream ms = new MemoryStream();
|
||||
new Bitmap(avatarImgStream).Save(ms, ImageFormat.Png);
|
||||
avatarImgStream.Flush();
|
||||
avatarImgStream.Dispose();
|
||||
ApplicationScope.DataCacher.Cache(ms.ToArray(), cacheKey);
|
||||
webClient.Headers.Add(HttpRequestHeader.CacheControl, "no-cache");
|
||||
webClient.Headers.Add(HttpRequestHeader.Pragma, "no-cache");
|
||||
webClient.Headers.Add(HttpRequestHeader.UserAgent, "PckStudio");
|
||||
|
||||
string url = _contributor.AvatarUrl;
|
||||
string sep = url.Contains("?") ? "&" : "?";
|
||||
string fetchUrl = url + sep + "cb=" + DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||
|
||||
byte[] bytes = webClient.DownloadData(fetchUrl);
|
||||
ApplicationScope.DataCacher.Cache(bytes, cacheKey);
|
||||
cachedPath = ApplicationScope.DataCacher.GetCachedFilepath(cacheKey);
|
||||
}
|
||||
}
|
||||
|
||||
Image avatarUserImg = Image.FromFile(ApplicationScope.DataCacher.GetCachedFilepath(cacheKey));
|
||||
// Load without locking the file on disk
|
||||
Image avatarUserImg;
|
||||
using (var fs = new FileStream(cachedPath, System.IO.FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
||||
using (var temp = Image.FromStream(fs))
|
||||
{
|
||||
avatarUserImg = (Image)temp.Clone();
|
||||
}
|
||||
|
||||
Action setUiElements = () =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user