From 5df6df60aed9d19f6f1964611a6a6fcf1a8d1342 Mon Sep 17 00:00:00 2001 From: Luna712 <142361265+Luna712@users.noreply.github.com> Date: Wed, 22 Jan 2025 10:54:48 -0700 Subject: [PATCH 1/6] Update dokka links and use new* methods in examples --- devs/create-your-own-providers.md | 40 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/devs/create-your-own-providers.md b/devs/create-your-own-providers.md index e997a7f..2498588 100644 --- a/devs/create-your-own-providers.md +++ b/devs/create-your-own-providers.md @@ -8,10 +8,10 @@ icon: repo Providers in CloudStream consists primarily of 4 different parts: -- [Searching](https://recloudstream.github.io/dokka/-cloudstream/com.lagradost.cloudstream3/-main-a-p-i/index.html#498495168%2FFunctions%2F101969414) -- [Loading the home page](https://recloudstream.github.io/dokka/-cloudstream/com.lagradost.cloudstream3/-main-a-p-i/index.html#1356482668%2FFunctions%2F101969414) -- [Loading the show page](https://recloudstream.github.io/dokka/-cloudstream/com.lagradost.cloudstream3/-main-a-p-i/index.html#1671784382%2FFunctions%2F101969414) -- [Loading the video links](https://recloudstream.github.io/dokka/-cloudstream/com.lagradost.cloudstream3/-main-a-p-i/index.html#-930139416%2FFunctions%2F101969414) +- [Searching](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-main-a-p-i/index.html#498495168%2FFunctions%2F-449184558) +- [Loading the home page](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-main-a-p-i/index.html#1356482668%2FFunctions%2F-449184558) +- [Loading the result page](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-main-a-p-i/index.html#1671784382%2FFunctions%2F-449184558) +- [Loading the video links](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-main-a-p-i/index.html#-930139416%2FFunctions%2F-449184558) When making a provider it is important that you are confident you can scrape the video links first! Video links are often the most protected part of the website and if you cannot scrape them then the provider is useless. @@ -24,7 +24,7 @@ Looking at how some extensions work alongside reading this will likely help a lo ## 1. Searching -This one is probably the easiest, based on a query you should return a list of [SearchResponse](https://recloudstream.github.io/dokka/app/com.lagradost.cloudstream3/-search-response/index.html) +This one is probably the easiest, based on a query you should return a list of [SearchResponse](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-search-response/index.html) Scraping the search results is essentially just finding the search item elements on the site (red box) and looking in them to find name, url and poster url and put the data in a SearchResponse. @@ -51,7 +51,7 @@ private fun Element.toSearchResponse(): LiveSearchResponse? { // If no link element then it's no a valid search response val link = this.select("div.alternative a").last() ?: return null // fixUrl is a built in function to convert urls like /watch?v=..... to https://www.youtube.com/watch?v=..... - val href = fixUrl(link.attr("href")) + val href = link.attr("href") val img = this.selectFirst("div.thumb img") // Optional parameter, scraping languages are not required but might be nice on some sites val lang = this.selectFirst(".card-title > a")?.attr("href")?.removePrefix("?country=") @@ -59,15 +59,15 @@ private fun Element.toSearchResponse(): LiveSearchResponse? { // There are many types of searchresponses but mostly you will be using AnimeSearchResponse, MovieSearchResponse // and TvSeriesSearchResponse, all with different parameters (like episode count) - return LiveSearchResponse( + return newLiveSearchResponse( // Kinda hack way to get the title img?.attr("alt")?.replaceFirst("Watch ", "") ?: return null, href, - this@EjaTv.name, - TvType.Live, - fixUrl(img.attr("src")), - lang = lang - ) + TvType.Live + ) { + this.posterUrl = fixUrl(img.attr("src")) + this.lang = lang + } } ``` @@ -87,7 +87,7 @@ override val mainPage = mainPageOf( ``` This dictates what the getMainPage function will be receiving as function arguments. -Basically when the recent dubbed shows should be loaded the getMainPage gets called with a page number and the request you defined above. +Basically when the recent dubbed media should be loaded the getMainPage gets called with a page number and the request you defined above. ```kotlin @@ -141,9 +141,9 @@ responses when the user has scrolled to the end. TLDR: Exactly like searching but you defined your own queries. -## 3. Loading the show page +## 3. Loading the result page -The show page is a bit more complex than search results, but it uses the same logic used to get search results: using CSS selectors and regex to parse html into a kotlin object. With the amount of info being parsed this function can get quite big, but the fundamentals are still pretty simple. +The media result page is a bit more complex than search results, but it uses the same logic used to get search results: using CSS selectors and regex to parse html into a kotlin object. With the amount of info being parsed this function can get quite big, but the fundamentals are still pretty simple. The only difficultuy is getting the episodes, they are not always not part of the html. Check if any extra requests are sent in your browser when visiting the episodes page. **NOTE**: Episodes in CloudStream are not paginated, meaning that if you have a show with 21 seasons, all on different website pages you will need to parse them all. @@ -224,14 +224,14 @@ A function can look something like this: val recUrl = fixUrlNull(titleHeader.attr("href")) ?: return@mapNotNull null val recTitle = titleHeader.text() ?: return@mapNotNull null val poster = element.select("div.film-poster > img").attr("data-src") - MovieSearchResponse( + newMovieSearchResponse( recTitle, recUrl, - this.name, if (recUrl.contains("/movie/")) TvType.Movie else TvType.TvSeries, - poster, - year = null - ) + false + ) { + this.posterUrl = poster + } } if (isMovie) { From 1bba02e8a5da2e92532d25380ffdd8f65a4e11b4 Mon Sep 17 00:00:00 2001 From: maarrem Date: Thu, 13 Mar 2025 22:42:51 +0300 Subject: [PATCH 2/6] Update Repositories.md --- Repositories.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Repositories.md b/Repositories.md index 70e3759..7dcd78b 100644 --- a/Repositories.md +++ b/Repositories.md @@ -21,7 +21,7 @@ Direct Install | Short Codes { class="compact" } [!badge variant="secondary" icon="static/ua.png" text="CakesTwix"](https://cutt.ly/gwyw2YuE) | `gwyw2YuE` [!badge variant="secondary" icon="static/fr.png" text="FStream"](https://cutt.ly/fstream) | `fstream` [!badge variant="secondary" icon="static/world.png" text="Avocado"](https://cutt.ly/aguaco) | `aguaco` -[!badge variant="secondary" icon="static/tr.png" text="Turkish"](https://cutt.ly/KekikAkademi) | `KekikAkademi` +[!badge variant="secondary" icon="static/tr.png" text="Turkish"](https://cutt.ly/kekikdevam) | `kekikdevam` [!badge variant="secondary" icon="static/jo.png" text="Arabico"](https://cutt.ly/0wF96Vs1) | `0wF96Vs1` !!!info From a3ef8e1585dafcda4484972bd616b84aa6acc262 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Sun, 22 Feb 2026 02:19:30 +0000 Subject: [PATCH 3/6] Update Repositories.md --- Repositories.md | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/Repositories.md b/Repositories.md index 7dcd78b..502a0f7 100644 --- a/Repositories.md +++ b/Repositories.md @@ -4,26 +4,4 @@ icon: repo order: 1000 --- -Repositories contain all the website extensions. These repositories are built by the community members. The flag beside the repository indicates the language of the websites that the repository has. - -Direct Install | Short Codes { class="compact" } -:---: | :---: -[!badge variant="secondary" icon="static/gb.png" text="English"](https://cutt.ly/6wyw1RnS) | `6wyw1RnS` -[!badge variant="secondary" icon="static/world.png" text="Multilingual"](https://cutt.ly/Bwyw1S3k) | `Bwyw1S3k` -[!badge variant="secondary" icon="static/jo.png" text="Arabic"](https://cutt.ly/Jwyw1ZiR) | `Jwyw1ZiR` -[!badge variant="secondary" icon="static/world.png" text="Hexated"](https://cutt.ly/mwyw140i) | `mwyw140i` -[!badge variant="secondary" icon="static/in.png" text="Likdev"](https://cutt.ly/bwyw0Mcv) | `bwyw0Mcv` -[!badge variant="secondary" icon="static/es.png" text="Storm"](https://cutt.ly/Swyw03Nc) | `Swyw03Nc` -[!badge variant="secondary" icon="static/cr.png" text="Crunchyroll"](https://cutt.ly/wwyw2e4x) | `wwyw2e4x` -[!badge variant="secondary" icon="static/fr.png" text="French"](https://cutt.ly/jwyw2fJc) | `jwyw2fJc` -[!badge variant="secondary" icon="static/cn.png" text="Horis"](https://cutt.ly/Owyw2lbO) | `Owyw2lbO` -[!badge variant="secondary" icon="static/18p.png" text="NSFW"](https://cutt.ly/Nwyw2nbE) | `Nwyw2nbE` -[!badge variant="secondary" icon="static/ua.png" text="CakesTwix"](https://cutt.ly/gwyw2YuE) | `gwyw2YuE` -[!badge variant="secondary" icon="static/fr.png" text="FStream"](https://cutt.ly/fstream) | `fstream` -[!badge variant="secondary" icon="static/world.png" text="Avocado"](https://cutt.ly/aguaco) | `aguaco` -[!badge variant="secondary" icon="static/tr.png" text="Turkish"](https://cutt.ly/kekikdevam) | `kekikdevam` -[!badge variant="secondary" icon="static/jo.png" text="Arabico"](https://cutt.ly/0wF96Vs1) | `0wF96Vs1` - -!!!info -if you don't understand the name of a repository, the repository was named after the developer of that repository. -!!!! +See the CloudStream Wiki page for an up to date [list of extensions](https://cloudstream.miraheze.org/wiki/List_of_extensions) From fc4ea1c36fff1ad3cb559b34786cfbe80e8213b5 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Sun, 22 Feb 2026 02:20:45 +0000 Subject: [PATCH 4/6] Update retype_build.yml --- .github/workflows/retype_build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/retype_build.yml b/.github/workflows/retype_build.yml index 658f355..9aba542 100644 --- a/.github/workflows/retype_build.yml +++ b/.github/workflows/retype_build.yml @@ -36,9 +36,9 @@ jobs: cat .inject/code.js >> ${{ steps.retypebuild.outputs.retype-output-path }}/resources/js/retype.js - name: Upload artifact - uses: actions/upload-pages-artifact@v1.0.8 + uses: actions/upload-pages-artifact@v3 with: path: ${{ steps.retypebuild.outputs.retype-output-path }} - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 + uses: actions/deploy-pages@v4 From e7a8338a78a395d974d516162e65d6dae45d2432 Mon Sep 17 00:00:00 2001 From: firelight <147925818+fire-light42@users.noreply.github.com> Date: Sun, 22 Feb 2026 02:23:15 +0000 Subject: [PATCH 5/6] Delete recsrc.md --- recsrc.md | 40 ---------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 recsrc.md diff --git a/recsrc.md b/recsrc.md deleted file mode 100644 index 3881374..0000000 --- a/recsrc.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -label: Recommended Sources -icon: star -order: 999 ---- - -## English - -### Movies & TV Series -1. Sorastream `Hexated` -2. Superstream `English` -3. Sflix bundle `English` -4. AllMoviesForYou `English` - -### Anime -1. Anichi `Hexated` -2. 9anime `Avocado` -3. KronchEN/Kwunchwoll `Avocado` -4. Aniwatch `English` -5. Kickassanime `Hexated` -6. Allanime `English` -7. Sorastream `Hexated` -8. Yugenanime `Hexated` -9. Animension `Storm` -10. Gogo `English` - -### Asian Contents -1. Sorastream `Hexated` -2. Kisskh `Hexated` -3. Kissasian `Hexated` -4. Dramacool `Horis` -5. Sflix bundle `English` -6. ShowFlix `Indian languages` - -### Livestreams -1. IPTV-org (TV) `Multilingual` -2. Time4TV (Sports) `Hexated` -3. TV247 `Hexated` -4. 123TV `Hexated` -5. Crichd `Darkdemon` From 092c74c9a5b71b751e6a03275804b54ad079dd4b Mon Sep 17 00:00:00 2001 From: PiterDev <71133634+PiterWeb@users.noreply.github.com> Date: Sun, 22 Feb 2026 03:24:49 +0100 Subject: [PATCH 6/6] Merge pull request #45 from PiterWeb/patch-1 Kitsu added as Tracking anime option in Anime tracking FAQ --- Integrations/Animetracking.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Integrations/Animetracking.md b/Integrations/Animetracking.md index 193f8a7..0cbd933 100644 --- a/Integrations/Animetracking.md +++ b/Integrations/Animetracking.md @@ -13,7 +13,7 @@ Anime tracking process works with **only anime extensions**. So, it'll not work ___ ## Login Process -[!badge variant="light" text="Step 1"] [!badge variant="dark" icon="gear" text="Settings"] → [!badge variant="dark" icon="" text="Accounts"] → **Choose AL or MAL**. For this guide we are choosing AL. +[!badge variant="light" text="Step 1"] [!badge variant="dark" icon="gear" text="Settings"] → [!badge variant="dark" icon="" text="Accounts"] → **Choose AL, Kitsu or MAL**. For this guide we are choosing AL. [!badge variant="light" text="Step 2"] The app will forward to the default browser to login. Now **Login and authorize** the app. The site will return you the cloudstream app. @@ -25,11 +25,12 @@ If the log in process is successful, you will see a pop text and there will be y ___ ## Tracking -- When you go to the eps page of an anime, you will see the tracker icon (Logo of AL or MAL) at the top right corner. Click on that and you will see the tracking menu. +- When you go to the eps page of an anime, you will see the tracker icon (Logo of AL, Kitsu or MAL) at the top right corner. Click on that and you will see the tracking menu. ![image](https://cdn.discordapp.com/attachments/1021835706680745994/1029982148838563840/unknown.png) - The tracker will **automatically** track your anime after finishing the eps. Or you can **manually** input the number of eps you have watched. ![](https://cdn.discordapp.com/attachments/1021835706680745994/1029982662699536384/unknown.png) ![](https://cdn.discordapp.com/attachments/1021835706680745994/1029982861371113512/unknown.png) -- Also, the **status** of the anime and the **rating** can be set from the tracking menu \ No newline at end of file + +- Also, the **status** of the anime and the **rating** can be set from the tracking menu