mirror of
https://github.com/zhigang1992/react-native-code-push.git
synced 2026-05-19 19:39:54 +08:00
Added support react-native-windows dotNet Added example for react-native-windows UWP based Added example for react-native-windows dotNet based Project structure: CodePush.Shared - shared code between UWP and dotNet CodePush - UWP specific code CodePush.Net46 - dotNet specific code For UWP solution it needs to be added the following projects: CodePush.Shared CodePush For dotNet solution it needs to be added the following projects: CodePush.Shared CodePush.Net46 Examples: Examples\CodePushDemoApp\windows\CodePushDemoApp.sln the solution contains both examples (UWP and dotNet). Notes Example for ARM configuration has not been tested. Since there is no changes in UWP part of implementation, there is low risk of failure. In this implementation we tried to reuse UWP library as much as possible. The following issues are relevant for both platforms: ZipFile.ExtractToDirectory is not reliable and throws exception if: folder exists already path is too long (> 250 chars) Un-zipping is quite long operation. Does it make sense for async? await UpdateUtils.UnzipBundleAsync(downloadFile.Path, unzippedFolder.Path);
41 lines
1.9 KiB
C#
41 lines
1.9 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Windows.Storage;
|
|
|
|
namespace CodePush.ReactNative
|
|
{
|
|
internal class FileUtils
|
|
{
|
|
internal async static Task MergeFoldersAsync(StorageFolder source, StorageFolder target)
|
|
{
|
|
foreach (StorageFile sourceFile in await source.GetFilesAsync().AsTask().ConfigureAwait(false))
|
|
{
|
|
await sourceFile.CopyAndReplaceAsync(await target.CreateFileAsync(sourceFile.Name, CreationCollisionOption.OpenIfExists).AsTask().ConfigureAwait(false)).AsTask().ConfigureAwait(false);
|
|
}
|
|
|
|
foreach (StorageFolder sourceDirectory in await source.GetFoldersAsync().AsTask().ConfigureAwait(false))
|
|
{
|
|
StorageFolder nextTargetSubDir = await target.CreateFolderAsync(sourceDirectory.Name, CreationCollisionOption.OpenIfExists).AsTask().ConfigureAwait(false);
|
|
await MergeFoldersAsync(sourceDirectory, nextTargetSubDir).ConfigureAwait(false);
|
|
}
|
|
}
|
|
|
|
internal async static Task ClearReactDevBundleCacheAsync()
|
|
{
|
|
var devBundleCacheFile = (StorageFile)await ApplicationData.Current.LocalFolder.TryGetItemAsync(CodePushConstants.ReactDevBundleCacheFileName).AsTask().ConfigureAwait(false);
|
|
if (devBundleCacheFile != null)
|
|
{
|
|
await devBundleCacheFile.DeleteAsync().AsTask().ConfigureAwait(false);
|
|
}
|
|
}
|
|
|
|
internal async static Task<long> GetBinaryResourcesModifiedTimeAsync(string fileName)
|
|
{
|
|
var assetJSBundleFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(CodePushConstants.AssetsBundlePrefix + fileName)).AsTask().ConfigureAwait(false);
|
|
var fileProperties = await assetJSBundleFile.GetBasicPropertiesAsync().AsTask().ConfigureAwait(false);
|
|
return fileProperties.DateModified.ToUnixTimeMilliseconds();
|
|
}
|
|
|
|
}
|
|
}
|