Merge pull request #5768 from BOINC/vko_remove_flutter

Remove Flutter sample.
This commit is contained in:
Vitalii Koshura 2024-08-20 00:15:27 +02:00 committed by GitHub
commit 33f2ce63a6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
46 changed files with 0 additions and 2258 deletions

View File

@ -1,86 +0,0 @@
# This file is part of BOINC.
# http://boinc.berkeley.edu
# Copyright (C) 2023 University of California
#
# BOINC is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# BOINC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.
name: Flutter-macOS
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
schedule:
- cron: '0 0 * * 0'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build:
name: ${{ matrix.type }}-flutter-build
runs-on: macos-latest
strategy:
matrix:
type: [macos, ios]
fail-fast: false
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
with:
fetch-depth: 2
- name: Setup xcode
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd
with:
xcode-version: '12.5.1'
- name: Setup flutter
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1
with:
channel: 'beta'
- name: Setup macos desktop
if: matrix.type == 'macos'
run: flutter config --enable-macos-desktop
- name: Cache dependencies
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9
if: matrix.type == 'macos'
with:
path: 3rdParty/buildCache
key: osx-flutter-${{ hashFiles('3rdParty/*Mac*.sh', 'mac_build/setupForBOINC.sh', 'mac_build/dependencyNames.sh', 'mac_build/[bB]uild*.sh', '.github/workflows/flutter-macos.yml') }}
- name: Build macos client
if: matrix.type == 'macos'
run: samples/flutter/ci_build_macos.sh
- name: Install flutter dependencies
run: cd samples/flutter/boinc/ && flutter pub get
- name: Build macos
if: matrix.type == 'macos'
run: |
cd samples/flutter/
flutter create boinc
cd boinc/
flutter build macos
- name: Build ios
if: matrix.type == 'ios'
run: |
cd samples/flutter/
flutter create boinc
cd boinc/
flutter build ios --release --no-codesign

View File

