Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
66ea029
update deps
ajslater Apr 5, 2026
bcc6077
v1.10.1 fix opds v2 links
ajslater Apr 5, 2026
965e6c2
fix news
ajslater Apr 5, 2026
ac62755
fix gha trigger gate logic
ajslater Apr 5, 2026
1854ee2
fix gha yaml bug
ajslater Apr 5, 2026
53d1e93
fix gha build and deploy from firing on develop
ajslater Apr 5, 2026
0a5415d
fix admin update user view & serializer to allow user updates.
ajslater Apr 5, 2026
03dff63
fix gha yaml syntax error'
ajslater Apr 5, 2026
4916aa3
fix runing build on develop branch
ajslater Apr 5, 2026
89a4637
Merge branch 'main' into develop
ajslater Apr 5, 2026
a68e2c3
fix gha branch gate logic again
ajslater Apr 5, 2026
bd5856d
skip tests on deploy if identical files. change discord colors & mess…
ajslater Apr 5, 2026
4fa00d4
fix polling all libraries when no ids submitted in task
ajslater Apr 5, 2026
444c7b0
fix poll all library button
ajslater Apr 5, 2026
cce7f13
fix opds v2 manifest series link
ajslater Apr 5, 2026
ebc8cb0
force browser reset on start page of opds v2
ajslater Apr 5, 2026
0fba261
fix dev csp for vite hmr
ajslater Apr 5, 2026
cdb372e
working server folder picker with enter activates menu and waits to r…
ajslater Apr 5, 2026
ade95ff
clean up server folder code to be smaller and remove cruft
ajslater Apr 5, 2026
81f3e60
bump news
ajslater Apr 5, 2026
be94a0a
attempt to make granian auto reload not hold on to file handles by ad…
ajslater Apr 5, 2026
61b7927
Squashed commit of the following:
ajslater Apr 5, 2026
09371f4
bump news
ajslater Apr 5, 2026
cda66ee
efficiency and bugfixes for gha yaml
ajslater Apr 5, 2026
2041b20
fix container name for gha
ajslater Apr 5, 2026
1b5adfa
fix test report steps running if tests don't run
ajslater Apr 5, 2026
23b5987
use eslint_d for frontend lint
ajslater Apr 5, 2026
5c27b43
make sure to build the ci compose locally
ajslater Apr 5, 2026
571e6a8
fix too exuberant volumes mounting for gha compose
ajslater Apr 5, 2026
7f6265d
remove working dir entry i'm not sure it's good
ajslater Apr 5, 2026
7f24d1f
add debug line to gha workflow
ajslater Apr 5, 2026
43e8d38
remove debug line
ajslater Apr 5, 2026
f41c84c
fix test make order
ajslater Apr 6, 2026
aeddd8f
stop docker compose when done in gha
ajslater Apr 6, 2026
d8388a9
i don't think i need DJGNO_SETTINGS_MODULE th ci thing
ajslater Apr 6, 2026
29066c5
fix down call to own bring down ci task
ajslater Apr 6, 2026
af1f331
fix docker compose down"
ajslater Apr 6, 2026
5262a02
fix test results upload
ajslater Apr 6, 2026
f97ed4a
Merge branch 'main' into develop
ajslater Apr 6, 2026
496a597
fix test step name
ajslater Apr 6, 2026
3f86dd9
fix gha permissions
ajslater Apr 6, 2026
dd7ed5f
Merge branch 'main' into develop
ajslater Apr 6, 2026
75c7d11
bump news
ajslater Apr 6, 2026
b52af0f
update deps
ajslater Apr 6, 2026
ba591d2
browser set_params method saves last route and saves params to settings
ajslater Apr 6, 2026
f583d46
bump version to 1.10.4
ajslater Apr 6, 2026
331d728
modify gha discord notification
ajslater Apr 6, 2026
f0630ee
use happy-dom for frontend tests
ajslater Apr 6, 2026
a6c15f8
Merge branch 'main' into develop
ajslater Apr 6, 2026
88ae04a
docker tag script better than the one in ci/
ajslater Apr 6, 2026
95d24ef
update deps
ajslater Apr 6, 2026
c8ffdd0
far saner param initialization for browsers and opds start pages
ajslater Apr 6, 2026
4ae504d
update dpes & bump alpha version
ajslater Apr 6, 2026
0fd9b1c
v1.10.5a0 (#551)
ajslater Apr 7, 2026
cba000e
regular version 1.10.5
ajslater Apr 7, 2026
9380888
Merge branch 'main' into develop
ajslater Apr 7, 2026
bb2dfa7
remove develop circleci builds
ajslater Apr 7, 2026
ff2d7d3
adjust variable name
ajslater Apr 7, 2026
20b82a2
bump version to 6 alpha 0
ajslater Apr 7, 2026
bcd4cf4
fix default params for feed_views in opds 2
ajslater Apr 7, 2026
f8d7192
debug logging for django crash
ajslater Apr 7, 2026
d45b1b1
v1.10.6a0 (#553)
ajslater Apr 7, 2026
1f034cd
regular v1.10.6 version
ajslater Apr 7, 2026
0d328cf
Merge branch 'develop' of github.com:ajslater/codex into develop
ajslater Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,14 +130,12 @@ workflows:
filters:
branches:
only:
- develop
- main
- build-base-arm64: &filters-release
filters:
branches:
only:
- main
- /.*-ci/
- test-and-build-dist-amd64:
<<: *filters-all
requires:
Expand Down
4 changes: 3 additions & 1 deletion NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ width: 128px;
border-radius: 128px;
" />

## v1.10.5
## v1.10.6

- Fixes
- Reset settings on OPDS start page more consistently.

## v1.10.5 - Broken release

## v1.10.4 - Broken release

## v1.10.3
Expand Down
3 changes: 2 additions & 1 deletion bin/docker-tag-latest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ fi

# 1. Log in to registry
echo "Logging in to $REGISTRY..."
echo "$DOCKER_PASSWORD" | docker login "$REGISTRY" -u "$DOCKER_USER" --password-stdin
echo "$DOCKER_PASS" | docker login "$REGISTRY" -u "$DOCKER_USER" --password-stdin

# 2. Retag the multi-arch image
# This creates a new manifest on the registry side without downloading image layers
Expand All @@ -31,6 +31,7 @@ docker buildx imagetools create \
--tag "$REGISTRY/$IMAGE_NAME:$TARGET_TAG" \
"$REGISTRY/$IMAGE_NAME:$SOURCE_TAG"

# shellcheck disable=SC2181
if [ $? -eq 0 ]; then
echo "Successfully updated $TARGET_TAG"
else
Expand Down
19 changes: 13 additions & 6 deletions codex/views/browser/params.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from types import MappingProxyType
from typing import Any

from loguru import logger

from codex.serializers.browser.settings import (
BrowserSettingsSerializer,
BrowserSettingsSerializerBase,
Expand Down Expand Up @@ -32,7 +34,7 @@ def init_params(self) -> MutableMapping[str, Any]:
params.update(serializer.validated_data)
return params

def update_last_route(self, data: MutableMapping) -> None:
def _update_last_route(self, data: MutableMapping) -> None:
"""Save last route to data."""
last_route = data.get("last_route", {})
last_route.update(
Expand All @@ -52,9 +54,14 @@ def set_params(self, params: Mapping) -> None:
def params(self) -> MappingProxyType:
"""Validate submitted settings and apply them over the session settings."""
if self._params is None:
params = self.init_params()
self.update_last_route(params)
self.save_params_to_settings(params)
self.set_order_by_default(params)
self.set_params(params)
try:
params = self.init_params()
self._update_last_route(params)
self.save_params_to_settings(params)
self.set_order_by_default(params)
self.set_params(params)
except Exception as exc:
# for debugging if this goes awry
logger.exception(exc)
raise
return self._params # pyright: ignore[reportReturnType], # ty: ignore[invalid-return-type]
10 changes: 5 additions & 5 deletions codex/views/opds/v2/feed/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,24 +111,24 @@ def _feed_navigation_and_groups(
) -> tuple[tuple, tuple, tuple]:
groups = []
navigation = []
top_groups = self._get_top_groups()
top_groups = self.get_top_groups()
if self.IS_START_PAGE:
groups += self._get_ordered_groups()
groups += self.get_ordered_groups()
first_top_group = next(iter(top_groups), {})
navigation = first_top_group.get("navigation", [])
publications = []
else:
# Move the first group's navigation to become the feed navigation.
# The feed navigation is titled "Browse"" in Stump
zero_pad = zero_pad or 0
regular_groups = self._get_groups(group_qs, book_qs, title, zero_pad)
regular_groups = self.get_groups(group_qs, book_qs, title, zero_pad)
first_regular_group = next(iter(regular_groups), {})
navigation = first_regular_group.pop("navigation", [])

groups += regular_groups
groups += top_groups
groups += self._get_facets()
groups += self._get_start_groups()
groups += self.get_facets()
groups += self.get_start_groups()

publications = first_regular_group.pop("publications", [])
return tuple(navigation), tuple(groups), tuple(publications)
Expand Down
16 changes: 9 additions & 7 deletions codex/views/opds/v2/feed/groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,12 +135,12 @@ def _create_group(self, group_specs, *, paginate: bool = False) -> list:
groups += self._create_group_from_group_spec(group_spec, paginate=paginate)
return groups

def _get_top_groups(self):
def get_top_groups(self):
"""Top Nav Groups."""
return self._create_group(TOP_GROUPS)

def _get_ordered_groups(self) -> list:
# Top Nav Groups
def get_ordered_groups(self) -> list:
"""Ordered Publication Groups."""
groups = []
for group_spec in PREVIEW_GROUPS:
# explode into individual groups
Expand All @@ -149,11 +149,12 @@ def _get_ordered_groups(self) -> list:
groups += pub_section
return groups

def _get_start_groups(self):
# Top Nav Groups
def get_start_groups(self):
"""Start Groups."""
return self._create_group(START_GROUPS)

def _get_groups(self, group_qs, book_qs, title: str, zero_pad: int):
def get_groups(self, group_qs, book_qs, title: str, zero_pad: int):
"""Regular publication groups."""
groups = []

# Regular Groups
Expand All @@ -168,5 +169,6 @@ def _get_groups(self, group_qs, book_qs, title: str, zero_pad: int):

return groups

def _get_facets(self):
def get_facets(self):
"""Facet Groups."""
return self._create_group(FACETS)
13 changes: 6 additions & 7 deletions codex/views/opds/v2/feed/publications.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from codex.models import AdminFlag, Comic
from codex.models.groups import BrowserGroupModel, Folder
from codex.settings import BROWSER_MAX_OBJ_PER_PAGE
from codex.views.opds.const import MimeType, Rel
from codex.views.opds.const import DEFAULT_PARAMS, MimeType, Rel
from codex.views.opds.v2.const import HrefData, Link, LinkData
from codex.views.opds.v2.feed.feed_links import OPDS2FeedLinksView

Expand Down Expand Up @@ -239,12 +239,12 @@ def _get_publications_preview_feed_view(self, link_spec: Link):
feed_view.request = self.request
group = link_spec.group
feed_view.kwargs = {"group": group, "pks": [0], "page": 1}
params = {}
params = dict(DEFAULT_PARAMS)
if link_spec.query_params:
for key, value in link_spec.query_params.items():
params[snakecase(key)] = value
params["show"] = {"p": True, "s": True}
params["limit"] = _PUBLICATION_PREVIEW_LIMIT
params["show"].update({"p": True, "s": True}) # pyright: ignore[reportCallIssue,reportAttributeAccessIssue,reportArgumentType], # ty: ignore[unresolved-attribute]
params["limit"] = _PUBLICATION_PREVIEW_LIMIT # pyright: ignore[reportArgumentType], # ty:ignore[invalid-assignment]

feed_view.set_params(params)
return feed_view
Expand All @@ -260,8 +260,7 @@ def get_publications_preview(self, link_spec: Link) -> list:
book_qs,
zero_pad,
link_spec.title,
"",
_PUBLICATION_PREVIEW_LIMIT,
link_spec,
items_per_page=_PUBLICATION_PREVIEW_LIMIT,
link_spec=link_spec,
number_of_items=book_count,
)
4 changes: 2 additions & 2 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "codex",
"version": "1.10.5",
"version": "1.10.6",
"private": true,
"description": "ui for codex api",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ readme = "README.md"
requires-python = ">=3.12"
license = "GPL-3.0-only"
name = "codex"
version = "1.10.5"
version = "1.10.6"
[[project.authors]]
name = "AJ Slater"
email = "aj@slater.net"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.