Skip to content
This repository has been archived by the owner on Nov 7, 2023. It is now read-only.

Commit

Permalink
refactor: use flutter_inappwebview on mobiles
Browse files Browse the repository at this point in the history
  • Loading branch information
zyrouge committed Nov 12, 2021
1 parent 3f1d3f5 commit 6210112
Show file tree
Hide file tree
Showing 11 changed files with 91 additions and 33 deletions.
2 changes: 1 addition & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ android {

defaultConfig {
applicationId "io.github.yukino_app"
minSdkVersion 16
minSdkVersion 17
targetSdkVersion 30
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
Expand Down
1 change: 1 addition & 0 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

<application
android:name="${applicationName}"
android:label="Yukino"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Generated file.
// If you wish to remove Flutter's multidex support, delete this entire file.

package io.flutter.app;

import android.content.Context;
import androidx.annotation.CallSuper;
import androidx.multidex.MultiDex;

/**
* Extension of {@link io.flutter.app.FlutterApplication}, adding multidex support.
*/
public class FlutterMultiDexApplication extends FlutterApplication {
@Override
@CallSuper
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
15 changes: 9 additions & 6 deletions cli/commands/actions/check-release/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,22 @@ import { Octokit } from "@octokit/rest";
import { RequestError } from "@octokit/request-error";
import { config } from "../../../config";
import { Logger } from "../../../logger";
import { getArgs } from "../../../spawn";
import { getVersion } from "../../version/print";

const logger = new Logger("actions:check-release");

export const checkRelease = async () => {
logger.log("Checking for previous releases");

const ends = process.argv.slice(2).map((x) => {
let y: string = x;
if (y.startsWith("'")) y = y.slice(1);
if (y.endsWith("'")) y = y.slice(0, -1);
return y;
});
const ends = getArgs()
.slice(2)
.map((x) => {
let y: string = x;
if (y.startsWith("'")) y = y.slice(1);
if (y.endsWith("'")) y = y.slice(0, -1);
return y;
});

if (!Array.isArray(ends) || !ends.length) {
throw new Error("No input were got");
Expand Down
4 changes: 2 additions & 2 deletions cli/commands/generator/run/tasks/build_runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
readFile,
writeFile,
} from "fs-extra";
import { SpawnError, spawn } from "../../../../spawn";
import { SpawnError, spawn, isForce } from "../../../../spawn";
import { config } from "../../../../config";
import { Logger } from "../../../../logger";

Expand Down Expand Up @@ -110,7 +110,7 @@ export const runDartBuildRunner = async () => {
logger.log("Running dart build_runner command...");

try {
await execute(process.argv.includes("-f"));
await execute(isForce());
} catch (err: any) {
if (
err instanceof SpawnError &&
Expand Down
24 changes: 23 additions & 1 deletion cli/spawn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export const spawn = async (
) =>
new Promise<SpawnResult>(async (resolve, reject) => {
const cp = crossSpawn(cmd, args, {
stdio: stdio,
stdio: stdio ?? (isVerbose() ? "inherit" : undefined),
env: process.env,
cwd: cwd,
});
Expand Down Expand Up @@ -69,3 +69,25 @@ export const spawn = async (
}
});
});

export const defaultArgs = {
verbose: ["--verbose", "-v"],
force: ["--force", "-f"],
};

export const getArgsInfo = () => ({
args: getArgs(),
verbose: isVerbose(),
force: isForce(),
});

export const isVerbose = () =>
process.argv.slice(2).some((x) => defaultArgs.verbose.includes(x));

export const isForce = () =>
process.argv.slice(2).some((x) => defaultArgs.force.includes(x));

export const getArgs = () =>
process.argv
.slice(2)
.filter((x) => !Object.values(defaultArgs).flat().includes(x));
5 changes: 4 additions & 1 deletion lib/config/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,11 @@ abstract class Config {
static const String repoAuthor = 'yukino-app';
static const String repoName = 'yukino';

// static const String storeURL =
// 'https://raw.githubusercontent.com/$repoAuthor/extensions-store/dist/extensions.json';

static const String storeURL =
'https://raw.githubusercontent.com/$repoAuthor/extensions-store/dist/extensions.json';
'https://raw.githubusercontent.com/$repoAuthor/this-is-kek/main/store.json';

static const String releasesURL =
'https://api.github.com/repos/$repoAuthor/$repoName/releases?per_page=20';
Expand Down
4 changes: 2 additions & 2 deletions packages/extensions/lib/core/extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ abstract class ExtensionInternals {
final Hetu runner = await HetuManager.create();

try {
await runner.eval(HetuManager.appendDefinitions(ext.code));
await runner.eval(HetuManager.prependDefinitions(ext.code));
} on HTError catch (err) {
HetuManager.editError(err);
rethrow;
Expand Down Expand Up @@ -113,7 +113,7 @@ abstract class ExtensionInternals {
final Hetu runner = await HetuManager.create();

try {
await runner.eval(HetuManager.appendDefinitions(ext.code));
await runner.eval(HetuManager.prependDefinitions(ext.code));
} on HTError catch (err) {
HetuManager.editError(err);
rethrow;
Expand Down
5 changes: 3 additions & 2 deletions packages/extensions/lib/hetu/hetu.dart
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,15 @@ abstract class HetuManager {
return hetu;
}

static String appendDefinitions(final String code) => '''
static String prependDefinitions(final String code) => '''
$definitions
$code
''';

static void editError(final HTError error) {
_hetuDepLines ??= RegExp('\n').allMatches(appendDefinitions('')).length - 1;
_hetuDepLines ??=
RegExp('\n').allMatches(prependDefinitions('')).length - 1;

if (error.line != null) {
error.line = error.line! - _hetuDepLines!;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import '../../http.dart';
import '../html_dom.dart';

class _FlutterWebviewEventer {
StreamController<Uri> onLoadController = StreamController<Uri>();
StreamController<Uri> onLoadController = StreamController<Uri>.broadcast();
late Stream<Uri> onLoad = onLoadController.stream;

Future<T> waitUntil<T>(
Expand Down Expand Up @@ -55,6 +55,7 @@ class FlutterWebviewProvider extends HtmlDOMProvider {
}
},
);
await webview.run();

return HtmlDOMTab(
HtmlDOMTabImpl(
Expand All @@ -64,20 +65,26 @@ class FlutterWebviewProvider extends HtmlDOMProvider {

switch (wait) {
case HtmlDOMTabGotoWait.load:
await eventer!.waitUntil(
eventer!
.waitUntil(
eventer!.onLoad,
(final Uri receivedUri) => uri == receivedUri,
);
future.complete();
)
.then((final Uri uri) {
future.complete();
});

break;

case HtmlDOMTabGotoWait.domContentLoaded:
await eventer!.waitUntil(
eventer!
.waitUntil(
eventer!.onLoad,
(final Uri receivedUri) => uri == receivedUri,
);
await webview?.webViewController.callAsyncJavaScript(
functionBody: '''
)
.then((final Uri uri) async {
await webview!.webViewController.callAsyncJavaScript(
functionBody: '''
return new Promise((resolve) => {
if (document.readyState === 'complete') {
return resolve();
Expand All @@ -88,8 +95,9 @@ class FlutterWebviewProvider extends HtmlDOMProvider {
});
});
''',
);
future.complete();
);
future.complete();
});
break;

case HtmlDOMTabGotoWait.none:
Expand All @@ -109,7 +117,7 @@ class FlutterWebviewProvider extends HtmlDOMProvider {

return result?.value;
},
getHtml: () => webview!.webViewController.getHtml(),
getHtml: () async => webview!.webViewController.getHtml(),
getCookies: (final String url) async {
final List<Cookie> got =
await cookies!.getCookies(url: Uri.parse(url));
Expand Down
14 changes: 7 additions & 7 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_inappwebview:
dependency: transitive
description:
name: flutter_inappwebview
url: "https://pub.dartlang.org"
source: hosted
version: "5.3.2"
flutter_markdown:
dependency: "direct main"
description:
Expand All @@ -277,13 +284,6 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_webview_plugin:
dependency: transitive
description:
name: flutter_webview_plugin
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.0"
flutter_widget_from_html_core:
dependency: transitive
description:
Expand Down

0 comments on commit 6210112

Please sign in to comment.