Merge pull request #179 from ente-io/link_sharing_changes

Link sharing changes
This commit is contained in:
Neeraj Gupta 2022-02-04 11:27:18 +05:30 committed by GitHub
commit 0a5f01461b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 63 additions and 75 deletions

View file

@ -36,7 +36,7 @@ analyzer:
directives_ordering: error
always_use_package_imports: error
prefer_final_fields: error
unused_import: warning
unused_import: error
prefer_is_empty: warning
use_rethrow_when_possible: info

View file

@ -7,6 +7,7 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:flutter_sodium/flutter_sodium.dart';
import 'package:logging/logging.dart';
import 'package:path_provider/path_provider.dart';
import 'package:photos/core/constants.dart';
import 'package:photos/core/event_bus.dart';
import 'package:photos/db/collections_db.dart';
import 'package:photos/db/files_db.dart';
@ -30,8 +31,6 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'package:super_logging/super_logging.dart';
import 'package:uuid/uuid.dart';
import 'constants.dart';
class Configuration {
Configuration._privateConstructor();

View file

@ -1,6 +1,6 @@
import 'package:dio/dio.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:logging/logging.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/constants.dart';

View file

@ -3,7 +3,6 @@ import 'dart:typed_data';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_sodium/flutter_sodium.dart';
import 'package:logging/logging.dart';
import 'package:photos/core/configuration.dart';
@ -73,8 +72,7 @@ class UserService {
} on DioError catch (e) {
await dialog.hide();
if (e.response != null && e.response.statusCode == 403) {
showErrorDialog(context, AppLocalizations.of(context).oops,
AppLocalizations.of(context).email_already_claimed);
showErrorDialog(context, "oops", "this email is already in use");
} else {
showGenericErrorDialog(context);
}
@ -222,20 +220,17 @@ class UserService {
} on DioError catch (e) {
await dialog.hide();
if (e.response != null && e.response.statusCode == 410) {
await showErrorDialog(context, AppLocalizations.of(context).oops,
AppLocalizations.of(context).log_in_code_expired);
await showErrorDialog(
context, "oops", "your verification code has expired");
Navigator.of(context).pop();
} else {
showErrorDialog(
context,
AppLocalizations.of(context).incorrect_code_title,
AppLocalizations.of(context).incorrect_code_msg);
showErrorDialog(context, "incorrect code",
"authentication failed, please try again");
}
} catch (e) {
await dialog.hide();
_logger.severe(e);
showErrorDialog(context, AppLocalizations.of(context).oops,
"verification failed, please try again");
showErrorDialog(context, "oops", "verification failed, please try again");
}
}
@ -267,24 +262,19 @@ class UserService {
Bus.instance.fire(UserDetailsChangedEvent());
return;
}
showErrorDialog(context, AppLocalizations.of(context).oops,
"verification failed, please try again");
showErrorDialog(context, "oops", "verification failed, please try again");
} on DioError catch (e) {
await dialog.hide();
if (e.response != null && e.response.statusCode == 403) {
showErrorDialog(context, AppLocalizations.of(context).oops,
AppLocalizations.of(context).email_already_claimed);
showErrorDialog(context, "oops", "this email is already in use");
} else {
showErrorDialog(
context,
AppLocalizations.of(context).incorrect_code_title,
AppLocalizations.of(context).incorrect_code_msg);
showErrorDialog(context, "incorrect code",
"authentication failed, please try again");
}
} catch (e) {
await dialog.hide();
_logger.severe(e);
showErrorDialog(context, AppLocalizations.of(context).oops,
"verification failed, please try again");
showErrorDialog(context, "oops", "verification failed, please try again");
}
}
@ -406,8 +396,8 @@ class UserService {
} catch (e) {
await dialog.hide();
_logger.severe(e);
showErrorDialog(context, AppLocalizations.of(context).oops,
"authentication failed, please try again");
showErrorDialog(
context, "oops", "authentication failed, please try again");
}
}
@ -447,13 +437,13 @@ class UserService {
(route) => route.isFirst,
);
} else {
showErrorDialog(context, AppLocalizations.of(context).oops,
"something went wrong, please try again");
showErrorDialog(
context, "oops", "something went wrong, please try again");
}
} catch (e) {
_logger.severe(e);
showErrorDialog(context, AppLocalizations.of(context).oops,
"something went wrong, please try again");
showErrorDialog(
context, "oops", "something went wrong, please try again");
} finally {
await dialog.hide();
}
@ -513,13 +503,13 @@ class UserService {
(route) => route.isFirst,
);
} else {
showErrorDialog(context, AppLocalizations.of(context).oops,
"something went wrong, please try again");
showErrorDialog(
context, "oops", "something went wrong, please try again");
}
} catch (e) {
_logger.severe(e);
showErrorDialog(context, AppLocalizations.of(context).oops,
"something went wrong, please try again");
showErrorDialog(
context, "oops", "something went wrong, please try again");
} finally {
await dialog.hide();
}

