From ee422ae8f5d2bd1c5ec2e9462336351478d26919 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Wed, 14 Dec 2022 23:10:47 +0100 Subject: [PATCH] Add extension: Jellyfin (#1076) Co-authored-by: jmir1 --- src/all/jellyfin/AndroidManifest.xml | 2 + src/all/jellyfin/build.gradle | 16 + .../jellyfin/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3748 bytes .../jellyfin/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2134 bytes .../jellyfin/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5289 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9746 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15387 bytes src/all/jellyfin/res/web_hi_res_512.png | Bin 0 -> 58717 bytes .../all/jellyfin/JFConstants.kt | 168 +++++ .../animeextension/all/jellyfin/Jellyfin.kt | 603 ++++++++++++++++++ .../all/jellyfin/JellyfinAuthenticator.kt | 80 +++ 11 files changed, 869 insertions(+) create mode 100644 src/all/jellyfin/AndroidManifest.xml create mode 100644 src/all/jellyfin/build.gradle create mode 100644 src/all/jellyfin/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/web_hi_res_512.png create mode 100644 src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JFConstants.kt create mode 100644 src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt create mode 100644 src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinAuthenticator.kt diff --git a/src/all/jellyfin/AndroidManifest.xml b/src/all/jellyfin/AndroidManifest.xml new file mode 100644 index 000000000..acb4de356 --- /dev/null +++ b/src/all/jellyfin/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/all/jellyfin/build.gradle b/src/all/jellyfin/build.gradle new file mode 100644 index 000000000..3de49eca7 --- /dev/null +++ b/src/all/jellyfin/build.gradle @@ -0,0 +1,16 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + extName = 'Jellyfin' + pkgNameSuffix = 'all.jellyfin' + extClass = '.Jellyfin' + extVersionCode = 1 + libVersion = '13' +} + +dependencies { + compileOnly libs.bundles.coroutines +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/jellyfin/res/mipmap-hdpi/ic_launcher.png b/src/all/jellyfin/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e81dcdc90c312dbe0d15c8f9d01a16cf21b521bf GIT binary patch literal 3748 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 literal 0 HcmV?d00001 diff --git a/src/all/jellyfin/res/mipmap-xhdpi/ic_launcher.png b/src/all/jellyfin/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9247871b35707c850c0942715f864e7dcfd4b93a GIT binary patch literal 5289 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

7k!%H_y(HCRg<-S+=vJ==knVCk51 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 literal 0 HcmV?d00001 diff --git a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JFConstants.kt b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JFConstants.kt new file mode 100644 index 000000000..f0224da11 --- /dev/null +++ b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JFConstants.kt @@ -0,0 +1,168 @@ +package eu.kanade.tachiyomi.animeextension.all.jellyfin + +import android.content.SharedPreferences + +object JFConstants { + const val APIKEY_KEY = "api_key" + const val USERID_KEY = "user_id" + const val USERNAME_TITLE = "Username" + const val USERNAME_KEY = "username" + const val PASSWORD_TITLE = "Password" + const val PASSWORD_KEY = "password" + const val HOSTURL_TITLE = "Host URL" + const val HOSTURL_KEY = "host_url" + const val MEDIALIB_KEY = "library_pref" + const val MEDIALIB_TITLE = "Select Media Library" + + const val HOSTURL_DEFAULT = "http://127.0.0.1:8096" + + fun getPrefApiKey(preferences: SharedPreferences): String? = preferences.getString( + APIKEY_KEY, null + ) + fun getPrefUserId(preferences: SharedPreferences): String? = preferences.getString( + USERID_KEY, null + ) + fun getPrefHostUrl(preferences: SharedPreferences): String = preferences.getString( + HOSTURL_KEY, HOSTURL_DEFAULT + )!! + fun getPrefUsername(preferences: SharedPreferences): String = preferences.getString( + USERNAME_KEY, "" + )!! + fun getPrefPassword(preferences: SharedPreferences): String = preferences.getString( + PASSWORD_KEY, "" + )!! + fun getPrefParentId(preferences: SharedPreferences): String = preferences.getString( + MEDIALIB_KEY, "" + )!! + + const val PREF_AUDIO_KEY = "preferred_audioLang" + const val PREF_AUDIO_TITLE = "Preferred audio language" + const val PREF_SUB_KEY = "preferred_subLang" + const val PREF_SUB_TITLE = "Preferred sub language" + + val QUALITIES_LIST = arrayOf( + Quality(480, 360, 292000, 128000, "360p - 420 kbps"), + Quality(854, 480, 528000, 192000, "480p - 720 kbps"), + Quality(854, 480, 1308000, 192000, "480p - 1.5 Mbps"), + Quality(854, 480, 2808000, 192000, "480p - 3 Mbps"), + Quality(1280, 720, 3808000, 192000, "720p - 4 Mbps"), + Quality(1280, 720, 5808000, 192000, "720p - 6 Mbps"), + Quality(1280, 720, 7808000, 192000, "720p - 8 Mbps"), + Quality(1920, 1080, 9808000, 192000, "1080p - 10 Mbps"), + Quality(1920, 1080, 14808000, 192000, "1080p - 15 Mbps"), + Quality(1920, 1080, 19808000, 192000, "1080p - 20 Mbps"), + Quality(1920, 1080, 39808000, 192000, "1080p - 40 Mbps"), + Quality(1920, 1080, 59808000, 192000, "1080p - 60 Mbps"), + Quality(3840, 2160, 80000000, 192000, "4K - 80 Mbps"), + Quality(3840, 2160, 120000000, 192000, "4K - 120 Mbps") + ) + + data class Quality( + val width: Int, + val height: Int, + val videoBitrate: Int, + val audioBitrate: Int, + val description: String, + ) + + val PREF_VALUES = arrayOf( + "aar", "abk", "ace", "ach", "ada", "ady", "afh", "afr", "ain", "aka", "akk", "ale", "alt", "amh", "ang", "anp", "apa", + "ara", "arc", "arg", "arn", "arp", "arw", "asm", "ast", "ath", "ava", "ave", "awa", "aym", "aze", "bai", "bak", "bal", + "bam", "ban", "bas", "bej", "bel", "bem", "ben", "ber", "bho", "bik", "bin", "bis", "bla", "bod", "bos", "bra", "bre", + "bua", "bug", "bul", "byn", "cad", "car", "cat", "ceb", "ces", "cha", "chb", "che", "chg", "chk", "chm", "chn", "cho", + "chp", "chr", "chu", "chv", "chy", "cnr", "cop", "cor", "cos", "cre", "crh", "csb", "cym", "dak", "dan", "dar", "del", + "den", "deu", "dgr", "din", "div", "doi", "dsb", "dua", "dum", "dyu", "dzo", "efi", "egy", "eka", "ell", "elx", "eng", + "enm", "epo", "est", "eus", "ewe", "ewo", "fan", "fao", "fas", "fat", "fij", "fil", "fin", "fiu", "fon", "fra", "frm", + "fro", "frr", "frs", "fry", "ful", "fur", "gaa", "gay", "gba", "gez", "gil", "gla", "gle", "glg", "glv", "gmh", "goh", + "gon", "gor", "got", "grb", "grc", "grn", "gsw", "guj", "gwi", "hai", "hat", "hau", "haw", "heb", "her", "hil", "hin", + "hit", "hmn", "hmo", "hrv", "hsb", "hun", "hup", "hye", "iba", "ibo", "ido", "iii", "ijo", "iku", "ile", "ilo", "ina", + "inc", "ind", "inh", "ipk", "isl", "ita", "jav", "jbo", "jpn", "jpr", "jrb", "kaa", "kab", "kac", "kal", "kam", "kan", + "kar", "kas", "kat", "kau", "kaw", "kaz", "kbd", "kha", "khm", "kho", "kik", "kin", "kir", "kmb", "kok", "kom", "kon", + "kor", "kos", "kpe", "krc", "krl", "kru", "kua", "kum", "kur", "kut", "lad", "lah", "lam", "lao", "lat", "lav", "lez", + "lim", "lin", "lit", "lol", "loz", "ltz", "lua", "lub", "lug", "lui", "lun", "luo", "lus", "mad", "mag", "mah", "mai", + "mak", "mal", "man", "mar", "mas", "mdf", "mdr", "men", "mga", "mic", "min", "mkd", "mkh", "mlg", "mlt", "mnc", "mni", + "moh", "mon", "mos", "mri", "msa", "mus", "mwl", "mwr", "mya", "myv", "nah", "nap", "nau", "nav", "nbl", "nde", "ndo", + "nds", "nep", "new", "nia", "nic", "niu", "nld", "nno", "nob", "nog", "non", "nor", "nqo", "nso", "nub", "nwc", "nya", + "nym", "nyn", "nyo", "nzi", "oci", "oji", "ori", "orm", "osa", "oss", "ota", "oto", "pag", "pal", "pam", "pan", "pap", + "pau", "peo", "phn", "pli", "pol", "pon", "por", "pro", "pus", "que", "raj", "rap", "rar", "roh", "rom", "ron", "run", + "rup", "rus", "sad", "sag", "sah", "sam", "san", "sas", "sat", "scn", "sco", "sel", "sga", "shn", "sid", "sin", "slk", + "slv", "sma", "sme", "smj", "smn", "smo", "sms", "sna", "snd", "snk", "sog", "som", "son", "sot", "spa", "sqi", "srd", + "srn", "srp", "srr", "ssw", "suk", "sun", "sus", "sux", "swa", "swe", "syc", "syr", "tah", "tai", "tam", "tat", "tel", + "tem", "ter", "tet", "tgk", "tgl", "tha", "tig", "tir", "tiv", "tkl", "tlh", "tli", "tmh", "tog", "ton", "tpi", "tsi", + "tsn", "tso", "tuk", "tum", "tup", "tur", "tvl", "twi", "tyv", "udm", "uga", "uig", "ukr", "umb", "urd", "uzb", "vai", + "ven", "vie", "vol", "vot", "wal", "war", "was", "wen", "wln", "wol", "xal", "xho", "yao", "yap", "yid", "yor", "zap", + "zbl", "zen", "zgh", "zha", "zho", "zul", "zun", "zza" + ) + + val PREF_ENTRIES = arrayOf( + "Qafaraf; ’Afar Af; Afaraf; Qafar af", "Аҧсуа бызшәа Aƥsua bızšwa; Аҧсшәа Aƥsua", "بهسا اچيه", "Lwo", "Dangme", + "Адыгабзэ; Кӏахыбзэ", "El-Afrihili", "Afrikaans", "アイヌ・イタㇰ Ainu-itak", "Akan", "𒀝𒅗𒁺𒌑", "Уна́ӈам тунуу́; Унаӈан умсуу", + "Алтай тили", "አማርኛ Amârıñâ", "Ænglisc; Anglisc; Englisc", "Angika", "Apache languages", "العَرَبِيَّة al'Arabiyyeẗ", + "Official Aramaic (700–300 BCE); Imperial Aramaic (700–300 BCE)", "aragonés", "Mapudungun; Mapuche", "Hinónoʼeitíít", + "Lokono", "অসমীয়া", "Asturianu; Llïonés", "Athapascan languages", "Магӏарул мацӏ; Авар мацӏ", "Avestan", "अवधी", + "Aymar aru", "Azərbaycan dili; آذربایجان دیلی; Азәрбајҹан дили", "Bamiléké", "Башҡорт теле; Başqort tele", + "بلوچی", "ߓߊߡߊߣߊߣߞߊߣ", "ᬪᬵᬱᬩᬮᬶ; ᬩᬲᬩᬮᬶ; Basa Bali", "Mbene; Ɓasaá", "Bidhaawyeet", "Беларуская мова Belaruskaâ mova", + "Chibemba", "বাংলা Bāŋlā", "Tamaziɣt; Tamazight; ⵜⴰⵎⴰⵣⵉⵖⵜ; ⵝⴰⵎⴰⵣⵉⵗⵝ; ⵜⴰⵎⴰⵣⵉⵗⵜ", "भोजपुरी", "Bikol", "Ẹ̀dó", + "Bislama", "ᓱᖽᐧᖿ", "བོད་སྐད་ Bodskad; ལྷ་སའི་སྐད་ Lhas'iskad", "bosanski", "Braj", "Brezhoneg", "буряад хэлэн", + "ᨅᨔ ᨕᨘᨁᨗ", "български език bălgarski ezik", "ብሊና; ብሊን", "Hasí:nay", "Kari'nja", "català,valencià", "Sinugbuanong Binisayâ", + "čeština; český jazyk", "Finu' Chamoru", "Muysccubun", "Нохчийн мотт; نَاخچیین موٓتت; ნახჩიე მუოთთ", "جغتای", + "Chuukese", "марий йылме", "chinuk wawa; wawa; chinook lelang; lelang", "Chahta'", "ᑌᓀᓱᒼᕄᓀ (Dënesųłiné)", + "ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ Tsalagi gawonihisdi", "Славе́нскїй ѧ҆зы́къ", "Чӑвашла", "Tsėhésenėstsestȯtse", "crnogorski / црногорски", + "ϯⲙⲉⲑⲣⲉⲙⲛ̀ⲭⲏⲙⲓ; ⲧⲙⲛ̄ⲧⲣⲙ̄ⲛ̄ⲕⲏⲙⲉ", "Kernowek", "Corsu; Lingua corsa", "Cree", "Къырымтатарджа; Къырымтатар тили; Ҡырымтатарҗа; Ҡырымтатар тили", + "Kaszëbsczi jãzëk", "Cymraeg; y Gymraeg", "Dakhótiyapi; Dakȟótiyapi", "dansk", "дарган мез", "Delaware", "Dene K'e", + "Deutsch", "Dogrib", "Thuɔŋjäŋ", "ދިވެހި; ދިވެހިބަސް Divehi", "𑠖𑠵𑠌𑠤𑠮; डोगरी; ڈوگرى", "Dolnoserbski; Dolnoserbšćina", + "Duala", "Dutch, Middle (ca. 1050–1350)", "Julakan", "རྫོང་ཁ་ Ĵoŋkha", "Efik", "Egyptian (Ancient)", "Ekajuk", + "Νέα Ελληνικά Néa Ellêniká", "Elamite", "English", "English, Middle (1100–1500)", "Esperanto", "eesti keel", + "euskara", "Èʋegbe", "Ewondo", "Fang", "føroyskt", "فارسی Fārsiy", "Mfantse; Fante; Fanti", "Na Vosa Vakaviti", + "Wikang Filipino", "suomen kieli", "Finno-Ugrian languages", "Fon gbè", "français", "françois; franceis", "Franceis; François; Romanz", + "Frasch; Fresk; Freesk; Friisk", "Oostfreesk; Plattdüütsk", "Frysk", "Fulfulde; Pulaar; Pular", "Furlan", + "Gã", "Basa Gayo", "Gbaya", "ግዕዝ", "Taetae ni Kiribati", "Gàidhlig", "Gaeilge", "galego", "Gaelg; Gailck", "Diutsch", + "Diutisk", "Gondi", "Bahasa Hulontalo", "Gothic", "Grebo", "Ἑλληνική", "Avañe'ẽ", "Schwiizerdütsch", "ગુજરાતી Gujarātī", + "Dinjii Zhu’ Ginjik", "X̱aat Kíl; X̱aadas Kíl; X̱aayda Kil; Xaad kil", "kreyòl ayisyen", "Harshen Hausa; هَرْشَن", + "ʻŌlelo Hawaiʻi", "עברית 'Ivriyþ", "Otjiherero", "Ilonggo", "हिन्दी Hindī", "𒉈𒅆𒇷", "lus Hmoob; lug Moob; lol Hmongb; 𖬇𖬰𖬞 𖬌𖬣𖬵", + "Hiri Motu", "hrvatski", "hornjoserbšćina", "magyar nyelv", "Na:tinixwe Mixine:whe'", "Հայերէն Hayerèn; Հայերեն Hayeren", + "Jaku Iban", "Asụsụ Igbo", "Ido", "ꆈꌠꉙ Nuosuhxop", "Ịjọ", "ᐃᓄᒃᑎᑐᑦ Inuktitut", "Interlingue; Occidental", "Pagsasao nga Ilokano; Ilokano", + "Interlingua (International Auxiliary Language Association)", "Indo-Aryan languages", "bahasa Indonesia", + "ГӀалгӀай мотт", "Iñupiaq", "íslenska", "italiano; lingua italiana", "ꦧꦱꦗꦮ / Basa Jawa", "la .lojban.", "日本語 Nihongo", + "Dzhidi", "عربية يهودية / ערבית יהודית", "Qaraqalpaq tili; Қарақалпақ тили", "Tamaziɣt Taqbaylit; Tazwawt", + "Jingpho", "Kalaallisut; Greenlandic", "Kamba", "ಕನ್ನಡ Kannađa", "Karen languages", "कॉशुर / كأشُر", "ქართული Kharthuli", + "Kanuri", "ꦧꦱꦗꦮ", "қазақ тілі qazaq tili; қазақша qazaqşa", "Адыгэбзэ (Къэбэрдейбзэ) Adıgăbză (Qăbărdeĭbză)", + "কা কতিয়েন খাশি", "ភាសាខ្មែរ Phiəsaakhmær", "Khotanese; Sakan", "Gĩkũyũ", "Ikinyarwanda", "кыргызча kırgızça; кыргыз тили kırgız tili", + "Kimbundu", "कोंकणी", "Коми кыв", "Kongo", "한국어 Han'gug'ô", "Kosraean", "Kpɛlɛwoo", "Къарачай-Малкъар тил; Таулу тил", + "karjal; kariela; karjala", "कुड़ुख़", "Kuanyama; Kwanyama", "къумукъ тил/qumuq til", "kurdî / کوردی", "Kutenai", + "Judeo-español", "بھارت کا", "Lamba", "ພາສາລາວ Phasalaw", "Lingua latīna", "Latviešu valoda", "Лезги чӏал", + "Lèmburgs", "Lingala", "lietuvių kalba", "Lomongo", "Lozi", "Lëtzebuergesch", "Cilubà / Tshiluba", "Kiluba", + "Luganda", "Cham'teela", "Chilunda", "Dholuo", "Mizo ṭawng", "Madhura", "मगही", "Kajin M̧ajeļ", "मैथिली; মৈথিলী", + "Basa Mangkasara' / ᨅᨔ ᨆᨀᨔᨑ", "മലയാളം Malayāļã", "Mandi'nka kango", "मराठी Marāţhī", "ɔl", "мокшень кяль", + "Mandar", "Mɛnde yia", "Gaoidhealg", "Míkmawísimk", "Baso Minang", "македонски јазик makedonski jazik", "Mon-Khmer languages", + "Malagasy", "Malti", "ᠮᠠᠨᠵᡠ ᡤᡳᠰᡠᠨ Manju gisun", "Manipuri", "Kanien’kéha", "монгол хэл mongol xel; ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡ", + "Mooré", "Te Reo Māori", "Bahasa Melayu", "Mvskoke", "mirandés; lhéngua mirandesa", "मारवाड़ी", "မြန်မာစာ Mrãmācā; မြန်မာစကား Mrãmākā:", + "эрзянь кель", "Nahuatl languages", "napulitano", "dorerin Naoero", "Diné bizaad; Naabeehó bizaad", "isiNdebele seSewula", + "siNdebele saseNyakatho", "ndonga", "Plattdütsch; Plattdüütsch", "नेपाली भाषा Nepālī bhāśā", "नेपाल भाषा; नेवाः भाय्", + "Li Niha", "Niger-Kordofanian languages", "ko e vagahau Niuē", "Nederlands; Vlaams", "norsk nynorsk", "norsk bokmål", + "Ногай тили", "Dǫnsk tunga; Norrœnt mál", "norsk", "N'Ko", "Sesotho sa Leboa", "لغات نوبية", "पुलां भाय्; पुलाङु नेपाल भाय्", + "Chichewa; Chinyanja", "Nyamwezi", "Nyankole", "Runyoro", "Nzima", "occitan; lenga d'òc", "Ojibwa", "ଓଡ଼ିଆ", + "Afaan Oromoo", "Wazhazhe ie / 𐓏𐓘𐓻𐓘𐓻𐓟 𐒻𐓟", "Ирон ӕвзаг Iron ævzag", "لسان عثمانى / lisân-ı Osmânî", "Otomian languages", + "Salitan Pangasinan", "Pārsīk; Pārsīg", "Amánung Kapampangan; Amánung Sísuan", "ਪੰਜਾਬੀ / پنجابی Pãjābī", + "Papiamentu", "a tekoi er a Belau", "Persian, Old (ca. 600–400 B.C.)", "𐤃𐤁𐤓𐤉𐤌 𐤊𐤍𐤏𐤍𐤉𐤌 Dabariym Kana'aniym", + "Pāli", "Język polski", "Pohnpeian", "português", "Provençal, Old (to 1500); Old Occitan (to 1500)", "پښتو Pax̌tow", + "Runa simi; kichwa simi; Nuna shimi", "राजस्थानी", "Vananga rapa nui", "Māori Kūki 'Āirani", "Rumantsch; Rumàntsch; Romauntsch; Romontsch", + "romani čhib", "limba română", "Ikirundi", "armãneashce; armãneashti; rrãmãneshti", "русский язык russkiĭ âzık", + "Sandaweeki", "yângâ tî sängö", "Сахалыы", "ארמית", "संस्कृतम् Sąskŕtam; 𑌸𑌂𑌸𑍍𑌕𑍃𑌤𑌮𑍍", "Sasak", "ᱥᱟᱱᱛᱟᱲᱤ", "Sicilianu", + "Braid Scots; Lallans", "Selkup", "Goídelc", "ၵႂၢမ်းတႆးယႂ်", "Sidaamu Afoo", "සිංහල Sĩhala", "slovenčina; slovenský jazyk", + "slovenski jezik; slovenščina", "Åarjelsaemien gïele", "davvisámegiella", "julevsámegiella", "anarâškielâ", + "Gagana faʻa Sāmoa", "sääʹmǩiõll", "chiShona", "سنڌي / सिन्धी / ਸਿੰਧੀ", "Sooninkanxanne", "Sogdian", "af Soomaali", + "Songhai languages", "Sesotho [southern]", "español; castellano", "Shqip", "sardu; limba sarda; lingua sarda", + "Sranan Tongo", "српски / srpski", "Seereer", "siSwati", "Kɪsukuma", "ᮘᮞ ᮞᮥᮔ᮪ᮓ / Basa Sunda", "Sosoxui", "𒅴𒂠", + "Kiswahili", "svenska", "Classical Syriac", "ܠܫܢܐ ܣܘܪܝܝܐ Lešānā Suryāyā", "Reo Tahiti; Reo Mā'ohi", "ภาษาไท; ภาษาไต", + "தமிழ் Tamił", "татар теле / tatar tele / تاتار", "తెలుగు Telugu", "KʌThemnɛ", "Terêna", "Lia-Tetun", "тоҷикӣ toçikī", + "Wikang Tagalog", "ภาษาไทย Phasathay", "ትግረ; ትግሬ; ኻሳ; ትግራይት", "ትግርኛ", "Tiv", "Tokelau", "Klingon; tlhIngan-Hol", + "Lingít", "Tamashek", "chiTonga", "lea faka-Tonga", "Tok Pisin", "Tsimshian", "Setswana", "Xitsonga", "Türkmençe / Түркменче / تورکمن تیلی تورکمنچ; türkmen dili / түркмен дили", + "chiTumbuka", "Tupi languages", "Türkçe", "Te Ggana Tuuvalu; Te Gagana Tuuvalu", "Twi", "тыва дыл", "удмурт кыл", + "Ugaritic", "ئۇيغۇرچە ; ئۇيغۇر تىلى", "Українська мова; Українська", "Úmbúndú", "اُردُو Urduw", "Oʻzbekcha / Ózbekça / ўзбекча / ئوزبېچه; oʻzbek tili / ўзбек тили / ئوبېک تیلی", + "ꕙꔤ", "Tshivenḓa", "Tiếng Việt", "Volapük", "vađđa ceeli", "Wolaitta; Wolaytta", "Winaray; Samareño; Lineyte-Samarnon; Binisayâ nga Winaray; Binisayâ nga Samar-Leyte; “Binisayâ nga Waray”", + "wá:šiw ʔítlu", "Serbsce / Serbski", "Walon", "Wolof", "Хальмг келн / Xaľmg keln", "isiXhosa", "Yao", "Yapese", + "ייִדיש; יידיש; אידיש Yidiš", "èdè Yorùbá", "Diidxazá/Dizhsa", "Blissymbols; Blissymbolics; Bliss", "Tuḍḍungiyya", + "ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ", "Vahcuengh / 話僮", "中文 Zhōngwén; 汉语; 漢語 Hànyǔ", "isiZulu", "Shiwi'ma", "kirmanckî; dimilkî; kirdkî; zazakî" + ) +} diff --git a/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt new file mode 100644 index 000000000..db8b6b05f --- /dev/null +++ b/src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt @@ -0,0 +1,603 @@ +package eu.kanade.tachiyomi.animeextension.all.jellyfin + +import android.app.Application +import android.content.Context +import android.content.SharedPreferences +import android.text.InputType +import android.widget.Toast +import androidx.preference.EditTextPreference +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Track +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.AnimeHttpSource +import eu.kanade.tachiyomi.network.GET +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.boolean +import kotlinx.serialization.json.float +import kotlinx.serialization.json.int +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import org.jsoup.Jsoup +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import kotlin.math.ceil +import kotlin.math.floor + +class Jellyfin : ConfigurableAnimeSource, AnimeHttpSource() { + + override val name = "Jellyfin" + + override val lang = "all" + + override val supportsLatest = true + + override val client: OkHttpClient = network.cloudflareClient + + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + override var baseUrl = JFConstants.getPrefHostUrl(preferences) + + private var username = JFConstants.getPrefUsername(preferences) + private var password = JFConstants.getPrefPassword(preferences) + private var parentId = JFConstants.getPrefParentId(preferences) + private var apiKey = JFConstants.getPrefApiKey(preferences) + private var userId = JFConstants.getPrefUserId(preferences) + + init { + login(false) + } + + private fun login(new: Boolean, context: Context? = null): Boolean? { + if (apiKey == null || userId == null || new) { + baseUrl = JFConstants.getPrefHostUrl(preferences) + username = JFConstants.getPrefUsername(preferences) + password = JFConstants.getPrefPassword(preferences) + if (username.isEmpty() || password.isEmpty()) { + return null + } + val (newKey, newUid) = runBlocking { + withContext(Dispatchers.IO) { + JellyfinAuthenticator(preferences, baseUrl, client) + .login(username, password) + } + } + if (newKey != null && newUid != null) { + apiKey = newKey + userId = newUid + } else { + context?.let { Toast.makeText(it, "Login failed.", Toast.LENGTH_LONG).show() } + return false + } + } + return true + } + + // Popular Anime (is currently sorted by name instead of e.g. ratings) + + override fun popularAnimeRequest(page: Int): Request { + if (parentId.isEmpty()) { + throw Exception("Select library in the extension settings.") + } + val startIndex = (page - 1) * 20 + + val url = "$baseUrl/Users/$userId/Items".toHttpUrl().newBuilder() + + url.addQueryParameter("api_key", apiKey) + url.addQueryParameter("StartIndex", startIndex.toString()) + url.addQueryParameter("Limit", "20") + url.addQueryParameter("Recursive", "true") + url.addQueryParameter("SortBy", "SortName") + url.addQueryParameter("SortOrder", "Ascending") + url.addQueryParameter("includeItemTypes", "Movie,Series,Season") + url.addQueryParameter("ImageTypeLimit", "1") + url.addQueryParameter("ParentId", parentId) + url.addQueryParameter("EnableImageTypes", "Primary") + + return GET(url.toString()) + } + + override fun popularAnimeParse(response: Response): AnimesPage { + val (list, hasNext) = animeParse(response) + return AnimesPage( + list.sortedBy { it.title }, + hasNext, + ) + } + + // Episodes + + override fun episodeListParse(response: Response): List { + val json = Json.decodeFromString(response.body!!.string()) + + val episodeList = mutableListOf() + + // Is movie + if (json.containsKey("Type")) { + val episode = SEpisode.create() + val id = json["Id"]!!.jsonPrimitive.content + + episode.episode_number = 1.0F + episode.name = json["Name"]!!.jsonPrimitive.content + + episode.setUrlWithoutDomain("/Users/$userId/Items/$id?api_key=$apiKey") + episodeList.add(episode) + } else { + val items = json["Items"]!!.jsonArray + + for (item in items) { + + val episode = SEpisode.create() + val jsonObj = item.jsonObject + + val id = jsonObj["Id"]!!.jsonPrimitive.content + + val epNum = if (jsonObj["IndexNumber"] == null) { + null + } else { + jsonObj["IndexNumber"]!!.jsonPrimitive.float + } + if (epNum != null) { + episode.episode_number = epNum + val formattedEpNum = if (floor(epNum) == ceil(epNum)) { + epNum.toInt().toString() + } else { + epNum.toString() + } + episode.name = "Episode $formattedEpNum: " + jsonObj["Name"]!!.jsonPrimitive.content + } else { + episode.episode_number = 0F + episode.name = jsonObj["Name"]!!.jsonPrimitive.content + } + + episode.setUrlWithoutDomain("/Users/$userId/Items/$id?api_key=$apiKey") + episodeList.add(episode) + } + } + + return episodeList.reversed() + } + + private fun animeParse(response: Response): AnimesPage { + val items = Json.decodeFromString(response.body!!.string())["Items"]?.jsonArray + + val animesList = mutableListOf() + + if (items != null) { + for (item in items) { + val anime = SAnime.create() + val jsonObj = item.jsonObject + + if (jsonObj["Type"]!!.jsonPrimitive.content == "Season") { + val seasonId = jsonObj["Id"]!!.jsonPrimitive.content + val seriesId = jsonObj["SeriesId"]!!.jsonPrimitive.content + + anime.setUrlWithoutDomain("/Shows/$seriesId/Episodes?api_key=$apiKey&SeasonId=$seasonId") + + // Virtual if show doesn't have any sub-folders, i.e. no seasons + if (jsonObj["LocationType"]!!.jsonPrimitive.content == "Virtual") { + anime.title = jsonObj["SeriesName"]!!.jsonPrimitive.content + anime.thumbnail_url = "$baseUrl/Items/$seriesId/Images/Primary?api_key=$apiKey" + } else { + anime.title = jsonObj["SeriesName"]!!.jsonPrimitive.content + " " + jsonObj["Name"]!!.jsonPrimitive.content + anime.thumbnail_url = "$baseUrl/Items/$seasonId/Images/Primary?api_key=$apiKey" + } + + // If season doesn't have image, fallback to series image + if (jsonObj["ImageTags"].toString() == "{}") { + anime.thumbnail_url = "$baseUrl/Items/$seriesId/Images/Primary?api_key=$apiKey" + } + } else if (jsonObj["Type"]!!.jsonPrimitive.content == "Movie") { + val id = jsonObj["Id"]!!.jsonPrimitive.content + + anime.title = jsonObj["Name"]!!.jsonPrimitive.content + anime.thumbnail_url = "$baseUrl/Items/$id/Images/Primary?api_key=$apiKey" + + anime.setUrlWithoutDomain("/Users/$userId/Items/$id?api_key=$apiKey") + } else { + continue + } + + animesList.add(anime) + } + } + + val hasNextPage = (items?.size?.compareTo(20) ?: -1) >= 0 + return AnimesPage(animesList, hasNextPage) + } + + // Video urls + + override fun videoListParse(response: Response): List