@ -1,147 +0,0 @@
# This file is part of BOINC.
# http://boinc.berkeley.edu
# Copyright (C) 2023 University of California
#
# BOINC is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# BOINC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.
name: Flutter-Ubuntu
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
schedule:
- cron: '0 0 * * 0'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
AWS_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_KEY }}
AWS_DEFAULT_REGION: us-west-2
jobs:
build:
name: ${{ matrix.type }}-flutter-build
runs-on: ubuntu-latest
strategy:
matrix:
type: [linux, android]
fail-fast: false
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
with:
fetch-depth: 1
- name: Setup Java
if: matrix.type == 'android'
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
with:
distribution: 'zulu'
java-version: '17'
- name: Setup android SDK
if: matrix.type == 'android'
uses: android-actions/setup-android@00854ea68c109d98c75d956347303bf7c45b0277
- name: Setup flutter
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1
with:
channel: 'beta'
- name: Setup linux desktop
if: matrix.type == 'linux'
run: flutter config --enable-linux-desktop
- name: Install linux dependencies
if: matrix.type == 'linux'
run: |
sudo apt update
sudo apt install -y clang cmake ninja-build pkg-config libgtk-3-dev
- name: Cache dependencies
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9
if: matrix.type == 'linux'
with:
path: |
3rdParty/buildCache
!3rdParty/buildCache/linux/vcpkgcache/
key: linux-flutter-client-vcpkg-${{ hashFiles('3rdParty/*Linux*.sh', 'linux/*.sh', '.github/workflows/flutter-ubuntu.yml') }}
- name: Check if build is running from origin repo
if: ${{ success() && env.AWS_ACCESS_KEY_ID != 0 && env.AWS_SECRET_ACCESS_KEY != 0 }}
run: |
echo "VCPKG_BINARY_SOURCES=clear;x-aws,s3://vcpkg.cache.boinc/,readwrite" >> $GITHUB_ENV
- name: Check if build is running from fork
if: ${{ success() && (env.AWS_ACCESS_KEY_ID == 0 || env.AWS_SECRET_ACCESS_KEY == 0) }}
run: |
echo "VCPKG_BINARY_SOURCES=clear;x-aws-config,no-sign-request;x-aws,s3://vcpkg.cache.boinc/,read" >> $GITHUB_ENV
- name: Build linux client
if: matrix.type == 'linux'
run: samples/flutter/ci_build_linux.sh
- name: Cache dependencies
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9
if: matrix.type == 'android'
with:
path: |
3rdParty/buildCache
!3rdParty/buildCache/android/vcpkgcache/
key: android-manager-vcpkg-${{ hashFiles('android/*.sh') }}
- name: Build android client
if: matrix.type == 'android'
run: samples/flutter/ci_build_android.sh
- name: Install flutter dependencies
run: cd samples/flutter/boinc/ && flutter pub get
- name: Build linux
if: matrix.type == 'linux'
run: |
cd samples/flutter/
flutter create boinc
cd boinc/
flutter build linux
- name: Build android
if: matrix.type == 'android'
run: |
cd samples/flutter/
flutter create boinc --org edu.berkeley
cd boinc/
flutter build apk
- name: Prepare android
if: success() && matrix.type == 'android'
uses: edgarrc/action-7z@93485892b5468e89cfb2c28a8d1c0e3904906458
with:
args: 7z a -t7z -mx=9 deploy/flutter_${{ matrix.type }}.7z -r0 samples/flutter/boinc/build/app/outputs/flutter-apk/app-release.apk
- name: Prepare linux
if: success() && matrix.type == 'linux'
uses: edgarrc/action-7z@93485892b5468e89cfb2c28a8d1c0e3904906458
with:
args: 7z a -t7z -mx=9 deploy/flutter_${{ matrix.type }}.7z -r0 samples/flutter/boinc/build/linux/x64/release/bundle/*
- name: Upload ${{ matrix.type }}
if: success()
uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a
with:
name: ${{ matrix.type }}_flutter_${{ github.event.pull_request.head.sha }}
path: deploy/flutter_${{ matrix.type }}.7z

View File

@ -1,134 +0,0 @@
# This file is part of BOINC.
# http://boinc.berkeley.edu
# Copyright (C) 2023 University of California
#
# BOINC is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# BOINC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.
name: Flutter-Windows
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
schedule:
- cron: '0 0 * * 0'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
AWS_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_KEY }}
AWS_DEFAULT_REGION: us-west-2
jobs:
build:
name: ${{ matrix.type }}-flutter-build
runs-on: windows-2019
strategy:
matrix:
type: [windows, web, winuwp]
fail-fast: false
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
with:
fetch-depth: 2
- name: Setup msbuild
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce
- name: Setup flutter
uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1
with:
channel: 'dev'
- name: Setup winuwp Desktop
if: matrix.type == 'winuwp'
run: flutter config --enable-windows-uwp-desktop
- name: Setup windows Desktop
if: matrix.type == 'windows'
run: flutter config --enable-windows-desktop
- name: Cache dependencies
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9
if: matrix.type == 'windows'
with:
path: |
${{ github.workspace }}\3rdParty\Windows\cuda\
key: windows-flutter-x64-Release-${{ hashFiles('win_build/vcpkg_3rdparty_dependencies_vs2019.vcxproj', '.github/workflows/flutter-windows.yml') }}
- name: Check if build is running from origin repo
if: ${{ success() && env.AWS_ACCESS_KEY_ID != 0 && env.AWS_SECRET_ACCESS_KEY != 0 }}
run: |
echo "VCPKG_BINARY_SOURCES=clear;x-aws,s3://vcpkg.cache.boinc/,readwrite" >> $GITHUB_ENV
- name: Check if build is running from fork
if: ${{ success() && (env.AWS_ACCESS_KEY_ID == 0 || env.AWS_SECRET_ACCESS_KEY == 0) }}
run: |
echo "VCPKG_BINARY_SOURCES=clear;x-aws-config,no-sign-request;x-aws,s3://vcpkg.cache.boinc/,read" >> $GITHUB_ENV
- name: Build windows client
if: matrix.type == 'windows'
run: samples\flutter\ci_build_windows.bat
- name: Install flutter dependencies
run: cd samples/flutter/boinc/ && flutter pub get
- name: Build winuwp
if: matrix.type == 'winuwp'
run: |
cd samples/flutter/
flutter create boinc
cd boinc/
flutter build winuwp
- name: Build windows
if: matrix.type == 'windows'
run: |
cd samples/flutter/
flutter create boinc
cd boinc/
flutter build windows
- name: Build web
if: matrix.type == 'web'
run: |
cd samples/flutter/
flutter create boinc
cd boinc/
flutter build web
- name: Prepare windows
if: success() && matrix.type == 'windows'
run: |
7z.exe a -t7z -mx=9 deploy/flutter_${{ matrix.type }}.7z -r0 samples/flutter/boinc/build/windows/runner/Release/*
- name: Prepare web
if: success() && matrix.type == 'web'
run: |
7z.exe a -t7z -mx=9 deploy/flutter_${{ matrix.type }}.7z -r0 samples/flutter/boinc/build/web/*
- name: Prepare winuwp
if: success() && matrix.type == 'winuwp'
run: |
7z.exe a -t7z -mx=9 deploy/flutter_${{ matrix.type }}.7z -r0 samples/flutter/boinc/build/winuwp/runner_uwp/Release/*
- name: Upload ${{ matrix.type }}
if: success()
uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a
with:
name: ${{ matrix.type }}_flutter_${{ github.event.pull_request.head.sha }}
path: deploy/flutter_${{ matrix.type }}.7z

View File

@ -1,59 +0,0 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# Web related
lib/generated_plugin_registrant.dart
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
# Windows
windows/
winuwp/
web/
# Linux
linux/
android/
# MacOS
macos/
ios/

View File

@ -1,10 +0,0 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: b22742018b3edf16c6cadd7b76d9db5e7f9064b5
channel: beta
project_type: app

View File

@ -1,16 +0,0 @@
# boinc
boinc
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

View File

@ -1,29 +0,0 @@
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

View File

@ -1,9 +0,0 @@
- assets/arm64-v8a/boinc
- assets/armeabi/boinc
- assets/armeabi-v7a/boinc
- assets/x86/boinc
- assets/x86_64/boinc
- assets/all_projects_list.xml
- assets/ca-bundle.crt
- assets/cc_config.xml
- assets/nomedia

View File

@ -1,69 +0,0 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 31
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "edu.berkeley.boinc"
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'commons-io:commons-io:2.7'
}

View File

@ -1,202 +0,0 @@
package edu.berkeley.boinc
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import java.io.File
import java.io.IOException
import java.io.InputStream
import android.util.Log
import org.apache.commons.io.FileUtils
import java.util.*
class MainActivity: FlutterActivity() {
private val CHANNEL = "edu.berkeley.boinc/client"
private val TAG = "Android kotlin FlutterActivity"
private val INSTALL_FAILED = "Failed to install: "
private val IOEXCEPTION_LOG = "IOException: "
private var isInstall = false
private val boincWorkingDir = "/data/data/edu.berkeley.boinc/client/"
private val fileNameClient = "boinc"
private val fileNameClientCmd = "boinccmd"
private val fileNameCABundle = "ca-bundle.crt"
private val fileNameClientConfig = "cc_config.xml"
private val fileNameAllProjectsList = "all_projects_list.xml"
private val fileNameNoMedia = "nomedia"
internal fun InputStream.copyToFile(destFile: File) = FileUtils.copyInputStreamToFile(this, destFile)
internal fun CharSequence.containsAny(vararg sequences: CharSequence) = sequences.any { it in this }
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
// Note: this methods is invoked on the main thread.
when (call.method) {
"runClient" -> {
val isRunning = runClient()
result.success(isRunning)
}
else -> {
result.notImplemented()
}
}
}
}
private fun runClient(): Boolean {
var success = false
if (!isInstall) {
success = installClient()
isInstall = success
}
Log.i(TAG, "isInstall: $isInstall")
if (isInstall) {
success = false
val param = "--allow_remote_gui_rpc"
val cmd = arrayOf(boincWorkingDir + fileNameClient, "--daemon", param)
try {
Log.i(TAG, "Launching '${cmd[0]}' from '$boincWorkingDir'")
Runtime.getRuntime().exec(cmd, null, File(boincWorkingDir))
success = true
} catch (e: IOException) {
Log.e(TAG, "Starting BOINC client failed with exception: " + e.message)
Log.e(TAG, "IOException", e)
}
}
return success
}
/**
* Copies given file from APK assets to internal storage.
*
* @param file name of file as it appears in assets directory
* @param executable set executable flag of file in internal storage
* @param targetFile name of target file
* @return Boolean success
*/
private fun installFile(file: String, executable: Boolean, targetFile: String): Boolean {
var success = false
val flutter_prefix = "flutter_assets/assets/"
// If file is executable, cpu architecture has to be evaluated
// and assets directory select accordingly
val source = flutter_prefix + if (executable) assetsDirForCpuArchitecture + file else file
val target = if (targetFile.isNotEmpty()) {
File(boincWorkingDir + targetFile)
} else {
File(boincWorkingDir + file)
}
try {
// Copy file from the asset manager to clientPath
applicationContext.assets.open(source).copyToFile(target)
success = true //copy succeeded without exception
// Set executable, if requested
if (executable) {
success = target.setExecutable(true) // return false, if not executable
}
Log.d(TAG, "Installation of " + source + " successful. Executable: " +
executable + "/" + success)
} catch (ioe: IOException) {
Log.e(TAG, IOEXCEPTION_LOG + ioe.message)
Log.e(TAG, "Install of $source failed.")
}
return success
}
/**
* Installs required files from APK's asset directory to the applications' internal storage.
* File attributes override and executable are defined here
*
* @return Boolean success
*/
private fun installClient(): Boolean {
if (!installFile(fileNameClient, true, "")) {
Log.e(TAG, INSTALL_FAILED + fileNameClient)
return false
}
if (!installFile(fileNameClientCmd, true, "")) {
Log.e(TAG, INSTALL_FAILED + fileNameClientCmd)
return false
}
if (!installFile(fileNameCABundle, false, "")) {
Log.e(TAG, INSTALL_FAILED + fileNameCABundle)
return false
}
if (!installFile(fileNameClientConfig, false, "")) {
Log.e(TAG, INSTALL_FAILED + fileNameClientConfig)
return false
}
if (!installFile(fileNameAllProjectsList, false, "")) {
Log.e(TAG, INSTALL_FAILED + fileNameAllProjectsList)
return false
}
if (!installFile(fileNameNoMedia, false, ".$fileNameNoMedia")) {
Log.e(TAG, INSTALL_FAILED + fileNameNoMedia)
return false
}
return true
}
/**
* Determines BOINC platform name corresponding to device's cpu architecture (ARM, x86).
* Defaults to ARM
*
* @return ID of BOINC platform name string in resources
*/
private val boincPlatform: String
get() {
val platformId: String
val arch = System.getProperty("os.arch") ?: ""
val normalizedArch = arch.toUpperCase(Locale.US)
platformId = when {
normalizedArch.containsAny("ARM64", "AARCH64") -> "ARM64"
"X86_64" in normalizedArch -> "X86_64"
"ARMV6" in normalizedArch -> "ARMV6"
"ARM" in normalizedArch -> "ARM"
"86" in normalizedArch -> "X86"
else -> {
Log.w(TAG, "could not map os.arch ($arch) to platform, default to arm.")
""
}
}
Log.i(TAG, "BOINC platform: $platformId for os.arch: $arch")
return platformId
}
/**
* Determines assets directory (contains BOINC client binaries) corresponding to device's cpu architecture (ARM, x86)
*
* @return name of assets directory for given platform, not an absolute path.
*/
private val assetsDirForCpuArchitecture: String
get() {
var archAssetsDirectory = ""
when (boincPlatform) {
"ARMV6" -> archAssetsDirectory = "armeabi/"
"ARM" -> archAssetsDirectory = "armeabi-v7a/"
"ARM64" -> archAssetsDirectory = "arm64-v8a/"
"X86" -> archAssetsDirectory = "x86/"
"X86_64" -> archAssetsDirectory = "x86_64/"
else -> {
}
}
return archAssetsDirectory
}
}

