New: Filter queue by status

(cherry picked from commit fb540040ef66e90c55b82539b85df378d6c76bd3)

Closes #10648
pull/10650/head
Mark McDowall 2 months ago committed by Bogdan
parent 3b9bd696fb
commit ff09da3a69

@ -16,6 +16,7 @@ import MovieFilterBuilderRowValue from './MovieFilterBuilderRowValue';
import ProtocolFilterBuilderRowValue from './ProtocolFilterBuilderRowValue';
import QualityFilterBuilderRowValueConnector from './QualityFilterBuilderRowValueConnector';
import QualityProfileFilterBuilderRowValue from './QualityProfileFilterBuilderRowValue';
import QueueStatusFilterBuilderRowValue from './QueueStatusFilterBuilderRowValue';
import ReleaseStatusFilterBuilderRowValue from './ReleaseStatusFilterBuilderRowValue';
import TagFilterBuilderRowValueConnector from './TagFilterBuilderRowValueConnector';
import styles from './FilterBuilderRow.css';
@ -80,6 +81,9 @@ function getRowValueConnector(selectedFilterBuilderProp) {
case filterBuilderValueTypes.QUALITY_PROFILE:
return QualityProfileFilterBuilderRowValue;
case filterBuilderValueTypes.QUEUE_STATUS:
return QueueStatusFilterBuilderRowValue;
case filterBuilderValueTypes.MOVIE:
return MovieFilterBuilderRowValue;

@ -0,0 +1,67 @@
import React from 'react';
import translate from 'Utilities/String/translate';
import FilterBuilderRowValue from './FilterBuilderRowValue';
import FilterBuilderRowValueProps from './FilterBuilderRowValueProps';
const statusTagList = [
{
id: 'queued',
get name() {
return translate('Queued');
},
},
{
id: 'paused',
get name() {
return translate('Paused');
},
},
{
id: 'downloading',
get name() {
return translate('Downloading');
},
},
{
id: 'completed',
get name() {
return translate('Completed');
},
},
{
id: 'failed',
get name() {
return translate('Failed');
},
},
{
id: 'warning',
get name() {
return translate('Warning');
},
},
{
id: 'delay',
get name() {
return translate('Delay');
},
},
{
id: 'downloadClientUnavailable',
get name() {
return translate('DownloadClientUnavailable');
},
},
{
id: 'fallback',
get name() {
return translate('Fallback');
},
},
];
function QueueStatusFilterBuilderRowValue(props: FilterBuilderRowValueProps) {
return <FilterBuilderRowValue {...props} tagList={statusTagList} />;
}
export default QueueStatusFilterBuilderRowValue;

@ -2,7 +2,7 @@ import React from 'react';
import translate from 'Utilities/String/translate';
import FilterBuilderRowValue from './FilterBuilderRowValue';
const protocols = [
const statusTagList = [
{ id: 'tba', name: 'TBA' },
{
id: 'announced',
@ -33,7 +33,7 @@ const protocols = [
function ReleaseStatusFilterBuilderRowValue(props) {
return (
<FilterBuilderRowValue
tagList={protocols}
tagList={statusTagList}
{...props}
/>
);

@ -8,6 +8,7 @@ export const LANGUAGE = 'language';
export const PROTOCOL = 'protocol';
export const QUALITY = 'quality';
export const QUALITY_PROFILE = 'qualityProfile';
export const QUEUE_STATUS = 'queueStatus';
export const MOVIE = 'movie';
export const RELEASE_STATUS = 'releaseStatus';
export const MINIMUM_AVAILABILITY = 'minimumAvailability';

@ -201,6 +201,12 @@ export const defaultState = {
label: () => translate('Protocol'),
type: filterBuilderTypes.EQUAL,
valueType: filterBuilderValueTypes.PROTOCOL
},
{
name: 'status',
label: () => translate('Status'),
type: filterBuilderTypes.EQUAL,
valueType: filterBuilderValueTypes.QUEUE_STATUS
}
]
},

@ -17,6 +17,7 @@ using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.Profiles.Delay;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Queue;
namespace NzbDrone.Core.Download.Pending
{
@ -340,7 +341,7 @@ namespace NzbDrone.Core.Download.Pending
Timeleft = timeleft,
EstimatedCompletionTime = ect,
Added = pendingRelease.Added,
Status = pendingRelease.Reason.ToString(),
Status = Enum.TryParse(pendingRelease.Reason.ToString(), out QueueStatus outValue) ? outValue : QueueStatus.Unknown,
Protocol = pendingRelease.RemoteMovie.Release.DownloadProtocol,
Indexer = pendingRelease.RemoteMovie.Release.Indexer,
DownloadClient = downloadClientName

@ -923,7 +923,6 @@
"DownloadedButNotMonitored": "تم التنزيل (غير مراقب)",
"DownloadedAndMonitored": "تم التنزيل (مراقب)",
"Downloaded": "تم التنزيل",
"DownloadClientUnavailable": "عميل التنزيل غير متوفر",
"DownloadClientStatusCheckSingleClientMessage": "برامج التنزيل غير متاحة بسبب الإخفاقات: {downloadClientNames}",
"DownloadClientStatusCheckAllClientMessage": "جميع عملاء التنزيل غير متاحين بسبب الفشل",
"DownloadClientsSettingsSummary": "تنزيل العملاء وتنزيل المناولة وتعيينات المسار البعيد",

@ -177,7 +177,6 @@
"DownloadClients": "Изтеглете клиенти",
"DownloadClientSettings": "Изтеглете настройките на клиента",
"DownloadClientsSettingsSummary": "Изтегляне на клиенти, обработка на изтегляния и отдалечени картографски пътища",
"DownloadClientUnavailable": "Клиентът за изтегляне не е наличен",
"Downloaded": "Изтеглено",
"DownloadedAndMonitored": "Изтеглено (контролирано)",
"DownloadedButNotMonitored": "Изтеглено (Без наблюдение)",

@ -449,7 +449,6 @@
"DownloadClientCheckDownloadingToRoot": "El client de baixada {downloadClientName} col·loca les baixades a la carpeta arrel {path}. No s'hauria de baixar a una carpeta arrel.",
"DownloadClientCheckUnableToCommunicateMessage": "No es pot comunicar amb {downloadClientName}. {errorMessage}",
"DownloadClientsSettingsSummary": "Descàrrega de clients, gestió de descàrregues i mapes de camins remots",
"DownloadClientUnavailable": "El client de descàrrega no està disponible",
"Downloaded": "S'ha baixat",
"DownloadedAndMonitored": "S'ha baixat (nonitorat)",
"DownloadedButNotMonitored": "S'ha baixat (no monitorat)",

@ -49,7 +49,6 @@
"Discord": "Svár",
"DownloadClients": "Stáhnout klienty",
"DownloadClientsSettingsSummary": "Stahování klientů, zpracování stahování a mapování vzdálených cest",
"DownloadClientUnavailable": "Stahovací klient není k dispozici",
"DownloadPropersAndRepacks": "Sponzoři a přebalení",
"DownloadPropersAndRepacksHelpTextWarning": "Použijte automatické formáty pro automatické upgrady na Propers / Repacks",
"EditPerson": "Upravit osobu",

@ -522,7 +522,6 @@
"DoneEditingGroups": "Udført redigering af grupper",
"DoNotPrefer": "Foretrækker ikke",
"DownloadClientSettings": "Download klientindstillinger",
"DownloadClientUnavailable": "Downloadklienten er ikke tilgængelig",
"DownloadedAndMonitored": "Downloadet (overvåget)",
"DownloadedButNotMonitored": "Downloadet (ikke overvåget)",
"Downloading": "Downloader",

@ -619,7 +619,6 @@
"DownloadWarning": "Download Warnung: {0}",
"Downloading": "Lädt herunter",
"DownloadFailed": "Download fehlgeschlagen",
"DownloadClientUnavailable": "Downloader ist nicht verfügbar",
"DeleteTagMessageText": "Bist du sicher, dass du den Tag '{label}' wirklich löschen willst?",
"DeleteRestrictionHelpText": "Beschränkung '{0}' wirklich löschen?",
"DeleteNotificationMessageText": "Bist du sicher, dass du die Benachrichtigung '{name}' wirklich löschen willst?",

@ -510,7 +510,6 @@
"DoneEditingGroups": "Έγινε επεξεργασία ομάδων",
"DoNotPrefer": "Μην προτιμάτε",
"DoNotUpgradeAutomatically": "Μην κάνετε αυτόματη αναβάθμιση",
"DownloadClientUnavailable": "Ο πελάτης λήψης δεν είναι διαθέσιμος",
"DownloadedAndMonitored": "Λήψη (Παρακολούθηση)",
"DownloadedButNotMonitored": "Λήψη (Χωρίς παρακολούθηση)",
"Downloading": "Λήψη",

@ -222,6 +222,7 @@
"ColonReplacementFormatHelpText": "Change how {appName} handles colon replacement",
"Columns": "Columns",
"Complete": "Complete",
"Completed": "Completed",
"CompletedDownloadHandling": "Completed Download Handling",
"Component": "Component",
"ConditionUsingRegularExpressions": "This condition matches using Regular Expressions. Note that the characters `\\^$.|?*+()[{` have special meanings and need escaping with a `\\`",
@ -291,6 +292,7 @@
"DefaultNameCopiedProfile": "{name} - Copy",
"DefaultNameCopiedSpecification": "{name} - Copy",
"DefaultNotFoundMessage": "You must be lost, nothing to see here.",
"Delay": "Delay",
"DelayMinutes": "{delay} Minutes",
"DelayProfile": "Delay Profile",
"DelayProfileMovieTagsHelpText": "Applies to movies with at least one matching tag",
@ -517,7 +519,7 @@
"DownloadClientTransmissionSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Transmission location",
"DownloadClientTransmissionSettingsUrlBaseHelpText": "Adds a prefix to the {clientName} rpc url, eg {url}, defaults to '{defaultUrl}'",
"DownloadClientUTorrentTorrentStateError": "uTorrent is reporting an error",
"DownloadClientUnavailable": "Download client is unavailable",
"DownloadClientUnavailable": "Download Client Unavailable",
"DownloadClientValidationApiKeyIncorrect": "API Key Incorrect",
"DownloadClientValidationApiKeyRequired": "API Key Required",
"DownloadClientValidationAuthenticationFailure": "Authentication Failure",
@ -628,6 +630,7 @@
"FailedToFetchUpdates": "Failed to fetch updates",
"FailedToLoadMovieFromAPI": "Failed to load movie from API",
"FailedToUpdateSettings": "Failed to update settings",
"Fallback": "Fallback",
"False": "False",
"FavoriteFolderAdd": "Add Favorite Folder",
"FavoriteFolderRemove": "Remove Favorite Folder",
@ -1842,6 +1845,7 @@
"WantMoreControlAddACustomFormat": "Want more control over which downloads are preferred? Add a [Custom Format](/settings/customformats)",
"Wanted": "Wanted",
"Warn": "Warn",
"Warning": "Warning",
"Week": "Week",
"WeekColumnHeader": "Week Column Header",
"WeekColumnHeaderHelpText": "Shown above each column when week is the active view",

@ -620,7 +620,6 @@
"DownloadWarning": "Alerta de descarga: {warningMessage}",
"Downloading": "Descargando",
"DownloadFailed": "La descarga ha fallado",
"DownloadClientUnavailable": "El cliente de descargas no está disponible",
"DeleteTagMessageText": "¿Estás seguro que quieres eliminar la etiqueta '{label}'?",
"DeleteRestrictionHelpText": "¿Estás seguro que quieres eliminar esta restricción?",
"DeleteNotificationMessageText": "¿Estás seguro que quieres eliminar la notificación '{name}'?",

@ -502,7 +502,6 @@
"EditCustomFormat": "Muokkaa mukautettua muotoa",
"DownloadClientsSettingsSummary": "Lataustyökalut, latausten käsittely ja etäsijaintien kohdistukset.",
"DownloadClientStatusCheckSingleClientMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä: {downloadClientNames}",
"DownloadClientUnavailable": "Lataustyökalu ei ole käytettävissä",
"Downloaded": "Ladattu",
"DownloadedAndMonitored": "Ladattu (valvottu)",
"DownloadedButNotMonitored": "Ladattu (valvomaton)",

@ -421,7 +421,6 @@
"EnableAutomaticSearchHelpText": "Sera utilisé lorsque les recherches automatiques sont effectuées via l'interface utilisateur ou par {appName}",
"DownloadWarning": "Avertissement de téléchargement : {warningMessage}",
"Downloading": "Téléchargement",
"DownloadClientUnavailable": "Le client de téléchargement n'est pas disponible",
"DeleteRestrictionHelpText": "Voulez-vous vraiment supprimer cette restriction ?",
"DeleteIndexerMessageText": "Voulez-vous vraiment supprimer l'indexeur « {name} » ?",
"CopyToClipboard": "Copier dans le presse-papier",

@ -40,7 +40,6 @@
"DeleteEmptyFolders": "מחק תיקיות ריקות",
"DeleteFile": "מחק קובץ",
"DestinationPath": "נתיב יעד",
"DownloadClientUnavailable": "לקוח ההורדות אינו זמין",
"EditMovie": "ערוך את הסרט",
"EnableCompletedDownloadHandlingHelpText": "ייבא אוטומטית הורדות שהושלמו מלקוח ההורדות",
"AnalyseVideoFilesHelpText": "חלץ מידע וידאו כגון רזולוציה, זמן ריצה ומידע קודק מקבצים. זה מחייב את {appName} לקרוא חלקים מהקובץ שעלולים לגרום לדיסק גבוה או לפעילות רשת במהלך הסריקות.",

@ -63,7 +63,6 @@
"DeleteTagMessageText": "क्या आप वाकई '{0}' टैग हटाना चाहते हैं?",
"DestinationRelativePath": "गंतव्य सापेक्ष पथ",
"DetailedProgressBar": "विस्तृत प्रगति पट्टी",
"DownloadClientUnavailable": "डाउनलोड क्लाइंट अनुपलब्ध है",
"DownloadPropersAndRepacksHelpTextWarning": "Propers / Repacks में स्वचालित उन्नयन के लिए कस्टम स्वरूपों का उपयोग करें",
"EditQualityProfile": "गुणवत्ता प्रोफ़ाइल संपादित करें",
"EditRemotePathMapping": "दूरस्थ पथ मानचित्रण संपादित करें",

@ -42,7 +42,6 @@
"DownloadedButNotMonitored": "Letöltve, (nincs Figyelve)",
"DownloadedAndMonitored": "Letöltve (Figyelve)",
"Downloaded": "Letöltve",
"DownloadClientUnavailable": "Letöltőkliens nem elérhető",
"DownloadClientStatusCheckSingleClientMessage": "Letöltőkliens hiba miatt nem elérhető: {downloadClientNames}",
"DownloadClientStatusCheckAllClientMessage": "Az összes letöltőkliens elérhetetlen, hiba miatt",
"DownloadClientsSettingsSummary": "Kliensek letöltése, letöltéskezelés és távoli útvonalleképezések",

@ -537,7 +537,6 @@
"AnalyseVideoFiles": "Greindu vídeóskrár",
"AnalyticsEnabledHelpText": "Sendu nafnlausar upplýsingar um notkun og villur á netþjóna {appName}. Þetta felur í sér upplýsingar í vafranum þínum, hvaða {appName} WebUI síður þú notar, villuskýrslur sem og stýrikerfi og keyrsluútgáfu. Við munum nota þessar upplýsingar til að forgangsraða eiginleikum og villuleiðréttingum.",
"AppDataDirectory": "AppData skrá",
"DownloadClientUnavailable": "Niðurhalsþjónn er ekki tiltækur",
"Downloaded": "Sótt",
"DownloadedAndMonitored": "Sótt (fylgst með)",
"DownloadedButNotMonitored": "Sótt (óeftirlit)",

@ -579,7 +579,6 @@
"DownloadFailed": "Download fallito",
"DownloadedButNotMonitored": "Scaricato (non monitorato)",
"DownloadedAndMonitored": "Scaricato (Monitorato)",
"DownloadClientUnavailable": "Il client di download non è disponibile",
"DeleteTagMessageText": "Sei sicuro di voler eliminare l'etichetta '{label}'?",
"DeleteRestrictionHelpText": "Sei sicuro di voler eliminare questa restrizione?",
"DeleteNotificationMessageText": "Sei sicuro di voler eliminare la notifica '{name}'?",

@ -39,7 +39,6 @@
"DeleteSelectedMovieFiles": "選択したムービーファイルを削除する",
"DownloadClientCheckUnableToCommunicateMessage": "{downloadClientName}と通信できません。",
"DownloadClientsSettingsSummary": "クライアントのダウンロード、ダウンロード処理、リモートパスマッピング",
"DownloadClientUnavailable": "ダウンロードクライアントは利用できません",
"DownloadedAndMonitored": "ダウンロード(監視)",
"DownloadPropersAndRepacks": "適切なものと再梱包",
"EditCustomFormat": "カスタムフォーマットの編集",

@ -500,7 +500,6 @@
"DownloadClientSettings": "클라이언트 설정 다운로드",
"DownloadClientsSettingsSummary": "클라이언트 다운로드, 다운로드 처리 및 원격 경로 매핑",
"DownloadClientStatusCheckSingleClientMessage": "실패로 인해 다운 불러올 수 없는 클라이언트 : {downloadClientNames}",
"DownloadClientUnavailable": "다운로드 클라이언트를 사용할 수 없습니다.",
"Downloaded": "다운로드됨",
"DownloadedAndMonitored": "다운로드됨 (모니터링됨)",
"DownloadedButNotMonitored": "다운로드됨 (모니터링되지 않음)",

@ -626,7 +626,6 @@
"DownloadWarning": "Download waarschuwing: {warningMessage}",
"Downloading": "Downloaden",
"DownloadFailed": "Download mislukt",
"DownloadClientUnavailable": "Downloader is onbeschikbaar",
"DeleteTagMessageText": "Weet je zeker dat je de tag '{label}' wil verwijderen?",
"DeleteRestrictionHelpText": "Bent u zeker dat u deze restrictie wilt verwijderen?",
"DeleteNotificationMessageText": "Weet je zeker dat je de notificatie {name} wil verwijderen?",

@ -512,7 +512,6 @@
"DownloadClientSettings": "Pobierz ustawienia klienta",
"DownloadClientsSettingsSummary": "Pobieranie klientów, obsługa pobierania i mapowanie ścieżek zdalnych",
"DownloadClientStatusCheckSingleClientMessage": "Klienci pobierania niedostępni z powodu błędów: {downloadClientNames}",
"DownloadClientUnavailable": "Klient pobierania jest niedostępny",
"Downloaded": "Pobrano",
"DownloadedAndMonitored": "Pobrane (monitorowane)",
"DownloadedButNotMonitored": "Pobrane (niemonitorowane)",

@ -588,7 +588,6 @@
"DownloadFailed": "Falha na transferência",
"DownloadedButNotMonitored": "Transferido (Não monitorado)",
"DownloadedAndMonitored": "Transferido (Monitorado)",
"DownloadClientUnavailable": "O cliente de transferências está indisponível",
"Disabled": "Desativado",
"DeleteTagMessageText": "Tem a certeza que quer eliminar a etiqueta \"{label}\"?",
"DeleteRestrictionHelpText": "Tem a certeza de que quer eliminar esta restrição?",

@ -174,7 +174,6 @@
"DownloadedButNotMonitored": "Baixado (não monitorado)",
"DownloadedAndMonitored": "Baixado (monitorado)",
"Downloaded": "Baixado",
"DownloadClientUnavailable": "O cliente de download está indisponível",
"DownloadClientStatusCheckSingleClientMessage": "Clientes de download indisponíveis devido a falhas: {downloadClientNames}",
"DownloadClientStatusCheckAllClientMessage": "Todos os clientes de download estão indisponíveis devido a falhas",
"DownloadClientsSettingsSummary": "Clientes de download, gerenciamento de download e mapeamentos de caminhos remotos",

@ -638,7 +638,6 @@
"DoNotPrefer": "Nu preferați",
"DoNotUpgradeAutomatically": "Nu faceți upgrade automat",
"DownloadClientSettings": "Setări client de descărcare",
"DownloadClientUnavailable": "Clientul de descărcare nu este disponibil",
"DownloadedAndMonitored": "Descărcat (monitorizat)",
"DownloadedButNotMonitored": "Descărcat (fără monitorizare)",
"Downloading": "Descărcarea",

@ -634,7 +634,6 @@
"DownloadedButNotMonitored": "Скачано (неотслеживается)",
"DownloadedAndMonitored": "Скачано (Отслежено)",
"Downloaded": "Скачано",
"DownloadClientUnavailable": "Программа для скачивания недоступна",
"PhysicalRelease": "Релиз на носителе",
"PhysicalReleaseDate": "Дата релиза на носителе",
"MountCheckMessage": "Смонтированный путь к фильму смонтировано режиме только для чтения: ",

@ -301,7 +301,6 @@
"Edition": "Utgåva",
"Downloading": "Laddar ner",
"DownloadFailed": "Misslyckad nedladdning",
"DownloadClientUnavailable": "Nedladdningsklient är otillgänglig",
"DownloadClientSettings": "Inställningar för Nedladdningsklient",
"Docker": "Docker",
"Disabled": "Inaktiverad",

@ -587,7 +587,6 @@
"DownloadClientSettings": "ดาวน์โหลด Client Settings",
"DownloadClientsSettingsSummary": "ดาวน์โหลดไคลเอนต์การจัดการการดาวน์โหลดและการแมปเส้นทางระยะไกล",
"DownloadClientStatusCheckSingleClientMessage": "ดาวน์โหลดไคลเอ็นต์ไม่ได้เนื่องจากความล้มเหลว: {downloadClientNames}",
"DownloadClientUnavailable": "ไม่สามารถดาวน์โหลดไคลเอนต์ได้",
"Downloaded": "ดาวน์โหลดแล้ว",
"DownloadedButNotMonitored": "ดาวน์โหลด (ไม่ได้ตรวจสอบ)",
"DownloadFailed": "ดาวน์โหลดล้มเหลว",

@ -694,7 +694,6 @@
"DownloadClientSettings": "İstemci Ayarlarını İndir",
"DownloadClientsSettingsSummary": "İndirme İstemcileri, indirme işlemleri ve uzaktan yol eşlemeleri",
"DownloadClientStatusCheckSingleClientMessage": "Hatalar nedeniyle indirilemeyen istemciler: {downloadClientNames}",
"DownloadClientUnavailable": "İndirme istemcisi kullanılamıyor",
"DownloadedAndMonitored": "İndirildi (Takip Ediliyor)",
"DownloadedButNotMonitored": "İndirildi (Takip Edilmiyor)",
"DownloadFailed": "Yükleme başarısız",

@ -569,7 +569,6 @@
"DeleteQualityProfile": "Видалити профіль якості",
"DeleteRestriction": "Видалити обмеження",
"DownloadedAndMonitored": "Завантажено (Відстежується)",
"DownloadClientUnavailable": "Клієнт завантажувача недоступний",
"DownloadedButNotMonitored": "Завантажено (Не відстежується)",
"DownloadFailed": "Помилка завантаження",
"DownloadWarning": "Попередження про завантаження: {0}",

@ -59,7 +59,6 @@
"DeleteSelectedMovieFiles": "Xóa các tệp phim đã chọn",
"DownloadClient": "Tải xuống ứng dụng khách",
"DownloadClientSettings": "Tải xuống cài đặt ứng dụng khách",
"DownloadClientUnavailable": "Ứng dụng khách tải xuống không khả dụng",
"DownloadPropersAndRepacksHelpTextWarning": "Sử dụng các định dạng tùy chỉnh để tự động nâng cấp lên Người ủng hộ / Đóng gói lại",
"EditImportListExclusion": "Chỉnh sửa Loại trừ Danh sách",
"EditRemotePathMapping": "Chỉnh sửa ánh xạ đường dẫn từ xa",

@ -408,7 +408,6 @@
"DownloadWarning": "下载警告:{warningMessage}",
"DownloadedButNotMonitored": "已下载(未追踪)",
"DownloadedAndMonitored": "已下载(已追踪)",
"DownloadClientUnavailable": "下载客户端不可用",
"DownloadClientStatusCheckSingleClientMessage": "所有下载客户端都不可用: {downloadClientNames}",
"DownloadClientStatusCheckAllClientMessage": "下载客户端因故障均不可用",
"DownloadClientsSettingsSummary": "下载客户端、下载处理和远程路径映射",

@ -21,7 +21,7 @@ namespace NzbDrone.Core.Queue
public TimeSpan? Timeleft { get; set; }
public DateTime? EstimatedCompletionTime { get; set; }
public DateTime? Added { get; set; }
public string Status { get; set; }
public QueueStatus Status { get; set; }
public TrackedDownloadStatus? TrackedDownloadStatus { get; set; }
public TrackedDownloadState? TrackedDownloadState { get; set; }
public List<TrackedDownloadStatusMessage> StatusMessages { get; set; }

@ -64,7 +64,7 @@ namespace NzbDrone.Core.Queue
Size = trackedDownload.DownloadItem.TotalSize,
Sizeleft = trackedDownload.DownloadItem.RemainingSize,
Timeleft = trackedDownload.DownloadItem.RemainingTime,
Status = trackedDownload.DownloadItem.Status.ToString(),
Status = Enum.TryParse(trackedDownload.DownloadItem.Status.ToString(), out QueueStatus outValue) ? outValue : QueueStatus.Unknown,
TrackedDownloadStatus = trackedDownload.Status,
TrackedDownloadState = trackedDownload.State,
StatusMessages = trackedDownload.StatusMessages.ToList(),

@ -0,0 +1,16 @@
namespace NzbDrone.Core.Queue
{
public enum QueueStatus
{
Unknown,
Queued,
Paused,
Downloading,
Completed,
Failed,
Warning,
Delay,
DownloadClientUnavailable,
Fallback
}
}

@ -136,7 +136,7 @@ namespace Radarr.Api.V3.Queue
[HttpGet]
[Produces("application/json")]
public PagingResource<QueueResource> GetQueue([FromQuery] PagingRequestResource paging, bool includeUnknownMovieItems = false, bool includeMovie = false, [FromQuery] int[] movieIds = null, DownloadProtocol? protocol = null, [FromQuery] int[] languages = null, [FromQuery] int[] quality = null)
public PagingResource<QueueResource> GetQueue([FromQuery] PagingRequestResource paging, bool includeUnknownMovieItems = false, bool includeMovie = false, [FromQuery] int[] movieIds = null, DownloadProtocol? protocol = null, [FromQuery] int[] languages = null, [FromQuery] int[] quality = null, [FromQuery] QueueStatus[] status = null)
{
var pagingResource = new PagingResource<QueueResource>(paging);
var pagingSpec = pagingResource.MapToPagingSpec<QueueResource, NzbDrone.Core.Queue.Queue>(
@ -160,10 +160,10 @@ namespace Radarr.Api.V3.Queue
"timeleft",
SortDirection.Ascending);
return pagingSpec.ApplyToPage((spec) => GetQueue(spec, movieIds?.ToHashSet(), protocol, languages?.ToHashSet(), quality?.ToHashSet(), includeUnknownMovieItems), (q) => MapToResource(q, includeMovie));
return pagingSpec.ApplyToPage((spec) => GetQueue(spec, movieIds?.ToHashSet(), protocol, languages?.ToHashSet(), quality?.ToHashSet(), status?.ToHashSet(), includeUnknownMovieItems), (q) => MapToResource(q, includeMovie));
}
private PagingSpec<NzbDrone.Core.Queue.Queue> GetQueue(PagingSpec<NzbDrone.Core.Queue.Queue> pagingSpec, HashSet<int> movieIds, DownloadProtocol? protocol, HashSet<int> languages, HashSet<int> quality, bool includeUnknownMovieItems)
private PagingSpec<NzbDrone.Core.Queue.Queue> GetQueue(PagingSpec<NzbDrone.Core.Queue.Queue> pagingSpec, HashSet<int> movieIds, DownloadProtocol? protocol, HashSet<int> languages, HashSet<int> quality, HashSet<QueueStatus> status, bool includeUnknownMovieItems)
{
var ascending = pagingSpec.SortDirection == SortDirection.Ascending;
var orderByFunc = GetOrderByFunc(pagingSpec);
@ -175,6 +175,7 @@ namespace Radarr.Api.V3.Queue
var hasMovieIdFilter = movieIds.Any();
var hasLanguageFilter = languages.Any();
var hasQualityFilter = quality.Any();
var hasStatusFilter = status.Any();
var fullQueue = filteredQueue.Concat(pending).Where(q =>
{
@ -200,6 +201,11 @@ namespace Radarr.Api.V3.Queue
include &= quality.Contains(q.Quality.Quality.Id);
}
if (include && hasStatusFilter)
{
include &= status.Contains(q.Status);
}
return include;
}).ToList();
@ -279,7 +285,7 @@ namespace Radarr.Api.V3.Queue
switch (pagingSpec.SortKey)
{
case "status":
return q => q.Status;
return q => q.Status.ToString();
case "movies.sortTitle":
return q => q.Movie?.MovieMetadata.Value.SortTitle ?? q.Title;
case "title":

@ -1,11 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Download.TrackedDownloads;
using NzbDrone.Core.Indexers;
using NzbDrone.Core.Languages;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Queue;
using Radarr.Api.V3.CustomFormats;
using Radarr.Api.V3.Movies;
using Radarr.Http.REST;
@ -26,7 +26,7 @@ namespace Radarr.Api.V3.Queue
public TimeSpan? Timeleft { get; set; }
public DateTime? EstimatedCompletionTime { get; set; }
public DateTime? Added { get; set; }
public string Status { get; set; }
public QueueStatus Status { get; set; }
public TrackedDownloadStatus? TrackedDownloadStatus { get; set; }
public TrackedDownloadState? TrackedDownloadState { get; set; }
public List<TrackedDownloadStatusMessage> StatusMessages { get; set; }
@ -66,7 +66,7 @@ namespace Radarr.Api.V3.Queue
Timeleft = model.Timeleft,
EstimatedCompletionTime = model.EstimatedCompletionTime,
Added = model.Added,
Status = model.Status.FirstCharToLower(),
Status = model.Status,
TrackedDownloadStatus = model.TrackedDownloadStatus,
TrackedDownloadState = model.TrackedDownloadState,
StatusMessages = model.StatusMessages,

Loading…
Cancel
Save