Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into generic-quests
Browse files Browse the repository at this point in the history
  • Loading branch information
SEbbaDK committed May 23, 2021
2 parents 8a3cd15 + 34931e4 commit ccedd5e
Show file tree
Hide file tree
Showing 55 changed files with 1,794 additions and 959 deletions.
20 changes: 20 additions & 0 deletions api-server.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ let
databaseSetup = ./server/database/create-role-and-database.sql;
tableSetup = pkgs.writeText "setup.sql" ''
${builtins.readFile ./server/database/create-tables.sql}
${builtins.readFile ./server/database/create-materialized-views.sql}
${mockData}
'';
in
Expand Down Expand Up @@ -63,6 +64,25 @@ in
wantedBy = [ "default.target" ];
};

systemd.services.maptogether-refresh-views = {
description = "Refresh the MapTogether views";
serviceConfig = {
Type = "oneshot";
User = "maptogether";
Group = "maptogether";
ExecStart = "${pkgs.postgresql}/bin/psql -d maptogether -f ${./server/database/refresh-materialized-views.sql}";
};
requires = [ "maptogether-database-setup.service" "postgresql.service" ];
after = [ "maptogether-database-setup.service" "postgresql.service" ];
wantedBy = [ "default.target" ];
};

systemd.timers.maptogether-refresh-views = {
description = "Timer to trigger refresh";
timerConfig.OnCalendar = "*:*:0"; # once a minute
wantedBy = [ "timers.target" ];
};