View File

@ -1,5 +0,0 @@
boinc
boinc.exe
ca-bundle.crt
all_projects_list.xml
nomedia

View File

@ -1 +0,0 @@
This file is used as a placeholder until real data files are created or copied from another location.

View File

@ -1 +0,0 @@
This file is used as a placeholder until real data files are created or copied from another location.

View File

@ -1 +0,0 @@
This file is used as a placeholder until real data files are created or copied from another location.

View File

@ -1 +0,0 @@
This file is used as a placeholder until real data files are created or copied from another location.

View File

@ -1 +0,0 @@
This file is used as a placeholder until real data files are created or copied from another location.

View File

@ -1 +0,0 @@
This file is used as a placeholder until real data files are created or copied from another location.

View File

@ -1 +0,0 @@
This file is used as a placeholder until real data files are created or copied from another location.

View File

@ -1 +0,0 @@
This file is used as a placeholder until real data files are created or copied from another location.

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android" name="Android">
<configuration>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/android/app/src/main/kotlin" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/.pub" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Dart SDK" level="project" />
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
<orderEntry type="library" name="Dart Packages" level="project" />
</component>
</module>

View File

@ -1,43 +0,0 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:ffi' as ffi;
import 'package:ffi/ffi.dart';
int systemLinux(String command) {
var result = system(command);
return result;
}
/*
#include <stdlib.h>
int system(const char *string);
https://man.openbsd.org/system.3
*/
// C header typedef:
typedef SystemC = ffi.Int32 Function(ffi.Pointer<Utf8> command);
// Dart header typedef
typedef SystemDart = int Function(ffi.Pointer<Utf8> command);
int system(String command) {
// Load `stdlib`. On MacOS this is in libSystem.dylib.
final dylib = ffi.DynamicLibrary.open('libc.so.6');
// Look up the `system` function.
final systemP = dylib.lookupFunction<SystemC, SystemDart>('system');
// Allocate a pointer to a Utf8 array containing our command.
final cmdP = command.toNativeUtf8();
// Invoke the command, and free the pointer.
int result = systemP(cmdP);
calloc.free(cmdP);
return result;
}

View File

@ -1,42 +0,0 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:ffi' as ffi;
import 'package:ffi/ffi.dart';
int systemMacOS(String command) {
var result = system(command);
return result;
}
/*
#include <stdlib.h>
int system(const char *string);
https://man.openbsd.org/system.3
*/
// C header typedef:
typedef SystemC = ffi.Int32 Function(ffi.Pointer<Utf8> command);
// Dart header typedef
typedef SystemDart = int Function(ffi.Pointer<Utf8> command);
int system(String command) {
// Load `stdlib`. On MacOS this is in libSystem.dylib.
final dylib = ffi.DynamicLibrary.open('/usr/lib/libSystem.dylib');
// Look up the `system` function.
final systemP = dylib.lookupFunction<SystemC, SystemDart>('system');
// Allocate a pointer to a Utf8 array containing our command.
final cmdP = command.toNativeUtf8();
// Invoke the command, and free the pointer.
int result = systemP(cmdP);
calloc.free(cmdP);
return result;
}

View File

