| 304 | return flowdetailview.flowdetails(self.view, self.flow) |
| 305 | |
| 306 | def content_view( |
| 307 | self, viewmode: str, message: http.Message |
| 308 | ) -> tuple[str, list[urwid.Text]]: |
| 309 | if message.raw_content is None: |
| 310 | return "", [urwid.Text([("error", "[content missing]")])] |
| 311 | |
| 312 | if message.raw_content == b"": |
| 313 | if isinstance(message, http.Request): |
| 314 | query = getattr(message, "query", "") |
| 315 | if not query: |
| 316 | # No body and no query params |
| 317 | return "", [urwid.Text("No request content")] |
| 318 | # else: there are query params -> fall through to render them |
| 319 | else: |
| 320 | return "", [urwid.Text("No content")] |
| 321 | |
| 322 | full = self.master.commands.execute( |
| 323 | "view.settings.getval @focus fullcontents false" |
| 324 | ) |
| 325 | |
| 326 | if full == "true": |
| 327 | limit = sys.maxsize |
| 328 | else: |
| 329 | limit = ctx.options.content_view_lines_cutoff |
| 330 | |
| 331 | flow_modify_cache_invalidation = hash( |
| 332 | ( |
| 333 | message.raw_content, |
| 334 | message.headers.fields, |
| 335 | getattr(message, "path", None), |
| 336 | ) |
| 337 | ) |
| 338 | # we need to pass the message off-band because it's not hashable |
| 339 | self._get_content_view_message = message |
| 340 | return self._get_content_view(viewmode, limit, flow_modify_cache_invalidation) |
| 341 | |
| 342 | @lru_cache(maxsize=200) |
| 343 | def _get_content_view( |