Compare commits

...

5 Commits

Author SHA1 Message Date
0xsysr3ll
8ac21bb814 fix(requests): remove unnecessary margin between avatar and username 2025-06-27 22:24:52 +02:00
0xsysr3ll
3f8ebc75d5 refactor(requests): wrap both the avatar and the username in Link 2025-06-27 22:20:50 +02:00
0xsysr3ll
065d3002e0 feat(requests): add user's avatar in front of Requested/Last Modified by 2025-06-27 21:47:09 +02:00
Gauthier
b83367cbf2 fix(proxy): apply all proxy settings to Axios (#1741) 2025-06-25 22:40:24 +08:00
Ludovic Ortega
0fd03f3848 chore(helm): bump jellyseerr to 2.7.0 (#1725)
Signed-off-by: Ludovic Ortega <ludovic.ortega@adminafk.fr>
2025-06-20 12:39:02 +00:00
7 changed files with 55 additions and 22 deletions

View File

@@ -3,8 +3,8 @@ kubeVersion: ">=1.23.0-0"
name: jellyseerr-chart name: jellyseerr-chart
description: Jellyseerr helm chart for Kubernetes description: Jellyseerr helm chart for Kubernetes
type: application type: application
version: 2.5.0 version: 2.6.0
appVersion: "2.6.0" appVersion: "2.7.0"
maintainers: maintainers:
- name: Jellyseerr - name: Jellyseerr
url: https://github.com/Fallenbagel/jellyseerr url: https://github.com/Fallenbagel/jellyseerr

View File

@@ -1,6 +1,6 @@
# jellyseerr-chart # jellyseerr-chart
![Version: 2.5.0](https://img.shields.io/badge/Version-2.5.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 2.6.0](https://img.shields.io/badge/AppVersion-2.6.0-informational?style=flat-square) ![Version: 2.6.0](https://img.shields.io/badge/Version-2.6.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 2.7.0](https://img.shields.io/badge/AppVersion-2.7.0-informational?style=flat-square)
Jellyseerr helm chart for Kubernetes Jellyseerr helm chart for Kubernetes

View File

@@ -37,6 +37,8 @@ class ExternalAPI {
...options.headers, ...options.headers,
}, },
}); });
this.axios.interceptors.request = axios.interceptors.request;
this.axios.interceptors.response = axios.interceptors.response;
if (options.rateLimit) { if (options.rateLimit) {
this.axios = rateLimit(this.axios, { this.axios = rateLimit(this.axios, {

View File

@@ -123,6 +123,8 @@ class TautulliAPI {
}${settings.urlBase ?? ''}`, }${settings.urlBase ?? ''}`,
params: { apikey: settings.apiKey }, params: { apikey: settings.apiKey },
}); });
this.axios.interceptors.request = axios.interceptors.request;
this.axios.interceptors.response = axios.interceptors.response;
} }
public async getInfo(): Promise<TautulliInfo> { public async getInfo(): Promise<TautulliInfo> {

View File

@@ -150,6 +150,8 @@ class ImageProxy {
baseURL: baseUrl, baseURL: baseUrl,
headers: options.headers, headers: options.headers,
}); });
this.axios.interceptors.request = axios.interceptors.request;
this.axios.interceptors.response = axios.interceptors.response;
if (options.rateLimitOptions) { if (options.rateLimitOptions) {
this.axios = rateLimit(this.axios, options.rateLimitOptions); this.axios = rateLimit(this.axios, options.rateLimitOptions);

View File

@@ -56,12 +56,9 @@ export default async function createCustomProxyAgent(
: undefined; : undefined;
try { try {
const proxyUrl = const proxyUrl = `${proxySettings.useSsl ? 'https' : 'http'}://${
(proxySettings.useSsl ? 'https://' : 'http://') + proxySettings.hostname
proxySettings.hostname + }:${proxySettings.port}`;
':' +
proxySettings.port;
const proxyAgent = new ProxyAgent({ const proxyAgent = new ProxyAgent({
uri: proxyUrl, uri: proxyUrl,
token, token,
@@ -70,10 +67,17 @@ export default async function createCustomProxyAgent(
setGlobalDispatcher(proxyAgent.compose(noProxyInterceptor)); setGlobalDispatcher(proxyAgent.compose(noProxyInterceptor));
axios.defaults.httpAgent = new HttpProxyAgent(proxyUrl); axios.defaults.httpAgent = new HttpProxyAgent(proxyUrl, {
axios.defaults.httpsAgent = new HttpsProxyAgent(proxyUrl); headers: token ? { 'proxy-authorization': token } : undefined,
});
axios.defaults.httpsAgent = new HttpsProxyAgent(proxyUrl, {
headers: token ? { 'proxy-authorization': token } : undefined,
});
axios.interceptors.request.use((config) => { axios.interceptors.request.use((config) => {
if (config.url && skipUrl(config.url)) { const url = config.baseURL
? new URL(config.baseURL + (config.url || ''))
: config.url;
if (url && skipUrl(url)) {
config.httpAgent = false; config.httpAgent = false;
config.httpsAgent = false; config.httpsAgent = false;
} }

View File

@@ -1,5 +1,6 @@
import Badge from '@app/components/Common/Badge'; import Badge from '@app/components/Common/Badge';
import Button from '@app/components/Common/Button'; import Button from '@app/components/Common/Button';
import CachedImage from '@app/components/Common/CachedImage';
import Tooltip from '@app/components/Common/Tooltip'; import Tooltip from '@app/components/Common/Tooltip';
import RequestModal from '@app/components/RequestModal'; import RequestModal from '@app/components/RequestModal';
import useRequestOverride from '@app/hooks/useRequestOverride'; import useRequestOverride from '@app/hooks/useRequestOverride';
@@ -95,36 +96,58 @@ const RequestBlock = ({ request, onUpdate }: RequestBlockProps) => {
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div className="mr-6 min-w-0 flex-1 flex-col items-center text-sm leading-5"> <div className="mr-6 min-w-0 flex-1 flex-col items-center text-sm leading-5">
<div className="white mb-1 flex flex-nowrap"> <div className="white mb-1 flex flex-nowrap">
<Tooltip content={intl.formatMessage(messages.requestedby)}> <span className="flex w-40 items-center truncate md:w-auto">
<UserIcon className="mr-1.5 h-5 w-5 min-w-0 flex-shrink-0" /> <Tooltip content={intl.formatMessage(messages.requestedby)}>
</Tooltip> <UserIcon className="mr-1.5 h-5 w-5 min-w-0 flex-shrink-0" />
<span className="w-40 truncate md:w-auto"> </Tooltip>
<Link <Link
href={ href={
request.requestedBy.id === user?.id request.requestedBy.id === user?.id
? '/profile' ? '/profile'
: `/users/${request.requestedBy.id}` : `/users/${request.requestedBy.id}`
} }
className="font-semibold text-gray-100 transition duration-300 hover:text-white hover:underline" className="flex items-center font-semibold text-gray-100 transition duration-300 hover:text-white hover:underline"
> >
<span className="avatar-sm">
<CachedImage
type="avatar"
src={request.requestedBy.avatar}
alt=""
className="avatar-sm object-cover"
width={20}
height={20}
/>
</span>
{request.requestedBy.displayName} {request.requestedBy.displayName}
</Link> </Link>
</span> </span>
</div> </div>
{request.modifiedBy && ( {request.modifiedBy && (
<div className="flex flex-nowrap"> <div className="flex flex-nowrap">
<Tooltip content={intl.formatMessage(messages.lastmodifiedby)}> <span className="flex w-40 items-center truncate md:w-auto">
<EyeIcon className="mr-1.5 h-5 w-5 flex-shrink-0" /> <Tooltip
</Tooltip> content={intl.formatMessage(messages.lastmodifiedby)}
<span className="w-40 truncate md:w-auto"> >
<EyeIcon className="mr-1.5 h-5 w-5 flex-shrink-0" />
</Tooltip>
<Link <Link
href={ href={
request.modifiedBy.id === user?.id request.modifiedBy.id === user?.id
? '/profile' ? '/profile'
: `/users/${request.modifiedBy.id}` : `/users/${request.modifiedBy.id}`
} }
className="font-semibold text-gray-100 transition duration-300 hover:text-white hover:underline" className="flex items-center font-semibold text-gray-100 transition duration-300 hover:text-white hover:underline"
> >
<span className="avatar-sm">
<CachedImage
type="avatar"
src={request.modifiedBy.avatar}
alt=""
className="avatar-sm object-cover"
width={20}
height={20}
/>
</span>
{request.modifiedBy.displayName} {request.modifiedBy.displayName}
</Link> </Link>
</span> </span>