feat: background download plugin and dep

This commit is contained in:
Adrian Castro
2024-03-27 19:49:45 +01:00
parent 020cb42e38
commit 1c5a63f8f1
4 changed files with 92 additions and 543 deletions

View File

@@ -1,6 +1,7 @@
import type { ExpoConfig } from "expo/config";
import withRemoveiOSNotificationEntitlement from "./config-plugins/withRemoveiOSNotificationEntitlement";
import withRNBackgroundDownloader from "./config-plugins/withRNBackgroundDownloader";
import { version } from "./package.json";
const defineConfig = (): ExpoConfig => ({
@@ -49,6 +50,7 @@ const defineConfig = (): ExpoConfig => ({
plugins: [
"expo-router",
[withRemoveiOSNotificationEntitlement as unknown as string],
[withRNBackgroundDownloader as unknown as string],
[
"expo-screen-orientation",
{

View File

@@ -0,0 +1,48 @@
const { withAppDelegate } = require("@expo/config-plugins");
function withRNBackgroundDownloader(expoConfig) {
return withAppDelegate(expoConfig, async (appDelegateConfig) => {
const { modResults: appDelegate } = appDelegateConfig;
const appDelegateLines = appDelegate.contents.split("\n");
// Define the code to be added to AppDelegate.mm
const backgroundDownloaderImport =
"#import <RNBackgroundDownloader.h> // Required by react-native-background-downloader. Generated by expoPlugins/withRNBackgroundDownloader.js";
const backgroundDownloaderDelegate = `\n// Delegate method required by react-native-background-downloader. Generated by expoPlugins/withRNBackgroundDownloader.js
- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler
{
[RNBackgroundDownloader setCompletionHandlerWithIdentifier:identifier completionHandler:completionHandler];
}`;
// Find the index of the AppDelegate import statement
const importIndex = appDelegateLines.findIndex((line) =>
/^#import "AppDelegate.h"/.test(line),
);
// Find the index of the last line before the @end statement
const endStatementIndex = appDelegateLines.findIndex((line) =>
/@end/.test(line),
);
// Insert the import statement if it's not already present
if (!appDelegate.contents.includes(backgroundDownloaderImport)) {
appDelegateLines.splice(importIndex + 1, 0, backgroundDownloaderImport);
}
// Insert the delegate method above the @end statement
if (!appDelegate.contents.includes(backgroundDownloaderDelegate)) {
appDelegateLines.splice(
endStatementIndex,
0,
backgroundDownloaderDelegate,
);
}
// Update the contents of the AppDelegate file
appDelegate.contents = appDelegateLines.join("\n");
return appDelegateConfig;
});
}
module.exports = withRNBackgroundDownloader;

View File

@@ -19,6 +19,7 @@
},
"dependencies": {
"@expo/metro-config": "^0.17.3",
"@kesha-antonov/react-native-background-downloader": "^3.1.2",
"@movie-web/api": "*",
"@movie-web/colors": "*",
"@movie-web/provider-utils": "*",

584
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff