Compare commits

..

4 Commits

Author SHA1 Message Date
Simon Ding
72ec84e236 add fallback font 2025-12-28 16:11:44 +08:00
Simon Ding
30e8d4f024 feat: update dep and switch to web wasm build 2025-11-15 15:09:50 +08:00
Simon Ding
4341e31251 fix download stats 2025-11-13 00:05:41 +08:00
Simon Ding
53dda90c0f reduce arch support 2025-11-12 23:53:12 +08:00
7 changed files with 55 additions and 116 deletions

View File

@@ -40,7 +40,7 @@ jobs:
run: |
cd ui
flutter pub get
flutter build web --no-web-resources-cdn
flutter build web --no-web-resources-cdn --wasm --release
- name: Extract metadata (tags, labels) for Docker
id: meta

View File

@@ -54,7 +54,7 @@ jobs:
run: |
cd ui
flutter pub get
flutter build web --no-web-resources-cdn
flutter build web --no-web-resources-cdn --wasm --release
- name: Build and push
id: push
@@ -63,7 +63,7 @@ jobs:
context: .
file: ./docker/Dockerfile
push: true
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/s390x,linux/ppc64le
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/386
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |

View File

@@ -179,14 +179,6 @@ func (s *Server) Start(addr string) (int, error) {
log.Infof("----------- Polaris Server Successfully Started on Port %d------------", p)
ticker := time.NewTicker(10 * time.Minute)
go func() {
for {
s.cacheDownloadedStatus()
<-ticker.C
}
}()
return p, nil
}

View File

@@ -89,10 +89,16 @@ type MediaWithStatus struct {
DownloadedNum int `json:"downloaded_num"`
}
func (s *Server) cacheDownloadedStatus() {
log.Info("cache watchlist downloaded/monitored status")
//missing: episode aired missing
//downloaded: all monitored episode downloaded
//monitoring: episode aired downloaded, but still has not aired episode
//for movie, only monitoring/downloaded
func (s *Server) GetTvWatchlist(c *gin.Context) (interface{}, error) {
list := s.db.GetMediaWatchlist(media.MediaTypeTv)
for _, item := range list {
res := make([]MediaWithStatus, len(list))
for i, item := range list {
var ms = MediaWithStatus{
Media: item,
MonitoredNum: 0,
@@ -120,51 +126,6 @@ func (s *Server) cacheDownloadedStatus() {
s.monitorNumCache.Set(item.ID, ms.MonitoredNum)
s.downloadNumCache.Set(item.ID, ms.DownloadedNum)
}
}
list = s.db.GetMediaWatchlist(media.MediaTypeMovie)
for _, item := range list {
_, ok2 := s.downloadNumCache.Get(item.ID)
if ok2 {
continue
}
dummyEp, err := s.db.GetMovieDummyEpisode(item.ID)
if err != nil {
log.Errorf("get dummy episode: %v", err)
} else {
if dummyEp.Status == episode.StatusDownloaded {
s.downloadNumCache.Set(item.ID, 1)
}
}
}
}
//missing: episode aired missing
//downloaded: all monitored episode downloaded
//monitoring: episode aired downloaded, but still has not aired episode
//for movie, only monitoring/downloaded
func (s *Server) GetTvWatchlist(c *gin.Context) (interface{}, error) {
list := s.db.GetMediaWatchlist(media.MediaTypeTv)
res := make([]MediaWithStatus, len(list))
for i, item := range list {
var ms = MediaWithStatus{
Media: item,
MonitoredNum: 0,
DownloadedNum: 0,
}
mon, ok1 := s.monitorNumCache.Get(item.ID)
dow, ok2 := s.downloadNumCache.Get(item.ID)
if ok1 && ok2 {
ms.MonitoredNum = mon
ms.DownloadedNum = dow
} else {
continue
}
res[i] = ms
}
@@ -183,7 +144,19 @@ func (s *Server) GetMovieWatchlist(c *gin.Context) (interface{}, error) {
dow, ok2 := s.downloadNumCache.Get(item.ID)
if ok2 {
ms.DownloadedNum = dow
}
} else {
dummyEp, err := s.db.GetMovieDummyEpisode(item.ID)
if err != nil {
log.Errorf("get dummy episode: %v", err)
} else {
ms.DownloadedNum++
if dummyEp.Status == episode.StatusDownloaded {
s.downloadNumCache.Set(item.ID, 1)
}
}
}
res[i] = ms
}
return res, nil

View File

@@ -149,7 +149,13 @@ class _MyAppState extends ConsumerState<MyApp> {
return MaterialApp.router(
title: 'Polaris 影视追踪下载',
theme: ThemeData(
fontFamily: "NotoSansSC",
//fontFamily: "NotoSansSC",
fontFamilyFallback: [
'PingFang SC',
'Microsoft YaHei',
'Noto Sans SC',
'NotoSansSC', // buildin font
],
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.blueAccent,
brightness: Brightness.dark,

View File

@@ -57,6 +57,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.19.1"
country_pickers:
dependency: transitive
description:
name: country_pickers
sha256: b10f6618fa64fbba02ffc4ad1b84dc0ca071cc206e5376de1698bddd980b355a
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.1"
cupertino_icons:
dependency: "direct main"
description:
@@ -81,14 +89,6 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
equatable:
dependency: transitive
description:
name: equatable
sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.7"
fake_async:
dependency: transitive
description:
@@ -143,10 +143,10 @@ packages:
dependency: "direct main"
description:
name: flutter_login
sha256: "73ab879fa40cc04778cf4b6342b43586818c7e7a90df23c59a4a1d4a1dd36091"
sha256: "13351d09de94741e0920235132318445ff2122a6fa693eeb9f590f49aa5b80f9"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.1.0"
version: "6.0.0"
flutter_riverpod:
dependency: "direct main"
description:
@@ -173,6 +173,14 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "10.10.0"
form_builder_phone_field:
dependency: transitive
description:
name: form_builder_phone_field
sha256: "1d02d6cf0dbd7313860f48903ff00f4e519aad989dbf44dde767771d4585a4dd"
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.1"
form_builder_validators:
dependency: "direct main"
description:
@@ -205,22 +213,6 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.20.2"
intl_phone_number_input:
dependency: transitive
description:
name: intl_phone_number_input
sha256: "1c4328713a9503ab26a1fdbb6b00b4cada68c18aac922b35bedbc72eff1297c3"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.4"
js:
dependency: transitive
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.7"
leak_tracker:
dependency: transitive
description:
@@ -245,30 +237,6 @@ packages:
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.2"
libphonenumber_platform_interface:
dependency: transitive
description:
name: libphonenumber_platform_interface
sha256: f801f6c65523f56504b83f0890e6dad584ab3a7507dca65fec0eed640afea40f
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.2"
libphonenumber_plugin:
dependency: transitive
description:
name: libphonenumber_plugin
sha256: c615021d9816fbda2b2587881019ed595ecdf54d999652d7e4cce0e1f026368c
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.3"
libphonenumber_web:
dependency: transitive
description:
name: libphonenumber_web
sha256: "8186f420dbe97c3132283e52819daff1e55d60d6db46f7ea5ac42f42a28cc2ef"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.2"
lints:
dependency: transitive
description:
@@ -305,10 +273,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.16.0"
version: "1.17.0"
mime:
dependency: transitive
description:
@@ -454,10 +422,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.6"
version: "0.7.7"
timeago:
dependency: "direct main"
description:

View File

@@ -40,7 +40,7 @@ dependencies:
go_router: ^16.2.1
flutter_riverpod: ^2.6.1
quiver: ^3.2.2
flutter_login: ^5.0.0
flutter_login: ^6.0.0
intl: ^0.20.2
flutter_adaptive_scaffold: ^0.3.1
flutter_form_builder: ^10.0.1