From 6f597ae889cdf0dcbd7bab70eb2bfeb796b9f740 Mon Sep 17 00:00:00 2001 From: supercodeur Date: Sat, 24 May 2025 20:12:35 +0200 Subject: [PATCH] Let's start --- .drone.yml | 171 ++++++ .gitignore | 45 ++ .metadata | 45 ++ README.md | 9 + analysis_options.yaml | 28 + android/.gitignore | 14 + android/app/build.gradle.kts | 44 ++ android/app/src/debug/AndroidManifest.xml | 7 + android/app/src/main/AndroidManifest.xml | 48 ++ .../com/example/monitor2/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6486 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9568 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 16136 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 23374 bytes .../app/src/main/res/values-night/styles.xml | 18 + android/app/src/main/res/values/styles.xml | 18 + android/app/src/profile/AndroidManifest.xml | 7 + android/build.gradle.kts | 21 + android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + android/settings.gradle.kts | 25 + assets/icon.png | Bin 0 -> 68404 bytes lib/homepage/dialog_addsite.dart | 34 ++ lib/homepage/screen_homepage.dart | 117 +++++ lib/kill_switch/screen_killswitch.dart | 191 +++++++ lib/log/class_sitecheck.dart | 7 + lib/log/class_sitelog.dart | 14 + lib/log/screen_logspage.dart | 60 +++ lib/main.dart | 6 + lib/monitor/monitor2app.dart | 175 +++++++ public_html/index.html | 147 ++++++ public_html/isSoftwareActive_1.0.0.txt | 1 + public_html/releases/index.html | 130 +++++ pubspec.lock | 490 ++++++++++++++++++ pubspec.yaml | 96 ++++ test/widget_test.dart | 29 ++ 39 files changed, 2034 insertions(+) create mode 100644 .drone.yml create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 README.md create mode 100644 analysis_options.yaml create mode 100644 android/.gitignore create mode 100644 android/app/build.gradle.kts create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/kotlin/com/example/monitor2/MainActivity.kt create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/values-night/styles.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle.kts create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle.kts create mode 100644 assets/icon.png create mode 100644 lib/homepage/dialog_addsite.dart create mode 100644 lib/homepage/screen_homepage.dart create mode 100644 lib/kill_switch/screen_killswitch.dart create mode 100644 lib/log/class_sitecheck.dart create mode 100644 lib/log/class_sitelog.dart create mode 100644 lib/log/screen_logspage.dart create mode 100644 lib/main.dart create mode 100644 lib/monitor/monitor2app.dart create mode 100644 public_html/index.html create mode 100644 public_html/isSoftwareActive_1.0.0.txt create mode 100644 public_html/releases/index.html create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 test/widget_test.dart diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..272296c --- /dev/null +++ b/.drone.yml @@ -0,0 +1,171 @@ +kind: pipeline +type: docker +name: deploy-static-site + +steps: + - name: deploy public_html + image: alpine:3.20 + volumes: + - name: ididit + path: /var/www/ididit + commands: + - | + if [ -d public_html ] && [ "$(ls -A public_html)" ]; then + target="/var/www/ididit/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME}" + echo "Déploiement vers $target" + rm -rf "$target" + mkdir -p "$target" + cp -r public_html/* "$target/" + echo "Déploiement terminé." + ls -alh "$target" + else + echo "Aucun dossier public_html à déployer." + fi + when: + branch: + - main + event: + - push + + - name: build-linux + image: ghcr.io/cirruslabs/flutter:latest + volumes: + - name: ididit + path: /var/www/ididit + commands: + - apt-get update && apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev tar + - VERSION=$(grep '^version:' pubspec.yaml | awk '{print $2}') + - | + if [ -d linux ]; then + echo "Build Linux..." + flutter pub get + flutter build linux --release + TARGET="/var/www/ididit/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/releases/$VERSION/linux" + mkdir -p "$TARGET" + tar czf "$TARGET/linux-$VERSION.tgz" -C build/linux/x64/release/bundle . + echo "Linux bundle published as $TARGET/linux-$VERSION.tgz" + else + echo "No linux/ directory, skipping." + fi + + - name: build-android + image: ghcr.io/cirruslabs/flutter:latest + volumes: + - name: ididit + path: /var/www/ididit + environment: + ANDROID_HOME: /opt/android-sdk + commands: + - VERSION=$(grep '^version:' pubspec.yaml | awk '{print $2}') + - | + if [ -d android ]; then + echo "Build Android..." + flutter pub get + flutter build apk --release + TARGET="/var/www/ididit/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/releases/$VERSION/android" + mkdir -p "$TARGET" + cp build/app/outputs/flutter-apk/app-release.apk "$TARGET/$DRONE_REPO_NAME-$VERSION.apk" + echo "Android build published to $TARGET" + else + echo "No android/ directory, skipping." + fi + + - name: build-web + image: ghcr.io/cirruslabs/flutter:latest + volumes: + - name: ididit + path: /var/www/ididit + commands: + - apt-get update && apt-get install -y tar + - VERSION=$(grep '^version:' pubspec.yaml | awk '{print $2}') + - | + if [ -d web ]; then + echo "Build Web..." + flutter pub get + flutter build web --release + TARGET="/var/www/ididit/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/releases/$VERSION/web" + mkdir -p "$TARGET" + tar czf "$TARGET/web-$VERSION.tgz" -C build/web . + echo "Web bundle published as $TARGET/web-$VERSION.tgz" + else + echo "No web/ directory, skipping." + fi + + - name: generate-versions-html + image: alpine:3.20 + volumes: + - name: ididit + path: /var/www/ididit + commands: + - OWNER="$DRONE_REPO_OWNER" + - REPO="$DRONE_REPO_NAME" + - RELEASES_DIR="/var/www/ididit/$OWNER/$REPO/releases" + - REPO_URL="https://gitea.bymycode.com/$OWNER/$REPO" + - | + HTML="$RELEASES_DIR/index.html" + echo '' > "$HTML" + echo '' >> "$HTML" + echo '' >> "$HTML" + echo ' ' >> "$HTML" + echo " Versions disponibles pour $REPO" >> "$HTML" + echo ' ' >> "$HTML" + echo '' >> "$HTML" + echo '' >> "$HTML" + echo "