users.groups.maptogether.gid = 1005;
users.users.maptogether = {
isSystemUser = true;
Expand Down
82 changes: 0 additions & 82 deletions client/lib/database.dart

This file was deleted.

7 changes: 3 additions & 4 deletions client/lib/location_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import 'package:latlong/latlong.dart';
import 'package:location/location.dart';

class LocationHandler extends ChangeNotifier {

// From location lib
Location _locationService = Location();

Expand All @@ -18,9 +17,9 @@ class LocationHandler extends ChangeNotifier {

LocationHandler() {
mapController = MapController();
rotationStream = mapController.mapEventStream
.map((_) => mapController.rotation)
.map((d) => (d / 360.0) * (2.0 * math.pi));
rotationStream = mapController.mapEventStream
.map((_) => mapController.rotation)
.map((d) => (d / 360.0) * (2.0 * math.pi));
initLocationService();
}

Expand Down
27 changes: 12 additions & 15 deletions client/lib/screens/login_screen.dart → client/lib/login_flow.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import 'dart:async';

import 'package:client/login_handler.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:webview_flutter/webview_flutter.dart';

import 'package:client/login_handler.dart';
import 'package:client/widgets/app_bar.dart';
import 'package:client/widgets/future_loader.dart';

class LoginWebView extends StatelessWidget {
final String url;
void Function(BuildContext) onVerified;

LoginWebView(this.url);

Expand All @@ -34,9 +36,8 @@ class LoginWebView extends StatelessWidget {
final verifier = u.split('verifier=')[1];
print('Verifier: $verifier');
loginHandler.authorize(verifier).then((_) {
onVerified(context);
Navigator.of(context).pop(true);
});
Navigator.of(context).pop(true);
}
},
),
Expand All @@ -48,17 +49,12 @@ class LoginWebView extends StatelessWidget {
}

MaterialPageRoute<bool> loginPage() => MaterialPageRoute<bool>(
builder: (context) => FutureBuilder<String>(
builder: (context) => FutureLoader<String>(
future: context.watch<LoginHandler>().loginUrl(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) =>
(snapshot.hasData)
? LoginWebView(snapshot.data)
: (snapshot.hasError)
? Text('Error: ${snapshot.error}')
: CircularProgressIndicator(
semanticsLabel: 'Getting auth url')));
builder: (BuildContext context, String url) => LoginWebView(url)));

Future<bool> requestLogin(BuildContext context, {bool social}) => request(
Future<bool> requestLogin(BuildContext context, {bool social = false}) =>
request(
context,
title: social
? 'You must login to access social features'
Expand All @@ -70,8 +66,9 @@ Future<bool> requestLogin(BuildContext context, {bool social}) => request(
no: 'No Thanks',
).then((answer) async {
if (answer == false) return false;

return await Navigator.push<bool>(context, loginPage());
final login = await Navigator.push<bool>(context, loginPage());
if (login && social) await context.read<LoginHandler>().optIn();
return login;
});

Future<bool> request(BuildContext context,
Expand Down
71 changes: 40 additions & 31 deletions client/lib/login_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,23 @@ const _ckey = String.fromEnvironment('CKEY');
const _csec = String.fromEnvironment('CSEC');

class LoginHandler extends ChangeNotifier {

// OSM things
final _env = osm.ApiEnv.dev('master');
final osm.Auth _auth = osm.Auth(_ckey, _csec, osm.ApiEnv.dev('master'));
osm.Api _osmApi = null;
var _tempToken = null;

osm.Api osmApi() {
if (!loggedIntoOSM())
throw Exception('Cannot get OSM Api before logging in');
if (_osmApi == null)
_osmApi = osm.Api(
'MapTogether v0.1.0pre',
_auth.getClient(_auth.createCredentials(_accessToken(), _accessSecret())),
_env
);
return _osmApi;
}
osm.Api osmApi() {
if (!loggedIntoOSM())
throw Exception('Cannot get OSM Api before logging in');
if (_osmApi == null)
_osmApi = osm.Api(
'MapTogether v0.1.0pre',
_auth.getClient(
_auth.createCredentials(_accessToken(), _accessSecret())),
_env);
return _osmApi;
}

Future<String> loginUrl() async {
_tempToken = (await _auth.getTemporaryToken()).credentials;
Expand All @@ -37,24 +36,26 @@ class LoginHandler extends ChangeNotifier {
final creds = await _auth
.getAccessToken(_tempToken, verifier)
.then((res) => res.credentials);
login(creds.token, creds.tokenSecret);
await login(creds.token, creds.tokenSecret);
return true;
}


// MT things

mt.Api _mtApi = null;

mt.Api mtApi() {
if (!loggedIntoSocial())
throw Exception('Cannot get MT Api before logging in');
if (_mtApi == null)
_mtApi = mt.Api(_accessToken());
return _mtApi;
try {
if (!loggedIntoSocial())
throw Exception('Cannot get MT Api before logging in');
} catch (e, s) {
print("$s");
throw Exception("$e");
}
if (_mtApi == null) _mtApi = mt.Api(_accessToken());
return _mtApi;
}


// General things

SharedPreferences _prefs = null;
Expand Down Expand Up @@ -88,22 +89,30 @@ class LoginHandler extends ChangeNotifier {

bool loggedIntoSocial() => socialOptIn() && loggedIntoOSM();

optIn() {
prefs().setBool('socialOptIn', true);
osmApi().userId().then((id) =>
mtApi().createUser(id, _accessSecret(), _ckey, _csec).then((_) =>
notifyListeners()
)
);
int _userId = null;
Future<int> userId() async {
if (_userId == null) _userId = await osmApi().userId();
return _userId;
}

Future<mt.User> user() async => mtApi().user(await userId());

optIn() async {
print('Opting in to social features');
await prefs().setBool('socialOptIn', true);
await userId().then((id) => mtApi()
.createUser(id, _accessSecret(), _ckey, _csec)
.then((_) => notifyListeners()));
}

login(token, secret) {
prefs().setString('accessToken', token);
prefs().setString('accessSecret', secret);
login(token, secret) async {
await prefs().setString('accessToken', token);
await prefs().setString('accessSecret', secret);
notifyListeners();
}

logout() {
_userId = null;
prefs().setString('accessToken', '');
prefs().setString('accessSecret', '');
notifyListeners();
Expand Down
6 changes: 2 additions & 4 deletions client/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@ import 'package:client/screens/map_screen.dart';
import 'package:client/login_handler.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import 'database.dart';
import 'package:maptogether_api/maptogether_api.dart';

void main() => runApp(
MultiProvider(providers: [
ChangeNotifierProvider(create: (_) => DummyDatabase()),
ChangeNotifierProvider(create: (_) => LoginHandler()),
ChangeNotifierProvider(create: (_) => LocationHandler()),
ChangeNotifierProvider(create: (_) => QuestHandler()),
Expand All @@ -20,7 +18,7 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '${context.watch<DummyDatabase>().currentUserName}',
title: 'MapTogether',
theme: ThemeData(
primaryColor: Colors.lightGreen,
primarySwatch: Colors.lightGreen,
Expand Down
17 changes: 9 additions & 8 deletions client/lib/screens/map_screen.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import 'package:flutter/material.dart';
import 'package:latlong/latlong.dart';
import 'package:provider/provider.dart';

import 'package:client/location_handler.dart';
import 'package:client/login_flow.dart';
import 'package:client/login_handler.dart';
import 'package:client/quests/quest_handler.dart';
import 'package:client/screens/login_screen.dart';
import 'package:client/screens/social_screen.dart';
import 'package:client/widgets/map_widgets/map.dart';
import 'package:client/widgets/map_widgets/map_screen_button_widgets/button_row.dart';
import 'package:client/widgets/map_widgets/map_screen_button_widgets/map_screen_button.dart';
import 'package:client/widgets/map_widgets/map_screen_button_widgets/pup_up_menu.dart';
import 'package:flutter/material.dart';
import 'package:latlong/latlong.dart';
import 'package:provider/provider.dart';
import 'package:client/widgets/map/buttons/button_row.dart';
import 'package:client/widgets/map/buttons/map_screen_button.dart';
import 'package:client/widgets/map/buttons/pup_up_menu.dart';
import 'package:client/widgets/map/map.dart';

launchSocial(BuildContext context) => Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => SocialScreen()));
Expand Down
1 change: 0 additions & 1 deletion client/lib/screens/new_activity_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ class NewActivityScreen extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: MapTogetherAppBar(title: 'New Activity'),

);
}
}
20 changes: 0 additions & 20 deletions client/lib/screens/page2.dart

This file was deleted.

File renamed without changes.
Loading

0 comments on commit ccedd5e

Please sign in to comment.