Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
996d581a07
|
@@ -8,6 +8,21 @@ Kept as the work happens, not assembled at release time. Format is
|
|||||||
with its history. SageTube's own versions start below and are the ones this file
|
with its history. SageTube's own versions start below and are the ones this file
|
||||||
records.
|
records.
|
||||||
|
|
||||||
|
## 5.5.2 — 2026-08-09
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **The account feed loaded but never appeared.** Refresh reported "60 videos in
|
||||||
|
feed" above a "No subscriptions yet" message and an empty page: the empty-state
|
||||||
|
hint hides the grid so it can sit centred, and the account path set its entries
|
||||||
|
without re-running that check — so the grid stayed hidden from startup. The
|
||||||
|
local feed was unaffected, which is why it went unnoticed.
|
||||||
|
- The empty-state message was written for local subscriptions and was wrong
|
||||||
|
advice in account mode, where local subscriptions are not used at all. It now
|
||||||
|
says to press Refresh instead of telling you to go and subscribe to something.
|
||||||
|
- The Subscriptions panel is hidden in account mode rather than sitting empty
|
||||||
|
beside a full feed, implying something failed.
|
||||||
|
|
||||||
## 5.5.1 — 2026-08-09
|
## 5.5.1 — 2026-08-09
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "sagetube"
|
name = "sagetube"
|
||||||
version = "5.5.1"
|
version = "5.5.2"
|
||||||
description = "Watch-first YouTube client with embedded mpv playback and yt-dlp downloading. Fork of YTSage."
|
description = "Watch-first YouTube client with embedded mpv playback and yt-dlp downloading. Fork of YTSage."
|
||||||
authors = [
|
authors = [
|
||||||
{ name = "Houmeres", email = "admin@ecoposta.sk" },
|
{ name = "Houmeres", email = "admin@ecoposta.sk" },
|
||||||
|
|||||||
+1
-1
@@ -10,5 +10,5 @@ match `version` in pyproject.toml and the repository's latest signed tag --
|
|||||||
this package's tag line continues YTSage's, which is why it starts at 5.x.
|
this package's tag line continues YTSage's, which is why it starts at 5.x.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "5.5.1"
|
__version__ = "5.5.2"
|
||||||
__author__ = "Houmeres"
|
__author__ = "Houmeres"
|
||||||
|
|||||||
@@ -148,7 +148,10 @@ class FeedPage(QWidget):
|
|||||||
splitter = QSplitter(Qt.Orientation.Horizontal, self)
|
splitter = QSplitter(Qt.Orientation.Horizontal, self)
|
||||||
layout.addWidget(splitter, stretch=1)
|
layout.addWidget(splitter, stretch=1)
|
||||||
|
|
||||||
side = QWidget()
|
# Kept as an attribute: account mode does not use local subscriptions,
|
||||||
|
# so the panel is hidden there rather than sitting empty beside a full
|
||||||
|
# feed and implying something is missing.
|
||||||
|
self.subs_panel = side = QWidget()
|
||||||
side_layout = QVBoxLayout(side)
|
side_layout = QVBoxLayout(side)
|
||||||
side_layout.setContentsMargins(0, 0, 4, 0)
|
side_layout.setContentsMargins(0, 0, 4, 0)
|
||||||
subs_label = QLabel(_("feed.subscriptions"))
|
subs_label = QLabel(_("feed.subscriptions"))
|
||||||
@@ -352,16 +355,26 @@ class FeedPage(QWidget):
|
|||||||
Feed is the first tab now, so an empty one is the first thing a new
|
Feed is the first tab now, so an empty one is the first thing a new
|
||||||
user sees. Say what to do about it rather than showing a blank grid.
|
user sees. Say what to do about it rather than showing a blank grid.
|
||||||
"""
|
"""
|
||||||
|
account_mode = (self.mode_combo.currentData() or "local") == "account"
|
||||||
|
self.subs_panel.setVisible(not account_mode)
|
||||||
|
|
||||||
self.grid.empty_label.hide()
|
self.grid.empty_label.hide()
|
||||||
if self.grid.card_count() > 0:
|
if self.grid.card_count() > 0:
|
||||||
self.empty_hint.hide()
|
self.empty_hint.hide()
|
||||||
self.grid.show()
|
self.grid.show()
|
||||||
return
|
return
|
||||||
self.empty_hint.setText(
|
|
||||||
_("feed.empty_no_subscriptions")
|
# The message depends on the mode: account mode does not use local
|
||||||
if not LibraryManager.subscriptions()
|
# subscriptions at all, so telling someone to go and subscribe to
|
||||||
else _("feed.empty_not_refreshed")
|
# something would be wrong advice.
|
||||||
)
|
if account_mode:
|
||||||
|
message = _("feed.empty_account")
|
||||||
|
elif not LibraryManager.subscriptions():
|
||||||
|
message = _("feed.empty_no_subscriptions")
|
||||||
|
else:
|
||||||
|
message = _("feed.empty_not_refreshed")
|
||||||
|
self.empty_hint.setText(message)
|
||||||
|
|
||||||
# Hide the empty grid so the hint sits in the middle of the page
|
# Hide the empty grid so the hint sits in the middle of the page
|
||||||
# rather than pinned under a large blank area.
|
# rather than pinned under a large blank area.
|
||||||
self.grid.hide()
|
self.grid.hide()
|
||||||
@@ -383,10 +396,15 @@ class FeedPage(QWidget):
|
|||||||
def _on_account_feed(self, entries: List[Dict[str, Any]]) -> None:
|
def _on_account_feed(self, entries: List[Dict[str, Any]]) -> None:
|
||||||
self.grid.set_entries(entries)
|
self.grid.set_entries(entries)
|
||||||
self.status_label.setText(_("feed.refreshed", count=len(entries)))
|
self.status_label.setText(_("feed.refreshed", count=len(entries)))
|
||||||
|
# Without this the grid stays hidden behind the empty-state hint that
|
||||||
|
# was shown at startup, so a successful refresh reported "60 videos in
|
||||||
|
# feed" above a "No subscriptions yet" message and no videos.
|
||||||
|
self._update_empty_state()
|
||||||
|
|
||||||
def _on_account_error(self, message: str) -> None:
|
def _on_account_error(self, message: str) -> None:
|
||||||
logger.error(f"Account feed failed: {message}")
|
logger.error(f"Account feed failed: {message}")
|
||||||
self.status_label.setText(_("feed.account_failed", error=message[:200]))
|
self.status_label.setText(_("feed.account_failed", error=message[:200]))
|
||||||
|
self._update_empty_state()
|
||||||
|
|
||||||
def _on_account_finished(self) -> None:
|
def _on_account_finished(self) -> None:
|
||||||
self.refresh_btn.setEnabled(True)
|
self.refresh_btn.setEnabled(True)
|
||||||
|
|||||||
@@ -760,7 +760,8 @@
|
|||||||
"empty_not_refreshed": "Nothing here yet.\n\nPress Refresh to fetch the latest uploads from your subscriptions.",
|
"empty_not_refreshed": "Nothing here yet.\n\nPress Refresh to fetch the latest uploads from your subscriptions.",
|
||||||
"sign_in": "Sign in with cookies…",
|
"sign_in": "Sign in with cookies…",
|
||||||
"sign_in_tooltip": "Use your YouTube account via browser cookies, which enables the account feed",
|
"sign_in_tooltip": "Use your YouTube account via browser cookies, which enables the account feed",
|
||||||
"account_requires_cookies": "Requires signing in with cookies"
|
"account_requires_cookies": "Requires signing in with cookies",
|
||||||
|
"empty_account": "Nothing loaded yet.\n\nPress Refresh to fetch your YouTube subscription feed."
|
||||||
},
|
},
|
||||||
"account": {
|
"account": {
|
||||||
"signed_out": "Not signed in",
|
"signed_out": "Not signed in",
|
||||||
|
|||||||
@@ -143,7 +143,8 @@ class LocalizationManager:
|
|||||||
"empty_not_refreshed": "Nothing here yet.\n\nPress Refresh to fetch the latest uploads from your subscriptions.",
|
"empty_not_refreshed": "Nothing here yet.\n\nPress Refresh to fetch the latest uploads from your subscriptions.",
|
||||||
"sign_in": "Sign in with cookies…",
|
"sign_in": "Sign in with cookies…",
|
||||||
"sign_in_tooltip": "Use your YouTube account via browser cookies, which enables the account feed",
|
"sign_in_tooltip": "Use your YouTube account via browser cookies, which enables the account feed",
|
||||||
"account_requires_cookies": "Requires signing in with cookies"
|
"account_requires_cookies": "Requires signing in with cookies",
|
||||||
|
"empty_account": "Nothing loaded yet.\n\nPress Refresh to fetch your YouTube subscription feed."
|
||||||
},
|
},
|
||||||
"cards": {
|
"cards": {
|
||||||
"play": "▶ Play",
|
"play": "▶ Play",
|
||||||
|
|||||||
Reference in New Issue
Block a user