Versions disponibles pour $REPO

" >> "$HTML" + echo "
" >> "$HTML" + echo " 📦 Voir le repository sur gitea.ByMyCode.com" >> "$HTML" + echo "
" >> "$HTML" + echo "
" >> "$HTML" + for version_dir in $(ls -1 "$RELEASES_DIR" | sort -Vr); do + if [ -d "$RELEASES_DIR/$version_dir" ]; then + echo "

Version $version_dir

" >> "$HTML" + # Linux bundle + if [ -f "$RELEASES_DIR/$version_dir/linux/linux-$version_dir.tgz" ]; then + echo "" >> "$HTML" + fi + # Android + if [ -d "$RELEASES_DIR/$version_dir/android" ]; then + for f in "$RELEASES_DIR/$version_dir/android/"*; do + fname=$(basename "$f") + echo "" >> "$HTML" + done + fi + # Web bundle + if [ -f "$RELEASES_DIR/$version_dir/web/web-$version_dir.tgz" ]; then + echo "" >> "$HTML" + fi + echo "
" >> "$HTML" + fi + done + echo "" >> "$HTML" + echo "" >> "$HTML" + echo "" >> "$HTML" + echo "Fichier versions.html généré dans $HTML" + + - name: list-published + image: alpine:3.20 + volumes: + - name: ididit + path: /var/www/ididit + commands: + - ls -alR /var/www/ididit/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/releases || echo "No releases published." + +volumes: + - name: ididit + host: + path: /var/www/ididit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79c113f --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# 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 +.pub-cache/ +.pub/ +/build/ + +# 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 diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..e8f7bf9 --- /dev/null +++ b/.metadata @@ -0,0 +1,45 @@ +# 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: "ea121f8859e4b13e47a8f845e4586164519588bc" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: ea121f8859e4b13e47a8f845e4586164519588bc + base_revision: ea121f8859e4b13e47a8f845e4586164519588bc + - platform: android + create_revision: ea121f8859e4b13e47a8f845e4586164519588bc + base_revision: ea121f8859e4b13e47a8f845e4586164519588bc + - platform: ios + create_revision: ea121f8859e4b13e47a8f845e4586164519588bc + base_revision: ea121f8859e4b13e47a8f845e4586164519588bc + - platform: linux + create_revision: ea121f8859e4b13e47a8f845e4586164519588bc + base_revision: ea121f8859e4b13e47a8f845e4586164519588bc + - platform: macos + create_revision: ea121f8859e4b13e47a8f845e4586164519588bc + base_revision: ea121f8859e4b13e47a8f845e4586164519588bc + - platform: web + create_revision: ea121f8859e4b13e47a8f845e4586164519588bc + base_revision: ea121f8859e4b13e47a8f845e4586164519588bc + - platform: windows + create_revision: ea121f8859e4b13e47a8f845e4586164519588bc + base_revision: ea121f8859e4b13e47a8f845e4586164519588bc + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d2cb98 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# monitor2 + +Because the first one were fucked up. + +Monitors URLs you need. + +## Getting Started + +All you need is flutter. Enjoy. diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,28 @@ +# 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.dev/lints. + # + # 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 diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..be3943c --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts new file mode 100644 index 0000000..a32fe8a --- /dev/null +++ b/android/app/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + id("com.android.application") + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.bymycode.supercodeur.monitor2" + compileSdk = flutter.compileSdkVersion + ndkVersion = "27.0.12077973" + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.bymycode.supercodeur.monitor2" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + 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.getByName("debug") + } + } +} + +flutter { + source = "../.." +} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..974d02f --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/kotlin/com/example/monitor2/MainActivity.kt b/android/app/src/main/kotlin/com/example/monitor2/MainActivity.kt new file mode 100644 index 0000000..ec9f050 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/monitor2/MainActivity.kt @@ -0,0 +1,5 @@ +package com.bymycode.supercodeur.monitor2 + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5f682eadd01a18607a8662b4d1a58076409a5d54 GIT binary patch literal 6486 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..03ed01a5f4e016310c63c2ee9af8ab03782def86 GIT binary patch literal 3858 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 + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle.kts b/android/build.gradle.kts new file mode 100644 index 0000000..89176ef --- /dev/null +++ b/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..f018a61 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..afa1e8e --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts new file mode 100644 index 0000000..a439442 --- /dev/null +++ b/android/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..85d1b38c02f7d9ee5d76e9d0f305edb89c7ba986 GIT binary patch literal 68404 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

