mirror of
https://github.com/zhigang1992/react-native-code-push.git
synced 2026-06-10 07:10:36 +08:00
47 lines
1.9 KiB
C#
47 lines
1.9 KiB
C#
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using Windows.Storage;
|
|
|
|
namespace CodePush.ReactNative
|
|
{
|
|
internal class UpdateUtils
|
|
{
|
|
internal async static Task CopyNecessaryFilesFromCurrentPackageAsync(StorageFile diffManifestFile, StorageFolder currentPackageFolder, StorageFolder newPackageFolder)
|
|
{
|
|
await FileUtils.MergeFoldersAsync(currentPackageFolder, newPackageFolder).ConfigureAwait(false);
|
|
JObject diffManifest = await CodePushUtils.GetJObjectFromFileAsync(diffManifestFile).ConfigureAwait(false);
|
|
var deletedFiles = (JArray)diffManifest["deletedFiles"];
|
|
foreach (string fileNameToDelete in deletedFiles)
|
|
{
|
|
StorageFile fileToDelete = await newPackageFolder.GetFileAsync(fileNameToDelete.Replace("/", "\\")).AsTask().ConfigureAwait(false);
|
|
await fileToDelete.DeleteAsync().AsTask().ConfigureAwait(false);
|
|
}
|
|
}
|
|
|
|
internal async static Task<string> FindJSBundleInUpdateContentsAsync(StorageFolder updateFolder, string expectedFileName)
|
|
{
|
|
foreach (StorageFile file in await updateFolder.GetFilesAsync().AsTask().ConfigureAwait(false))
|
|
{
|
|
string fileName = file.Name;
|
|
if (fileName.Equals(expectedFileName))
|
|
{
|
|
return fileName;
|
|
}
|
|
}
|
|
|
|
foreach (StorageFolder folder in await updateFolder.GetFoldersAsync().AsTask().ConfigureAwait(false))
|
|
{
|
|
string mainBundlePathInSubFolder = await FindJSBundleInUpdateContentsAsync(folder, expectedFileName).ConfigureAwait(false);
|
|
if (mainBundlePathInSubFolder != null)
|
|
{
|
|
return Path.Combine(folder.Name, mainBundlePathInSubFolder);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|