Skip to content

Commit

Permalink
Merge pull request #32 from andannn/airing_schedule
Browse files Browse the repository at this point in the history
airing schedule query graphql
  • Loading branch information
andannn authored Oct 14, 2023
2 parents abfe859 + 948e083 commit 2de676d
Show file tree
Hide file tree
Showing 99 changed files with 2,389 additions and 503 deletions.
16 changes: 8 additions & 8 deletions lib/app/app.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import 'package:anime_tracker/core/design_system/theme/colors.dart';
import 'package:anime_tracker/core/data/repository/ani_list_repository.dart';
import 'package:anime_tracker/core/data/repository/auth_repository.dart';
import 'package:anime_tracker/core/data/repository/anime_track_list_repository.dart';
import 'package:anime_tracker/core/data/media_information_repository.dart';
import 'package:anime_tracker/core/data/auth_repository.dart';
import 'package:anime_tracker/core/data/ani_list_repository.dart';
import 'package:anime_tracker/feature/anime_track/bloc/track_bloc.dart';
import 'package:anime_tracker/feature/discover/bloc/discover_bloc.dart';
import 'package:dynamic_color/dynamic_color.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:anime_tracker/core/data/repository/user_data_repository.dart';
import 'package:anime_tracker/core/data/user_data_repository.dart';
import 'package:anime_tracker/app/local/ani_flow_localizations_delegate.dart';
import 'package:anime_tracker/app/navigation/ani_flow_router.dart';
import 'package:anime_tracker/app/navigation/top_level_navigation.dart';


/// context of app root.
BuildContext? globalContext;