d97 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 z�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 r5lBaXM3jyhQxE|nKm>?DK?MFk;2U#>bJ createState() => _AddSiteDialogState(); +} + +class _AddSiteDialogState extends State { + final controller = TextEditingController(); + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text('Ajouter une URL'), + content: TextField( + controller: controller, + decoration: InputDecoration(hintText: 'https://exemple.com'), + autofocus: true, + ), + actions: [ + TextButton( + child: Text('Annuler'), + onPressed: () => Navigator.pop(context), + ), + ElevatedButton( + child: Text('Ajouter'), + onPressed: () => Navigator.pop(context, controller.text.trim()), + ), + ], + ); + } +} diff --git a/lib/homepage/screen_homepage.dart b/lib/homepage/screen_homepage.dart new file mode 100644 index 0000000..b593c2a --- /dev/null +++ b/lib/homepage/screen_homepage.dart @@ -0,0 +1,117 @@ +import 'package:flutter/material.dart'; +import '../log/screen_logspage.dart'; +import '../log/class_sitecheck.dart'; +import '../log/class_sitelog.dart'; +import 'dialog_addsite.dart'; + +class HomePage extends StatelessWidget { + final List sites; + final List logs; + final Function(String) addSite; + final Function(int) removeSite; + final VoidCallback forceCheck; + final bool isChecking; + + const HomePage({ + super.key, + required this.sites, + required this.logs, + required this.addSite, + required this.removeSite, + required this.forceCheck, + required this.isChecking, + }); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('🌐 Surveillance de sites'), + actions: [ + IconButton( + icon: Icon(Icons.list_alt), + tooltip: 'Voir tous les logs', + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (_) => LogsPage(logs: logs)), + ); + }, + ), + IconButton( + icon: + isChecking + ? SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator( + color: Colors.white, + strokeWidth: 3, + ), + ) + : Icon(Icons.refresh), + tooltip: + isChecking ? 'Vérification en cours...' : 'Forcer les tests', + onPressed: isChecking ? null : forceCheck, + ), + ], + ), + body: ListView.builder( + itemCount: sites.length, + itemBuilder: (context, index) { + final site = sites[index]; + final lastLog = logs.lastWhere( + (l) => l.url == site.url, + orElse: () => SiteLog(DateTime.now(), site.url, 0), + ); + final isOk = lastLog.statusCode == 200; + return Card( + child: ListTile( + leading: Text(isOk ? '✅' : '❌', style: TextStyle(fontSize: 24)), + title: Text(site.url), + subtitle: + lastLog.statusCode == 0 + ? Text('Aucune vérification') + : Text( + isOk ? 'OK' : 'Erreur: ${lastLog.statusCode}', + style: TextStyle( + color: isOk ? Colors.black : Colors.red.withAlpha(10), + fontWeight: + isOk ? FontWeight.normal : FontWeight.bold, + ), + ), + tileColor: isOk ? null : Colors.red.withAlpha(10), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: + (_) => LogsPage( + logs: logs.where((l) => l.url == site.url).toList(), + ), + ), + ); + }, + trailing: IconButton( + icon: Icon(Icons.delete, color: Colors.grey), + onPressed: () => removeSite(index), + ), + ), + ); + }, + ), + floatingActionButton: FloatingActionButton( + child: Text('➕', style: TextStyle(fontSize: 24)), + onPressed: () async { + final url = await showDialog( + context: context, + builder: (context) => AddSiteDialog(), + ); + if (url != null && url.isNotEmpty) { + addSite(url); + } + }, + ), + ); + } +} diff --git a/lib/kill_switch/screen_killswitch.dart b/lib/kill_switch/screen_killswitch.dart new file mode 100644 index 0000000..ebc1684 --- /dev/null +++ b/lib/kill_switch/screen_killswitch.dart @@ -0,0 +1,191 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import '../monitor/monitor2app.dart'; +import 'package:url_launcher/url_launcher.dart'; + +const String securityURL = + "https://ididit.bymycode.com/supercodeur/monitor2/isSoftwareActive_1.0.0.txt"; + +class KillSwitchHomePage extends StatefulWidget { + const KillSwitchHomePage({super.key}); + + @override + KillSwitchHomePageState createState() => KillSwitchHomePageState(); +} + +class KillSwitchHomePageState extends State { + String _message = "Vérification de l'état..."; + bool _isLoading = true; + + @override + void initState() { + super.initState(); + _checkStatus(); + } + + Future _checkStatus() async { + setState(() { + _isLoading = true; + _message = "Vérification de l'état..."; + }); + + try { + final response = await http.get(Uri.parse(securityURL)); + + if (!mounted) return; + + if (response.statusCode >= 200 && response.statusCode < 300) { + final data = response.body; + if (data.contains('active: true')) { + setState(() { + _isLoading = false; + _message = "Application active, c'est parti..."; + }); + if (!mounted) return; + await Navigator.pushReplacement( + context, + MaterialPageRoute(builder: (context) => const Monitor2App()), + ); + } else { + _updateMessage("L'application est désormais bloquée."); + } + } else if (response.statusCode >= 400 && response.statusCode < 500) { + _updateMessage("Veuillez mettre à jour l'application."); + } else { + _showNetworkError(); + } + } catch (e) { + _showNetworkError(); + } finally { + if (mounted) { + setState(() { + _isLoading = false; + }); + } + } + } + + void _showNetworkError() { + setState(() { + _message = + "Une connexion réseau est nécessaire pour accéder à l'application."; + _isLoading = false; + }); + + Timer(const Duration(seconds: 5), () { + setState(() { + _isLoading = true; + _checkStatus(); + }); + }); + } + + void _updateMessage(String message) { + setState(() { + _message = message; + _isLoading = false; + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text('Initialisation')), + body: Center( + child: + _isLoading + ? const CircularProgressIndicator() + : Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'TourPet', + style: TextStyle( + fontSize: 30, + fontWeight: FontWeight.bold, + color: Colors.teal, + ), + ), + Text(_message, textAlign: TextAlign.center), + const SizedBox(height: 20), + Image.asset( + 'assets/icon.png', + width: MediaQuery.of(context).size.width * 0.25, + fit: BoxFit.contain, + ), + const SizedBox(height: 20), + Text( + 'Copyright (c) 2025 SuperCodeur', + style: TextStyle(fontSize: 14, color: Colors.grey[600]), + ), + const SizedBox(height: 10), + GestureDetector( + onTap: + () => + _launchEmail('cgifl300+supercodeur@gmail.com'), + child: const Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('✉️ ', style: TextStyle(fontSize: 18)), + Text( + 'cgifl300+supercodeur@gmail.com', + style: TextStyle( + color: Colors.blue, + fontSize: 14, + decoration: TextDecoration.underline, + ), + ), + ], + ), + ), + const SizedBox(height: 10), + GestureDetector( + onTap: + () => _launchUrl( + 'https://ididit.bymycode.com/supercodeur/monitor2/', + ), + child: const Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('🌐 ', style: TextStyle(fontSize: 18)), + Text( + 'Visiter le site du projet', + style: TextStyle( + color: Colors.blue, + fontSize: 14, + decoration: TextDecoration.underline, + ), + ), + ], + ), + ), + ], + ), + ), + ), + ); + } + + Future _launchUrl(String url) async { + final Uri uri = Uri.parse(url); + if (!await launchUrl(uri, mode: LaunchMode.externalApplication)) { + throw Exception('Could not launch $url'); + } + } + + void _launchEmail(String email) async { + final Uri emailUri = Uri( + scheme: 'mailto', + path: email, + queryParameters: {'subject': 'Hello', 'body': 'Test'}, + ); + if (await canLaunchUrl(emailUri)) { + await launchUrl(emailUri); + } else { + throw 'Could not launch email client'; + } + } +} diff --git a/lib/log/class_sitecheck.dart b/lib/log/class_sitecheck.dart new file mode 100644 index 0000000..5663801 --- /dev/null +++ b/lib/log/class_sitecheck.dart @@ -0,0 +1,7 @@ +class SiteCheck { + final String url; + SiteCheck(this.url); + + String toLine() => url; + static SiteCheck fromLine(String line) => SiteCheck(line); +} diff --git a/lib/log/class_sitelog.dart b/lib/log/class_sitelog.dart new file mode 100644 index 0000000..e4f294a --- /dev/null +++ b/lib/log/class_sitelog.dart @@ -0,0 +1,14 @@ +class SiteLog { + final DateTime date; + final String url; + final int statusCode; + + SiteLog(this.date, this.url, this.statusCode); + + String toCsv() => '${date.toIso8601String()},$url,$statusCode'; + + static SiteLog fromCsv(String line) { + final parts = line.split(','); + return SiteLog(DateTime.parse(parts[0]), parts[1], int.parse(parts[2])); + } +} diff --git a/lib/log/screen_logspage.dart b/lib/log/screen_logspage.dart new file mode 100644 index 0000000..9dad0bb --- /dev/null +++ b/lib/log/screen_logspage.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:monitor2/log/class_sitelog.dart'; + +class LogsPage extends StatefulWidget { + final List logs; + + const LogsPage({super.key, required this.logs}); + + @override + State createState() => _LogsPageState(); +} + +class _LogsPageState extends State { + String sortBy = 'date'; + + @override + Widget build(BuildContext context) { + final logs = List.of(widget.logs); + if (sortBy == 'date') { + logs.sort((a, b) => b.date.compareTo(a.date)); + } else { + logs.sort((a, b) => a.statusCode.compareTo(b.statusCode)); + } + + return Scaffold( + appBar: AppBar( + title: Text('📝 Logs'), + actions: [ + PopupMenuButton( + onSelected: (value) => setState(() => sortBy = value), + itemBuilder: + (context) => [ + PopupMenuItem(value: 'date', child: Text('Trier par date')), + PopupMenuItem( + value: 'status', + child: Text('Trier par statut'), + ), + ], + ), + ], + ), + body: ListView.builder( + itemCount: logs.length, + itemBuilder: (context, index) { + final log = logs[index]; + final isOk = log.statusCode == 200; + return ListTile( + leading: Text(isOk ? '🟢' : '🔴', style: TextStyle(fontSize: 20)), + title: Text(log.url), + subtitle: Text( + '${log.date.toLocal()} - ' + '${isOk ? 'OK' : 'Erreur: ${log.statusCode == -1 ? 'Timeout/Network' : log.statusCode}'}', + ), + tileColor: isOk ? null : Colors.red.withAlpha(10), + ); + }, + ), + ); + } +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..0d256de --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,6 @@ +import 'package:flutter/material.dart'; +import 'monitor/monitor2app.dart'; + +void main() { + runApp(Monitor2App()); +} diff --git a/lib/monitor/monitor2app.dart b/lib/monitor/monitor2app.dart new file mode 100644 index 0000000..951b699 --- /dev/null +++ b/lib/monitor/monitor2app.dart @@ -0,0 +1,175 @@ +import 'dart:async'; +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'package:path_provider/path_provider.dart'; +import '../homepage/screen_homepage.dart'; +import '../log/class_sitecheck.dart'; +import '../log/class_sitelog.dart'; + +class Monitor2App extends StatefulWidget { + const Monitor2App({super.key}); + + @override + State createState() => Monitor2AppState(); +} + +class Monitor2AppState extends State { + List sites = []; + List logs = []; + Timer? timer; + bool isChecking = false; + + final GlobalKey messengerKey = + GlobalKey(); + + @override + void initState() { + super.initState(); + loadSites().then((_) { + loadLogs().then((_) { + setState(() {}); + checkAllSites(); + timer = Timer.periodic( + const Duration(hours: 1), + (_) => checkAllSites(), + ); + }); + }); + } + + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + Future getLogFile() async { + final dir = await getApplicationDocumentsDirectory(); + return File('${dir.path}/logs.dat'); + } + + Future getSitesFile() async { + final dir = await getApplicationDocumentsDirectory(); + return File('${dir.path}/sites.dat'); + } + + Future loadLogs() async { + try { + final file = await getLogFile(); + if (await file.exists()) { + final lines = await file.readAsLines(); + logs = lines.map((l) => SiteLog.fromCsv(l)).toList(); + } + } catch (_) {} + } + + Future saveLogs() async { + final file = await getLogFile(); + final lastLogs = + logs.length > 10000 ? logs.sublist(logs.length - 10000) : logs; + await file.writeAsString(lastLogs.map((l) => l.toCsv()).join('\n')); + } + + Future loadSites() async { + try { + final file = await getSitesFile(); + if (await file.exists()) { + final lines = await file.readAsLines(); + sites = lines.map((l) => SiteCheck.fromLine(l)).toList(); + } else { + sites = [ + SiteCheck('https://flutter.dev'), + SiteCheck('https://google.com'), + ]; + await saveSites(); + } + } catch (_) { + sites = [ + SiteCheck('https://flutter.dev'), + SiteCheck('https://google.com'), + ]; + await saveSites(); + } + } + + Future saveSites() async { + final file = await getSitesFile(); + final lastSites = + sites.length > 100 ? sites.sublist(sites.length - 100) : sites; + await file.writeAsString(lastSites.map((s) => s.toLine()).join('\n')); + } + + Future checkAllSites({bool showSnackBar = false}) async { + if (isChecking) return; + setState(() { + isChecking = true; + }); + + for (var site in sites) { + try { + final response = await http + .get(Uri.parse(site.url)) + .timeout(const Duration(seconds: 10)); + addLog(site.url, response.statusCode); + } catch (e) { + addLog(site.url, -1); + } + } + + setState(() { + isChecking = false; + }); + + if (showSnackBar) { + messengerKey.currentState?.showSnackBar( + const SnackBar(content: Text('Vérification des sites terminée ✅')), + ); + } + } + + void addLog(String url, int statusCode) { + logs.add(SiteLog(DateTime.now(), url, statusCode)); + if (logs.length > 10000) { + logs = logs.sublist(logs.length - 10000); + } + saveLogs(); + } + + void addSite(String url) async { + if (sites.length >= 100) { + messengerKey.currentState?.showSnackBar( + const SnackBar(content: Text('Limite de 100 sites atteinte 🚫')), + ); + return; + } + setState(() { + sites.add(SiteCheck(url)); + }); + await saveSites(); + } + + void removeSite(int index) async { + setState(() { + sites.removeAt(index); + }); + await saveSites(); + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + scaffoldMessengerKey: messengerKey, + title: 'Surveillance de sites', + theme: ThemeData(primarySwatch: Colors.blue), + home: HomePage( + sites: sites, + logs: logs, + addSite: addSite, + removeSite: removeSite, + forceCheck: () => checkAllSites(showSnackBar: true), + isChecking: isChecking, + ), + ); + } +} diff --git a/public_html/index.html b/public_html/index.html new file mode 100644 index 0000000..2e0c8e0 --- /dev/null +++ b/public_html/index.html @@ -0,0 +1,147 @@ + + + + + 🌐 monitor2 – Surveillance d'URL + + + + +
+

