This commit is contained in:
2026-02-11 11:16:18 -05:00
parent 3d5bc84550
commit 2dfc96321b
3 changed files with 149 additions and 95 deletions

View File

@@ -15,6 +15,8 @@ import type { Episode } from "@/types/episode";
import { DIRECTION, LayerGraph, TABS } from "./utils/navigation";
import { useTheme } from "./context/ThemeContext";
const DEBUG = import.meta.env.DEBUG;
export interface PageProps {
depth: Accessor<number>;
}
@@ -81,6 +83,35 @@ export function App() {
</box>
)}
>
{DEBUG && (
<box flexDirection="row" width="100%" height={1}>
<text fg={theme.primary}></text>
<text fg={theme.secondary}></text>
<text fg={theme.accent}></text>
<text fg={theme.error}></text>
<text fg={theme.warning}></text>
<text fg={theme.success}></text>
<text fg={theme.info}></text>
<text fg={theme.text}></text>
<text fg={theme.textMuted}></text>
<text fg={theme.surface}></text>
<text fg={theme.background}></text>
<text fg={theme.border}></text>
<text fg={theme.borderActive}></text>
<text fg={theme.diffAdded}></text>
<text fg={theme.diffRemoved}></text>
<text fg={theme.diffContext}></text>
<text fg={theme.markdownText}></text>
<text fg={theme.markdownHeading}></text>
<text fg={theme.markdownLink}></text>
<text fg={theme.markdownCode}></text>
<text fg={theme.syntaxKeyword}></text>
<text fg={theme.syntaxString}></text>
<text fg={theme.syntaxNumber}></text>
<text fg={theme.syntaxFunction}></text>
</box>
)}
<box flexDirection="row" width="100%" height={1} />
<box
flexDirection="row"
width="100%"

View File

@@ -57,7 +57,9 @@ export function FeedItem(props: FeedItemProps) {
<text fg={props.isSelected ? theme.text : theme.accent}>
{props.feed.customName || props.feed.podcast.title}
</text>
{props.showEpisodeCount && <text fg={theme.textMuted}>({episodeCount()})</text>}
{props.showEpisodeCount && (
<text fg={theme.textMuted}>({episodeCount()})</text>
)}
</box>
);
}
@@ -69,7 +71,7 @@ export function FeedItem(props: FeedItemProps) {
gap={0}
border={props.isSelected}
borderColor={props.isSelected ? theme.primary : undefined}
backgroundColor={props.isSelected ? theme.backgroundElement : undefined}
backgroundColor={props.isSelected ? theme.primary : undefined}
padding={1}
>
{/* Title row */}
@@ -80,9 +82,7 @@ export function FeedItem(props: FeedItemProps) {
<text fg={visibilityColor()}>{visibilityIcon()}</text>
<text fg={theme.warning}>{pinnedIndicator()}</text>
<text fg={props.isSelected ? theme.text : theme.text}>
<strong>
{props.feed.customName || props.feed.podcast.title}
</strong>
<strong>{props.feed.customName || props.feed.podcast.title}</strong>
</text>
</box>
@@ -93,7 +93,9 @@ export function FeedItem(props: FeedItemProps) {
</text>
)}
{props.showLastUpdated && (
<text fg={theme.textMuted}>Updated: {formatDate(props.feed.lastUpdated)}</text>
<text fg={theme.textMuted}>
Updated: {formatDate(props.feed.lastUpdated)}
</text>
)}
</box>

View File

@@ -5,13 +5,10 @@
*/
import { createSignal, For, Show, createMemo, createEffect } from "solid-js";
import { useKeyboard } from "@opentui/solid";
import { useFeedStore } from "@/stores/feed";
import { useDownloadStore } from "@/stores/download";
import { DownloadStatus } from "@/types/episode";
import { format } from "date-fns";
import type { Episode } from "@/types/episode";
import type { Feed } from "@/types/feed";
import { PageProps } from "@/App";
import { useTheme } from "@/context/ThemeContext";
@@ -157,19 +154,27 @@ export function MyShowsPage(props: PageProps) {
gap={1}
paddingLeft={1}
paddingRight={1}
backgroundColor={index() === showIndex() ? theme.primary : undefined}
backgroundColor={
index() === showIndex() ? theme.primary : undefined
}
onMouseDown={() => {
setShowIndex(index());
setEpisodeIndex(0);
}}
>
<text fg={index() === showIndex() ? theme.primary : theme.muted}>
<text
fg={index() === showIndex() ? theme.surface : theme.text}
>
{index() === showIndex() ? ">" : " "}
</text>
<text fg={index() === showIndex() ? theme.text : undefined}>
<text
fg={index() === showIndex() ? theme.surface : theme.text}
>
{feed.customName || feed.podcast.title}
</text>
<text fg={theme.muted}>({feed.episodes.length})</text>
<text fg={index() === showIndex() ? undefined : theme.text}>
({feed.episodes.length})
</text>
</box>
)}
</For>
@@ -210,11 +215,21 @@ export function MyShowsPage(props: PageProps) {
onMouseDown={() => setEpisodeIndex(index())}
>
<box flexDirection="row" gap={1}>
<text fg={index() === episodeIndex() ? theme.primary : theme.muted}>
<text
fg={
index() === episodeIndex()
? theme.surface
: theme.text
}
>
{index() === episodeIndex() ? ">" : " "}
</text>
<text
fg={index() === episodeIndex() ? theme.text : undefined}
fg={
index() === episodeIndex()
? theme.surface
: theme.text
}
>
{episode.episodeNumber
? `#${episode.episodeNumber} `
@@ -223,8 +238,14 @@ export function MyShowsPage(props: PageProps) {
</text>
</box>
<box flexDirection="row" gap={2} paddingLeft={2}>
<text fg={theme.muted}>{formatDate(episode.pubDate)}</text>
<text fg={theme.muted}>{formatDuration(episode.duration)}</text>
<text
fg={index() === episodeIndex() ? undefined : theme.info}
>
{formatDate(episode.pubDate)}
</text>
<text fg={theme.muted}>
{formatDuration(episode.duration)}
</text>
<Show when={downloadLabel(episode.id)}>
<text fg={downloadColor(episode.id)}>
{downloadLabel(episode.id)}