diff --git a/app/src/main/java/com/bnyro/wallpaper/App.kt b/app/src/main/java/com/bnyro/wallpaper/App.kt index 05bcafa8..09227586 100644 --- a/app/src/main/java/com/bnyro/wallpaper/App.kt +++ b/app/src/main/java/com/bnyro/wallpaper/App.kt @@ -8,6 +8,7 @@ import com.bnyro.wallpaper.api.bi.BiApi import com.bnyro.wallpaper.api.le.LeApi import com.bnyro.wallpaper.api.ow.OwApi import com.bnyro.wallpaper.api.ps.PsApi +import com.bnyro.wallpaper.api.px.PxApi import com.bnyro.wallpaper.api.re.ReApi import com.bnyro.wallpaper.api.us.UsApi import com.bnyro.wallpaper.api.wh.WhApi @@ -51,5 +52,6 @@ class App : Application(), ImageLoaderFactory { val reApi = ReApi() val leApi = LeApi() val whApi = WhApi() + val pxApi = PxApi() } } diff --git a/app/src/main/java/com/bnyro/wallpaper/api/bi/BiApi.kt b/app/src/main/java/com/bnyro/wallpaper/api/bi/BiApi.kt index 535fdab1..165989b5 100644 --- a/app/src/main/java/com/bnyro/wallpaper/api/bi/BiApi.kt +++ b/app/src/main/java/com/bnyro/wallpaper/api/bi/BiApi.kt @@ -21,7 +21,6 @@ class BiApi() : Api() { title = it.title, url = "$baseUrl${it.quiz}", resolution = "1920x1080", - thumb = imgUrl, // creation date doesn't contain any dividers by default creationDate = it.startDate ?.replaceRange(6, 6, "-") diff --git a/app/src/main/java/com/bnyro/wallpaper/api/ow/OwApi.kt b/app/src/main/java/com/bnyro/wallpaper/api/ow/OwApi.kt index 8f1eb8f3..8f10e819 100644 --- a/app/src/main/java/com/bnyro/wallpaper/api/ow/OwApi.kt +++ b/app/src/main/java/com/bnyro/wallpaper/api/ow/OwApi.kt @@ -43,7 +43,6 @@ class OwApi() : Api() { 0, Wallpaper( imgSrc = it.value.textValue(), - thumb = it.value.textValue(), category = it.key ) ) diff --git a/app/src/main/java/com/bnyro/wallpaper/api/ps/PsApi.kt b/app/src/main/java/com/bnyro/wallpaper/api/ps/PsApi.kt index 4bb88aaf..585aa4c9 100644 --- a/app/src/main/java/com/bnyro/wallpaper/api/ps/PsApi.kt +++ b/app/src/main/java/com/bnyro/wallpaper/api/ps/PsApi.kt @@ -16,8 +16,7 @@ class PsApi : Api() { imgSrc = it.download_url!!, author = it.author, resolution = "${it.width}x${it.height}", - url = it.url, - thumb = it.download_url + url = it.url ) } } diff --git a/app/src/main/java/com/bnyro/wallpaper/api/px/Pixel.kt b/app/src/main/java/com/bnyro/wallpaper/api/px/Pixel.kt new file mode 100644 index 00000000..5847509e --- /dev/null +++ b/app/src/main/java/com/bnyro/wallpaper/api/px/Pixel.kt @@ -0,0 +1,9 @@ +package com.bnyro.wallpaper.api.px + +import com.bnyro.wallpaper.api.px.obj.PixelWallsResponse +import retrofit2.http.GET + +interface Pixel { + @GET("/repos/wacko1805/Pixel-Wallpapers/git/trees/main?recursive=1") + suspend fun getWallpapers(): PixelWallsResponse +} \ No newline at end of file diff --git a/app/src/main/java/com/bnyro/wallpaper/api/px/PxApi.kt b/app/src/main/java/com/bnyro/wallpaper/api/px/PxApi.kt new file mode 100644 index 00000000..164908a7 --- /dev/null +++ b/app/src/main/java/com/bnyro/wallpaper/api/px/PxApi.kt @@ -0,0 +1,41 @@ +package com.bnyro.wallpaper.api.px + +import com.bnyro.wallpaper.api.Api +import com.bnyro.wallpaper.db.obj.Wallpaper +import com.bnyro.wallpaper.util.RetrofitBuilder + +class PxApi : Api() { + override val name: String = "Google Pixel" + override val baseUrl: String = "https://api.github.com" + private val api = RetrofitBuilder.create(baseUrl, Pixel::class.java) + private val imgSrcPrefix = "https://raw.githubusercontent.com/wacko1805/Pixel-Wallpapers/main/" + + private var wallpapers: List = emptyList() + private val resultsPerPage = 20 + + private suspend fun updateWallpaperList() { + wallpapers = api.getWallpapers() + .tree + .filter { it.path.endsWith(".jpg") || it.path.endsWith(".png") } + .map { + Wallpaper( + title = it.path.split("/").last().split(".").first(), + imgSrc = imgSrcPrefix + it.path, + category = it.path.split("/").first(), + fileSize = it.size + ) + } + } + + override suspend fun getWallpapers(page: Int): List { + if (wallpapers.isEmpty()) { + updateWallpaperList() + } + return wallpapers.subList((page - 1) * resultsPerPage, page * resultsPerPage) + } + + override suspend fun getRandomWallpaperUrl(): String? { + if (wallpapers.isEmpty()) updateWallpaperList() + return wallpapers.randomOrNull()?.imgSrc + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bnyro/wallpaper/api/px/obj/PixelWall.kt b/app/src/main/java/com/bnyro/wallpaper/api/px/obj/PixelWall.kt new file mode 100644 index 00000000..347463ec --- /dev/null +++ b/app/src/main/java/com/bnyro/wallpaper/api/px/obj/PixelWall.kt @@ -0,0 +1,10 @@ +package com.bnyro.wallpaper.api.px.obj + +data class PixelWall( + val mode: String = "", + val path: String = "", + val sha: String = "", + val size: Long = 0, + val type: String = "", + val url: String = "" +) \ No newline at end of file diff --git a/app/src/main/java/com/bnyro/wallpaper/api/px/obj/PixelWallsResponse.kt b/app/src/main/java/com/bnyro/wallpaper/api/px/obj/PixelWallsResponse.kt new file mode 100644 index 00000000..fe6e1755 --- /dev/null +++ b/app/src/main/java/com/bnyro/wallpaper/api/px/obj/PixelWallsResponse.kt @@ -0,0 +1,8 @@ +package com.bnyro.wallpaper.api.px.obj + +data class PixelWallsResponse( + val sha: String = "", + val tree: List = emptyList(), + val truncated: Boolean = false, + val url: String = "" +) \ No newline at end of file diff --git a/app/src/main/java/com/bnyro/wallpaper/ui/components/WallpaperGrid.kt b/app/src/main/java/com/bnyro/wallpaper/ui/components/WallpaperGrid.kt index 5dbb064c..15aa2fcf 100644 --- a/app/src/main/java/com/bnyro/wallpaper/ui/components/WallpaperGrid.kt +++ b/app/src/main/java/com/bnyro/wallpaper/ui/components/WallpaperGrid.kt @@ -85,7 +85,7 @@ fun WallpaperGrid( ) { Box { AsyncImage( - model = it.thumb, + model = it.thumb ?: it.imgSrc, contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier diff --git a/app/src/main/java/com/bnyro/wallpaper/ui/nav/DrawerScreens.kt b/app/src/main/java/com/bnyro/wallpaper/ui/nav/DrawerScreens.kt index 76f55f49..85d82440 100644 --- a/app/src/main/java/com/bnyro/wallpaper/ui/nav/DrawerScreens.kt +++ b/app/src/main/java/com/bnyro/wallpaper/ui/nav/DrawerScreens.kt @@ -29,12 +29,13 @@ sealed class DrawerScreens( object BingDaily : DrawerScreens(R.string.bing_daily, "bi", Icons.Default.Nightlight) object Reddit : DrawerScreens(R.string.reddit, "redd", Icons.Default.Forum) object Lemmy : DrawerScreens(R.string.lemmy, "le", Icons.Default.Book) + object Pixel : DrawerScreens(R.string.pixel, "px", Icons.Default.Pix) object Favorites : DrawerScreens(R.string.favorites, "favorites", Icons.Default.Favorite, true) object Settings : DrawerScreens(R.string.settings, "settings", Icons.Default.Settings, true) object About : DrawerScreens(R.string.about, "about", Icons.Default.Info) companion object { - val apiScreens by lazy { listOf(Wallhaven, Unsplash, OWalls, Picsum, BingDaily, Reddit, Lemmy) } + val apiScreens by lazy { listOf(Wallhaven, Unsplash, OWalls, Picsum, BingDaily, Reddit, Lemmy, Pixel) } val screens by lazy { listOf(*apiScreens.toTypedArray(), Favorites, Settings, About) } } } diff --git a/app/src/main/java/com/bnyro/wallpaper/util/Preferences.kt b/app/src/main/java/com/bnyro/wallpaper/util/Preferences.kt index 92c9e686..4131cda4 100644 --- a/app/src/main/java/com/bnyro/wallpaper/util/Preferences.kt +++ b/app/src/main/java/com/bnyro/wallpaper/util/Preferences.kt @@ -53,6 +53,7 @@ object Preferences { DrawerScreens.BingDaily.route -> App.biApi DrawerScreens.Reddit.route -> App.reApi DrawerScreens.Lemmy.route -> App.leApi + DrawerScreens.Pixel.route -> App.pxApi else -> App.whApi } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e4d5a866..2efefd0c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,7 @@ Bing daily Reddit Lemmy + Google Pixel Favorites Settings