Expand Down Expand Up @@ -101,7 +102,6 @@ class _AnimeTrackerAppScaffoldState extends State<AnimeTrackerAppScaffold> {
@override
void initState() {
super.initState();

animeTrackerRouterDelegate.addListener(() {
setState(() {
currentNavigation =
Expand All @@ -126,14 +126,14 @@ class _AnimeTrackerAppScaffoldState extends State<AnimeTrackerAppScaffold> {
BlocProvider(
create: (context) => DiscoverBloc(
userDataRepository: context.read<UserDataRepository>(),
aniListRepository: context.read<AniListRepository>(),
aniListRepository: context.read<MediaInformationRepository>(),
authRepository: context.read<AuthRepository>(),
animeTrackListRepository: context.read<AnimeTrackListRepository>(),
animeTrackListRepository: context.read<AniListRepository>(),
),
),
BlocProvider(
create: (context) => TrackBloc(
animeTrackListRepository: context.read<AnimeTrackListRepository>(),
animeTrackListRepository: context.read<AniListRepository>(),
authRepository: context.read<AuthRepository>(),
),
),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import 'package:anime_tracker/app/local/ani_flow_localizations.dart';
import 'package:anime_tracker/core/common/model/anime_season.dart';
import 'package:anime_tracker/core/common/model/anime_status.dart';
import 'package:anime_tracker/core/common/model/character_role.dart';
import 'package:anime_tracker/core/data/model/anime_model.dart';
import 'package:anime_tracker/core/data/model/anime_source.dart';
import 'package:anime_tracker/core/data/repository/ani_list_repository.dart';
import 'package:anime_tracker/util/time_util.dart';
import 'package:anime_tracker/core/common/model/anime_source.dart';
import 'package:anime_tracker/core/common/util/time_util.dart';
import 'package:flutter/material.dart';

extension AnimeSourceEx on AnimeSource {
Expand Down Expand Up @@ -84,7 +86,8 @@ extension AnimeModelEx on AnimeModel {
itemList.add(status!.getAnimeStatusString(context));
}

return itemList.join(' · ');
final result = itemList.join(' · ');
return result.isEmpty ? '----' : result;
}

String getReleasingTimeString(BuildContext context) {
Expand Down
15 changes: 12 additions & 3 deletions lib/app/navigation/ani_flow_route_path.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:anime_tracker/app/navigation/top_level_navigation.dart';
import 'package:anime_tracker/core/data/repository/ani_list_repository.dart';
import 'package:anime_tracker/core/common/model/anime_category.dart';
import 'package:anime_tracker/feature/airing_schedule/airing_schedule.dart';
import 'package:anime_tracker/feature/anime_list/anime_list.dart';
import 'package:anime_tracker/feature/anime_search/anime_search.dart';
import 'package:anime_tracker/feature/anime_track/anime_track.dart';
Expand All @@ -8,12 +9,14 @@ import 'package:anime_tracker/feature/discover/discover.dart';
import 'package:anime_tracker/feature/profile/profile.dart';
import 'package:flutter/material.dart';

sealed class AniFlowRoutePath {}
sealed class AniFlowRoutePath {
const AniFlowRoutePath();
}

abstract class TopLevelRoutePath extends AniFlowRoutePath {
final TopLevelNavigation topLevel;

TopLevelRoutePath(this.topLevel);
const TopLevelRoutePath(this.topLevel);

@override
bool operator ==(Object other) =>
Expand Down Expand Up @@ -54,6 +57,10 @@ class DetailAnimeRoutePath extends AniFlowRoutePath {
final String animeId;
}

class AiringScheduleRoutePath extends AniFlowRoutePath {
const AiringScheduleRoutePath();
}

extension AniFlowRoutePathEx on AniFlowRoutePath {
Page generatePage() {
switch (this) {
Expand All @@ -75,6 +82,8 @@ extension AniFlowRoutePathEx on AniFlowRoutePath {
return const AnimeSearchPage(key: ValueKey('AnimeSearchPage'));
case ProfileRoutePath(topLevel: final _):
return const ProfilePage(key: ValueKey('ProfilePage'));
case AiringScheduleRoutePath():
return const AiringSchedule(key: ValueKey('AiringSchedule'));
default:
return const MaterialPage(child: SizedBox());
}
Expand Down
8 changes: 7 additions & 1 deletion lib/app/navigation/ani_flow_router.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:anime_tracker/app/navigation/top_level_navigation.dart';
import 'package:anime_tracker/core/data/repository/ani_list_repository.dart';
import 'package:anime_tracker/core/common/model/anime_category.dart';
import 'package:flutter/material.dart';
import 'package:anime_tracker/app/navigation/ani_flow_route_path.dart';

Expand Down Expand Up @@ -88,4 +88,10 @@ class AnimeTrackerRouterDelegate extends RouterDelegate<AniFlowRoutePath>

notifyListeners();
}

void navigateToAiringSchedule() {
_backStack += [const AiringScheduleRoutePath()];

notifyListeners();
}
}
2 changes: 1 addition & 1 deletion lib/core/channel/auth_event_channel.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:anime_tracker/core/data/logger/logger.dart';
import 'package:anime_tracker/core/common/util/logger.dart';

class AuthResult {
AuthResult({required this.token, required this.expiresInTime});
Expand Down
13 changes: 13 additions & 0 deletions lib/core/common/model/anime_category.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
enum AnimeCategory {
/// current season releasing anime.
currentSeason,

/// next season not yet released anime.
nextSeason,

/// now trending anime.
trending,

/// popular movie.
movie,
}
10 changes: 10 additions & 0 deletions lib/core/common/model/anime_format.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/// Anime format
enum AnimeFormat {
tv(['TV', 'TV_SHORT']),
movie(['MOVIE']),
ova(['OVA', 'SPECIAL', 'ONA']);

final List<String> sqlTypeString;

const AnimeFormat(this.sqlTypeString);
}
55 changes: 55 additions & 0 deletions lib/core/common/model/anime_season.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@

import 'package:equatable/equatable.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

/// Bangumi releasing season.
@JsonEnum()
enum AnimeSeason {
@JsonValue('WINTER')
winter('WINTER'),
@JsonValue('SPRING')
spring('SPRING'),
@JsonValue('SUMMER')
summer('SUMMER'),
@JsonValue('FALL')
fall('FALL');

final String sqlTypeString;

const AnimeSeason(this.sqlTypeString);
}

/// parameter present to anime season.
class AnimeSeasonParam extends Equatable {
final int seasonYear;
final AnimeSeason season;

const AnimeSeasonParam({required this.seasonYear, required this.season});

@override
List<Object?> get props => [seasonYear, season];
}

/// get next bangumi season.
AnimeSeasonParam getNextSeasonParam(AnimeSeasonParam current) {
int nextSeasonYear;
AnimeSeason nextSeason;
switch (current.season) {
case AnimeSeason.winter:
nextSeasonYear = current.seasonYear;
nextSeason = AnimeSeason.spring;
case AnimeSeason.spring:
nextSeasonYear = current.seasonYear;
nextSeason = AnimeSeason.summer;
case AnimeSeason.summer:
nextSeasonYear = current.seasonYear;
nextSeason = AnimeSeason.fall;
case AnimeSeason.fall:
nextSeasonYear = current.seasonYear + 1;
nextSeason = AnimeSeason.winter;
}
return AnimeSeasonParam(
seasonYear: nextSeasonYear,
season: nextSeason,
);
}
9 changes: 9 additions & 0 deletions lib/core/common/model/anime_sort.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/// Bangumi sort.
enum AnimeSort {
trending('TRENDING_DESC'),
latestUpdate('UPDATED_AT_DESC');

final String sqlTypeString;

const AnimeSort(this.sqlTypeString);
}
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
part of '../repository/ani_list_repository.dart';

import 'package:freezed_annotation/freezed_annotation.dart';

/// Bangumi status.
@JsonEnum()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
part of '../repository/ani_list_repository.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

/// Bangumi character role.
@JsonEnum()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:anime_tracker/core/data/repository/ani_list_repository.dart';
import 'package:anime_tracker/core/common/model/anime_season.dart';

mixin AnimeSeasonUtil {
/// get anime season params by DateTime.
Expand Down
6 changes: 6 additions & 0 deletions lib/core/common/util/collection_util.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

extension MapEx on Map {
Map<K, V> toMutableMap<K, V>() {
return {...this};
}
}
File renamed without changes.
File renamed without changes.
53 changes: 53 additions & 0 deletions lib/core/common/util/time_util.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
mixin TimeUtil {
/// Calculate minus from [seconds]
static Duration durationFromSeconds(int seconds) {
return DateTime.fromMillisecondsSinceEpoch(seconds * 1000)
.difference(DateTime.fromMillisecondsSinceEpoch(0));
}

static DateTime timeAfterMilliseconds(int milliseconds) {
return DateTime.fromMillisecondsSinceEpoch(
DateTime.now().millisecondsSinceEpoch + milliseconds,
);
}

static String? getFormattedDuration(Duration duration) {
final result = <String>[];
final days = duration.inDays;
final hours = duration.inHours % 60;
final minutes = duration.inMinutes % 60;

if (days != 0) {
result.add('$days days');
}
if (hours != 0) {
result.add('$hours hours');
}
if (minutes != 0) {
result.add('$minutes minutes');
}
return result.firstOrNull;
}

/// Get range of millisecondsSinceEpoch, which is [daysAgo] from today and [daysAfter] after today.
/// For example:
/// current time is: 2023-10-11 15:10:26.818764
/// return rage is: (2023-10-05 00:00:00.000, 2023-10-17 23:59:59.999)
static (int, int) getTimeRange(DateTime time,
{required int daysAgo, required int daysAfter}) {
final timeAgo = time.subtract(Duration(days: daysAgo));
final timeAfter = time.add(Duration(days: daysAfter));

final rangeStart = DateTime(timeAgo.year, timeAgo.month, timeAgo.day)
.millisecondsSinceEpoch;
final rangeEnd =
DateTime(timeAfter.year, timeAfter.month, timeAfter.day + 1)
.millisecondsSinceEpoch - 1;

return (rangeStart, rangeEnd);
}

static (int, int) getTimeRangeOfTheTargetDay(DateTime time) {
return getTimeRange(time, daysAgo: 0, daysAfter: 0);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:anime_tracker/core/common/global_static_constants.dart';
import 'package:anime_tracker/core/common/util/global_static_constants.dart';
import 'package:anime_tracker/core/data/load_result.dart';
import 'package:anime_tracker/core/data/model/anime_list_item_model.dart';
import 'package:anime_tracker/core/data/repository/ani_list_repository.dart';
import 'package:anime_tracker/core/database/anime_dao.dart';
import 'package:anime_tracker/core/database/anime_database.dart';
import 'package:anime_tracker/core/database/model/anime_entity.dart';
Expand All @@ -17,9 +17,9 @@ import 'package:dio/dio.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:sqflite/sqflite.dart';

part '../model/anime_list_status.dart';
part 'model/anime_list_status.dart';

abstract class AnimeTrackListRepository {
abstract class AniListRepository {
Future<List<AnimeListItemModel>> getUserAnimeList(
{required List<AnimeListStatus> status,
int page = 1,
Expand All @@ -46,7 +46,7 @@ abstract class AnimeTrackListRepository {
int? score});
}

class AnimeTrackListRepositoryImpl extends AnimeTrackListRepository {
class AnimeTrackListRepositoryImpl extends AniListRepository {
final AnimeTrackListDao animeTrackListDao =
AnimeDatabase().getAnimeTrackListDao();
final UserDataDao userDataDao = AnimeDatabase().getUserDataDao();
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
part of 'ani_list_repository.dart';

enum LoadType { refresh, append }

sealed class LoadResult<T> {}
Expand Down
Loading

0 comments on commit 2de676d

Please sign in to comment.