This repository has been archived by the owner on Jul 2, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #231 from blazern/news-feed1
Create NewsFeedManager, NewsPiece, blank NewsFeedPage and a few other things
- Loading branch information
Showing
24 changed files
with
1,603 additions
and
325 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
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,26 @@ | ||
import 'package:built_collection/built_collection.dart'; | ||
import 'package:built_value/built_value.dart'; | ||
import 'package:built_value/serializer.dart'; | ||
import 'package:plante/base/build_value_helper.dart'; | ||
import 'package:plante/outside/backend/news/news_piece.dart'; | ||
|
||
part 'news_data_response.g.dart'; | ||
|
||
abstract class NewsDataResponse | ||
implements Built<NewsDataResponse, NewsDataResponseBuilder> { | ||
@BuiltValueField(wireName: 'last_page') | ||
bool get lastPage; | ||
@BuiltValueField(wireName: 'results') | ||
BuiltList<NewsPiece> get results; | ||
|
||
static NewsDataResponse? fromJson(Map<String, dynamic> json) { | ||
return BuildValueHelper.jsonSerializers | ||
.deserializeWith(NewsDataResponse.serializer, json); | ||
} | ||
|
||
factory NewsDataResponse([void Function(NewsDataResponseBuilder) updates]) = | ||
_$NewsDataResponse; | ||
NewsDataResponse._(); | ||
static Serializer<NewsDataResponse> get serializer => | ||
_$newsDataResponseSerializer; | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
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,32 @@ | ||
import 'package:plante/base/coord_utils.dart'; | ||
import 'package:plante/base/general_error.dart'; | ||
import 'package:plante/base/result.dart'; | ||
import 'package:plante/logging/log.dart'; | ||
import 'package:plante/outside/backend/backend.dart'; | ||
import 'package:plante/outside/backend/news/news_piece.dart'; | ||
import 'package:plante/ui/map/latest_camera_pos_storage.dart'; | ||
|
||
class NewsFeedManager { | ||
static const _REQUESTED_AREA_SIZE_KMS = 35.0; | ||
final Backend _backend; | ||
final LatestCameraPosStorage _cameraPosStorage; | ||
|
||
NewsFeedManager(this._backend, this._cameraPosStorage); | ||
|
||
Future<Result<List<NewsPiece>, GeneralError>> obtainNews( | ||
{required int page}) async { | ||
final pos = await _cameraPosStorage.get(); | ||
if (pos == null) { | ||
Log.w('No camera position for some reason'); | ||
return Ok(const []); | ||
} | ||
final backendNewsRes = await _backend.requestNews( | ||
pos.makeSquare(kmToGrad(_REQUESTED_AREA_SIZE_KMS)), | ||
page: page); | ||
if (backendNewsRes.isErr) { | ||
return Err(backendNewsRes.unwrapErr().toGeneral()); | ||
} | ||
final backendNews = backendNewsRes.unwrap(); | ||
return Ok(backendNews.results.toList()); | ||
} | ||
} |
Oops, something went wrong.