From 64ce976ce7552ceef851a1658bd0ceda3030860f Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Wed, 17 Jul 2024 17:45:51 +0800 Subject: [PATCH] feat: remove sperate movie page and add default storage --- db/db.go | 17 +++++++ ui/lib/login_page.dart | 4 +- ui/lib/main.dart | 13 +++-- ui/lib/movie_watchlist.dart | 49 ------------------- ui/lib/navdrawer.dart | 7 ++- ui/lib/tv_details.dart | 6 +-- .../{tv_watchlist.dart => welcome_page.dart} | 36 ++++++++++---- 7 files changed, 57 insertions(+), 75 deletions(-) rename ui/lib/{tv_watchlist.dart => welcome_page.dart} (59%) diff --git a/db/db.go b/db/db.go index 022dd33..04660da 100644 --- a/db/db.go +++ b/db/db.go @@ -43,6 +43,7 @@ func Open() (*Client, error) { } c.generateJwtSerectIfNotExist() + c.generateDefaultLocalStorage() return c, nil } @@ -55,6 +56,22 @@ func (c *Client) generateJwtSerectIfNotExist() { } } +func (c *Client) generateDefaultLocalStorage() { + n, _ := c.ent.Storage.Query().Count(context.TODO()) + if n != 0 { + return + } + c.AddStorage(&StorageInfo{ + Name: "local", + Implementation: "local", + Default: true, + Settings: map[string]string{ + "tv_path": "/data/tv", + "movie_path": "/data/movies", + }, + }) +} + func (c *Client) GetSetting(key string) string { v, err := c.ent.Settings.Query().Where(settings.Key(key)).Only(context.TODO()) if err != nil { diff --git a/ui/lib/login_page.dart b/ui/lib/login_page.dart index 7db2e4e..33e2118 100644 --- a/ui/lib/login_page.dart +++ b/ui/lib/login_page.dart @@ -5,7 +5,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:quiver/strings.dart'; import 'package:ui/providers/login.dart'; -import 'package:ui/tv_watchlist.dart'; +import 'package:ui/welcome_page.dart'; class LoginScreen extends ConsumerWidget { static const route = '/login'; @@ -30,7 +30,7 @@ class LoginScreen extends ConsumerWidget { ref.read(authSettingProvider.notifier).login(data.name, data.password); }, onSubmitAnimationCompleted: () { - context.go(TvWatchlistPage.route); + context.go(WelcomePage.routeTv); }, onRecoverPassword: _recoverPassword, userValidator: (value) => isBlank(value)? "不能为空":null, diff --git a/ui/lib/main.dart b/ui/lib/main.dart index f09cd9a..510e634 100644 --- a/ui/lib/main.dart +++ b/ui/lib/main.dart @@ -10,7 +10,7 @@ import 'package:ui/providers/APIs.dart'; import 'package:ui/search.dart'; import 'package:ui/system_settings.dart'; import 'package:ui/tv_details.dart'; -import 'package:ui/tv_watchlist.dart'; +import 'package:ui/welcome_page.dart'; void main() { runApp(const MyApp()); @@ -80,11 +80,11 @@ class MyApp extends StatelessWidget { routes: [ GoRoute( path: "/", - redirect: (context, state) => TvWatchlistPage.route, + redirect: (context, state) => WelcomePage.routeTv, ), GoRoute( - path: TvWatchlistPage.route, - builder: (context, state) => const TvWatchlistPage(), + path: WelcomePage.routeTv, + builder: (context, state) => const WelcomePage(), ), GoRoute( path: TvDetailsPage.route, @@ -92,8 +92,8 @@ class MyApp extends StatelessWidget { TvDetailsPage(seriesId: state.pathParameters['id']!), ), GoRoute( - path: MovieWatchlistPage.route, - builder: (context, state) => const MovieWatchlistPage(), + path: WelcomePage.routeMoivie, + builder: (context, state) => const WelcomePage(), ), GoRoute( path: MovieDetailsPage.route, @@ -117,7 +117,6 @@ class MyApp extends StatelessWidget { final _router = GoRouter( navigatorKey: APIs.navigatorKey, - initialLocation: TvWatchlistPage.route, routes: [ _shellRoute, GoRoute( diff --git a/ui/lib/movie_watchlist.dart b/ui/lib/movie_watchlist.dart index 1530fa7..3eef3d0 100644 --- a/ui/lib/movie_watchlist.dart +++ b/ui/lib/movie_watchlist.dart @@ -8,55 +8,6 @@ import 'package:ui/providers/welcome_data.dart'; import 'package:ui/utils.dart'; import 'package:ui/widgets/progress_indicator.dart'; -class MovieWatchlistPage extends ConsumerWidget { - static const route = "/movies"; - - const MovieWatchlistPage({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final data = ref.watch(movieWatchlistDataProvider); - - return switch (data) { - AsyncData(:final value) => SingleChildScrollView( - child: Wrap( - spacing: 20, - children: List.generate(value.length, (i) { - var item = value[i]; - return Card( - margin: const EdgeInsets.all(4), - clipBehavior: Clip.hardEdge, - child: InkWell( - //splashColor: Colors.blue.withAlpha(30), - onTap: () { - context.go(MovieDetailsPage.toRoute(item.id!)); - //showDialog(context: context, builder: builder) - }, - child: Column( - children: [ - SizedBox( - width: 160, - height: 240, - child: Image.network( - "${APIs.imagesUrl}/${item.id}/poster.jpg", - fit: BoxFit.fill, - headers: APIs.authHeaders, - ), - ), - Text( - item.name!, - style: const TextStyle( - fontSize: 14, fontWeight: FontWeight.bold, height: 2.5), - ), - ], - ), - )); - }))), - _ => const MyProgressIndicator(), - }; - } -} - class MovieDetailsPage extends ConsumerStatefulWidget { static const route = "/movie/:id"; diff --git a/ui/lib/navdrawer.dart b/ui/lib/navdrawer.dart index 70e075c..2e25a41 100644 --- a/ui/lib/navdrawer.dart +++ b/ui/lib/navdrawer.dart @@ -1,10 +1,9 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:ui/activity.dart'; -import 'package:ui/movie_watchlist.dart'; import 'package:ui/search.dart'; import 'package:ui/system_settings.dart'; -import 'package:ui/tv_watchlist.dart'; +import 'package:ui/welcome_page.dart'; class NavDrawer extends StatefulWidget { const NavDrawer({super.key}); @@ -27,9 +26,9 @@ class _NavDrawerState extends State { _counter = value; }); if (value == 0) { - context.go(MovieWatchlistPage.route); + context.go(WelcomePage.routeMoivie); } else if (value == 1) { - context.go(TvWatchlistPage.route); + context.go(WelcomePage.routeTv); } else if (value == 2) { context.go(SearchPage.route); } else if (value == 3) { diff --git a/ui/lib/tv_details.dart b/ui/lib/tv_details.dart index b576cca..5057eba 100644 --- a/ui/lib/tv_details.dart +++ b/ui/lib/tv_details.dart @@ -5,7 +5,7 @@ import 'package:ui/providers/APIs.dart'; import 'package:ui/providers/series_details.dart'; import 'package:ui/providers/settings.dart'; import 'package:ui/utils.dart'; -import 'package:ui/tv_watchlist.dart'; +import 'package:ui/welcome_page.dart'; import 'package:ui/widgets/progress_indicator.dart'; class TvDetailsPage extends ConsumerStatefulWidget { @@ -179,7 +179,7 @@ class _TvDetailsPageState extends ConsumerState { ), const Text(""), Text( - details!.overview!, + details.overview!, ), ], )), @@ -192,7 +192,7 @@ class _TvDetailsPageState extends ConsumerState { seriesId) .notifier) .delete(); - context.go(TvWatchlistPage.route); + context.go(WelcomePage.routeTv); }, icon: const Icon(Icons.delete)) ], diff --git a/ui/lib/tv_watchlist.dart b/ui/lib/welcome_page.dart similarity index 59% rename from ui/lib/tv_watchlist.dart rename to ui/lib/welcome_page.dart index 410fb71..81dea5c 100644 --- a/ui/lib/tv_watchlist.dart +++ b/ui/lib/welcome_page.dart @@ -1,19 +1,28 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; +import 'package:ui/movie_watchlist.dart'; import 'package:ui/providers/APIs.dart'; import 'package:ui/providers/welcome_data.dart'; import 'package:ui/tv_details.dart'; import 'package:ui/widgets/progress_indicator.dart'; -class TvWatchlistPage extends ConsumerWidget { - static const route = "/series"; +class WelcomePage extends ConsumerWidget { + static const routeTv = "/series"; + static const routeMoivie = "/movies"; - const TvWatchlistPage({super.key}); + const WelcomePage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { - final data = ref.watch(tvWatchlistDataProvider); + var uri = GoRouterState.of(context).uri.toString(); + + AsyncValue> data; + if (uri == routeMoivie) { + data = ref.watch(movieWatchlistDataProvider); + } else { + data = ref.watch(tvWatchlistDataProvider); + } return switch (data) { AsyncData(:final value) => SingleChildScrollView( @@ -27,24 +36,31 @@ class TvWatchlistPage extends ConsumerWidget { child: InkWell( //splashColor: Colors.blue.withAlpha(30), onTap: () { - context.go(TvDetailsPage.toRoute(item.id!)); - //showDialog(context: context, builder: builder) + if (uri == routeMoivie) { + context.go(MovieDetailsPage.toRoute(item.id!)); + } else { + context.go(TvDetailsPage.toRoute(item.id!)); + } }, child: Column( children: [ SizedBox( width: 160, height: 240, - child:Image.network( + child: ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: Image.network( "${APIs.imagesUrl}/${item.id}/poster.jpg", fit: BoxFit.fill, headers: APIs.authHeaders, ), - ), + )), Text( item.name!, style: const TextStyle( - fontSize: 14, fontWeight: FontWeight.bold, height: 2.5), + fontSize: 14, + fontWeight: FontWeight.bold, + height: 2.5), ), ], ), @@ -52,7 +68,7 @@ class TvWatchlistPage extends ConsumerWidget { }), ), ), - _ => MyProgressIndicator(), + _ => const MyProgressIndicator(), }; } }