mirror of
https://github.com/simon-ding/polaris.git
synced 2026-03-07 10:00:46 +08:00
feat: remove sperate movie page and add default storage
This commit is contained in:
17
db/db.go
17
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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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))
|
||||
],
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user