Implement sending version string of app

This commit is contained in:
Nutcake 2023-05-06 11:18:00 +02:00
parent 4f2ff2d95b
commit efcc5831c2
5 changed files with 39 additions and 8 deletions

View file

@ -5,6 +5,7 @@ import 'package:contacts_plus_plus/models/friend.dart';
import 'package:contacts_plus_plus/models/personal_profile.dart'; import 'package:contacts_plus_plus/models/personal_profile.dart';
import 'package:contacts_plus_plus/models/user.dart'; import 'package:contacts_plus_plus/models/user.dart';
import 'package:contacts_plus_plus/models/user_profile.dart'; import 'package:contacts_plus_plus/models/user_profile.dart';
import 'package:package_info_plus/package_info_plus.dart';
class UserApi { class UserApi {
static Future<Iterable<User>> searchUsers(ApiClient client, {required String needle}) async { static Future<Iterable<User>> searchUsers(ApiClient client, {required String needle}) async {
@ -29,6 +30,10 @@ class UserApi {
} }
static Future<void> setStatus(ApiClient client, {required UserStatus status}) async { static Future<void> setStatus(ApiClient client, {required UserStatus status}) async {
final pkginfo = await PackageInfo.fromPlatform();
status = status.copyWith(
neosVersion: "${pkginfo.version} of ${pkginfo.appName}",
);
final body = jsonEncode(status.toMap(shallow: true)); final body = jsonEncode(status.toMap(shallow: true));
final response = await client.put("/users/${client.userId}/status", body: body); final response = await client.put("/users/${client.userId}/status", body: body);
ApiClient.checkResponse(response); ApiClient.checkResponse(response);

View file

@ -98,13 +98,17 @@ class UserStatus {
final OnlineStatus onlineStatus; final OnlineStatus onlineStatus;
final DateTime lastStatusChange; final DateTime lastStatusChange;
final List<Session> activeSessions; final List<Session> activeSessions;
final String neosVersion;
UserStatus({required this.onlineStatus, required this.lastStatusChange, required this.activeSessions}); UserStatus({required this.onlineStatus, required this.lastStatusChange, required this.activeSessions,
required this.neosVersion,
});
factory UserStatus.empty() => UserStatus( factory UserStatus.empty() => UserStatus(
onlineStatus: OnlineStatus.offline, onlineStatus: OnlineStatus.offline,
lastStatusChange: DateTime.now(), lastStatusChange: DateTime.now(),
activeSessions: [], activeSessions: [],
neosVersion: "",
); );
factory UserStatus.fromMap(Map map) { factory UserStatus.fromMap(Map map) {
@ -114,6 +118,7 @@ class UserStatus {
onlineStatus: status, onlineStatus: status,
lastStatusChange: DateTime.parse(map["lastStatusChange"]), lastStatusChange: DateTime.parse(map["lastStatusChange"]),
activeSessions: (map["activeSessions"] as List? ?? []).map((e) => Session.fromMap(e)).toList(), activeSessions: (map["activeSessions"] as List? ?? []).map((e) => Session.fromMap(e)).toList(),
neosVersion: map["neosVersion"] ?? "",
); );
} }
@ -121,14 +126,18 @@ class UserStatus {
return { return {
"onlineStatus": onlineStatus.index, "onlineStatus": onlineStatus.index,
"lastStatusChange": lastStatusChange.toIso8601String(), "lastStatusChange": lastStatusChange.toIso8601String(),
"activeSessions": shallow ? [] : activeSessions.map((e) => e.toMap(),) "activeSessions": shallow ? [] : activeSessions.map((e) => e.toMap(),),
"neosVersion": neosVersion,
}; };
} }
UserStatus copyWith({OnlineStatus? onlineStatus, DateTime? lastStatusChange, List<Session>? activeSessions}) UserStatus copyWith({OnlineStatus? onlineStatus, DateTime? lastStatusChange, List<Session>? activeSessions,
String? neosVersion
})
=> UserStatus( => UserStatus(
onlineStatus: onlineStatus ?? this.onlineStatus, onlineStatus: onlineStatus ?? this.onlineStatus,
lastStatusChange: lastStatusChange ?? this.lastStatusChange, lastStatusChange: lastStatusChange ?? this.lastStatusChange,
activeSessions: activeSessions ?? this.activeSessions, activeSessions: activeSessions ?? this.activeSessions,
neosVersion: neosVersion ?? this.neosVersion,
); );
} }

View file

@ -1,7 +1,7 @@
import 'package:contacts_plus_plus/client_holder.dart'; import 'package:contacts_plus_plus/client_holder.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:workmanager/workmanager.dart';
class SettingsPage extends StatelessWidget { class SettingsPage extends StatelessWidget {
const SettingsPage({super.key}); const SettingsPage({super.key});
@ -81,10 +81,10 @@ class SettingsPage extends StatelessWidget {
ListTile( ListTile(
trailing: const Icon(Icons.info_outline), trailing: const Icon(Icons.info_outline),
title: const Text("About Contacts++"), title: const Text("About Contacts++"),
onTap: () { onTap: () async {
showAboutDialog( showAboutDialog(
context: context, context: context,
applicationVersion: "1.0.0", applicationVersion: (await PackageInfo.fromPlatform()).version,
applicationIcon: InkWell( applicationIcon: InkWell(
onTap: () async { onTap: () async {
if (!await launchUrl(Uri.parse("https://github.com/Nutcake/contacts-plus-plus"), mode: LaunchMode.externalApplication)) { if (!await launchUrl(Uri.parse("https://github.com/Nutcake/contacts-plus-plus"), mode: LaunchMode.externalApplication)) {

View file

@ -376,6 +376,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.2" version: "1.0.2"
package_info_plus:
dependency: "direct main"
description:
name: package_info_plus
sha256: "10259b111176fba5c505b102e3a5b022b51dd97e30522e906d6922c745584745"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
path: path:
dependency: "direct main" dependency: "direct main"
description: description:

View file

@ -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 # 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 # 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. # of the product and file versions while build-number is used as the build suffix.
version: 1.0.0+1 version: 1.0.1+1
environment: environment:
sdk: '>=2.19.6 <3.0.0' sdk: '>=2.19.6 <3.0.0'
@ -50,7 +50,8 @@ dependencies:
url_launcher: ^6.1.10 url_launcher: ^6.1.10
workmanager: ^0.5.1 workmanager: ^0.5.1
flutter_local_notifications: ^14.0.0+1 flutter_local_notifications: ^14.0.0+1
collection: any collection: ^1.17.0
package_info_plus: ^3.1.2
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: