Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ plugins {

allprojects {
group = "in.dragonbra"
version = "1.8.0"
version = "1.8.1-SNAPSHOT"
}

repositories {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,15 @@ class SteamFriends : ClientMsgHandler() {
*
* @return a list of [User]
*/
@JavaSteamAddition
fun getCachedUsers(): List<User> = cache.users.getList()

/**
* Gets a list of all cached clans.
*
* @return a list of [Clan]
*/
@JavaSteamAddition
fun getCachedClans(): List<Clan> = cache.clans.getList()

/**
Expand All @@ -106,6 +108,7 @@ class SteamFriends : ClientMsgHandler() {
* @param steamID the steam ID of the local logged-in user
* @return true if the account is the local user, otherwise false.
*/
@JavaSteamAddition
@JvmOverloads
fun isLocalUser(steamID: SteamID? = null): Boolean = cache.isLocalUser(steamID ?: client.steamID)

Expand All @@ -115,6 +118,7 @@ class SteamFriends : ClientMsgHandler() {
* @param steamID the steam ID to check the cache.
* @return The [SteamID] of the cached user.
*/
@JavaSteamAddition
fun getFriendSteamID(steamID: SteamID): SteamID = cache.getUser(steamID).steamID // Why not...

/**
Expand All @@ -123,6 +127,7 @@ class SteamFriends : ClientMsgHandler() {
* @param steamID the steam ID to check the cache.
* @return The [SteamID] of the cached clan.
*/
@JavaSteamAddition
fun getClanSteamID(steamID: SteamID): SteamID = cache.clans.getAccount(steamID).steamID // Why not...

/**
Expand All @@ -138,6 +143,7 @@ class SteamFriends : ClientMsgHandler() {
*
* @return The avatar hash.
*/
@JavaSteamAddition
fun getPersonaAvatar(): ByteArray? = cache.localUser.avatarHash

/**
Expand Down Expand Up @@ -288,6 +294,7 @@ class SteamFriends : ClientMsgHandler() {
* @param steamID The steam id.
* @return and [EnumSet] of [EPersonaStateFlag]
*/
@JavaSteamAddition
fun getFriendPersonaStateFlags(steamID: SteamID): EnumSet<EPersonaStateFlag>? =
cache.getUser(steamID).personaStateFlags

Expand All @@ -297,6 +304,7 @@ class SteamFriends : ClientMsgHandler() {
* @param steamID The steam id.
* @return the game app id or 0 if not playing.
*/
@JavaSteamAddition
fun getFriendGameAppId(steamID: SteamID): Int = cache.getUser(steamID).gameAppID

/**
Expand Down Expand Up @@ -648,6 +656,7 @@ class SteamFriends : ClientMsgHandler() {
* @param nickname the nickname to set to
* @return The Job ID of the request. This can be used to find the appropriate [NicknameCallback].
*/
@JavaSteamAddition
fun setFriendNickname(friendID: SteamID, nickname: String): JobID {
val jobID: JobID = client.getNextJobID()
val request = ClientMsgProtobuf<CMsgClientSetPlayerNickname.Builder>(
Expand All @@ -672,7 +681,8 @@ class SteamFriends : ClientMsgHandler() {
* @param steamID the steam id
* @return The Job ID of the request. This can be used to find the appropriate [AliasHistoryCallback].
*/
fun requestAliasHistory(steamID: SteamID): JobID = requestAliasHistory(listOf(steamID))
@JavaSteamAddition
fun requestAliasHistory(steamID: SteamID): AsyncJobSingle<AliasHistoryCallback> = requestAliasHistory(listOf(steamID))

/**
* Request the alias history of the accounts of the given steam ids.
Expand All @@ -681,7 +691,8 @@ class SteamFriends : ClientMsgHandler() {
* @param steamIDs the steam ids
* @return The Job ID of the request. This can be used to find the appropriate [AliasHistoryCallback].
*/
fun requestAliasHistory(steamIDs: List<SteamID>): JobID {
@JavaSteamAddition
fun requestAliasHistory(steamIDs: List<SteamID>): AsyncJobSingle<AliasHistoryCallback> {
val jobID: JobID = client.getNextJobID()
val request = ClientMsgProtobuf<CMsgClientAMGetPersonaNameHistory.Builder>(
CMsgClientAMGetPersonaNameHistory::class.java,
Expand All @@ -700,7 +711,7 @@ class SteamFriends : ClientMsgHandler() {

client.send(request)

return jobID
return AsyncJobSingle(client, request.sourceJobID)
}

private fun fixChatID(steamIdChat: SteamID): SteamID {
Expand Down Expand Up @@ -738,55 +749,23 @@ class SteamFriends : ClientMsgHandler() {
}
}

private fun handlePersonaState(packetMsg: IPacketMsg) {
val perState = ClientMsgProtobuf<CMsgClientPersonaState.Builder>(
CMsgClientPersonaState::class.java,
private fun handleAccountInfo(packetMsg: IPacketMsg) {
val accInfo = ClientMsgProtobuf<SteammessagesClientserverLogin.CMsgClientAccountInfo.Builder>(
SteammessagesClientserverLogin.CMsgClientAccountInfo::class.java,
packetMsg
)

val flags = EClientPersonaStateFlag.from(perState.body.statusFlags)

perState.body.friendsList.forEach { friend ->
val friendID = SteamID(friend.friendid)

if (friendID.isIndividualAccount) {
val cacheFriend = cache.getUser(friendID)

if (EClientPersonaStateFlag.PlayerName in flags) {
cacheFriend.name = friend.playerName
}

if (EClientPersonaStateFlag.Presence in flags) {
cacheFriend.avatarHash = friend.avatarHash.toByteArray()
cacheFriend.personaState = EPersonaState.from(friend.personaState) ?: EPersonaState.Offline
cacheFriend.personaStateFlags = EPersonaStateFlag.from(friend.personaStateFlags)
}

if (EClientPersonaStateFlag.GameDataBlob in flags) {
cacheFriend.gameName = friend.gameName
cacheFriend.gameID = GameID(friend.gameid)
cacheFriend.gameAppID = friend.gamePlayedAppId
}
} else if (friendID.isClanAccount) {
val cacheClan = cache.clans.getAccount(friendID)

if (EClientPersonaStateFlag.PlayerName in flags) {
cacheClan.name = friend.playerName
}

if (EClientPersonaStateFlag.Presence in flags) {
cacheClan.avatarHash = friend.avatarHash.toByteArray()
}
} else {
logger.debug("Unknown item in handlePersonaState(): $friendID")
}
// cache off our local name
cache.localUser.name = accInfo.body.personaName
}

// todo: (SK) cache other details/account types?
}
private fun handleFriendMessageHistoryResponse(packetMsg: IPacketMsg) {
val historyResponse = ClientMsgProtobuf<CMsgClientChatGetFriendMessageHistoryResponse.Builder>(
CMsgClientChatGetFriendMessageHistoryResponse::class.java,
packetMsg
)

perState.body.friendsList.forEach { friend ->
PersonaStateCallback(friend, flags).also(client::postCallback)
}
FriendMsgHistoryCallback(historyResponse.body, client.universe).also(client::postCallback)
}

private fun handleFriendsList(packetMsg: IPacketMsg) {
Expand Down Expand Up @@ -866,23 +845,55 @@ class SteamFriends : ClientMsgHandler() {
FriendsListCallback(list.body).also(client::postCallback)
}

private fun handleFriendMessageHistoryResponse(packetMsg: IPacketMsg) {
val historyResponse = ClientMsgProtobuf<CMsgClientChatGetFriendMessageHistoryResponse.Builder>(
CMsgClientChatGetFriendMessageHistoryResponse::class.java,
private fun handlePersonaState(packetMsg: IPacketMsg) {
val perState = ClientMsgProtobuf<CMsgClientPersonaState.Builder>(
CMsgClientPersonaState::class.java,
packetMsg
)

FriendMsgHistoryCallback(historyResponse.body, client.universe).also(client::postCallback)
}
val flags = EClientPersonaStateFlag.from(perState.body.statusFlags)

private fun handleAccountInfo(packetMsg: IPacketMsg) {
val accInfo = ClientMsgProtobuf<SteammessagesClientserverLogin.CMsgClientAccountInfo.Builder>(
SteammessagesClientserverLogin.CMsgClientAccountInfo::class.java,
packetMsg
)
perState.body.friendsList.forEach { friend ->
val friendID = SteamID(friend.friendid)

// cache off our local name
cache.localUser.name = accInfo.body.personaName
if (friendID.isIndividualAccount) {
val cacheFriend = cache.getUser(friendID)

if (EClientPersonaStateFlag.PlayerName in flags) {
cacheFriend.name = friend.playerName
}

if (EClientPersonaStateFlag.Presence in flags) {
cacheFriend.avatarHash = friend.avatarHash.toByteArray()
cacheFriend.personaState = EPersonaState.from(friend.personaState) ?: EPersonaState.Offline
cacheFriend.personaStateFlags = EPersonaStateFlag.from(friend.personaStateFlags)
}

if (EClientPersonaStateFlag.GameDataBlob in flags) {
cacheFriend.gameName = friend.gameName
cacheFriend.gameID = GameID(friend.gameid)
cacheFriend.gameAppID = friend.gamePlayedAppId
}
} else if (friendID.isClanAccount) {
val cacheClan = cache.clans.getAccount(friendID)

if (EClientPersonaStateFlag.PlayerName in flags) {
cacheClan.name = friend.playerName
}

if (EClientPersonaStateFlag.Presence in flags) {
cacheClan.avatarHash = friend.avatarHash.toByteArray()
}
} else {
logger.debug("Unknown item in handlePersonaState(): $friendID")
}

// todo: (SK) cache other details/account types?
}

perState.body.friendsList.forEach { friend ->
PersonaStateCallback(friend, flags).also(client::postCallback)
}
}

private fun handlePersonaChangeResponse(packetMsg: IPacketMsg) {
Expand Down
Loading