diff --git a/models/notification.go b/models/notification.go index dcb0322079e4..56abd0ed8334 100644 --- a/models/notification.go +++ b/models/notification.go @@ -74,6 +74,7 @@ type FindNotificationOptions struct { RepoID int64 IssueID int64 Status []NotificationStatus + Source []NotificationSource UpdatedAfterUnix int64 UpdatedBeforeUnix int64 } @@ -93,6 +94,9 @@ func (opts *FindNotificationOptions) ToCond() builder.Cond { if len(opts.Status) > 0 { cond = cond.And(builder.In("notification.status", opts.Status)) } + if len(opts.Source) > 0 { + cond = cond.And(builder.In("notification.source", opts.Source)) + } if opts.UpdatedAfterUnix != 0 { cond = cond.And(builder.Gte{"notification.updated_unix": opts.UpdatedAfterUnix}) } @@ -111,13 +115,13 @@ func (opts *FindNotificationOptions) ToSession(e Engine) *xorm.Session { return sess } -func getNotifications(e Engine, options FindNotificationOptions) (nl NotificationList, err error) { +func getNotifications(e Engine, options *FindNotificationOptions) (nl NotificationList, err error) { err = options.ToSession(e).OrderBy("notification.updated_unix DESC").Find(&nl) return } // GetNotifications returns all notifications that fit to the given options. -func GetNotifications(opts FindNotificationOptions) (NotificationList, error) { +func GetNotifications(opts *FindNotificationOptions) (NotificationList, error) { return getNotifications(x, opts) } diff --git a/models/token.go b/models/token.go index 4737dddda343..357afe44a7c0 100644 --- a/models/token.go +++ b/models/token.go @@ -57,9 +57,15 @@ func GetAccessTokenBySHA(token string) (*AccessToken, error) { if token == "" { return nil, ErrAccessTokenEmpty{} } - if len(token) < 8 { + // A token is defined as being SHA1 sum these are 40 hexadecimal bytes long + if len(token) != 40 { return nil, ErrAccessTokenNotExist{token} } + for _, x := range []byte(token) { + if x < '0' || (x > '9' && x < 'a') || x > 'f' { + return nil, ErrAccessTokenNotExist{token} + } + } var tokens []AccessToken lastEight := token[len(token)-8:] err := x.Table(&AccessToken{}).Where("token_last_eight = ?", lastEight).Find(&tokens) diff --git a/modules/markup/sanitizer.go b/modules/markup/sanitizer.go index 8d2bf5d6885f..5611bd06ad00 100644 --- a/modules/markup/sanitizer.go +++ b/modules/markup/sanitizer.go @@ -50,9 +50,6 @@ func ReplaceSanitizer() { sanitizer.policy.AllowURLSchemes(setting.Markdown.CustomURLSchemes...) } - // Allow keyword markup - sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`^` + keywordClass + `$`)).OnElements("span") - // Allow classes for anchors sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`ref-issue`)).OnElements("a") @@ -68,8 +65,8 @@ func ReplaceSanitizer() { // Allow classes for emojis sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`emoji`)).OnElements("img") - // Allow icons, emojis, and chroma syntax on span - sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`^((icon(\s+[\p{L}\p{N}_-]+)+)|(emoji))$|^([a-z][a-z0-9]{0,2})$`)).OnElements("span") + // Allow icons, emojis, chroma syntax and keyword markup on span + sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`^((icon(\s+[\p{L}\p{N}_-]+)+)|(emoji))$|^([a-z][a-z0-9]{0,2})$|^` + keywordClass + `$`)).OnElements("span") // Allow data tables sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`data-table`)).OnElements("table") diff --git a/options/locale/locale_bg-BG.ini b/options/locale/locale_bg-BG.ini index 1fd266b5d782..ebfc59d1668c 100644 --- a/options/locale/locale_bg-BG.ini +++ b/options/locale/locale_bg-BG.ini @@ -82,6 +82,7 @@ loading=Зареждане… error404=Страницата, която се опитвате да достъпите, не съществува или не сте оторизирани да я достъпите. + [error] [startpage] diff --git a/options/locale/locale_cs-CZ.ini b/options/locale/locale_cs-CZ.ini index d7e650baeb45..576cf0615e3b 100644 --- a/options/locale/locale_cs-CZ.ini +++ b/options/locale/locale_cs-CZ.ini @@ -93,6 +93,7 @@ step2=Krok 2: error404=Stránka, kterou se snažíte zobrazit, buď neexistuje, nebo nemáte oprávnění ji zobrazit. + [error] occurred=Nastala chyba report_message=Pokud jste si jisti, že se jedná o chybu Gitea, prosím vyhledejte problém na GitHub a v případě potřeby otevřete nový problém. @@ -723,7 +724,6 @@ mirror_prune_desc=Odstranit zastaralé reference na vzdálené sledování mirror_interval=Interval zrcadlení (platné časové jednotky jsou „h“, „m“ a „s“). 0 zakáže automatickou synchronizaci. mirror_interval_invalid=Interval zrcadlení není platný. mirror_address=Klonovat z URL -mirror_address_desc=Zadejte nějaké přístupové údaje do sekce Ověření klonování. mirror_address_url_invalid=Poskytnutá URL je neplatná. Všechny komponenty musíte správně nahradit escape sekvencí. mirror_address_protocol_invalid=Zadaná URL je neplatná. Mohou být zrcadleny pouze umístění http(s):// nebo git://. mirror_lfs=Úložiště velkých souborů (LFS) @@ -786,7 +786,6 @@ form.reach_limit_of_creation_n=Již jste dosáhli svůj limit %d repozitářů. form.name_reserved=Jméno repozitáře „%s“ je rezervované. form.name_pattern_not_allowed=Vzor „%s“ není povolený v názvu repozitáře. -need_auth=Ověření klonování migrate_options=Možnosti migrace migrate_service=Migrační služba migrate_options_mirror_helper=Tento repozitář bude zrcadlem diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index c2182f0bdfa8..d26ac2606600 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -93,6 +93,7 @@ step2=Schritt 2: error404=Die Seite, die du gerade versuchst aufzurufen, existiert entweder nicht oder du bist nicht berechtigt, diese anzusehen. + [error] occurred=Ein Fehler ist aufgetreten report_message=Wenn du dir sicher bist, dass dies ein Gitea-Fehler ist, suche bitte auf GitHub nach diesem Fehler und erstelle gegebenenfalls einen neuen Bugreport. @@ -723,7 +724,6 @@ mirror_prune_desc=Entferne veraltete remote-tracking Referenzen mirror_interval=Spiegel-Intervall (gültige Zeiteinheiten sind 'h', 'm', 's'). 0 schaltet die automatische Synchronisierung aus. mirror_interval_invalid=Das Spiegel-Intervall ist ungültig. mirror_address=Klonen via URL -mirror_address_desc=Gib alle erforderlichen Anmeldedaten im Abschnitt "Autorisierung klonen" ein. mirror_address_url_invalid=Die angegebene URL ist ungültig. Achte darauf, alle URL-Komponenten korrekt zu maskieren. mirror_address_protocol_invalid=Die angegebene URL ist ungültig. Nur Pfade beginnend mit http(s):// oder git:// können gespiegelt werden. mirror_lfs=Großdatei-Speicher (LFS) @@ -783,7 +783,6 @@ form.reach_limit_of_creation_n=Du hast bereits dein Limit von %d Repositories er form.name_reserved=Der Repository-Name „%s“ ist reserviert. form.name_pattern_not_allowed='%s' ist nicht erlaubt für Repository-Namen. -need_auth=Authentifizierung zum Klonen benötigt migrate_options=Migrationsoptionen migrate_service=Migrationsdienst migrate_options_mirror_helper=Dieses Repository wird ein Mirror sein diff --git a/options/locale/locale_es-ES.ini b/options/locale/locale_es-ES.ini index dd1d90036e53..b5f3d7d3c6ec 100644 --- a/options/locale/locale_es-ES.ini +++ b/options/locale/locale_es-ES.ini @@ -93,6 +93,7 @@ step2=Paso 2: error404=La página a la que está intentando acceder o no existe o no está autorizado para verla. + [error] occurred=Se ha producido un error report_message=Si estás seguro de que este es un error de Gitea, por favor busca un problema en GitHub y abre un nuevo problema si es necesario. @@ -723,7 +724,6 @@ mirror_prune_desc=Eliminar referencias de seguimiento de remotes obsoletas mirror_interval=Intervalo de réplica (Las unidades de tiempo válidas son 'h', 'm', 's'). Pone 0 para deshabilitar la sincronización automática. mirror_interval_invalid=El intervalo de réplica no es válido. mirror_address=Clonar desde URL -mirror_address_desc=Agregue las credenciales que sean necesarias en la sección de Autorización de Clonado. mirror_address_url_invalid=La url proporcionada no es válida. Debe escapar correctamente de todos los componentes de la url. mirror_address_protocol_invalid=La url proporcionada no es válida. Sólo las ubicaciones http(s):// o git:// pueden ser replicadas desde. mirror_lfs=Almacenamiento de archivos grande (LFS) @@ -783,7 +783,6 @@ form.reach_limit_of_creation_n=Ya han alcanzado su límite de repositorios de %d form.name_reserved=El nombre de repositorio '%s' está reservado. form.name_pattern_not_allowed=El patrón '%s' no está permitido en un nombre de repositorio. -need_auth=Autorización de clonación migrate_options=Opciones de migración migrate_service=Servicio de Migración migrate_options_mirror_helper=Este repositorio será uno replicado diff --git a/options/locale/locale_fa-IR.ini b/options/locale/locale_fa-IR.ini index aa6f5e9dbbb4..ce9e429e3129 100644 --- a/options/locale/locale_fa-IR.ini +++ b/options/locale/locale_fa-IR.ini @@ -87,6 +87,7 @@ loading=بارگذاری… error404=صفحه موردنظر شما یا وجود ندارد یا شما دسترسی کافی برای مشاهده آن را ندارید. + [error] occurred=خطایی رخ داده است report_message=اگر شما مطمئن هستیند این مشکل مربوط به یک باگ در Gitea است، لطفا در GitHub مشکل را جستجو کنید و در صورت نیاز، یک موضوع جدید باز کنید. @@ -665,7 +666,6 @@ mirror_prune_desc=حذف منابع پیگیری‌راه‌دور منسوخ mirror_interval=بازه زمانی قرینه سازی (mirror) با 'h', 'm', 's'. برای غیر فعال کردن همگام سازی خودکار 0 بگذارید. mirror_interval_invalid=بازه زمانی سازی قرینه نیست. mirror_address=همسان‌سازی از نشانی -mirror_address_desc=هر گواهینامه لازم را در بخش Clone Authority (مجوز همسان‌سازی) قرار دهید. mirror_address_url_invalid=Url ارائه شده نامعتبر است. شما باید از تمام اجزای Url صحیح گزیر بزنید. mirror_address_protocol_invalid=نشانی ارائه شده غیرمعتبر است. فقط استفاده از http(s):// یا git:// می‌تواند قرینه شوند. mirror_last_synced=آخرین همگام سازی @@ -704,7 +704,6 @@ archive.pull.nocomment=این مخزن بایگانی شده. شما نمی تو form.name_reserved=یک مخزن با نام '%s' از قبل وجود دارد. form.name_pattern_not_allowed=الگوی %s در نام مخزن مجاز نیست. -need_auth=مجوز همسان‌سازی migrate_items=مولفه های مهاجرت migrate_items_wiki=دانشنامه migrate_items_milestones=نقاط عطف diff --git a/options/locale/locale_fi-FI.ini b/options/locale/locale_fi-FI.ini index 43f2f845ccf0..7d3db4c28cbe 100644 --- a/options/locale/locale_fi-FI.ini +++ b/options/locale/locale_fi-FI.ini @@ -81,6 +81,7 @@ loading=Ladataan… error404=Sivu, jota yrität nähdä, joko ei löydy tai et ole oikeutettu katsomaan sitä. + [error] occurred=Tapahtui virhe @@ -523,7 +524,6 @@ template.issue_labels=Ongelmien tunnisteet -need_auth=Kloonauksen valtuutus migrate_items=Siirrettävät asiat migrate_items_wiki=Wiki migrate_items_milestones=Merkkipaalut diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index e8e56585969f..c93bf817bd4f 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -93,6 +93,7 @@ step2=Étape 2: error404=La page que vous essayez d'atteindre n'existe pas ou vous n'êtes pas autorisé à la voir. + [error] occurred=Une erreur est survenue report_message=Si vous êtes sûr qu'il s'agit d'un bug de Gitea, cherchez s’il existe un ticket sur GitHub et ouvrez-en un nouveau si nécessaire. @@ -721,7 +722,6 @@ mirror_prune_desc=Supprimer les références externes obsolètes mirror_interval=Intervalle de synchronisation ('h', 'm', et 's' sont des unités valides), 0 pour désactiver. mirror_interval_invalid=L'intervalle de synchronisation est invalide. mirror_address=Cloner depuis une URL -mirror_address_desc=Mettez les identifiants requis dans la section Autorisation de Clonage. mirror_address_url_invalid=L'url fournie est invalide. Vous devez échapper tous les composants de l'url correctement. mirror_address_protocol_invalid=L'url fournie est invalide. Seuls les protocoles http(s):// ou git:// peuvent être la source du miroir. mirror_lfs=Stockage de fichiers volumineux (LFS) @@ -781,7 +781,6 @@ form.reach_limit_of_creation_n=Vous avez déjà atteint la limite de %d dépôts form.name_reserved=Le dépôt "%s" a un nom réservé. form.name_pattern_not_allowed="%s" n'est pas autorisé dans un nom de dépôt. -need_auth=Autorisations de clonage migrate_options=Options de migration migrate_service=Service de migration migrate_options_mirror_helper=Ce dépôt sera un miroir diff --git a/options/locale/locale_hu-HU.ini b/options/locale/locale_hu-HU.ini index 6e6a81e16a3e..0669c679ee4c 100644 --- a/options/locale/locale_hu-HU.ini +++ b/options/locale/locale_hu-HU.ini @@ -82,6 +82,7 @@ loading=Betöltés… error404=Az elérni kívánt oldal vagy nem létezik, vagy nincs jogosultsága a megtekintéséhez. + [error] occurred=Probléma lépett fel report_message=Ha biztos benne, hogy ez egy Gitea hiba, keressen a problémára a GitHub-on és hozzon létre új hibajelentést, ha szükséges. @@ -631,7 +632,6 @@ archive.pull.nocomment=Ez a tároló archíválva van. Nem szólhat hozzá ehhez form.name_reserved=A tárolónév ('%s') a rendszernek van fenntartva. form.name_pattern_not_allowed='%s' minta nem engedélyezett tárolónévben. -need_auth=Hitelesítés másoláshoz migrate_items_wiki=Wiki migrate_items_milestones=Mérföldkövek migrate_items_labels=Címkék diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini index 1cb3e1f0f0c6..d96dea88fb21 100644 --- a/options/locale/locale_id-ID.ini +++ b/options/locale/locale_id-ID.ini @@ -81,6 +81,7 @@ loading=Memuat… + [error] [startpage] @@ -639,7 +640,6 @@ archive.pull.nocomment=Repositori ini diarsipkan. Anda tidak dapat mengomentari form.name_reserved=Nama repositori '%s' dicadangkan. form.name_pattern_not_allowed=Pola '%s' tidak diperbolehkan dalam nama repositori. -need_auth=Otorisasi Kloning migrate_items=Ihwal Migrasi migrate_items_wiki=Wiki migrate_repo=Migrasi Repositori diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini index 869f1a1e5b15..f9d0a869cf7c 100644 --- a/options/locale/locale_it-IT.ini +++ b/options/locale/locale_it-IT.ini @@ -93,6 +93,7 @@ step2=Passo 2: error404=La pagina che stai cercando di raggiungere non esiste oppure non sei autorizzato a visualizzarla. + [error] occurred=Si è verificato un errore report_message=Se sei sicuro che sia un bug di Gitea, cerca il problema su GitHub e apri una nuova segnalazione se necessario. @@ -702,7 +703,6 @@ mirror_prune_desc=Rimuovi i riferimenti di puntamento-remoto obsoleti mirror_interval=Intervallo del Mirror (unità di tempo valide 'h', 'm', 's'). 0 per disabilitare la sincronizzazione automatica. mirror_interval_invalid=L'intervallo di aggiornamento dei mirror non è valido. mirror_address=Clona da URL -mirror_address_desc=Inserisci le credenziali richieste nella scheda Clone sezione Autorizzazione. mirror_address_url_invalid=L'url fornito non è valido. Devi effettuare l'escape completo tutti i componenti dell'Url. mirror_address_protocol_invalid=L'url fornito non è valido. Solo dai link http(s):// o git:// possono essere replicate. mirror_last_synced=Ultima sincronizzazione @@ -755,7 +755,6 @@ archive.pull.nocomment=Questo repository è archiviato. Non puoi commentare le r form.name_reserved=Il nome repository '%s' è riservato. form.name_pattern_not_allowed=Il modello '%s' non è consentito come nome di un repository. -need_auth=Autorizzazione clone migrate_options=Opzioni di migrazione migrate_service=Servizio migrazione migrate_options_mirror_helper=Questo repository sarà un mirror diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini index a2bc8860e37f..c93bf48802a3 100644 --- a/options/locale/locale_ja-JP.ini +++ b/options/locale/locale_ja-JP.ini @@ -93,6 +93,7 @@ step2=ステップ 2: error404=アクセスしようとしたページは存在しないか、閲覧が許可されていません。 + [error] occurred=エラーが発生しました report_message=Giteaのバグが疑われる場合は、GitHubでIssueを検索して、見つからなければ新しいIssueを作成してください。 @@ -723,7 +724,6 @@ mirror_prune_desc=不要になった古いリモートトラッキング参照 mirror_interval=ミラー間隔 (有効な時間の単位は'h'、'm'、's')。 自動的な同期を無効にする場合は0。 mirror_interval_invalid=ミラー間隔が不正です。 mirror_address=クローンするURL -mirror_address_desc=必要な資格情報は「クローン時の認証」セクションに設定してください。 mirror_address_url_invalid=入力したURLは無効です。 URLの構成要素はすべて正しくエスケープする必要があります。 mirror_address_protocol_invalid=入力したURLは無効です。 ミラーできるのは、http(s):// または git:// の場所からだけです。 mirror_lfs=Large File Storage (LFS) @@ -786,7 +786,6 @@ form.reach_limit_of_creation_n=すでにあなたが作成できるリポジト form.name_reserved=リポジトリ名 '%s' は予約されています。 form.name_pattern_not_allowed='%s' の形式はリポジトリ名に使用できません。 -need_auth=クローン時の認証 migrate_options=移行オプション migrate_service=移行するサービス migrate_options_mirror_helper=このリポジトリをミラーにする diff --git a/options/locale/locale_ko-KR.ini b/options/locale/locale_ko-KR.ini index b8d5f21dc36c..acf7efb4786c 100644 --- a/options/locale/locale_ko-KR.ini +++ b/options/locale/locale_ko-KR.ini @@ -81,6 +81,7 @@ loading=불러오는 중... + [error] [startpage] @@ -593,7 +594,6 @@ template.topics=토론 주제 form.name_reserved=저장소 이름 '%s'은 예약 되어 있습니다. form.name_pattern_not_allowed='%s' 패턴은 저장소명으로 허용되지 않습니다. -need_auth=클론시 인증 migrate_items_wiki=위키 migrate_items_issues=이슈 migrate_repo=저장소 마이그레이션 diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini index c427b3772783..f4db35671ac9 100644 --- a/options/locale/locale_lv-LV.ini +++ b/options/locale/locale_lv-LV.ini @@ -93,6 +93,7 @@ step2=Solis 2: error404=Lapa, ko vēlaties atvērt, neeksistē vai arī Jums nav tiesības to aplūkot. + [error] occurred=Radusies kļūda report_message=Ja esat drošs, ka šī ir Gitea kļūda, pirms ziņošanas Gitea problēmās pārliecinieties, ka lietojat jaunāko Gitea versiju un par šādu kļūdu jau nav ziņots. @@ -717,7 +718,6 @@ mirror_prune_desc=Izdzēst visas ārējās atsauces, kas ārējā repozitorijā mirror_interval=Spoguļošanas biežums (atļautās laika vienības 'h', 'm' un 's'). Ievadiet 0, lai atslēgtu automātisko spoguļošanu. mirror_interval_invalid=Nekorekts spoguļošanas intervāls. mirror_address=Spoguļa adrese -mirror_address_desc=Pieslēgšanās rekvizītus norādiet autorizācijas sadaļā. mirror_address_url_invalid=Norādītais URL nav korekts. Norādiet visas URL daļas korekti. mirror_address_protocol_invalid=Norādītais URL nav korekts. Var spoguļot tikai no http(s):// vai git:// adresēm. mirror_last_synced=Pēdējo reizi sinhronizēts @@ -773,7 +773,6 @@ form.reach_limit_of_creation_n=Sasniegts Jums noteiktais %d repozitoriju ierobe form.name_reserved=Repozitorija nosaukums '%s' ir jau rezervēts. form.name_pattern_not_allowed=Repozitorija nosaukums '%s' nav atļauts. -need_auth=Nepieciešama autorizācija migrate_options=Migrācijas opcijas migrate_service=Migrācijas serviss migrate_options_mirror_helper=Šis repozitorijs būs spogulis diff --git a/options/locale/locale_ml-IN.ini b/options/locale/locale_ml-IN.ini index 04c6b22b7f8e..c3705182f839 100644 --- a/options/locale/locale_ml-IN.ini +++ b/options/locale/locale_ml-IN.ini @@ -75,6 +75,7 @@ loading=ലഭ്യമാക്കുന്നു… + [error] [startpage] @@ -611,7 +612,6 @@ archive.pull.nocomment=ഈ കലവറ ചരിത്രപരമായി ന form.name_reserved='%s' എന്ന കലവറയുടെ പേരു് മറ്റാവശ്യങ്ങള്‍ക്കായി നീക്കിവച്ചിരിക്കുന്നു. form.name_pattern_not_allowed=കലവറനാമത്തിൽ '%s' എന്ന ശ്രേണി അനുവദനീയമല്ല. -need_auth=ക്ലോൺ അംഗീകാരിയ്ക്കുക migrate_items=മൈഗ്രേഷൻ ഇനങ്ങൾ migrate_items_wiki=വിക്കി migrate_items_milestones=നാഴികക്കല്ലുകള്‍ diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini index 21e0e0968e40..611fe52a335b 100644 --- a/options/locale/locale_nl-NL.ini +++ b/options/locale/locale_nl-NL.ini @@ -89,6 +89,7 @@ loading=Laden… error404=De pagina die u probeert te bereiken bestaat niet of u bent niet gemachtigd om het te bekijken. + [error] occurred=Er is een fout opgetreden report_message=Als je zeker weet dat dit een Gitea bug is, zoek dan naar een issue op GitHub en open zo nodig een nieuw issue. @@ -687,7 +688,6 @@ mirror_prune_desc=Verwijder verouderde remote-tracking-referenties mirror_interval=Kopie-interval (geldige tijdseenheden zijn 'h', 'm' en 's'). 0 om automatische synchronisatie uit te schakelen. mirror_interval_invalid=Kloon-interval is niet geldig. mirror_address=Klonen van URL -mirror_address_desc=Voeg alle vereiste inloggegevens toe in de kloon autorisatiesectie. mirror_address_url_invalid=De opgegeven url is ongeldig. U dient alle componenten van de url correct te escapen. mirror_address_protocol_invalid=De opgegeven url is ongeldig. Alleen http(s):// of git:// locaties kunnen worden gemirrord. mirror_last_synced=Laatst gesynchroniseerd @@ -735,7 +735,6 @@ archive.pull.nocomment=Deze repo is gearchiveerd. U kunt niet reageren op pull r form.name_reserved=Repositorienaam '%s' is gereserveerd. form.name_pattern_not_allowed=Het patroon '%s' is niet toegestaan in de naam van een repository. -need_auth=Authenticatie benodigd om te klonen migrate_options=Migratie opties migrate_service=Migratie Service migrate_options_mirror_helper=Deze repository zal een kopie zijn diff --git a/options/locale/locale_pl-PL.ini b/options/locale/locale_pl-PL.ini index 60849cd7cbbe..718b79da0f67 100644 --- a/options/locale/locale_pl-PL.ini +++ b/options/locale/locale_pl-PL.ini @@ -87,6 +87,7 @@ loading=Ładowanie… error404=Strona, do której próbujesz dotrzeć nie istnieje lub nie jesteś autoryzowany aby go zobaczyć. + [error] occurred=Wystąpił błąd report_message=Jeśli jesteś pewien, że jest to błąd w Gitea, poszukaj problemu na GitHub i w razie potrzeby otwórz nowe zgłoszenie. @@ -663,7 +664,6 @@ mirror_prune_desc=Usuń przestarzałe odwołania do zdalnych śledzeń mirror_interval=Przedział czasowy dla tworzenia kopii lustrzanej (prawidłowe jednostki czasu to 'h' (godziny), 'm', 's'). 0, aby wyłączyć automatyczną synchronizację. mirror_interval_invalid=Interwał lustrzanej kopii jest niepoprawny. mirror_address=Sklonuj z adresu URL -mirror_address_desc=Wpisz wymagane dane uwierzytelnienia w sekcji Autoryzacja klonowania. mirror_address_url_invalid=Podany adres URL jest niewłaściwy. Musisz poprawnie escape'ować wszystkie jego elementy. mirror_address_protocol_invalid=Podany adres URL jest niewłaściwy. Tylko z http(s):// lub git:// można utworzyć kopie lustrzane. mirror_last_synced=Ostatnio zsynchronizowano @@ -702,7 +702,6 @@ archive.pull.nocomment=To repozytorium jest zarchiwizowane. Nie możesz komentow form.name_reserved=Nazwa repozytorium „%s” jest zarezerwowana. form.name_pattern_not_allowed=Wzór "%s" nie jest dozwolony w nazwie repozytorium. -need_auth=Autoryzacja klonowania migrate_items=Składniki migracji migrate_items_wiki=Wiki migrate_items_milestones=Kamienie milowe diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index 0712107781b2..fc53fabc0c58 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -93,6 +93,7 @@ step2=Passo 2: error404=A página que você está tentando acessar não existe ou você não está autorizado a visualizá-la. + [error] occurred=Ocorreu um erro report_message=Se você tem certeza de que se trata de um bug do Gitea, por favor, procure a issue no GitHub e abra novas issues se necessário. @@ -717,7 +718,6 @@ mirror_prune_desc=Remover referências obsoletas de controle remoto mirror_interval=Intervalo de espelhamento (as unidades de tempo válidas são 'h', 'm', 's'). 0 para desativar a sincronização automática. mirror_interval_invalid=O intervalo do espelhamento não é válido. mirror_address=Clonar de URL -mirror_address_desc=Coloque qualquer credencial necessária na seção de Autorização de Clone. mirror_address_url_invalid=A url fornecida é inválida. Você deve escapar todos os componentes da url corretamente. mirror_address_protocol_invalid=A url fornecida é inválida. Apenas http(s):// ou git:// podem ser espelhados. mirror_last_synced=Última sincronização @@ -771,7 +771,6 @@ form.reach_limit_of_creation_n=Você já atingiu o limite de %d repositórios. form.name_reserved=O nome de repositório '%s' está reservado e não pode ser usado. form.name_pattern_not_allowed=O padrão de '%s' não é permitido em um nome de repositório. -need_auth=Autorização de clone migrate_options=Opções de Migração migrate_service=Serviço de Migração migrate_options_mirror_helper=Este repositório será um espelho diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini index c3dcabf50f95..a8d4b5f70f9d 100644 --- a/options/locale/locale_pt-PT.ini +++ b/options/locale/locale_pt-PT.ini @@ -93,6 +93,7 @@ step2=Passo 2: error404=A página que pretende aceder não existe ou não tem autorização para a ver. + [error] occurred=Ocorreu um erro report_message=Se tiver certeza de que se trata de um erro do Gitea, por favor, procure a questão no GitHub e abra uma nova questão, se necessário. @@ -720,7 +721,7 @@ mirror_prune_desc=Remover referências obsoletas de seguimento remoto mirror_interval=Intervalo de espelhamento (as unidade de tempo válidas são 'h', 'm' e 's'). O valor zero desabilita a sincronização automática. mirror_interval_invalid=O intervalo do espelhamento não é válido. mirror_address=Clonar a partir do URL -mirror_address_desc=Coloque, na secção de Autorização de Clonagem, as credenciais que, eventualmente, sejam necessárias. +mirror_address_desc=Coloque, na secção de Autorização, as credenciais que, eventualmente, sejam necessárias. mirror_address_url_invalid=O URL fornecido é inválido. Tem que codificar adequadamente todos os componentes do URL. mirror_address_protocol_invalid=O URL fornecido é inválido. Só se pode espelhar a partir de endereços http(s):// ou git://. mirror_lfs=Armazenamento de Ficheiros Grandes (LFS) @@ -779,7 +780,7 @@ form.reach_limit_of_creation_n=Já atingiu o seu limite de %d repositórios. form.name_reserved=O nome de repositório '%s' está reservado. form.name_pattern_not_allowed=O padrão '%s' não é permitido no nome de um repositório. -need_auth=Autorização de clonagem +need_auth=Autorização migrate_options=Opções de migração migrate_service=Serviço de migração migrate_options_mirror_helper=Este repositório irá ser um espelho @@ -1530,6 +1531,10 @@ settings.hooks=Automatismos web settings.githooks=Automatismos do Git settings.basic_settings=Configurações básicas settings.mirror_settings=Configurações do espelhamento +settings.mirror_settings.docs=Configure o seu repositório para puxar e/ou enviar automaticamente as modificações de/para outro repositório. Ramos, etiquetas e cometimentos serão sincronizados automaticamente. Como é que eu faço um espelho de outro repositório? +settings.mirror_settings.push_mirror.none=Não foram configurados quaisquer espelhos de envio +settings.mirror_settings.push_mirror.remote_url=URL do repositório remoto Git +settings.mirror_settings.push_mirror.add=Adicionar espelho de envio settings.sync_mirror=Sincronizar agora settings.mirror_sync_in_progress=A sincronização do espelho está em andamento. Volte a verificar daqui a um minuto. settings.email_notifications.enable=Habilitar notificações por email @@ -1538,6 +1543,7 @@ settings.email_notifications.disable=Desabilitar notificações por email settings.email_notifications.submit=Definir preferência do email settings.site=Sítio web settings.update_settings=Modificar configurações +settings.branches.update_default_branch=Modificar o ramo padrão settings.advanced_settings=Configurações avançadas settings.wiki_desc=Habilitar wiki do repositório settings.use_internal_wiki=Usar o wiki nativo @@ -1962,6 +1968,10 @@ branch.restore=Restaurar ramo '%s' branch.download=Descarregar o ramo '%s' branch.included_desc=Este ramo faz parte do ramo padrão branch.included=Incluído +branch.create_new_branch=Criar ramo a partir do ramo: +branch.confirm_create_branch=Criar ramo +branch.new_branch=Criar um novo ramo +branch.new_branch_from=Criar um novo ramo a partir do ramo '%s' tag.create_tag=Criar etiqueta %s tag.create_success=A etiqueta '%s' foi criada. diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 6634b0681097..0f6361d6f52e 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -93,6 +93,7 @@ step2=Шаг 2: error404=Страница, которую вы пытаетесь открыть, либо не существует, либо вы не авторизованы для ее просмотра. + [error] occurred=Произошла ошибка report_message=Если вы уверены, что это ошибка Gitea, пожалуйста, проверьте наличие существующей проблемы на GitHub и откройте новую при необходимости. @@ -717,7 +718,6 @@ mirror_prune_desc=Удаление устаревших отслеживаемы mirror_interval=Интервал зеркалирования (допустимые единицы измерения 'h', 'm', 's'). Значение 0 отключает синхронизацию. mirror_interval_invalid=Недопустимый интервал зеркалирования. mirror_address=Клонировать по URL -mirror_address_desc=Поместите все необходимые учётные данные в раздел Авторизация клона. mirror_address_url_invalid=Указанный url неверный. Вы должны правильно экранировать все компоненты url. mirror_address_protocol_invalid=Указанный url неверный. Только http(s):// или git:// местоположения могут быть зеркалированы. mirror_last_synced=Последняя синхронизация @@ -773,7 +773,6 @@ form.reach_limit_of_creation_n=Вы уже достигли ваш предел form.name_reserved=Название репозитория '%s' зарезервировано. form.name_pattern_not_allowed=Шаблон имени репозитория '%s' не допускается. -need_auth=Требуется авторизация migrate_options=Параметры миграции migrate_service=Сервис миграции migrate_options_mirror_helper=Этот репозиторий будет зеркалом diff --git a/options/locale/locale_sr-SP.ini b/options/locale/locale_sr-SP.ini index 8b11a0b3bfb9..06df78a4f5c9 100644 --- a/options/locale/locale_sr-SP.ini +++ b/options/locale/locale_sr-SP.ini @@ -37,6 +37,7 @@ cancel=Откажи + [error] [startpage] diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index 6d05498f5dad..c340c55a4ca1 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -89,6 +89,7 @@ loading=Laddar… error404=Sidan du försöker nå finns inte eller så har du inte behörighet att se den. + [error] occurred=Ett fel har inträffat report_message=Om du är säker på att detta är en Gitea bugg, vänligen sök efter ärende på GitHub och öppna nytt ärende om det behövs. @@ -673,7 +674,6 @@ mirror_prune_desc=Ta bort förlegade fjärrföljande referenser mirror_interval=Intervall för spegling (giltiga enheter är 'h', 'm', 's'). 0 stänger av automatisk synkronisering. mirror_interval_invalid=Speglingsintervallen är inte giltig. mirror_address=Klona Från URL -mirror_address_desc=Fyll i alla nödvändiga uppgifter i avsnittet Klona Auktorisering. mirror_address_url_invalid=Den angivna webbadressen är ogiltig. Du måste "escapa" alla delar av webbadressen korrekt. mirror_address_protocol_invalid=Den angivna webbadressen är ogiltig. Endast http(s):// eller git:// platser går att spegla från. mirror_last_synced=Senaste Synkronisering @@ -716,7 +716,6 @@ archive.pull.nocomment=Den här utvecklingskatalogen är arkiverad. Du kan inte form.name_reserved=Utvecklingskatalogsnamnet '%s' är reserverat. form.name_pattern_not_allowed=Mönstret '%s' är otillåtet i ett utvecklingskatalogsnamn. -need_auth=Klona Auktorisering migrate_options=Migrationsalternativ migrate_service=Migreringstjänst migrate_options_mirror_helper=Denna utvecklingskatalog kommer att vara en spegel diff --git a/options/locale/locale_tr-TR.ini b/options/locale/locale_tr-TR.ini index 83008812cb82..90bce5f7b0e3 100644 --- a/options/locale/locale_tr-TR.ini +++ b/options/locale/locale_tr-TR.ini @@ -91,8 +91,11 @@ loading=Yükleniyor… step1=1. Adım: step2=2. Adım: +error=Hata error404=Ulaşmaya çalıştığınız sayfa mevcut değil veya görüntüleme yetkiniz yok. +never=Asla + [error] occurred=Bir hata oluştu report_message=Bunun bir Gitea hatası olduğundan eminseniz, lütfen GitHub 'da sorunu arayın ve gerekirse yeni bir sorun açın. @@ -723,7 +726,7 @@ mirror_prune_desc=Kullanılmayan uzak depoları izleyen referansları kaldır mirror_interval=Yansı Aralığı (geçerli zaman birimleri 'h', 'm', 's'). 0 otomatik senkronizasyonu devre dışı bırakmak için. mirror_interval_invalid=Yansı süre aralığı geçerli değil. mirror_address=URL'den Klonla -mirror_address_desc=Gerekli kimlikleri Yetkilendirmeyi Klonla bölümüne girin. +mirror_address_desc=Yetkilendirme bölümüne gerekli tüm kimlik bilgilerini girin. mirror_address_url_invalid=Sağlanan Url geçersiz. Url'nin tüm bileşenlerinden doğru olarak kaçmalısınız. mirror_address_protocol_invalid=Sağlanan url geçersiz. Yalnızca http(s):// veya git:// konumları yansıtılabilir. mirror_lfs=Büyük Dosya Depolama (LFS) @@ -786,7 +789,7 @@ form.reach_limit_of_creation_n=Zaten %d depo limitinize ulaştınız. form.name_reserved=Depo ismi '%s' rezerve edildi. form.name_pattern_not_allowed='%s' deseni, depo adı için geçerli değildir. -need_auth=Yetkilendirmeyi Klonla +need_auth=Yetkilendirme migrate_options=Göç Seçenekleri migrate_service=Göç Hizmeti migrate_options_mirror_helper=Bu depo bir yansı olacaktır @@ -1547,6 +1550,15 @@ settings.hooks=Web İstemcileri settings.githooks=Git İstekleri settings.basic_settings=Temel Ayarlar settings.mirror_settings=Yansıma Ayarları +settings.mirror_settings.docs=Projenizi, değişiklikleri başka bir depoya/depodan otomatik olarak gönderecek ve/veya çekecek şekilde ayarlayın. Dallar, etiketler ve işlemeler otomatik olarak senkronize edilecektir. Depoları nasıl yansıtrım? +settings.mirror_settings.mirrored_repository=Yansıtılmış depo +settings.mirror_settings.direction=Yön +settings.mirror_settings.direction.pull=Çek +settings.mirror_settings.direction.push=Gönder +settings.mirror_settings.last_update=Son güncelleme +settings.mirror_settings.push_mirror.none=Yapılandırılmış yansı gönderimi yok +settings.mirror_settings.push_mirror.remote_url=Git Uzak Depo URL'si +settings.mirror_settings.push_mirror.add=Yansı Gönderimi Ekle settings.sync_mirror=Şimdi Eşitle settings.mirror_sync_in_progress=Yansı senkronizasyonu devam ediyor. Bir dakika sonra tekrar kontrol edin. settings.email_notifications.enable=E-posta Bildirimlerini Etkinleştir @@ -1612,6 +1624,7 @@ settings.transfer_form_title=Onaylamak için depo adını girin: settings.transfer_in_progress=Şu anda devam etmekte olan bir aktarım mevcut. Eğer bu depoyu başka bir kullanıcıya aktarmak istiyorsanız mevcut aktarımı iptal edin. settings.transfer_notices_1=- Bireysel bir kullanıcıya aktarırsanız depoya erişiminizi kaybedersiniz. settings.transfer_notices_2=- Sahip (-yardımcı) olduğunuz bir organizasyona devrederseniz, depoya erişmeye devam edersiniz. +settings.transfer_notices_3=- Depo özelse ve bireysel bir kullanıcıya aktarılmışsa, bu eylem kullanıcının en azından okuma iznine sahip olmasını sağlar (ve gerekirse izinleri değiştirir). settings.transfer_owner=Yeni Sahip settings.transfer_perform=Aktarımı Gerçekleştir settings.transfer_started=Bu depo aktarılmak üzere işaretlendi ve "%s" tarafından onay bekliyor diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index dabf82cfd5f1..3bd41ca372a7 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -87,6 +87,7 @@ loading=Завантаження… error404=Сторінка, до якої ви намагаєтеся звернутися або до , не існує або Ви не маєте права на її перегляд. + [error] occurred=Сталася помилка report_message=Якщо ви впевнені, що це помилка Gitea, будь ласка, спробуйте відшукати відповідну проблему на GitHub та за відсутності створіть нову. @@ -663,7 +664,6 @@ mirror_prune_desc=Видалення застарілих посилань як mirror_interval=Інтервал дзеркалювання (допустимі значення 'h', 'm', 's'). 0 - щоб вимкнути автоматичну синхронізацію. mirror_interval_invalid=Інтервал дзеркалювання є неприпустимим. mirror_address=Клонування з URL-адреси -mirror_address_desc=Покласти будь-які необхідні облікові дані у розділі клонування авторизації. mirror_address_url_invalid=Надана URL-адреса є неприпустимою. Ви повинні екранувати всі компоненти URL-адреси правильно. mirror_address_protocol_invalid=Надана URL-адреса є неприпустимою. Тільки http(s):// або git:// можливо використовувати при дзеркальні. mirror_last_synced=Остання синхронізація @@ -702,7 +702,6 @@ archive.pull.nocomment=Це архівний репозитарій. Ви не form.name_reserved=Назву репозиторію '%s' зарезервовано. form.name_pattern_not_allowed=Шаблон '%s' не дозволено в назві репозиторія. -need_auth=Клонувати з авторизацією migrate_items=Деталі міграції migrate_items_wiki=Вікі migrate_items_milestones=Етапи diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 194d1074bb1a..fd59289b16a3 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -93,6 +93,7 @@ step2=第二步: error404=您正尝试访问的页面 不存在您尚未被授权 查看该页面。 + [error] occurred=发生错误 report_message=如果您确定这是一个 Gitea bug,请在 GitHub 上搜索问题,并在必要时打开新问题。 @@ -723,7 +724,6 @@ mirror_prune_desc=删除过时的远程跟踪引用 mirror_interval=镜像间隔 (有效时间单位为 "h"、"m"、"s")。0将禁用自动同步。 mirror_interval_invalid=镜像间隔无效。 mirror_address=从URL克隆 -mirror_address_desc=在 Clone 认证部分里输入必要的信息。 mirror_address_url_invalid=URL无效。请检查您所输入的URL是否正确。 mirror_address_protocol_invalid=提供的 url 无效。只能从 http(s):// 或 git:// 位置进行镜像。 mirror_lfs=大文件存储 (LFS) @@ -786,7 +786,6 @@ form.reach_limit_of_creation_n=你已经达到了 %d 个仓库的上限。 form.name_reserved=仓库名称 '%s' 是被保留的。 form.name_pattern_not_allowed=仓库名称中不允许使用模式 "%s"。 -need_auth=需要授权验证 migrate_options=迁移选项 migrate_service=迁移服务 migrate_options_mirror_helper=该仓库将是一个 镜像 diff --git a/options/locale/locale_zh-HK.ini b/options/locale/locale_zh-HK.ini index 2b258d10ab64..88d77db30be2 100644 --- a/options/locale/locale_zh-HK.ini +++ b/options/locale/locale_zh-HK.ini @@ -44,6 +44,7 @@ cancel=取消 + [error] [startpage] diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index 44adc0087df9..0d6f55231bbf 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -93,6 +93,7 @@ step2=第二步: error404=您正嘗試訪問的頁面 不存在您尚未被授權 查看該頁面。 + [error] occurred=發生錯誤 report_message=如果你確定這是一個 Gitea 的 bug,請去 GitHub 搜尋相關的問題,如果有需要你也可以開一個新的問題 @@ -722,7 +723,6 @@ mirror_prune_desc=刪除過時的遠端追蹤參考 mirror_interval=鏡像間隔(有效時間單位為 'h'、'm'、's')。設為 0 以停用自動同步。 mirror_interval_invalid=鏡像週期無效 mirror_address=從 URL Clone -mirror_address_desc=在 Clone 授權資訊中填入必要的資料。 mirror_address_url_invalid=提供的網址無效。請檢查您輸入的網址是否正確。 mirror_address_protocol_invalid=提供的網址無效。只能從 http(s):// 或是 git:// 位址鏡像儲存庫。 mirror_lfs=Large File Storage (LFS) @@ -785,7 +785,6 @@ form.reach_limit_of_creation_n=您已經達到了您儲存庫的數量上限 (%d form.name_reserved=儲存庫名稱 '%s' 是預留的。 form.name_pattern_not_allowed=儲存庫名稱無法使用 "%s"。 -need_auth=Clone 授權資訊 migrate_options=遷移選項 migrate_service=遷移服務 migrate_options_mirror_helper=將此儲存庫設定為鏡像儲存庫 diff --git a/routers/api/v1/notify/notifications.go b/routers/api/v1/notify/notifications.go index 71dd7d949267..a5e095a3b5c2 100644 --- a/routers/api/v1/notify/notifications.go +++ b/routers/api/v1/notify/notifications.go @@ -6,10 +6,12 @@ package notify import ( "net/http" + "strings" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/routers/api/v1/utils" ) // NewAvailable check if unread notifications exist @@ -22,3 +24,44 @@ func NewAvailable(ctx *context.APIContext) { // "$ref": "#/responses/NotificationCount" ctx.JSON(http.StatusOK, api.NotificationCount{New: models.CountUnread(ctx.User)}) } + +func getFindNotificationOptions(ctx *context.APIContext) *models.FindNotificationOptions { + before, since, err := utils.GetQueryBeforeSince(ctx) + if err != nil { + ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err) + return nil + } + opts := &models.FindNotificationOptions{ + ListOptions: utils.GetListOptions(ctx), + UserID: ctx.User.ID, + UpdatedBeforeUnix: before, + UpdatedAfterUnix: since, + } + if !ctx.QueryBool("all") { + statuses := ctx.QueryStrings("status-types") + opts.Status = statusStringsToNotificationStatuses(statuses, []string{"unread", "pinned"}) + } + + subjectTypes := ctx.QueryStrings("subject-type") + if len(subjectTypes) != 0 { + opts.Source = subjectToSource(subjectTypes) + } + + return opts +} + +func subjectToSource(value []string) (result []models.NotificationSource) { + for _, v := range value { + switch strings.ToLower(v) { + case "issue": + result = append(result, models.NotificationSourceIssue) + case "pull": + result = append(result, models.NotificationSourcePullRequest) + case "commit": + result = append(result, models.NotificationSourceCommit) + case "repository": + result = append(result, models.NotificationSourceRepository) + } + } + return +} diff --git a/routers/api/v1/notify/repo.go b/routers/api/v1/notify/repo.go index 0a75fcd30a1d..4deb16a22759 100644 --- a/routers/api/v1/notify/repo.go +++ b/routers/api/v1/notify/repo.go @@ -13,7 +13,6 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/convert" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/routers/api/v1/utils" ) func statusStringToNotificationStatus(status string) models.NotificationStatus { @@ -67,7 +66,6 @@ func ListRepoNotifications(ctx *context.APIContext) { // in: query // description: If true, show notifications marked as read. Default value is false // type: string - // required: false // - name: status-types // in: query // description: "Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread & pinned" @@ -75,19 +73,24 @@ func ListRepoNotifications(ctx *context.APIContext) { // collectionFormat: multi // items: // type: string - // required: false + // - name: subject-type + // in: query + // description: "filter notifications by subject type" + // type: array + // collectionFormat: multi + // items: + // type: string + // enum: [issue,pull,commit,repository] // - name: since // in: query // description: Only show notifications updated after the given time. This is a timestamp in RFC 3339 format // type: string // format: date-time - // required: false // - name: before // in: query // description: Only show notifications updated before the given time. This is a timestamp in RFC 3339 format // type: string // format: date-time - // required: false // - name: page // in: query // description: page number of results to return (1-based) @@ -99,24 +102,12 @@ func ListRepoNotifications(ctx *context.APIContext) { // responses: // "200": // "$ref": "#/responses/NotificationThreadList" - - before, since, err := utils.GetQueryBeforeSince(ctx) - if err != nil { - ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err) + opts := getFindNotificationOptions(ctx) + if ctx.Written() { return } - opts := models.FindNotificationOptions{ - ListOptions: utils.GetListOptions(ctx), - UserID: ctx.User.ID, - RepoID: ctx.Repo.Repository.ID, - UpdatedBeforeUnix: before, - UpdatedAfterUnix: since, - } + opts.RepoID = ctx.Repo.Repository.ID - if !ctx.QueryBool("all") { - statuses := ctx.QueryStrings("status-types") - opts.Status = statusStringsToNotificationStatuses(statuses, []string{"unread", "pinned"}) - } nl, err := models.GetNotifications(opts) if err != nil { ctx.InternalServerError(err) @@ -192,7 +183,7 @@ func ReadRepoNotifications(ctx *context.APIContext) { } } - opts := models.FindNotificationOptions{ + opts := &models.FindNotificationOptions{ UserID: ctx.User.ID, RepoID: ctx.Repo.Repository.ID, UpdatedBeforeUnix: lastRead, diff --git a/routers/api/v1/notify/user.go b/routers/api/v1/notify/user.go index e739c6a38dd8..1ff62622b001 100644 --- a/routers/api/v1/notify/user.go +++ b/routers/api/v1/notify/user.go @@ -12,7 +12,6 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/convert" - "code.gitea.io/gitea/routers/api/v1/utils" ) // ListNotifications list users's notification threads @@ -29,7 +28,6 @@ func ListNotifications(ctx *context.APIContext) { // in: query // description: If true, show notifications marked as read. Default value is false // type: string - // required: false // - name: status-types // in: query // description: "Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread & pinned." @@ -37,19 +35,24 @@ func ListNotifications(ctx *context.APIContext) { // collectionFormat: multi // items: // type: string - // required: false + // - name: subject-type + // in: query + // description: "filter notifications by subject type" + // type: array + // collectionFormat: multi + // items: + // type: string + // enum: [issue,pull,commit,repository] // - name: since // in: query // description: Only show notifications updated after the given time. This is a timestamp in RFC 3339 format // type: string // format: date-time - // required: false // - name: before // in: query // description: Only show notifications updated before the given time. This is a timestamp in RFC 3339 format // type: string // format: date-time - // required: false // - name: page // in: query // description: page number of results to return (1-based) @@ -61,22 +64,11 @@ func ListNotifications(ctx *context.APIContext) { // responses: // "200": // "$ref": "#/responses/NotificationThreadList" - - before, since, err := utils.GetQueryBeforeSince(ctx) - if err != nil { - ctx.Error(http.StatusUnprocessableEntity, "GetQueryBeforeSince", err) + opts := getFindNotificationOptions(ctx) + if ctx.Written() { return } - opts := models.FindNotificationOptions{ - ListOptions: utils.GetListOptions(ctx), - UserID: ctx.User.ID, - UpdatedBeforeUnix: before, - UpdatedAfterUnix: since, - } - if !ctx.QueryBool("all") { - statuses := ctx.QueryStrings("status-types") - opts.Status = statusStringsToNotificationStatuses(statuses, []string{"unread", "pinned"}) - } + nl, err := models.GetNotifications(opts) if err != nil { ctx.InternalServerError(err) @@ -141,7 +133,7 @@ func ReadNotifications(ctx *context.APIContext) { lastRead = tmpLastRead.Unix() } } - opts := models.FindNotificationOptions{ + opts := &models.FindNotificationOptions{ UserID: ctx.User.ID, UpdatedBeforeUnix: lastRead, } diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index e3ac4a4c8a68..8ad9ae5a43bf 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -645,6 +645,22 @@ "name": "status-types", "in": "query" }, + { + "type": "array", + "items": { + "enum": [ + "issue", + "pull", + "commit", + "repository" + ], + "type": "string" + }, + "collectionFormat": "multi", + "description": "filter notifications by subject type", + "name": "subject-type", + "in": "query" + }, { "type": "string", "format": "date-time", @@ -6805,6 +6821,22 @@ "name": "status-types", "in": "query" }, + { + "type": "array", + "items": { + "enum": [ + "issue", + "pull", + "commit", + "repository" + ], + "type": "string" + }, + "collectionFormat": "multi", + "description": "filter notifications by subject type", + "name": "subject-type", + "in": "query" + }, { "type": "string", "format": "date-time",