@ -1,523 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter_svg/avd.dart';
import 'package:neat_periodic_task/neat_periodic_task.dart';
import 'package:path/path.dart' as path;
import 'package:http/http.dart' as http;
import 'package:xml/xml.dart';
import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart';
import 'dart:convert';
import 'dart:async';
import 'dart:io';
import 'dart:io' if (dart.library.io) 'package:boinc/windows.dart';
import 'dart:io' if (dart.library.io) 'package:boinc/macos.dart';
import 'dart:io' if (dart.library.io) 'package:boinc/linux.dart';
import 'dart:io' if (dart.library.html) 'package:boinc/web.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
MyAppState createState() => MyAppState();
static MyAppState? of(BuildContext context) =>
context.findAncestorStateOfType<MyAppState>();
}
enum Section
{
Run,
Connect,
State,
Tasks,
Notices,
Projects,
Preference,
Help,
Report,
Event,
}
class MyAppState extends State<MyApp> {
static const String channel = 'edu.berkeley.boinc/client';
static const platform = const MethodChannel(channel);
NeatPeriodicTaskScheduler? scheduler;
MyAppState(){
scheduler = NeatPeriodicTaskScheduler(
interval: Duration(seconds: 1),
name: 'update_state',
timeout: Duration(seconds: 1),
task: () async => updateState(),
minCycle: Duration(milliseconds: 500),
);
}
/// 1) our themeMode "state" field
final String appName = 'Boinc';
ThemeMode _themeMode = ThemeMode.system;
Section _section = Section.Preference;
String title = "";
int? authId;
int authSeqno = 1;
String authSalt = "";
Future<String> password = () async {return "";}();
bool isReadFile = false;
bool isClientRunning = false;
bool isSchedule = false;
Iterable<XmlElement> _projects = [];
Iterable<XmlElement> _results = [];
Iterable<XmlElement> _workUnits = [];
@override
Widget build(BuildContext context) {
title = getSectionTitle(_section);
return MaterialApp(
title: appName,
theme: ThemeData(),
darkTheme: ThemeData.dark(),
themeMode: _themeMode, // 2) use "state" field here //////////////
home: MyHomePage(title: title),
);
}
String getSectionTitle(Section section) {
return section.toString().substring(8);
}
void changeSection(Section section) {
setState(() {
_section = section;
});
}
void changeState(Iterable<XmlElement> projects,
Iterable<XmlElement> results,
Iterable<XmlElement> workUnits) {
setState(() {
_projects = projects;
_results = results;
_workUnits = workUnits;
});
}
Section getSection() {
return _section;
}
/// 3) Call this to change theme from any context using "of" accessor
/// e.g.:
/// MyApp.of(context).changeTheme(ThemeMode.dark);
void changeTheme(ThemeMode themeMode) {
setState(() {
_themeMode = themeMode;
});
}
void runAndroidClient() async {
try {
final bool result = await platform.invokeMethod('runClient');
} on PlatformException catch (e) {
print('${e.message}');
}
}
void runClient() {
if (kIsWeb) {
} else {
final execuPath = path.dirname(Platform.resolvedExecutable);
final boincPath = path.join(execuPath,
"data", "flutter_assets", "assets");
if (Platform.isAndroid) {
runAndroidClient();
}
if (Platform.isLinux) {
systemLinux("chmod +x " + path.join(boincPath, "linux", "boinc"));
systemLinux(path.join(boincPath, "linux", "boinc") + " &");
}
if (Platform.isWindows) {
systemWindows(path.join(boincPath, "windows", "boinc.exe"));
}
if (Platform.isMacOS) {
systemMacOS("chmod +x " + path.join(boincPath, "macos", "boinc"));
systemMacOS(path.join(boincPath, "macos", "boinc") + " &");
}
}
isClientRunning = true;
}
void updateState() {
guiRpc("get_state").then((String response) {
print("we got get_state!!");
var document = XmlDocument.parse(response);
var projects = document.findAllElements("project");
var workUnits = document.findAllElements("workunit");
var results = document.findAllElements("result");
print("projects: ${projects.length}");
print("results: ${results.length}");
print("workUnits: ${workUnits.length}");
changeState(projects, results, workUnits);
// print(document);
});
}
Future<String> guiRpc(String request) async {
final builder = XmlBuilder();
builder.element('boinc_gui_rpc_request', nest: () {
builder.element(request);
});
String requestXml = builder.buildDocument().toXmlString();
var url = Uri.parse('http://localhost:31416');
Map<String, String> headers = {};
if (authId != null) {
var authHash = hex.encode(md5.convert(latin1.encode("$authSeqno"+"${await password}"+authSalt+requestXml)).bytes);
headers = {"Auth-ID": "$authId", "Auth-Seqno": "$authSeqno", "Auth-Hash": authHash};
authSeqno++;
}
headers = {
...headers,
"Content-Length": "${latin1.encode(requestXml).lengthInBytes}",
};
print("url: $url");
print("headers: $headers");
print("requestXml: $requestXml");
if (kIsWeb) {
http.Response response = await http.post(url, headers: headers, body: requestXml, encoding: latin1);
return response.body;
} else {
HttpClient client = HttpClient();
return await client.postUrl(url)
.then((HttpClientRequest request) {
headers.forEach((key, value) {
request.headers.add(key, value, preserveHeaderCase: true);
});
request.headers.set("Content-Length", "${latin1.encode(requestXml).lengthInBytes}", preserveHeaderCase: true);
request.headers.contentType = ContentType.parse("text/xml");
request.write(requestXml);
return request.close();
}).then((HttpClientResponse response) {
return response.transform(latin1.decoder).join();
});
}
}
Future<String> readFile(String filePath) async {
File cfg = File(filePath);
String content = "";
try {
// Read the file
content = await cfg.readAsString();
} catch(e) {}
return content.trim();
}
Future<void> connectClient() {
var filePath = "";
if (kIsWeb) {
} else {
if (Platform.isWindows) {
// filePath = 'C:\\ProgramData\\BOINC\\gui_rpc_auth.cfg';
}
if (Platform.isLinux) {
}
if (Platform.isMacOS) {
}
if (Platform.isAndroid) {
}
}
if (filePath != "" && !isReadFile) {
password = readFile(filePath);
isReadFile = true;
}
return guiRpc("get_auth_id").then((String response) {
print("we got get_auth_id!!");
var document = XmlDocument.parse(response);
authId = int.parse(document.findAllElements("auth_id").first.text);
authSalt = document.findAllElements("auth_salt").first.text;
print("authId: $authId");
print("authSalt: $authSalt");
});
}
}
class Preference extends StatelessWidget {
@override
Widget build(BuildContext context) {
var myAppContext = MyApp.of(context)!;
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Choose your theme:',
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
/// //////////////////////////////////////////////////////
/// Change theme & rebuild to show it using these buttons
ElevatedButton(
onPressed: () => myAppContext.changeTheme(ThemeMode.light),
child: Text('Light')
),
ElevatedButton(
onPressed: () => myAppContext.changeTheme(ThemeMode.dark),
child: Text('Dark'),
),
/// //////////////////////////////////////////////////////
],
),
],
),
),
);
}
}
class Projects extends StatelessWidget {
@override
Widget build(BuildContext context) {
var myAppContext = MyApp.of(context)!;
Iterable<XmlElement> projects = myAppContext._projects;
return Scaffold(
body: ListView.builder
(
itemCount: projects.length,
itemBuilder: (BuildContext context, int index) {
var projectName = projects.elementAt(index).findElements("project_name").first.text;
return Text("Name: $projectName");
}
)
);
}
}
class Tasks extends StatelessWidget {
@override
Widget build(BuildContext context) {
var myAppContext = MyApp.of(context)!;
Iterable<XmlElement> results = myAppContext._results;
Iterable<XmlElement> workUnits = myAppContext._workUnits;
print("results.length: ${results.length}");
print("workUnits.length: ${workUnits.length}");
print("results: $results");
print("workUnits: $workUnits");
return Scaffold(
body: ListView.builder
(
itemCount: results.length,
itemBuilder: (BuildContext context, int index) {
var result = results.elementAt(index);
String wu_name = result.findElements("wu_name").first.text;
String appName = workUnits.firstWhere((workUnit) => workUnit.findElements("name").first.text == wu_name)
.findElements("app_name")
.first.text;
bool active = false;
String remain = "-1";
try {
active = result.findAllElements("active_task_state").first.text == "1";
remain = result.findElements("estimated_cpu_time_remaining").first.text;
} catch(e) {}
return Text("Name: $appName, Active: $active, Remain: $remain");
}
)
);
}
}
class MyHomePage extends StatelessWidget {
final String title;
MyHomePage({Key? key, required this.title}) : super(key: key);
@override
Widget build(BuildContext context) {
var appBar = AppBar(title: Text(title), centerTitle: true);
var textColor = Theme.of(context).textTheme.bodyText1!.color;
var myAppContext = MyApp.of(context)!;
Widget? body;
var section = myAppContext.getSection();
/// You can easily control the section for example inside the initState where you check
/// if the user logged in, or other related logic
switch (section)
{
case Section.Run:
break;
case Section.Connect:
break;
case Section.State:
break;
case Section.Tasks:
body = Tasks();
break;
case Section.Notices:
break;
case Section.Projects:
body = Projects();
break;
case Section.Preference:
body = Preference();
break;
case Section.Help:
break;
case Section.Report:
break;
case Section.Event:
break;
default:
break;
}
return Scaffold(
appBar: appBar,
body: body,
drawer: Drawer(
// Add a ListView to the drawer. This ensures the user can scroll
// through the options in the drawer if there isn't enough vertical
// space to fit everything.
child: ListView(
// Important: Remove any padding from the ListView.
padding: EdgeInsets.zero,
children: <Widget>[
Container(
height: appBar.preferredSize.height,
child: DrawerHeader(
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
shape: BoxShape.rectangle,
),
child: Text(myAppContext.appName),
)),
ListTile(
leading: SizedBox.fromSize(
size: Size.fromRadius(12),
child: FittedBox(
child: AvdPicture.asset("res/drawable/ic_boinc.xml"),
),
),
title: Text('Run Client'),
onTap: () {
myAppContext.changeSection(Section.Run);
myAppContext.runClient();
Navigator.pop(context);
},
),
ListTile(
leading: AvdPicture.asset("res/drawable/ic_baseline_wifi.xml", color: textColor),
title: Text('Connect Client'),
onTap: () {
myAppContext.changeSection(Section.Connect);
myAppContext.connectClient().then((_) {
if (myAppContext.authId != null && !myAppContext.isSchedule) {
myAppContext.isSchedule = true;
myAppContext.scheduler!.start();
}
});
Navigator.pop(context);
},
),
ListTile(
leading: AvdPicture.asset("res/drawable/ic_baseline_list.xml", color: textColor),
title: Text('Tasks'),
onTap: () {
myAppContext.changeSection(Section.Tasks);
Navigator.pop(context);
},
),
ListTile(
leading: AvdPicture.asset('res/drawable/ic_baseline_email.xml', color: textColor),
title: Text('Notices'),
onTap: () {
myAppContext.changeSection(Section.Notices);
Navigator.pop(context);
},
),
ListTile(
leading: SizedBox.fromSize(
size: Size.fromRadius(12),
child: FittedBox(
child: AvdPicture.asset("res/drawable/ic_projects.xml", color: textColor),
),
),
title: Text('Projects'),
onTap: () {
myAppContext.changeSection(Section.Projects);
Navigator.pop(context);
},
),
ListTile(
leading: AvdPicture.asset('res/drawable/ic_baseline_add_box.xml', color: textColor),
title: Text('Add Project'),
onTap: () {
myAppContext.changeSection(Section.Projects);
Navigator.pop(context);
},
),
ListTile(
leading: AvdPicture.asset('res/drawable/ic_baseline_settings.xml', color: textColor),
title: Text('Preference'),
onTap: () {
myAppContext.changeSection(Section.Preference);
Navigator.pop(context);
},
),
ListTile(
leading: AvdPicture.asset('res/drawable/ic_baseline_help.xml', color: textColor),
title: Text('Help'),
onTap: () {
myAppContext.changeSection(Section.Help);
Navigator.pop(context);
},
),
ListTile(
leading: AvdPicture.asset('res/drawable/ic_baseline_bug_report.xml', color: textColor),
title: Text('Report Issue'),
onTap: () {
myAppContext.changeSection(Section.Report);
Navigator.pop(context);
},
),
ListTile(
leading: AvdPicture.asset('res/drawable/ic_baseline_warning.xml', color: textColor),
title: Text('Event log'),
onTap: () {
myAppContext.changeSection(Section.Event);
Navigator.pop(context);
},
),
],
),
),
);
}
}

View File

@ -1,12 +0,0 @@
systemWindows(String command) {
}
int systemMacOS(String command) {
return 0;
}
int systemLinux(String command) {
return 0;
}

View File

@ -1,71 +0,0 @@
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:ffi';
import 'package:ffi/ffi.dart';
main() {
messageBox('こんにちは窓', 'Hello Windows');
}
/* MessageBoxW is the UTF16 (wchar_t) version of MessageBox.
int MessageBoxW(
HWND hWnd,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType
);
*/
typedef MessageBoxC = Int32 Function(
Pointer hwnd,
Pointer<Utf16> lpText,
Pointer<Utf16> lpCaption,
Uint32 uType,
);
typedef MessageBoxDart = int Function(
Pointer parentWindow,
Pointer<Utf16> message,
Pointer<Utf16> caption,
int type,
);
const MB_ABORTRETRYIGNORE = 0x00000002;
const MB_CANCELTRYCONTINUE = 0x00000006;
const MB_HELP = 0x00004000;
const MB_OK = 0x00000000;
const MB_OKCANCEL = 0x00000001;
const MB_RETRYCANCEL = 0x00000005;
const MB_YESNO = 0x00000004;
const MB_YESNOCANCEL = 0x00000003;
const MB_ICONEXCLAMATION = 0x00000030;
const MB_ICONWARNING = 0x00000030;
const MB_ICONINFORMATION = 0x00000040;
const MB_ICONASTERISK = 0x00000040;
const MB_ICONQUESTION = 0x00000020;
const MB_ICONSTOP = 0x00000010;
const MB_ICONERROR = 0x00000010;
const MB_ICONHAND = 0x00000010;
int messageBox(String message, String caption) {
// Load user32.
final user32 = DynamicLibrary.open('user32.dll');
// Look up the `MessageBoxW` function.
final messageBoxP =
user32.lookupFunction<MessageBoxC, MessageBoxDart>('MessageBoxW');
// Allocate pointers to Utf16 arrays containing the command arguments.
final messageP = message.toNativeUtf16();
final captionP = caption.toNativeUtf16();
// Invoke the command, and free the pointers.
final result =
messageBoxP(nullptr, messageP, captionP, MB_OK | MB_ICONINFORMATION);
calloc.free(messageP);
calloc.free(captionP);
return result;
}

