diff --git a/.gitea/workflows/dev.yml b/.gitea/workflows/dev.yml index cfd0396..9f92237 100644 --- a/.gitea/workflows/dev.yml +++ b/.gitea/workflows/dev.yml @@ -3,7 +3,7 @@ name: Release on: push: branches: - - dev + - dev-other env: JAVA_VERSION: "17" @@ -85,16 +85,16 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 -# -# - name: Install OS deps (Android) -# run: | -# if command -v sudo >/dev/null 2>&1; then -# SUDO="sudo" -# else -# SUDO="" -# fi -# $SUDO apt-get update -# $SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq + # + # - name: Install OS deps (Android) + # run: | + # if command -v sudo >/dev/null 2>&1; then + # SUDO="sudo" + # else + # SUDO="" + # fi + # $SUDO apt-get update + # $SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq - name: Setup Java uses: actions/setup-java@v4 @@ -120,19 +120,19 @@ jobs: echo "$ANDROID_SDK_ROOT/platform-tools" >> "$GITHUB_PATH" echo "$ANDROID_SDK_ROOT/build-tools/33.0.2" >> "$GITHUB_PATH" -# - name: Install Flutter SDK -# run: | -# set -euo pipefail -# FLUTTER_HOME="$HOME/flutter" -# # Avoid git ownership issues when Flutter checks out deps. -# git config --global --add safe.directory "$FLUTTER_HOME" || true -# if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then -# rm -rf "$FLUTTER_HOME" -# curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" -# tar -C "$HOME" -xf /tmp/flutter.tar.xz -# fi -# echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH" -# "$FLUTTER_HOME/bin/flutter" --version + # - name: Install Flutter SDK + # run: | + # set -euo pipefail + # FLUTTER_HOME="$HOME/flutter" + # # Avoid git ownership issues when Flutter checks out deps. + # git config --global --add safe.directory "$FLUTTER_HOME" || true + # if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then + # rm -rf "$FLUTTER_HOME" + # curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" + # tar -C "$HOME" -xf /tmp/flutter.tar.xz + # fi + # echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH" + # "$FLUTTER_HOME/bin/flutter" --version - name: Allow all git directories (CI) run: git config --global --add safe.directory '*' diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 09bb95b..222ce0e 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - dev env: JAVA_VERSION: "17" @@ -79,21 +80,21 @@ jobs: android-build: runs-on: - - mileograph + - tgj-arc needs: meta steps: - name: Checkout uses: actions/checkout@v4 - - - name: Install OS deps (Android) - run: | - if command -v sudo >/dev/null 2>&1; then - SUDO="sudo" - else - SUDO="" - fi - $SUDO apt-get update - $SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq + # + # - name: Install OS deps (Android) + # run: | + # if command -v sudo >/dev/null 2>&1; then + # SUDO="sudo" + # else + # SUDO="" + # fi + # $SUDO apt-get update + # $SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq - name: Setup Java uses: actions/setup-java@v4 @@ -119,19 +120,19 @@ jobs: echo "$ANDROID_SDK_ROOT/platform-tools" >> "$GITHUB_PATH" echo "$ANDROID_SDK_ROOT/build-tools/33.0.2" >> "$GITHUB_PATH" - - name: Install Flutter SDK - run: | - set -euo pipefail - FLUTTER_HOME="$HOME/flutter" - # Avoid git ownership issues when Flutter checks out deps. - git config --global --add safe.directory "$FLUTTER_HOME" || true - if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then - rm -rf "$FLUTTER_HOME" - curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" - tar -C "$HOME" -xf /tmp/flutter.tar.xz - fi - echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH" - "$FLUTTER_HOME/bin/flutter" --version + # - name: Install Flutter SDK + # run: | + # set -euo pipefail + # FLUTTER_HOME="$HOME/flutter" + # # Avoid git ownership issues when Flutter checks out deps. + # git config --global --add safe.directory "$FLUTTER_HOME" || true + # if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then + # rm -rf "$FLUTTER_HOME" + # curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" + # tar -C "$HOME" -xf /tmp/flutter.tar.xz + # fi + # echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH" + # "$FLUTTER_HOME/bin/flutter" --version - name: Allow all git directories (CI) run: git config --global --add safe.directory '*' @@ -220,36 +221,12 @@ jobs: linux-build: runs-on: - - mileograph + - tgj-arc needs: meta steps: - name: Checkout uses: actions/checkout@v4 - - name: Install OS deps (Linux desktop) - run: | - if command -v sudo >/dev/null 2>&1; then - SUDO="sudo" - else - SUDO="" - fi - $SUDO apt-get update - $SUDO apt-get install -y unzip xz-utils zip libstdc++6 libglu1-mesa clang cmake ninja-build pkg-config libgtk-3-dev libsecret-1-dev liblzma-dev curl jq - - - name: Install Flutter SDK - run: | - set -euo pipefail - FLUTTER_HOME="$HOME/flutter" - # Avoid git ownership issues when Flutter checks out deps. - git config --global --add safe.directory "$FLUTTER_HOME" || true - if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then - rm -rf "$FLUTTER_HOME" - curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" - tar -C "$HOME" -xf /tmp/flutter.tar.xz - fi - echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH" - "$FLUTTER_HOME/bin/flutter" --version - - name: Allow all git directories (CI) run: git config --global --add safe.directory '*' @@ -275,38 +252,12 @@ jobs: web-build: runs-on: - - mileograph + - tgj-arc needs: meta steps: - name: Checkout uses: actions/checkout@v4 - - name: Install OS deps (Web) - run: | - if command -v sudo >/dev/null 2>&1; then - SUDO="sudo" - else - SUDO="" - fi - $SUDO apt-get update - $SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq docker.io - if ! docker info >/dev/null 2>&1; then - $SUDO systemctl start docker 2>/dev/null || $SUDO service docker start 2>/dev/null || true - fi - - - name: Install Flutter SDK - run: | - set -euo pipefail - FLUTTER_HOME="$HOME/flutter" - git config --global --add safe.directory "$FLUTTER_HOME" || true - if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then - rm -rf "$FLUTTER_HOME" - curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" - tar -C "$HOME" -xf /tmp/flutter.tar.xz - fi - echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH" - "$FLUTTER_HOME/bin/flutter" --version - - name: Allow all git directories (CI) run: git config --global --add safe.directory '*' @@ -330,50 +281,37 @@ jobs: name: web-build path: app-web.tar.gz - - name: Compute web image tags - id: web_meta - env: - BASE_VERSION: ${{ needs.meta.outputs.base_version }} - DEV_SUFFIX: ${{ needs.meta.outputs.dev_suffix }} - run: | - IMAGE="${WEB_IMAGE}" - TAG="" - ALIAS="" - if [ "${GITHUB_REF}" = "refs/heads/dev" ]; then - TAG="${BASE_VERSION}${DEV_SUFFIX}" - ALIAS="dev" - elif [ "${GITHUB_REF}" = "refs/heads/master" ]; then - TAG="${BASE_VERSION}" - ALIAS="latest" - fi + - name: Set up docker buildx + uses: docker/setup-buildx-action@v3 - echo "image=${IMAGE}" >> "$GITHUB_OUTPUT" - echo "tag=${TAG}" >> "$GITHUB_OUTPUT" - echo "alias=${ALIAS}" >> "$GITHUB_OUTPUT" + - name: Docker meta + id: dmeta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/petegregoryy/railframe-web + flavor: latest=false + tags: | + type=sha,prefix= + type=raw,value=${{ needs.meta.outputs.base_version }}${{ needs.meta.outputs.dev_suffix }} - - name: Login to registry - if: ${{ secrets.DOCKERHUB_TOKEN != '' && steps.web_meta.outputs.tag != '' }} - env: - REGISTRY_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} - run: | - echo "$REGISTRY_TOKEN" | docker login git.tgj.services -u petegregoryy --password-stdin + - name: Login to the docker registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: petegregoryy + password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push web image - if: ${{ secrets.DOCKERHUB_TOKEN != '' && steps.web_meta.outputs.tag != '' }} - env: - IMAGE: ${{ steps.web_meta.outputs.image }} - TAG: ${{ steps.web_meta.outputs.tag }} - ALIAS: ${{ steps.web_meta.outputs.alias }} - run: | - docker buildx create --name buildx --driver=docker-container --use || docker buildx use buildx - TAG_ARGS=(-t "${IMAGE}:${TAG}") - if [ -n "$ALIAS" ]; then - TAG_ARGS+=(-t "${IMAGE}:${ALIAS}") - fi - docker buildx build --builder buildx --platform linux/amd64 \ - -f Dockerfile.web \ - --push \ - "${TAG_ARGS[@]}" . + - name: Build and push + id: docker_build + uses: docker/build-push-action@v6 + with: + file: Dockerfile.web + context: . + push: true + tags: ${{ steps.dmeta.outputs.tags }} + labels: ${{ steps.dmeta.outputs.labels }} + cache-from: type=registry,ref=${{ env.REGISTRY }}/petegregoryy/railframe-web:buildcache-dev + cache-to: type=registry,ref=${{ env.REGISTRY }}/petegregoryy/railframe-web:buildcache-dev,mode=max release-dev: runs-on: diff --git a/lib/components/pages/new_entry/new_entry_draft_logic.dart b/lib/components/pages/new_entry/new_entry_draft_logic.dart index fc064c0..6ac425c 100644 --- a/lib/components/pages/new_entry/new_entry_draft_logic.dart +++ b/lib/components/pages/new_entry/new_entry_draft_logic.dart @@ -324,6 +324,14 @@ extension _NewEntryDraftLogic on _NewEntryPageState { "distance": _routeResult!.distance, }, "tractionItems": _serializeTractionItems(), + "shareUserIds": _shareUserIds.toList(), + "shareUsers": _shareUsers + .map((u) => { + "user_id": u.userId, + "username": u.username, + "full_name": u.fullName, + }) + .toList(), }; } diff --git a/lib/objects/objects.dart b/lib/objects/objects.dart index 3a8d274..39db9bb 100644 --- a/lib/objects/objects.dart +++ b/lib/objects/objects.dart @@ -350,6 +350,7 @@ class HomepageStats { final List yearlyMileage; final List topLocos; final List leaderboard; + final List friendsLeaderboard; final List trips; final int legCount; final UserData? user; @@ -359,6 +360,7 @@ class HomepageStats { required this.yearlyMileage, required this.topLocos, required this.leaderboard, + required this.friendsLeaderboard, required this.trips, required this.legCount, this.user, @@ -370,6 +372,17 @@ class HomepageStats { final totalMileage = mileageData is Map && mileageData['mileage'] != null ? (mileageData['mileage'] as num).toDouble() : 0.0; + List parseLeaderboard(dynamic raw) { + if (raw is List) { + return raw + .whereType() + .map((e) => LeaderboardEntry.fromJson( + e.map((k, v) => MapEntry(k.toString(), v)), + )) + .toList(); + } + return const []; + } return HomepageStats( totalMileage: totalMileage, yearlyMileage: (json['yearly_mileage'] as List? ?? []) @@ -378,9 +391,9 @@ class HomepageStats { topLocos: (json['top_locos'] as List? ?? []) .map((e) => LocoSummary.fromJson(e)) .toList(), - leaderboard: (json['leaderboard_data'] as List? ?? []) - .map((e) => LeaderboardEntry.fromJson(e)) - .toList(), + leaderboard: parseLeaderboard(json['leaderboard_data'] ?? json['leaderboard']), + friendsLeaderboard: + parseLeaderboard(json['friends_leaderboard'] ?? json['friendsLeaderboard']), trips: (json['trip_data'] as List? ?? []) .map((e) => TripSummary.fromJson(e)) .toList(), diff --git a/lib/services/data_service/data_service_core.dart b/lib/services/data_service/data_service_core.dart index b8008c8..565c15b 100644 --- a/lib/services/data_service/data_service_core.dart +++ b/lib/services/data_service/data_service_core.dart @@ -169,10 +169,12 @@ class DataService extends ChangeNotifier { _homepageStats = HomepageStats.fromJson(json); _trips = [...(_homepageStats?.trips ?? const [])] ..sort(TripSummary.compareByDateDesc); + _friendsLeaderboard = _homepageStats?.friendsLeaderboard ?? []; } catch (e) { debugPrint('Failed to fetch homepage stats: $e'); _homepageStats = null; _trips = []; + _friendsLeaderboard = []; } finally { _isHomepageLoading = false; _notifyAsync(); diff --git a/pubspec.yaml b/pubspec.yaml index 8ab566f..76475aa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # 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: 0.6.2+5 +version: 0.6.3+6 environment: sdk: ^3.8.1