diff --git a/src/it/digitalteam/AndroidManifest.xml b/src/it/digitalteam/AndroidManifest.xml
new file mode 100644
index 000000000..30deb7f79
--- /dev/null
+++ b/src/it/digitalteam/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/src/it/digitalteam/build.gradle b/src/it/digitalteam/build.gradle
new file mode 100644
index 000000000..e4c949305
--- /dev/null
+++ b/src/it/digitalteam/build.gradle
@@ -0,0 +1,13 @@
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+
+ext {
+ extName = 'DigitalTeam'
+ pkgNameSuffix = 'it.digitalteam'
+ extClass = '.DigitalTeam'
+ extVersionCode = 1
+ libVersion = '1.2'
+ containsNsfw = false
+}
+
+apply from: "$rootDir/common.gradle"
diff --git a/src/it/digitalteam/res/mipmap-hdpi/ic_launcher.png b/src/it/digitalteam/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..7aab58562
Binary files /dev/null and b/src/it/digitalteam/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/src/it/digitalteam/res/mipmap-mdpi/ic_launcher.png b/src/it/digitalteam/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..3f097eac9
Binary files /dev/null and b/src/it/digitalteam/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/src/it/digitalteam/res/mipmap-xhdpi/ic_launcher.png b/src/it/digitalteam/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..5d1f1d7d4
Binary files /dev/null and b/src/it/digitalteam/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/src/it/digitalteam/res/mipmap-xxhdpi/ic_launcher.png b/src/it/digitalteam/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..0b3a2691b
Binary files /dev/null and b/src/it/digitalteam/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/src/it/digitalteam/res/mipmap-xxxhdpi/ic_launcher.png b/src/it/digitalteam/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..4750f78a2
Binary files /dev/null and b/src/it/digitalteam/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/src/it/digitalteam/res/web_hi_res_512.png b/src/it/digitalteam/res/web_hi_res_512.png
new file mode 100644
index 000000000..d05fa6056
Binary files /dev/null and b/src/it/digitalteam/res/web_hi_res_512.png differ
diff --git a/src/it/digitalteam/src/eu/kanade/tachiyomi/extension/it/digitalteam/DigitalTeam.kt b/src/it/digitalteam/src/eu/kanade/tachiyomi/extension/it/digitalteam/DigitalTeam.kt
new file mode 100644
index 000000000..b109f6920
--- /dev/null
+++ b/src/it/digitalteam/src/eu/kanade/tachiyomi/extension/it/digitalteam/DigitalTeam.kt
@@ -0,0 +1,139 @@
+package eu.kanade.tachiyomi.extension.it.digitalteam
+
+import com.github.salomonbrys.kotson.string
+import com.google.gson.JsonParser
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.network.POST
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.Page
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import eu.kanade.tachiyomi.source.online.ParsedHttpSource
+import eu.kanade.tachiyomi.util.asJsoup
+import okhttp3.Headers
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import okhttp3.RequestBody
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import java.text.ParseException
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+class DigitalTeam : ParsedHttpSource() {
+
+ override val name = "DigitalTeam"
+ override val baseUrl = "https://dgtread.com"
+ override val lang = "it"
+ override val supportsLatest = false
+ override val client: OkHttpClient = network.cloudflareClient
+
+ override fun popularMangaRequest(page: Int): Request {
+ return GET("$baseUrl/reader/series", headers)
+ }
+ override fun latestUpdatesRequest(page: Int): Request = popularMangaRequest(page)
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = throw Exception("La ricerca รจ momentaneamente disabilitata.")
+
+ // LIST SELECTOR
+ override fun popularMangaSelector() = "ul li.manga_block"
+ override fun latestUpdatesSelector() = popularMangaSelector()
+ override fun searchMangaSelector() = popularMangaSelector()
+
+ // ELEMENT
+ override fun popularMangaFromElement(element: Element): SManga {
+ val manga = SManga.create()
+ manga.thumbnail_url = element.select("img").attr("src")
+ manga.setUrlWithoutDomain(element.select(".manga_title a").first().attr("href"))
+ manga.title = element.select(".manga_title a").text()
+ return manga
+ }
+
+ override fun searchMangaFromElement(element: Element): SManga = throw Exception("Not Used")
+ override fun latestUpdatesFromElement(element: Element): SManga = throw Exception("Not Used")
+
+ // NEXT SELECTOR
+ // Not needed
+ override fun popularMangaNextPageSelector(): String? = null
+ override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
+ override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
+ // ////////////////
+
+ override fun mangaDetailsParse(document: Document): SManga {
+ val infoElement = document.select("#manga_left")
+ val manga = SManga.create()
+ manga.author = infoElement.select(".info_name:contains(Autore)").next()?.text()
+ manga.artist = infoElement.select(".info_name:contains(Artista)").next()?.text()
+ manga.genre = infoElement.select(".info_name:contains(Genere)").next()?.text()
+ manga.status = parseStatus(infoElement.select(".info_name:contains(Status)").next().text())
+ manga.description = document.select("div.plot")?.text()
+ manga.thumbnail_url = infoElement.select(".cover img").attr("src")
+ return manga
+ }
+
+ private fun parseStatus(element: String): Int = when {
+ element.toLowerCase().contains("in corso") -> SManga.ONGOING
+ element.toLowerCase().contains("completo") -> SManga.COMPLETED
+ else -> SManga.UNKNOWN
+ }
+
+ override fun chapterListSelector() = ".chapter_list ul li"
+
+ override fun chapterFromElement(element: Element): SChapter {
+ val urlElement = element.select("a").first()
+ val chapter = SChapter.create()
+ chapter.setUrlWithoutDomain(urlElement.attr("href"))
+ chapter.name = urlElement.text()
+ chapter.date_upload = element.select(".ch_bottom").first()?.text()?.replace("Pubblicato il ", "")?.let {
+ try {
+ SimpleDateFormat("dd-MM-yyyy", Locale.ITALY).parse(it).time
+ } catch (e: ParseException) {
+ SimpleDateFormat("H", Locale.ITALY).parse(it).time
+ }
+ } ?: 0
+ return chapter
+ }
+
+ protected fun getXhrPages(script_content: String, title: String): String {
+ val xhrHeaders = headersBuilder().add("Content-Type: application/x-www-form-urlencoded; charset=UTF-8")
+ .build()
+
+ // This can be improved, i don't know how to do it with Regex
+ var infomanga = script_content.substringAfter("m='").substringBefore("'")
+ var infochapter = script_content.substringAfter("ch='").substringBefore("'")
+ var infoch_sub = script_content.substringAfter("chs='").substringBefore("'")
+ val body = RequestBody.create(null, "info[manga]=$infomanga&info[chapter]=$infochapter&info[ch_sub]=$infoch_sub&info[title]=$title")
+ return client.newCall(POST("$baseUrl/reader/c_i", xhrHeaders, body))
+ .execute()
+ .asJsoup().select("body").text()
+ .replace("\\", "").removeSurrounding("\"")
+ }
+
+ override fun pageListParse(document: Document): List {
+ val pages = mutableListOf()
+ val script_content = document.body()!!.toString().substringAfter("current_page=").substringBefore(";")
+ val title = document.select("title").first().text()
+ val imagesJsonList = JsonParser().parse(getXhrPages(script_content, title)).asJsonArray
+ val image_url = imagesJsonList.get(2).string
+ val images_name = imagesJsonList.get(1).asJsonArray
+ val images_data = imagesJsonList.get(0).asJsonArray
+ images_name.forEachIndexed { index, imagename ->
+ val imageUrl =
+ "$baseUrl/reader$image_url" +
+ "${images_data.get(index).asJsonObject.get("name").string}" +
+ "${imagename.string}" +
+ "${images_data.get(index).asJsonObject.get("ex").string}"
+ pages.add(Page(index, "", imageUrl))
+ }
+ return pages
+ }
+
+ override fun imageUrlParse(document: Document) = ""
+
+ override fun imageRequest(page: Page): Request {
+ val imgHeader = Headers.Builder().apply {
+ add("User-Agent", "Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30")
+ add("Referer", baseUrl)
+ }.build()
+ return GET(page.imageUrl!!, imgHeader)
+ }
+}