Skip to content

Commit

Permalink
Merge pull request #6 from desolationdev/master
Browse files Browse the repository at this point in the history
Added Thumbnails!
  • Loading branch information
capyrightdev authored Aug 8, 2024
2 parents 6ddb488 + c40a109 commit a2404a7
Show file tree
Hide file tree
Showing 5 changed files with 225 additions and 4 deletions.
54 changes: 54 additions & 0 deletions src/main/kotlin/dev/roava/api/ThumbnailApi.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* MIT License
*
* Copyright (c) 2024 RoavaDev
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

package dev.roava.api

import dev.roava.json.user.ThumbnailListData
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query

interface ThumbnailApi {
@GET("/v1/users/avatar")
fun getAvatar(
@Query("userIds") userId: Long,
@Query("size") size: String,
@Query("format") format: String,
@Query("isCircular") circular: Boolean
): Call<ThumbnailListData>
@GET("/v1/users/avatar-headshot")
fun getHeadShot(
@Query("userIds") userId: Long,
@Query("size") size: String,
@Query("format") format: String,
@Query("isCircular") circular: Boolean
): Call<ThumbnailListData>
@GET("/v1/users/avatar-bust")
fun getBust(
@Query("userIds") userId: Long,
@Query("size") size: String,
@Query("format") format: String,
@Query("isCircular") circular: Boolean
): Call<ThumbnailListData>
}
33 changes: 33 additions & 0 deletions src/main/kotlin/dev/roava/json/user/ThumbnailData.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* MIT License
*
* Copyright (c) 2024 RoavaDev
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

package dev.roava.json.user

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonProperty
@JsonIgnoreProperties(ignoreUnknown = true)
data class ThumbnailData(
@JsonProperty("imageUrl")
val thumbnail: String?
)
33 changes: 33 additions & 0 deletions src/main/kotlin/dev/roava/json/user/ThumbnailListData.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* MIT License
*
* Copyright (c) 2024 RoavaDev
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

package dev.roava.json.user

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonProperty
@JsonIgnoreProperties(ignoreUnknown = true)
data class ThumbnailListData (
@JsonProperty("data")
val data: List<ThumbnailData>?
)
96 changes: 92 additions & 4 deletions src/main/kotlin/dev/roava/user/User.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,7 @@

package dev.roava.user

import dev.roava.api.FriendApi
import dev.roava.api.GroupApi
import dev.roava.api.InventoryApi
import dev.roava.api.UserApi
import dev.roava.api.*
import dev.roava.client.RoavaRequest
import dev.roava.group.Group
import dev.roava.json.user.UserData
Expand Down Expand Up @@ -181,6 +178,97 @@ class User {
return groups.toList()
}

/**
* Method to get a User's Avatar
*
* Available Values:
* 30x30, 48x48, 60x60, 75x75, 100x100, 110x110, 140x140, 150x150, 150x200, 180x180, 250x250, 352x352, 420x420, 720x720
* @throws[RuntimeException]
* @return[String]
*/
@Throws(RuntimeException::class)
fun getAvatar(size: String,isCircular: Boolean): String {
var thumbnail = ""
val result = runCatching {
request.createRequest(ThumbnailApi::class.java, "thumbnails")
.getAvatar(id,size,"Png",isCircular)
.execute()
}
result.onFailure { exception ->
if (exception is HttpException) {
val errorCode = exception.code()
val message = exception.message()

throw RuntimeException("Grabbing thumbnail of user with id ${this.id} failed with message \"$message\" and response code $errorCode")
} else {
throw RuntimeException("an unknown error has occurred while fetching the user's thumbnail!\n${exception.message}")
}
}.onSuccess {
thumbnail = it.body()?.data?.get(0)?.thumbnail?: ""
}
return thumbnail
}

/**
* Method to get a User's Headshot
*
* Available Values:
* 30x30, 48x48, 60x60, 75x75, 100x100, 110x110, 140x140, 150x150, 150x200, 180x180, 250x250, 352x352, 420x420, 720x720
* @throws[RuntimeException]
* @return[String]
*/
@Throws(RuntimeException::class)
fun getHeadShot(size: String,isCircular: Boolean): String {
var thumbnail = ""
val result = runCatching {
request.createRequest(ThumbnailApi::class.java, "thumbnails")
.getHeadShot(id, size, "Png", isCircular)
.execute()
}
result.onFailure { exception ->
if (exception is HttpException) {
val errorCode = exception.code()
val message = exception.message()

throw RuntimeException("Grabbing headshot of user with id ${this.id} failed with message \"$message\" and response code $errorCode")
} else {
throw RuntimeException("an unknown error has occurred while fetching the user's headshot!\n${exception.message}")
}
}.onSuccess {
thumbnail = it.body()?.data?.get(0)?.thumbnail ?: ""
}
return thumbnail
}
/**
* Method to get a User's Bust
*
* Available Values:
* 48x48, 50x50, 60x60, 75x75, 100x100, 150x150, 180x180, 352x352, 420x420
* @throws[RuntimeException]
* @return[String]
*/
@Throws(RuntimeException::class)
fun getBust(size: String,isCircular: Boolean): String {
var thumbnail = ""
val result = runCatching {
request.createRequest(ThumbnailApi::class.java, "thumbnails")
.getBust(id, size, "Png", isCircular)
.execute()
}
result.onFailure { exception ->
if (exception is HttpException) {
val errorCode = exception.code()
val message = exception.message()

throw RuntimeException("Grabbing bust of user with id ${this.id} failed with message \"$message\" and response code $errorCode")
} else {
throw RuntimeException("an unknown error has occurred while fetching the user's bust!\n${exception.message}")
}
}.onSuccess {
thumbnail = it.body()?.data?.get(0)?.thumbnail ?: ""
}
return thumbnail
}
/**
* Method to get if a User is in a group
*
Expand Down
13 changes: 13 additions & 0 deletions src/test/kotlin/dev/roava/user/UserTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ package dev.roava.user
import org.junit.jupiter.api.Test

import org.junit.jupiter.api.Assertions.*
import kotlin.test.assertContains

internal class UserTest {
private val testUser = User(3838771115)
Expand Down Expand Up @@ -91,4 +92,16 @@ internal class UserTest {
fun testDescription() {
assertEquals(testUser.description, "This is a test description")
}
@Test
fun testAvatar() {
assertContains(testUser.getAvatar("30x30",true), "https://tr.rbxcdn.com/")
}
@Test
fun testHeadShot(){
assertContains(testUser.getHeadShot("48x48", true), "https://tr.rbxcdn.com/")
}
@Test
fun testBust(){
assertContains(testUser.getBust("48x48",true), "https://tr.rbxcdn.com/")
}
}

0 comments on commit a2404a7

Please sign in to comment.