mirror of
https://github.com/PretendoNetwork/friends.git
synced 2025-04-02 11:01:46 -04:00
108 lines
3.3 KiB
Go
108 lines
3.3 KiB
Go
package database_wiiu
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
"github.com/PretendoNetwork/friends/database"
|
|
"github.com/PretendoNetwork/friends/globals"
|
|
"github.com/PretendoNetwork/nex-go/v2/types"
|
|
friends_wiiu_types "github.com/PretendoNetwork/nex-protocols-go/v2/friends-wiiu/types"
|
|
)
|
|
|
|
// GetUserFriendList returns a user's friend list
|
|
func GetUserFriendList(pid uint32) (types.List[friends_wiiu_types.FriendInfo], error) {
|
|
friendList := types.NewList[friends_wiiu_types.FriendInfo]()
|
|
|
|
rows, err := database.Manager.Query(`
|
|
SELECT
|
|
f.user2_pid, f.date,
|
|
u.comment, u.comment_changed,
|
|
u.last_online,
|
|
bi.username, bi.unknown,
|
|
ai.unknown1, ai.unknown2,
|
|
mii.name, mii.unknown1, mii.unknown2, mii.data, mii.unknown_datetime
|
|
FROM wiiu.friendships AS f
|
|
INNER JOIN wiiu.user_data AS u ON u.pid = f.user2_pid
|
|
INNER JOIN wiiu.principal_basic_info AS bi ON bi.pid = f.user2_pid
|
|
INNER JOIN wiiu.network_account_info AS ai ON ai.pid = f.user2_pid
|
|
INNER JOIN wiiu.mii AS mii ON mii.pid = f.user2_pid
|
|
WHERE f.user1_pid=$1 AND f.active=true
|
|
LIMIT 100
|
|
`, pid)
|
|
|
|
if err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return friendList, database.ErrEmptyList
|
|
} else {
|
|
return friendList, err
|
|
}
|
|
}
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
var friendPID uint32
|
|
var date uint64
|
|
var lastOnlineTime uint64
|
|
var commentContents string
|
|
var commentChanged uint64 = 0
|
|
var nnid string
|
|
var unknown uint8
|
|
var unknown1 uint8
|
|
var unknown2 uint8
|
|
var miiName string
|
|
var miiUnknown1 uint8
|
|
var miiUnknown2 uint8
|
|
var miiData []byte
|
|
var miiDatetime uint64
|
|
|
|
err := rows.Scan(&friendPID, &date, &commentContents, &commentChanged, &lastOnlineTime, &nnid, &unknown, &unknown1, &unknown2, &miiName, &miiUnknown1, &miiUnknown2, &miiData, &miiDatetime)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
comment := friends_wiiu_types.NewComment()
|
|
comment.Unknown = types.NewUInt8(0)
|
|
comment.Contents = types.NewString(commentContents)
|
|
comment.LastChanged = types.NewDateTime(commentChanged)
|
|
|
|
mii := friends_wiiu_types.NewMiiV2()
|
|
mii.Name = types.NewString(miiName)
|
|
mii.Unknown1 = types.NewUInt8(miiUnknown1)
|
|
mii.Unknown2 = types.NewUInt8(miiUnknown2)
|
|
mii.MiiData = types.NewBuffer(miiData)
|
|
mii.Datetime = types.NewDateTime(miiDatetime)
|
|
|
|
principalBasicInfo := friends_wiiu_types.NewPrincipalBasicInfo()
|
|
principalBasicInfo.PID = types.NewPID(uint64(friendPID))
|
|
principalBasicInfo.NNID = types.NewString(nnid)
|
|
principalBasicInfo.Unknown = types.NewUInt8(unknown)
|
|
principalBasicInfo.Mii = mii
|
|
|
|
nnaInfo := friends_wiiu_types.NewNNAInfo()
|
|
nnaInfo.Unknown1 = types.NewUInt8(unknown1)
|
|
nnaInfo.Unknown2 = types.NewUInt8(unknown2)
|
|
nnaInfo.PrincipalBasicInfo = principalBasicInfo
|
|
|
|
friendInfo := friends_wiiu_types.NewFriendInfo()
|
|
friendInfo.NNAInfo = nnaInfo
|
|
|
|
lastOnline := types.NewDateTime(0).Now()
|
|
connectedUser, ok := globals.ConnectedUsers.Get(friendPID)
|
|
if ok && connectedUser != nil {
|
|
// * Online
|
|
friendInfo.Presence = connectedUser.PresenceV2.Copy().(friends_wiiu_types.NintendoPresenceV2)
|
|
} else {
|
|
// * Offline
|
|
lastOnline = types.NewDateTime(lastOnlineTime) // TODO - Change this
|
|
}
|
|
|
|
friendInfo.Status = comment
|
|
friendInfo.BecameFriend = types.NewDateTime(date)
|
|
friendInfo.LastOnline = lastOnline
|
|
friendInfo.Unknown = types.NewUInt64(0)
|
|
|
|
friendList = append(friendList, friendInfo)
|
|
}
|
|
|
|
return friendList, nil
|
|
}
|