Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error while loading large library via OPDS #3500

Open
jvelder opened this issue Jan 12, 2025 · 5 comments
Open

Error while loading large library via OPDS #3500

jvelder opened this issue Jan 12, 2025 · 5 comments
Labels
needs-triage Needs to be triaged by a developer and assigned a release

Comments

@jvelder
Copy link

jvelder commented Jan 12, 2025

What happened?

When loading larger libraries via OPDS I get an error to load on Panels connected via OPDS. It seems to load the library until that point correctly.
The point/page signaled in the logs seems to be the same every time.

What did you expect?

Load properly.

Kavita Version Number - If you don not see your version number listed, please update Kavita and see if your issue still persists.

0.8.4.2 - Stable

What operating system is Kavita being hosted from?

Docker (Dockerhub Container)

If the issue is being seen on Desktop, what OS are you running where you see the issue?

None

If the issue is being seen in the UI, what browsers are you seeing the problem on?

No response

If the issue is being seen on Mobile, what OS are you running where you see the issue?

iOS

If the issue is being seen on the Mobile UI, what browsers are you seeing the problem on?

No response

Relevant log output

[Kavita] [2025-01-12 13:15:41.828 +01:00  70] [Error] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/want-to-read?pageNumber=6 responded 500 in 13.0583 ms
System.InvalidOperationException: There was an error generating the XML document.
 ---> System.ArgumentException: '', hexadecimal value 0x02, is an invalid character.
   at System.Xml.XmlEncodedRawTextWriter.InvalidXmlChar(Int32 ch, Char* pDst, Boolean entitize)
   at System.Xml.XmlEncodedRawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
   at System.Xml.XmlWellFormedWriter.WriteString(String text)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write6_FeedEntry(String n, String ns, FeedEntry o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write7_Feed(String n, String ns, Feed o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write8_feed(Object o)
   at InvokeStub_XmlSerializationWriterFeed.Write8_feed(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at API.Controllers.OpdsController.SerializeXml(Feed feed) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 1359
   at API.Controllers.OpdsController.GetWantToRead(String apiKey, Int32 pageNumber) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 454
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at API.Startup.<>c__DisplayClass4_0.<<Configure>b__5>d.MoveNext() in /home/runner/work/Kavita/Kavita/API/Startup.cs:line 411
--- End of stack trace from previous location ---
   at Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext httpContext)
[Kavita] [2025-01-12 13:15:41.831 +01:00  70] [Error] API.Middleware.ExceptionMiddleware There was an exception
System.InvalidOperationException: There was an error generating the XML document.
 ---> System.ArgumentException: '', hexadecimal value 0x02, is an invalid character.
   at System.Xml.XmlEncodedRawTextWriter.InvalidXmlChar(Int32 ch, Char* pDst, Boolean entitize)
   at System.Xml.XmlEncodedRawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
   at System.Xml.XmlWellFormedWriter.WriteString(String text)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write6_FeedEntry(String n, String ns, FeedEntry o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write7_Feed(String n, String ns, Feed o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write8_feed(Object o)
   at InvokeStub_XmlSerializationWriterFeed.Write8_feed(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at API.Controllers.OpdsController.SerializeXml(Feed feed) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 1359
   at API.Controllers.OpdsController.GetWantToRead(String apiKey, Int32 pageNumber) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 454
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at API.Startup.<>c__DisplayClass4_0.<<Configure>b__5>d.MoveNext() in /home/runner/work/Kavita/Kavita/API/Startup.cs:line 411
--- End of stack trace from previous location ---
   at Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
   at API.Middleware.SecurityEventMiddleware.InvokeAsync(HttpContext context) in /home/runner/work/Kavita/Kavita/API/Middleware/SecurityMiddleware.cs:line 25
   at API.Middleware.ExceptionMiddleware.InvokeAsync(HttpContext context) in /home/runner/work/Kavita/Kavita/API/Middleware/ExceptionMiddleware.cs:line 18

Additional Notes

Server is running on unraid.

@jvelder jvelder added the needs-triage Needs to be triaged by a developer and assigned a release label Jan 12, 2025
@majora2007
Copy link
Member

The error is saying you have a library name that doesn't serialize correctly into XML. Can you share with me the library names you do have that might have a symbol like this?

@jvelder
Copy link
Author

jvelder commented Jan 12, 2025

The Library is just named "Comics", the error occured when I selected "Want To Read" or "All Series".

@majora2007
Copy link
Member

Can you please open the url in your browser and paste the xml here for me for the place the navigation fails (aka produces this error)?

@jvelder
Copy link
Author

jvelder commented Jan 12, 2025

The url is https://servername/api/opds/XXXXXX/want-to-read?pageNumber=6

{
  "status": 500,
  "message": "There was an error generating the XML document.",
  "details": "   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)\n   at API.Controllers.OpdsController.SerializeXml(Feed feed) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 1359\n   at API.Controllers.OpdsController.GetWantToRead(String apiKey, Int32 pageNumber) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 454\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeActionMethodAsync\u003Eg__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.\u003CInvokeNextActionFilterAsync\u003Eg__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()\n--- End of stack trace from previous location ---\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.\u003CInvokeFilterPipelineAsync\u003Eg__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.\u003CInvokeAsync\u003Eg__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)\n   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.\u003CInvokeAsync\u003Eg__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)\n   at API.Startup.\u003C\u003Ec__DisplayClass4_0.\u003C\u003CConfigure\u003Eb__5\u003Ed.MoveNext() in /home/runner/work/Kavita/Kavita/API/Startup.cs:line 411\n--- End of stack trace from previous location ---\n   at Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext httpContext)\n   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)\n   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)\n   at Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.Invoke(HttpContext httpContext)\n   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)\n   at API.Middleware.SecurityEventMiddleware.InvokeAsync(HttpContext context) in /home/runner/work/Kavita/Kavita/API/Middleware/SecurityMiddleware.cs:line 25\n   at API.Middleware.ExceptionMiddleware.InvokeAsync(HttpContext context) in /home/runner/work/Kavita/Kavita/API/Middleware/ExceptionMiddleware.cs:line 18"
}

From the docker's log:

[Kavita] [2025-01-12 17:35:08.865 +01:00  143] [Error] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/want-to-read?pageNumber=6 responded 500 in 12.4954 ms
System.InvalidOperationException: There was an error generating the XML document.
 ---> System.ArgumentException: '', hexadecimal value 0x02, is an invalid character.
   at System.Xml.XmlEncodedRawTextWriter.InvalidXmlChar(Int32 ch, Char* pDst, Boolean entitize)
   at System.Xml.XmlEncodedRawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
   at System.Xml.XmlWellFormedWriter.WriteString(String text)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write6_FeedEntry(String n, String ns, FeedEntry o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write7_Feed(String n, String ns, Feed o, Boolean isNullable, Boolean needType)
   at InvokeStub_XmlSerializationWriterFeed.Write8_feed(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at API.Controllers.OpdsController.SerializeXml(Feed feed) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 1359
   at API.Controllers.OpdsController.GetWantToRead(String apiKey, Int32 pageNumber) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 454
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at API.Startup.<>c__DisplayClass4_0.<<Configure>b__5>d.MoveNext() in /home/runner/work/Kavita/Kavita/API/Startup.cs:line 411
--- End of stack trace from previous location ---
   at Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext httpContext)
[Kavita] [2025-01-12 17:35:08.868 +01:00  143] [Error] API.Middleware.ExceptionMiddleware There was an exception
System.InvalidOperationException: There was an error generating the XML document.
 ---> System.ArgumentException: '', hexadecimal value 0x02, is an invalid character.
   at System.Xml.XmlEncodedRawTextWriter.InvalidXmlChar(Int32 ch, Char* pDst, Boolean entitize)
   at System.Xml.XmlEncodedRawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
   at System.Xml.XmlWellFormedWriter.WriteString(String text)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write6_FeedEntry(String n, String ns, FeedEntry o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterFeed.Write7_Feed(String n, String ns, Feed o, Boolean isNullable, Boolean needType)
   at InvokeStub_XmlSerializationWriterFeed.Write8_feed(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at API.Controllers.OpdsController.SerializeXml(Feed feed) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 1359
   at API.Controllers.OpdsController.GetWantToRead(String apiKey, Int32 pageNumber) in /home/runner/work/Kavita/Kavita/API/Controllers/OPDSController.cs:line 454
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at API.Startup.<>c__DisplayClass4_0.<<Configure>b__5>d.MoveNext() in /home/runner/work/Kavita/Kavita/API/Startup.cs:line 411
--- End of stack trace from previous location ---
   at Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
   at API.Middleware.SecurityEventMiddleware.InvokeAsync(HttpContext context) in /home/runner/work/Kavita/Kavita/API/Middleware/SecurityMiddleware.cs:line 25
   at API.Middleware.ExceptionMiddleware.InvokeAsync(HttpContext context) in /home/runner/work/Kavita/Kavita/API/Middleware/ExceptionMiddleware.cs:line 18

If I go to https://servername/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/want-to-read?pageNumber=5:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2005/Atom">
<updated>2025-01-12T16:39:07</updated>
<id>want-to-read</id>
<title>Want to Read</title>
<icon>/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/favicon</icon>
<author>
<name>Kavita</name>
<uri>https://www.kavitareader.com</uri>
</author>
<totalResults xmlns="http://a9.com/-/spec/opensearch/1.1/">224</totalResults>
<itemsPerPage xmlns="http://a9.com/-/spec/opensearch/1.1/">20</itemsPerPage>
<startIndex xmlns="http://a9.com/-/spec/opensearch/1.1/">81</startIndex>
<link rel="self" type="application/atom+xml;profile=opds-catalog;kind=acquisition" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/want-to-read?pageNumber=5"/>
<link rel="start" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="search" type="application/opensearchdescription+xml" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/search"/>
<link rel="prev" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/want-to-read?pageNumber=4"/>
<link rel="next" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/want-to-read?pageNumber=6"/>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>577</id>
<title>Hellblazer - Rise and Fall</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/577"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=577&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=577&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>292</id>
<title>Heretic</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/292"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=292&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=292&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>114</id>
<title>Hexagon Bridge</title>
<summary>Format: Archive Summary: After explorers Jacob and Elena Armlen find themselves trapped in a strange parallel dimension, their clairvoyant daughter Adley and sentient robot Staden embark on a dangerous mission to rescue them. Pushing onward, they encounter mischievous beings amidst uncanny shifting landscapes and discover a world beyond belief. This collected edition contains a cover gallery and an extensive selection of concept art, storyboards, and character designs. Collects HEXAGON BRIDGE #1-5</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/114"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=114&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=114&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>547</id>
<title>I Am Legion</title>
<summary>Format: Archive Summary: A supernatural take on World War II espionage featuring a girl with the ability to possess other bodies. 1 VOLUME RELEASED - INDEPENDENT STORIES. Europe, December 1942. The global conflict has reached a fever pitch. The Nazis are at the height of their power, but the Allies have had their first victories both in Stalingrad and in the Pacific. Never has the war's outcome been so much in doubt. Amidst this chaos, the destinies of several men will cross through a project code named Legion, which consists of a series of horrific tests that a young Romanian girl with apparent supernatural abilities must undergo. Her 'skills,' if fully exploited by the Nazis, would give them unimaginable power...</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/547"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=547&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=547&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<category term="" label="Fantasy"/>
<category term="" label="Horror"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>197</id>
<title>Immortal Sergeant</title>
<summary>Format: Archive Summary: Eisner-nominated, International Manga Award-winning I KILL GIANTS storytellers JOE KELLY and KEN NIIMURA return to yank on your heartstrings with IMMORTAL SERGEANT! On the eve of his unwelcome retirement, Jim Sargent (aka Sarge), a grizzled, old-school detective, catches a break on a murder case thats haunted him for decades. Unfortunately, Sarge must drag his anxiety-riddled adult son, Michael, along for the ride or risk losing the lead forever. Can this dysfunctional duo overcome their own hang-ups, blindspots, and secrets to catch a killer? Collects IMMORTAL SERGEANT #1-9</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/197"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=197&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=197&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>263</id>
<title>In Perpetuity</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/263"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=263&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=263&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>153</id>
<title>Inside the Mind of Sherlock Holmes</title>
<summary>Format: Archive Summary: An award-winning graphic novel featuring world’s greatest detective: Sherlock Holmes! The discovery of a mysterious powder on some clothing and a very special show ticket leads Sherlock Holmes to believe a patient isn’t the only victim of a grand conspiracy. Indeed, it seems the strange disappearance of Londoners can be explained by the performances of a Chinese magician. When other tickets are found, the detective’s suspicions are confirmed… Features stunning artwork that gives a unique look into the inner workings of the great detective’s mind!</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/153"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=153&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=153&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<author>
<name>Benoit Dahan</name>
<uri>http://opds-spec.org/author/53</uri>
</author>
<author>
<name>Cyril Lieron</name>
<uri>http://opds-spec.org/author/52</uri>
</author>
<category term="" label="Mystery"/>
<category term="" label="Suspense"/>
<category term="" label="Thriller"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>307</id>
<title>Invincible Compendium</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/307"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=307&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=307&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>597</id>
<title>Iron Man - Extremis Director's Cut</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/597"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=597&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=597&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>226</id>
<title>Knights vs Samurai</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/226"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=226&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=226&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>554</id>
<title>Legend of the Scarlet Blades</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/554"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=554&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=554&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>287</id>
<title>Life Sucks</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/287"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=287&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=287&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>540</id>
<title>Locke & Key</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/540"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=540&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=540&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>327</id>
<title>Lucky Devil</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/327"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=327&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=327&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>286</id>
<title>Macanudo - The Way of the Penguin</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/286"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=286&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=286&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>441</id>
<title>Marc Spector: Moon Knight Ominibus</title>
<summary>Format: Archive Summary: Moon Knight battles new demons! When Marc Spector's serial-killer brother returns from the dead, can Moon Knight stop the Punisher from sending him back to the grave? And will Marc's upgraded suit withstand an encounter with Dr. Doom?! Then, as the Infinity War rages, Moon Knight faces a series of deadly doppelgangers! But all the while, something is very wrong with Marc - and it may be beyond even the minds of Mister Fantastic and Doctor Strange to save him! The clock is ticking, and all hope seems lost. To preserve his legacy, will he need to find another avatar for Khonshu? As one phase ends, a new one begins - because you can't keep Moon Knight down for long! Collecting MARC SPECTOR: MOON KNIGHT #35-60, MOON KNIGHT SPECIAL #1, WEB OF SPIDER-MAN (1985) #93-94, MOON KNIGHT (1998) #1-4, MOON KNIGHT (1999) #1-4, BLACK PANTHER (1998) #20-22 and material from MARVEL COMICS PRESENTS (1988) #152-154.</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/441"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=441&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=441&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>569</id>
<title>Marvel-Verse - Guardians of the Galaxy</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/569"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=569&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=569&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>208</id>
<title>Monica</title>
<summary>Format: Archive Summary: This long-awaited new graphic novel from Daniel Clowes (Ghost World and Patience) is a genre-bending thriller from one of the most innovative storytellers of all time. Monica is a series of interconnected narratives that collectively tell the life story ― actually, stories ― of its title character. Clowes calls upon a lifetime of inspiration to create the most complex and personal graphic novel of his distinguished career. Rich with visual detail, an impeccable ear for language and dialogue, and thrilling twists, Monica is a multilayered masterpiece in comics form that alludes to many of the genres that have defined the medium ― war, romance, horror, crime, the supernatural, etc. ― but in a mysterious, uncategorizable, and quintessentially Clowesian way that rewards multiple readings. Five years in the making, Monica marks the apex of creativity from one of the defining voices of the graphic novel boom over the past quarter-century. A new book from Clowes is always a huge event in comics and literary circles; Monica will be the biggest literary event of 2023. Full-color illustrations throughout</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/208"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=208&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=208&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<author>
<name>Daniel Clowes</name>
<uri>http://opds-spec.org/author/62</uri>
</author>
<category term="" label="Adult"/>
<category term="" label="Anthology"/>
<category term="" label="Contemporary"/>
<category term="" label="Fantasy"/>
<category term="" label="Fiction"/>
<category term="" label="Horror"/>
<category term="" label="Short stories"/>
<category term="" label="Thriller"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>442</id>
<title>Moon Knight</title>
<summary>Format: Archive Summary: Collects Moon Knight (2021) #1-6. His mission is justice! The mysterious Mr. Knight has opened his Midnight Mission, sheltering his people from the weird and horrible. The Moon Knight stalks the rooftops and alleys marked with his crescent moon tag, bringing violence to any who would harm his flock. While Khonshu languishes in prison, Marc Spector's sacred duty must still be observed: the protection of those who travel at night. But what happens when those he would save are turned into weapons against him? When gangs of elderly residents leave a trail of bizarre violence, Moon Knight must put his body, mind and very soul on the line to end the carnage! A mysterious foe attacks from an unexpected direction, an old friend comes to visit and Marc finds himself answering the same question over and over again: "Why do you wear the mask?"</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/442"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=442&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=442&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<author>
<name>Jed MacKay</name>
<uri>http://opds-spec.org/author/216</uri>
</author>
<category term="" label="Action/adventure"/>
</entry>
<entry>
<updated>2025-01-12T16:39:07</updated>
<id>251</id>
<title>Moon Knight - Black, White & Blood</title>
<summary>Format: Archive</summary>
<link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/1acaf62e-5e80-4569-bb13-c662be74fe06/series/251"/>
<link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/series-cover?seriesId=251&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
<link rel="http://opds-spec.org/image/thumbnail" type="image/jpeg" href="/api/image/series-cover?seriesId=251&apiKey=1acaf62e-5e80-4569-bb13-c662be74fe06"/>
</entry>
</feed>

@majora2007
Copy link
Member

Thanks. Okay, I think Kavita just needs to take invalid characters and replace them with a placeholder to ensure the feed still loads fine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs-triage Needs to be triaged by a developer and assigned a release
Projects
Development

No branches or pull requests

2 participants