View File

@ -1,61 +0,0 @@
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:ffi' as ffi;
import 'package:ffi/ffi.dart';
systemWindows(String command) {
shellExecute("open", "cmd", "/c " + command);
}
/*
HINSTANCE ShellExecuteW(
HWND hwnd,
LPCWSTR lpOperation,
LPCWSTR lpFile,
LPCWSTR lpParameters,
LPCWSTR lpDirectory,
INT nShowCmd
);
https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutew
*/
typedef ShellExecuteC = ffi.Int32 Function(
ffi.Pointer hwnd,
ffi.Pointer lpOperation,
ffi.Pointer lpFile,
ffi.Pointer lpParameters,
ffi.Pointer lpDirectory,
ffi.Uint32 nShowCmd);
typedef ShellExecuteDart = int Function(
ffi.Pointer parentWindow,
ffi.Pointer operation,
ffi.Pointer file,
ffi.Pointer parameters,
ffi.Pointer directory,
int showCmd);
int shellExecute(String operation, String file, String params) {
// Load shell32.
final dylib = ffi.DynamicLibrary.open('shell32.dll');
// Look up the `ShellExecuteW` function.
final shellExecuteP =
dylib.lookupFunction<ShellExecuteC, ShellExecuteDart>('ShellExecuteW');
// Allocate pointers to Utf8 arrays containing the command arguments.
final operationP = operation.toNativeUtf16();
final fileP = file.toNativeUtf16();
final paramsP = params.toNativeUtf16();
const int SW_SHOWNORMAL = 1;
// Invoke the command, and free the pointers.
var result = shellExecuteP(
ffi.nullptr, operationP, fileP, paramsP, ffi.nullptr, SW_SHOWNORMAL);
calloc.free(operationP);
calloc.free(fileP);
return result;
}

View File

@ -1,2 +0,0 @@
- assets/linux/boinc
- assets/linux/ca-bundle.crt

View File

@ -1,2 +0,0 @@
- assets/macos/boinc
- assets/macos/ca-bundle.crt

View File

@ -1,198 +0,0 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.8.2"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
convert:
dependency: "direct main"
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
crypto:
dependency: "direct main"
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
ffi:
dependency: "direct main"
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "0.23.0+1"
http:
dependency: "direct main"
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.4"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0"
json_annotation:
dependency: transitive
description:
name: json_annotation
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.0"
logging:
dependency: transitive
description:
name: logging
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
neat_periodic_task:
dependency: "direct main"
description:
name: neat_periodic_task
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
path:
dependency: "direct main"
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.1+1"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "4.4.0"
retry:
dependency: transitive
description:
name: retry
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
slugid:
dependency: transitive
description:
name: slugid
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
xml:
dependency: "direct main"
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "5.3.1"
sdks:
dart: ">=2.14.0 <3.0.0"
flutter: ">=1.24.0-7.0"

View File

@ -1,89 +0,0 @@
name: boinc
description: boinc
# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
flutter_svg: ^0.23.0
path: ^1.8.0
ffi: ^1.1.2
xml: ^5.1.2
http: ^0.13.4
convert: ^3.0.0
crypto: ^3.0.1
neat_periodic_task: ^2.0.0
dev_dependencies:
# flutter_launcher_icons: ^0.9.0
# rename: ^1.3.1
# flutter_test:
# sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
#flutter_icons:
# android: "launcher_icon"
# ios: true
# image_path: "res/mipmap-xxxhdpi/ic_launcher.png"
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
assets:
- res/drawable/
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages

View File

@ -1,23 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector android:height="48dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM17,13h-4v4h-2v-4L7,13v-2h4L11,7h2v4h4v2z"/>
</vector>

View File

@ -1,23 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector android:height="48dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z"/>
</vector>

View File

@ -1,28 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M20,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,8l-8,5 -8,-5L4,6l8,5 8,-5v2z"/>
</vector>

View File

@ -1,23 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector android:height="48dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92C13.45,12.9 13,13.5 13,15h-2v-0.5c0,-1.1 0.45,-2.1 1.17,-2.83l1.24,-1.26c0.37,-0.36 0.59,-0.86 0.59,-1.41 0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2L8,9c0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,0.88 -0.36,1.68 -0.93,2.25z"/>
</vector>

View File

@ -1,23 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector android:height="48dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M3,13h2v-2L3,11v2zM3,17h2v-2L3,15v2zM3,9h2L5,7L3,7v2zM7,13h14v-2L7,11v2zM7,17h14v-2L7,15v2zM7,7v2h14L21,7L7,7z"/>
</vector>

