-
Notifications
You must be signed in to change notification settings - Fork 117
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: integrate ratings service (#1371)
* feat: get ratings from new ratings service * test: fix all failing tests * test: ratings tests on details_page * refactor: removing ratingsListModelProvider Removed the ratingsListModelProvider, opting to use ratingsModelProvider instead and nesting the calls deeper in the widget tree. * style: formatting and small code tweaks * fix: relative imports * feat: remove loading spinner from snap card * chore: update mocks --------- Co-authored-by: Dennis Loose <[email protected]>
- Loading branch information
1 parent
6c5e11b
commit 56d8668
Showing
16 changed files
with
868 additions
and
389 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
export 'src/ratings/exports.dart'; | ||
export 'src/ratings/ratings_l10n.dart'; | ||
export 'src/ratings/ratings_model.dart'; | ||
export 'src/ratings/ratings_service.dart'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
export 'package:app_center_ratings_client/src/app.dart'; | ||
export 'package:app_center_ratings_client/src/user.dart'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
import '/l10n.dart'; | ||
import 'exports.dart'; | ||
|
||
extension RatingsBandL10n on RatingsBand { | ||
String localize(AppLocalizations l10n) { | ||
return switch (this) { | ||
RatingsBand.veryGood => l10n.snapRatingsBandVeryGood, | ||
RatingsBand.good => l10n.snapRatingsBandGood, | ||
RatingsBand.neutral => l10n.snapRatingsBandNeutral, | ||
RatingsBand.poor => l10n.snapRatingsBandPoor, | ||
RatingsBand.veryPoor => l10n.snapRatingsBandVeryPoor, | ||
RatingsBand.insufficientVotes => l10n.snapRatingsBandInsufficientVotes, | ||
}; | ||
} | ||
|
||
Color getColor(BuildContext context) { | ||
return switch (this) { | ||
RatingsBand.veryGood => const Color(0xFF0E8420), | ||
RatingsBand.good => const Color(0xFF0E8420), | ||
RatingsBand.neutral => const Color(0xFFC75A00), | ||
RatingsBand.poor => const Color(0xFFC7162B), | ||
RatingsBand.veryPoor => const Color(0xFFC7162B), | ||
RatingsBand.insufficientVotes => Colors.grey, | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_riverpod/flutter_riverpod.dart'; | ||
import 'package:ubuntu_service/ubuntu_service.dart'; | ||
import 'exports.dart'; | ||
|
||
import 'ratings_service.dart'; | ||
|
||
final ratingsModelProvider = | ||
ChangeNotifierProvider.family.autoDispose<RatingsModel, String>( | ||
(ref, snapId) => RatingsModel( | ||
ratings: getService<RatingsService>(), | ||
snapId: snapId, | ||
)..init(), | ||
); | ||
|
||
class RatingsModel extends ChangeNotifier { | ||
RatingsModel({ | ||
required this.ratings, | ||
required this.snapId, | ||
}) : _state = const AsyncValue.loading(); | ||
final RatingsService ratings; | ||
final String snapId; | ||
|
||
Rating? snapRating; | ||
|
||
AsyncValue<void> get state => _state; | ||
AsyncValue<void> _state; | ||
|
||
Future<void> init() async { | ||
_state = await AsyncValue.guard(() async { | ||
final rating = await ratings.getRating(snapId); | ||
_setSnapRating(rating); | ||
notifyListeners(); | ||
}); | ||
} | ||
|
||
void _setSnapRating(Rating? rating) { | ||
snapRating = rating; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import 'dart:convert'; | ||
import 'dart:io'; | ||
|
||
import 'package:app_center_ratings_client/ratings_client.dart'; | ||
import 'package:crypto/crypto.dart'; | ||
import 'package:flutter/material.dart'; | ||
import 'package:glib/glib.dart'; | ||
import 'package:jwt_decode/jwt_decode.dart'; | ||
import 'exports.dart'; | ||
|
||
class RatingsService { | ||
RatingsService(String url, int port, | ||
[@visibleForTesting RatingsClient? client]) | ||
: _client = client ?? RatingsClient(url, port), | ||
_id = _generateId(); | ||
|
||
final RatingsClient _client; | ||
String? _jwt; | ||
final String _id; | ||
|
||
static String _generateId() { | ||
final username = glib.getUserName(); | ||
final machineId = File('/etc/machine-id').readAsStringSync().trim(); | ||
return sha256.convert(utf8.encode('[$username:$machineId]')).toString(); | ||
} | ||
|
||
Future<void> _ensureValidToken() async { | ||
if (_jwt == null || Jwt.isExpired(_jwt!)) { | ||
_jwt = await _client.authenticate(_id); | ||
} | ||
} | ||
|
||
Future<Rating?> getRating(String snapId) async { | ||
await _ensureValidToken(); | ||
return _client.getRating(snapId, _jwt!); | ||
} | ||
|
||
Future<void> vote(Vote vote) async { | ||
await _ensureValidToken(); | ||
await _client.vote(vote.snapId, vote.snapRevision, vote.voteUp, _jwt!); | ||
} | ||
|
||
Future<void> delete() async { | ||
await _ensureValidToken(); | ||
await _client.delete(_jwt!); | ||
} | ||
|
||
Future<List<Vote>> listMyVotes(String snapFilter) async { | ||
await _ensureValidToken(); | ||
return await _client.listMyVotes(snapFilter, _jwt!); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.