Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 31 additions & 3 deletions src/Assets/Scripts/Patcher/Patcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,12 @@ private void DownloadVersionDiff(int version, ProgressTracker progressTracker, A

foreach (var removedFile in diffSummary.RemovedFiles)
{
// Skip directories
if (removedFile.EndsWith("/"))
{
continue;
}

LogInfo(string.Format("Deleting file {0}", removedFile));

_patcherData.ClearFile(removedFile);
Expand All @@ -297,6 +303,23 @@ private void DownloadVersionDiff(int version, ProgressTracker progressTracker, A
patchProgress.Progress = (float)doneFilesCount/totalFilesCount;
}

foreach (var removedFile in diffSummary.RemovedFiles)
{
if (removedFile.EndsWith("/"))
{
LogInfo(string.Format("Trying to clear directory {0}", removedFile));

if (_patcherData.TryClearDirectory(removedFile))
{
LogInfo(string.Format("Succesfuly cleared directory {0}", removedFile));
}
else
{
LogInfo(string.Format("Unable to clear directory {0}", removedFile));
}
}
}

foreach (var addedFile in diffSummary.AddedFiles)
{
LogInfo(string.Format("Adding file {0}", addedFile));
Expand All @@ -317,12 +340,17 @@ private void DownloadVersionDiff(int version, ProgressTracker progressTracker, A

string sourceFilePath = Path.Combine(diffDirectoryPath, addedFile);

if (Directory.Exists(sourceFilePath))
string destinationFilePath = _patcherData.GetFilePath(addedFile);

string destinationDirPath = Path.GetDirectoryName(destinationFilePath);

// ReSharper disable once AssignNullToNotNullAttribute
if (!Directory.Exists(destinationDirPath))
{
continue;
Directory.CreateDirectory(destinationDirPath);
}

File.Copy(sourceFilePath, _patcherData.GetFilePath(addedFile), true);
File.Copy(sourceFilePath, destinationFilePath, true);

_patcherData.Cache.SetFileVersion(addedFile, version);

Expand Down
38 changes: 36 additions & 2 deletions src/Assets/Scripts/Patcher/PatcherApplication.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void StartApplication()
{
foreach(var file in executableApp.GetFiles("*", SearchOption.AllDirectories))
{
Chmod(file.FullName, "a+x");
Chmod(file.FullName, "+x");
}
}
catch (Exception exception)
Expand All @@ -51,7 +51,41 @@ public void StartApplication()
processStartInfo.Arguments = string.Format("\"{0}\"", executableApp.FullName);
}
}
else
else if (Application.platform == RuntimePlatform.LinuxPlayer)
{
var executableFile = directoryInfo.GetDirectories("*", SearchOption.TopDirectoryOnly).Where(info =>
{
// Read magic bytes
using (FileStream executableFileStream = File.OpenRead(info.FullName))
{
using (BinaryReader executableBinaryReader = new BinaryReader(executableFileStream))
{
byte[] magicBytes = executableBinaryReader.ReadBytes(4);

if (magicBytes.Length == 4)
{
if (magicBytes[0] == 127 && // 7F
magicBytes[1] == 69 && // 45 - 'E'
magicBytes[2] == 76 && // 4c - 'L'
magicBytes[3] == 70) // 46 - 'F'
{
return true;
}
}
}
}

return false;
}).FirstOrDefault();

if (executableFile != null)
{
Chmod(executableFile.FullName, "+x");
processStartInfo.FileName = executableFile.FullName;
}
}
else if (Application.platform == RuntimePlatform.WindowsEditor ||
Application.platform == RuntimePlatform.WindowsPlayer)
{
var executableFile = directoryInfo.GetFiles("*.exe", SearchOption.TopDirectoryOnly).FirstOrDefault();

Expand Down
24 changes: 24 additions & 0 deletions src/Assets/Scripts/Patcher/PatcherData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,30 @@ public void ClearFile(string fileName)
Cache.ClearFileVersion(fileName);
}

/// <summary>
/// Deletes directory if it's possible.
/// </summary>
public bool TryClearDirectory(string directoryName)
{
string directoryPath = System.IO.Path.Combine(Path, directoryName);

if (Directory.Exists(directoryPath))
{
DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath);

if (directoryInfo.GetFiles("*", SearchOption.AllDirectories).Length == 0)
{
Directory.Delete(directoryPath, true);
}
else
{
return false;
}
}

return true;
}

/// <summary>
/// Returns absolute path to specified file (placed in local data).
/// </summary>
Expand Down
3 changes: 2 additions & 1 deletion src/Assets/Scripts/Patcher/UI/ChangelogList.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections;
using System.Linq;
using PatchKit.Api;
using PatchKit.Unity.Api;
using PatchKit.Unity.UI;
Expand Down Expand Up @@ -27,7 +28,7 @@ protected override IEnumerator RefreshCoroutine()

var versions = ApiConnectionInstance.Instance.EndGetAppVersionList(request);

foreach (var version in versions)
foreach (var version in versions.OrderByDescending(version => version.Id))
{
CreateVersionChangelog(version);
}
Expand Down
Binary file modified src/Assets/Textures/Test Background.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.