View File

@ -1,23 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector android:height="48dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z"/>
</vector>

View File

@ -1,28 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#FF000000"
android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
</vector>

View File

@ -1,23 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector android:height="48dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M1,9l2,2c4.97,-4.97 13.03,-4.97 18,0l2,-2C16.93,2.93 7.08,2.93 1,9zM9,17l3,3 3,-3c-1.65,-1.66 -4.34,-1.66 -6,0zM5,13l2,2c2.76,-2.76 7.24,-2.76 10,0l2,-2C15.14,9.14 8.87,9.14 5,13z"/>
</vector>

View File

@ -1,30 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="48dp"
android:width="48dp"
android:viewportHeight="718"
android:viewportWidth="718" >
<path android:fillColor="#245c86"
android:fillType="evenOdd"
android:pathData="M567.1,103.1c-51.2,49.6 -93.1,90.5 -93.1,90.8 0,0.4 4.5,4.2 10,8.4 46.9,36.1 73.6,83.1 79.1,139.1 1.1,11.1 0.9,19 -0.7,47.2 -1.3,22.3 1.9,27.1 39.1,58.4 9.4,7.9 18,15.2 19.1,16.2l2.2,1.9 3.5,-9.3c2,-5.1 4.6,-12.7 5.7,-16.8 1.2,-4.1 2.8,-8.9 3.5,-10.5 1.4,-3.3 4.7,-19.4 6.6,-32 2.9,-20.1 2.6,-57.3 -0.6,-77.5 -6.6,-41.2 -21.2,-78.3 -43.9,-111.5l-5.4,-8 63.1,-63.2 63,-63.1 -7.4,-8.9c-8.7,-10.3 -34.5,-36.9 -44,-45.4l-6.7,-5.9 -93.1,90.1zM45.4,30.2C31.2,44 11,66 6,73.1l-2,2.7 28.8,26.9c165.5,155 157.5,147.8 159.2,145.2 11.4,-17.6 31.7,-37.2 53.9,-52.2 7.8,-5.2 28.1,-15.3 41.8,-20.8 11.4,-4.5 31.9,-9.5 47.3,-11.5 10.5,-1.3 17.8,-1.5 33,-1.1 10.7,0.3 21.1,1.1 23,1.7 1.9,0.6 7.8,1.1 13.1,1.2 14.2,0.2 15,-0.4 45.1,-31.3 13.7,-14.2 24.9,-26.1 24.8,-26.6 -0.2,-1.1 -17.6,-7.8 -29.6,-11.3 -65.3,-19.1 -133.8,-15.7 -195.4,9.7 -17.9,7.4 -32.2,14.7 -45.1,23.2l-10.7,6.9 -63.3,-58C95,45.9 65.3,18.7 63.8,17.3l-2.6,-2.5 -15.8,15.4zM95.2,253.8c-0.5,0.9 -1.5,3.5 -2.2,5.7 -0.7,2.2 -2.1,5.3 -3,7 -4.5,7.3 -12.4,39.4 -15.1,61 -1.6,12.9 -1.6,47.1 0,60 5.7,45 20.2,84.5 44.6,121l6.4,9.5 -61.5,60.7L3,639.5l8.7,10.5c9.2,11 39.2,42.1 45.5,47.1l3.7,3 87.8,-84.2c48.3,-46.3 89.8,-86.1 92.3,-88.6l4.5,-4.5 -2.5,-1.6c-16.3,-11 -39.3,-32.7 -49.9,-47.1 -18.9,-25.6 -30.8,-53.7 -36.1,-84.6 -1.9,-11 -2.2,-15.9 -1.9,-32 0.1,-10.5 0.3,-25.1 0.3,-32.5 0.1,-20.6 0.3,-20.3 -38.1,-54.3 -18,-15.9 -21.4,-18.4 -22.1,-16.9zM526,473.3c-5,7.6 -30.9,33 -42.5,41.8 -9.1,7 -32.9,20.7 -34.8,20.1 -0.4,-0.1 -2.9,0.9 -5.5,2.2 -11.9,5.9 -30.8,11.6 -48.7,14.7 -15.6,2.6 -44.6,3.6 -57.5,1.9 -5.2,-0.7 -14.1,-1.5 -19.7,-1.7 -8.9,-0.4 -10.9,-0.2 -14.5,1.6 -2.8,1.3 -13.7,11.4 -31.2,29l-27,27 5,2.1c9.4,4.1 27.5,9.9 39.7,12.9 25,6 43.4,8.2 69.8,8.2 35.3,0 61.5,-4.1 93.4,-14.7 22.2,-7.3 47.4,-19.2 64.8,-30.8l9.8,-6.4 66.1,60.9c36.3,33.5 66.4,60.9 66.9,60.9 1.6,0 34.6,-32.9 46.1,-46l11.9,-13.5 -5.4,-5c-3,-2.8 -45.1,-42.1 -93.6,-87.5 -48.5,-45.4 -88.5,-82.6 -88.9,-82.7 -0.4,-0.1 -2.3,2.1 -4.2,5z"/>
<path android:fillColor="#fac134"
android:fillType="evenOdd"
android:pathData="M359.25,359.25m-135,0a135,135 0,1 1,270 0a135,135 0,1 1,-270 0"/>
</vector>

View File

