feat: remove sperate movie page and add default storage

This commit is contained in:
Simon Ding
2024-07-17 17:45:51 +08:00
parent 0cd4a66f63
commit 64ce976ce7
7 changed files with 57 additions and 75 deletions

View File

@@ -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 {

View File

@@ -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,

View File

@@ -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(

View File

@@ -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: <Widget>[
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";

View File

@@ -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<NavDrawer> {
_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) {

View File

@@ -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<TvDetailsPage> {
),
const Text(""),
Text(
details!.overview!,
details.overview!,
),
],
)),
@@ -192,7 +192,7 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
seriesId)
.notifier)
.delete();
context.go(TvWatchlistPage.route);
context.go(WelcomePage.routeTv);
},
icon: const Icon(Icons.delete))
],

View File

@@ -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<List<MediaDetail>> 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: <Widget>[
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(),
};
}
}