View file

@ -1,4 +1,3 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:photos/services/user_service.dart';
import 'package:photos/utils/dialog_util.dart';

View file

@ -5,7 +5,6 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_password_strength/flutter_password_strength.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/models/billing_plan.dart';
@ -67,7 +66,7 @@ class _EmailEntryPageState extends State<EmailEntryPage> {
child: Material(
type: MaterialType.transparency,
child: Text(
AppLocalizations.of(context).sign_up,
"sign up",
style: TextStyle(
fontSize: 18,
letterSpacing: 0.6,
@ -209,7 +208,7 @@ class _EmailEntryPageState extends State<EmailEntryPage> {
height: 64,
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
child: button(
AppLocalizations.of(context).sign_up,
"sign up",
onPressed: _isFormValid()
? () {
if (!isValidEmail(_email)) {

View file

@ -5,7 +5,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:move_to_background/move_to_background.dart';
import 'package:photo_manager/photo_manager.dart';
@ -121,20 +120,19 @@ class _HomeWidgetState extends State<HomeWidget> {
_triggerLogoutEvent =
Bus.instance.on<TriggerLogoutEvent>().listen((event) async {
AlertDialog alert = AlertDialog(
title: Text(AppLocalizations.of(context).auth_session_expired),
content: Text(AppLocalizations.of(context).auth_login_again),
title: Text("session expired"),
content: Text("please login again"),
actions: [
TextButton(
child: Text(
AppLocalizations.of(context).ok,
"ok",
style: TextStyle(
color: Theme.of(context).buttonColor,
),
),
onPressed: () async {
Navigator.of(context, rootNavigator: true).pop('dialog');
final dialog = createProgressDialog(
context, AppLocalizations.of(context).auth_logging_out);
final dialog = createProgressDialog(context, "logging out...");
await dialog.show();
await Configuration.instance.logout();
await dialog.hide();
@ -410,7 +408,7 @@ class _HomeWidgetState extends State<HomeWidget> {
height: 64,
padding: const EdgeInsets.fromLTRB(60, 0, 60, 0),
child: button(
AppLocalizations.of(context).start_backup,
"start backup",
fontSize: 16,
lineHeight: 1.5,
padding: EdgeInsets.only(bottom: 4),
@ -423,7 +421,7 @@ class _HomeWidgetState extends State<HomeWidget> {
context,
BackupFolderSelectionPage(
shouldSelectAll: true,
buttonText: AppLocalizations.of(context).start_backup,
buttonText: "start backup",
),
);
}

View file

@ -1,7 +1,6 @@
import 'package:dots_indicator/dots_indicator.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/ui/email_entry_page.dart';
import 'package:photos/ui/login_page.dart';
@ -110,7 +109,7 @@ class _LandingPageWidgetState extends State<LandingPageWidget> {
child: Material(
type: MaterialType.transparency,
child: Text(
AppLocalizations.of(context).log_in,
"log in",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
@ -153,7 +152,7 @@ class _LandingPageWidgetState extends State<LandingPageWidget> {
child: Material(
type: MaterialType.transparency,
child: Text(
AppLocalizations.of(context).sign_up,
"sign up",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,

View file

@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/services/user_service.dart';
import 'package:photos/ui/common_elements.dart';
@ -36,7 +35,7 @@ class _LoginPageState extends State<LoginPage> {
child: Material(
type: MaterialType.transparency,
child: Text(
AppLocalizations.of(context).log_in,
"log in",
style: TextStyle(
fontSize: 16,
letterSpacing: 0.6,
@ -139,7 +138,7 @@ class _LoginPageState extends State<LoginPage> {
height: 64,
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
child: button(
AppLocalizations.of(context).log_in,
"log in",
onPressed: _email != null && _email.isNotEmpty
? () {
if (!isValidEmail(_email)) {

View file

@ -1,7 +1,4 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:photos/services/user_service.dart';
import 'package:photos/ui/common_elements.dart';

View file

@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:photos/core/configuration.dart';
import 'package:photos/core/event_bus.dart';
@ -94,7 +93,7 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
width: double.infinity,
height: 64,
child: button(
AppLocalizations.of(context).log_in,
"log in",
fontSize: 18,
onPressed: _passwordController.text.isNotEmpty
? () async {

View file

@ -2,7 +2,6 @@ import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:fluttercontactpicker/fluttercontactpicker.dart';
import 'package:logging/logging.dart';
@ -53,7 +52,7 @@ class _SharingDialogState extends State<SharingDialog> {
children.add(_getEmailField());
}
children.add(Padding(
padding: EdgeInsets.all(16),
padding: EdgeInsets.all(8),
));
if (!_showEntryField) {
children.add(SizedBox(
@ -87,9 +86,9 @@ class _SharingDialogState extends State<SharingDialog> {
if (!FeatureFlagService.instance.disableUrlSharing()) {
bool hasUrl = widget.collection.publicURLs?.isNotEmpty ?? false;
children.addAll([
Padding(padding: EdgeInsets.all(12)),
Padding(padding: EdgeInsets.all(16)),
Divider(height: 1),
Padding(padding: EdgeInsets.all(8)),
Padding(padding: EdgeInsets.all(12)),
SizedBox(
height: 36,
child: Row(
@ -228,15 +227,26 @@ class _SharingDialogState extends State<SharingDialog> {
},
child: Container(
padding: EdgeInsets.all(16),
child: Center(
child: Text(
url,
style: TextStyle(
fontSize: 16,
fontFeatures: const [FontFeature.tabularFigures()],
color: Colors.white.withOpacity(0.7),
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Flexible(
child: Text(
url,
style: TextStyle(
fontSize: 16,
fontFeatures: const [FontFeature.tabularFigures()],
color: Colors.white.withOpacity(0.68),
overflow: TextOverflow.ellipsis,
),
),
),
),
Padding(padding: EdgeInsets.all(2)),
Icon(
Icons.copy,
size: 18,
),
],
),
color: Colors.white.withOpacity(0.02),
),
@ -279,12 +289,11 @@ class _SharingDialogState extends State<SharingDialog> {
"please enter a valid email address.");
return;
} else if (email == Configuration.instance.getEmail()) {
showErrorDialog(context, AppLocalizations.of(context).oops,
"you cannot share with yourself");
showErrorDialog(context, "oops", "you cannot share with yourself");
return;
} else if (widget.collection.sharees.any((user) => user.email == email)) {
showErrorDialog(context, AppLocalizations.of(context).oops,
"you're already sharing this with " + email);
showErrorDialog(
context, "oops", "you're already sharing this with " + email);
return;
}
if (publicKey == null) {

View file

@ -11,7 +11,7 @@ description: ente photos application
# 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: 0.4.16+276
version: 0.4.17+277
environment:
sdk: ">=2.10.0 <3.0.0"