@ -1,79 +0,0 @@
<!--
This file is part of BOINC.
http://boinc.berkeley.edu
Copyright (C) 2020 University of California
BOINC is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.
BOINC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with BOINC. If not, see <http://www.gnu.org/licenses/>.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="12.7"
android:viewportHeight="12.7">
<path
android:fillColor="#FF000000"
android:pathData="M4.8616,6.7549a1.3808,1.4113 0,1 0,2.7616 0a1.3808,1.4113 0,1 0,-2.7616 0z"
android:strokeWidth="0.03566416"/>
<path
android:pathData="M10.4048,11.6562m0.8034,-0a0.8034,0.8034 0,1 1,-1.6069 -0a0.8034,0.8034 0,1 1,1.6069 -0"
android:strokeWidth="0.20896828"
android:strokeColor="#FF000000"/>
<path
android:pathData="M9.9267,11.119 L6.6337,7.249"
android:strokeLineJoin="miter"
android:strokeWidth="0.21069998"
android:strokeColor="#FF000000"
android:strokeLineCap="butt"/>
<path
android:pathData="M2.2133,11.518m-0.8034,-0a0.8034,0.8034 0,1 0,1.6069 -0a0.8034,0.8034 0,1 0,-1.6069 -0"
android:strokeWidth="0.20896828"
android:strokeColor="#FF000000"/>
<path
android:pathData="m2.6913,10.981 l3.2931,-3.8701"
android:strokeLineJoin="miter"
android:strokeWidth="0.21069998"
android:strokeColor="#FF000000"
android:strokeLineCap="butt"/>
<path
android:pathData="M0.9703,4.7231m-0.8034,-0a0.8034,0.8034 0,1 0,1.6069 -0a0.8034,0.8034 0,1 0,-1.6069 -0"
android:strokeWidth="0.20896828"
android:strokeColor="#FF000000"/>
<path
android:pathData="M5.3672,6.39 L1.7764,5.0641"
android:strokeLineJoin="miter"
android:strokeWidth="0.21341223"
android:strokeColor="#FF000000"
android:strokeLineCap="butt"/>
<path
android:pathData="M11.7054,4.8612m0.8034,-0a0.8034,0.8034 0,1 1,-1.6069 -0a0.8034,0.8034 0,1 1,1.6069 -0"
android:strokeWidth="0.20896828"
android:strokeColor="#FF000000"/>
<path
android:pathData="m7.3085,6.5281 l3.5908,-1.3258"
android:strokeLineJoin="miter"
android:strokeWidth="0.21341223"
android:strokeColor="#FF000000"
android:strokeLineCap="butt"/>
<path
android:pathData="M6.264,1.1047m0.8034,-0a0.8034,0.8034 0,1 1,-1.6069 -0a0.8034,0.8034 0,1 1,1.6069 -0"
android:strokeWidth="0.20896828"
android:strokeColor="#FF000000"/>
<path
android:pathData="M6.2787,5.7271 L6.251,1.9153"
android:strokeLineJoin="miter"
android:strokeWidth="0.20669463"
android:strokeColor="#FF000000"
android:strokeLineCap="butt"/>
</vector>

View File

@ -1,30 +0,0 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:boinc/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}

View File

@ -1 +0,0 @@
- assets/windows/boinc.exe

View File

@ -1,25 +0,0 @@
#!/bin/sh
set -e
# Script to compile everything BOINC needs for Android flutter
# check working directory because the script needs to be called like: ./samples/flutter/ci_build_manager.sh
if [ ! -d "samples/flutter" ]; then
echo "start this script in the source root directory"
exit 1
fi
echo '===== BOINC Flutuer Android build start ====='
android/ci_build_vcpkg_client.sh
cp "android/BOINC/app/src/main/assets/arm64-v8a/boinc" "samples/flutter/boinc/assets/arm64-v8a/boinc"
cp "android/BOINC/app/src/main/assets/armeabi/boinc" "samples/flutter/boinc/assets/armeabi/boinc"
cp "android/BOINC/app/src/main/assets/armeabi-v7a/boinc" "samples/flutter/boinc/assets/armeabi-v7a/boinc"
cp "android/BOINC/app/src/main/assets/x86/boinc" "samples/flutter/boinc/assets/x86/boinc"
cp "android/BOINC/app/src/main/assets/x86_64/boinc" "samples/flutter/boinc/assets/x86_64/boinc"
cp "win_build/installerv2/redist/all_projects_list.xml" "samples/flutter/boinc/assets/all_projects_list.xml"
cp "curl/ca-bundle.crt" "samples/flutter/boinc/assets/ca-bundle.crt"
cp "android/BOINC/app/src/main/assets/cc_config.xml" "samples/flutter/boinc/assets/cc_config.xml"
cp "android/BOINC/app/src/main/assets/nomedia" "samples/flutter/boinc/assets/nomedia"
cat "samples/flutter/boinc/android.yaml" >> "samples/flutter/boinc/pubspec.yaml"
android/clear_environment.sh full
echo '===== BOINC Flutuer Android build done ====='

View File

@ -1,20 +0,0 @@
#!/bin/sh
set -e
# Script to compile everything BOINC needs for Linux flutter
# check working directory because the script needs to be called like: ./samples/flutter/ci_build_manager.sh
if [ ! -d "samples/flutter" ]; then
echo "start this script in the source root directory"
exit 1
fi
echo '===== BOINC Flutuer Linux build start ====='
./_autosetup
linux/ci_configure_client.sh
make
cp "client/boinc" "samples/flutter/boinc/assets/linux/boinc"
cp "client/boinccmd" "samples/flutter/boinc/assets/linux/boinccmd"
cp "curl/ca-bundle.crt" "samples/flutter/boinc/assets/linux/ca-bundle.crt"
cat "samples/flutter/boinc/linux.yaml" >> "samples/flutter/boinc/pubspec.yaml"
echo '===== BOINC Flutuer Linux build done ====='

View File

@ -1,19 +0,0 @@
#!/bin/sh
set -e
# Script to compile everything BOINC needs for macOS flutter
# check working directory because the script needs to be called like: ./samples/flutter/ci_build_manager.sh
if [ ! -d "samples/flutter" ]; then
echo "start this script in the source root directory"
exit 1
fi
echo '===== BOINC Flutuer macOS build start ====='
3rdParty/buildMacDependencies.sh -q
mac_build/buildMacBOINC-CI.sh --no_shared_headers
cp "mac_build/build/Deployment/boinc" "samples/flutter/boinc/assets/macos/boinc"
cp "curl/ca-bundle.crt" "samples/flutter/boinc/assets/macos/ca-bundle.crt"
cat "samples/flutter/boinc/macos.yaml" >> "samples/flutter/boinc/pubspec.yaml"
echo '===== BOINC Flutuer macOS build done ====='

View File

@ -1,18 +0,0 @@
REM # Script to compile everything BOINC needs for Windows flutter
REM # check working directory because the script needs to be called like: ./samples/flutter/ci_build_manager.sh
if not exist "samples\flutter\" (
echo "start this script in the source root directory"
exit 1
)
echo '===== BOINC Flutuer Windows build start ====='
vcpkg.exe integrate remove
msbuild win_build\boinc_vs2019.sln -p:Configuration=Release -p:Platform=x64 -p:VcpkgTripletConfig=ci -m
copy "win_build\Build\x64\Release\boinc.exe" "samples\flutter\boinc\assets\windows\boinc.exe"
type "samples\flutter\boinc\windows.yaml" >> "samples\flutter\boinc\pubspec.yaml"
echo '===== BOINC Flutuer Windows build done ====='