🌐 monitor2 🔎

+

Surveillez la disponibilité de vos URL favorites, simplement et efficacement ! 🚦

+
+
+
+

✨ À propos du projet

+
    +
  • 🕒 Vérifie automatiquement la disponibilité de vos URL toutes les heures.
  • +
  • 📱 Fonctionne directement sur votre téléphone, sans serveur externe.
  • +
  • 📝 Enregistre des logs localement pour chaque vérification.
  • +
  • 🔒 Respecte votre vie privée : aucune donnée transmise en dehors de votre appareil.
  • +
+
+ +
+

🔗 Ressources du projet

+
+
+
+
+ Fait avec ❤️ par SuperCodeur  |  Projet open-source – 2025 +
+ + diff --git a/public_html/isSoftwareActive_1.0.0.txt b/public_html/isSoftwareActive_1.0.0.txt new file mode 100644 index 0000000..8bc0d5e --- /dev/null +++ b/public_html/isSoftwareActive_1.0.0.txt @@ -0,0 +1 @@ +active: true \ No newline at end of file diff --git a/public_html/releases/index.html b/public_html/releases/index.html new file mode 100644 index 0000000..14b324c --- /dev/null +++ b/public_html/releases/index.html @@ -0,0 +1,130 @@ + + + + + monitor2 – En construction 🏗️ + + + + +
+

monitor2 🏗️

+
🚧⏳🕒
+
+ Ce projet est actuellement en construction.
+ Le téléchargement sera bientôt disponible ! +
+
+ Merci de votre patience 😊
+ Prenez un café ☕ ou rafraîchissez la page plus tard ! +
+
+
+
+ ⬅️ Retour à la racine du projet +
+
+ monitor2 – ByMyCode.com
+ Dernière mise à jour : 2025 +
+ + + diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..3c2e43c --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,490 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" + url: "https://pub.dev" + source: hosted + version: "4.0.7" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" + url: "https://pub.dev" + source: hosted + version: "2.13.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://pub.dev" + source: hosted + version: "0.13.1" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" + url: "https://pub.dev" + source: hosted + version: "5.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + http: + dependency: "direct main" + description: + name: http + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" + url: "https://pub.dev" + source: hosted + version: "4.5.4" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + url: "https://pub.dev" + source: hosted + version: "10.0.9" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + url: "https://pub.dev" + source: hosted + version: "3.0.9" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 + url: "https://pub.dev" + source: hosted + version: "5.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" + source: hosted + version: "0.12.17" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" + source: hosted + version: "1.16.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 + url: "https://pub.dev" + source: hosted + version: "2.2.17" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + posix: + dependency: transitive + description: + name: posix + sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + url: "https://pub.dev" + source: hosted + version: "1.10.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + url: "https://pub.dev" + source: hosted + version: "0.7.4" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" + url: "https://pub.dev" + source: hosted + version: "6.3.16" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" + url: "https://pub.dev" + source: hosted + version: "6.3.3" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + url: "https://pub.dev" + source: hosted + version: "3.2.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + url: "https://pub.dev" + source: hosted + version: "3.1.4" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 + url: "https://pub.dev" + source: hosted + version: "15.0.0" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.7.2 <4.0.0" + flutter: ">=3.27.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..0b55fa4 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,96 @@ +name: monitor2 +description: "Monitor your URLs" +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter 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 is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0 + +environment: + sdk: ^3.7.2 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + http: ^1.2.1 + path_provider: ^2.1.2 + flutter_launcher_icons: ^0.13.1 + url_launcher: ^6.0.20 + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.8 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^5.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +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 + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # 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/to/font-from-package +flutter_icons: + android: true + image_path: "assets/icon.png" \ No newline at end of file diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..0fe4907 --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,29 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. 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:monitor2/monitor/monitor2app.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const Monitor2App()); + + // 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); + }); +}