/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSim Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System.Collections.Generic;
using libsecondlife;
namespace OpenSim.Framework
{
///
/// An interface for connecting to user storage servers.
///
public interface IUserData
{
///
/// Returns a user profile from a database via their UUID
///
/// The user's UUID
/// The user data profile. Returns null if no user is found
UserProfileData GetUserByUUID(LLUUID user);
///
/// Returns a users profile by searching their username parts
///
/// Account firstname
/// Account lastname
/// The user data profile
UserProfileData GetUserByName(string fname, string lname);
///
/// Returns a list of UUIDs firstnames and lastnames that match string query entered into the avatar picker.
///
/// ID associated with the user's query. This must match what the client sent
/// The filtered contents of the search box when the user hit search.
/// The user data profile
List GeneratePickerResults(LLUUID queryID, string query);
///
/// Returns the current agent for a user searching by it's UUID
///
/// The users UUID
/// The current agent session
UserAgentData GetAgentByUUID(LLUUID user);
///
/// Returns the current session agent for a user searching by username
///
/// The users account name
/// The current agent session
UserAgentData GetAgentByName(string name);
///
/// Returns the current session agent for a user searching by username parts
///
/// The users first account name
/// The users account surname
/// The current agent session
UserAgentData GetAgentByName(string fname, string lname);
///
/// Stores new web-login key for user during web page login
///
///
void StoreWebLoginKey(LLUUID agentID, LLUUID webLoginKey);
///
/// Adds a new User profile to the database
///
/// UserProfile to add
void AddNewUserProfile(UserProfileData user);
///
/// Updates an existing user profile
///
/// UserProfile to update
bool UpdateUserProfile(UserProfileData user);
void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle);
///
/// Adds a new agent to the database
///
/// The agent to add
void AddNewUserAgent(UserAgentData agent);
///
/// Adds a new friend to the database for XUser
///
/// The agent that who's friends list is being added to
/// The agent that being added to the friends list of the friends list owner
/// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects
void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms);
///
/// Delete friend on friendlistowner's friendlist.
///
/// The agent that who's friends list is being updated
/// The Ex-friend agent
void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend);
///
/// Update permissions for friend on friendlistowner's friendlist.
///
/// The agent that who's friends list is being updated
/// The agent that is getting or loosing permissions
/// A uint bit vector for set perms that the friend being added has; 0 = none, 1=This friend can see when they sign on, 2 = map, 4 edit objects
void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms);
///
/// Returns a list of FriendsListItems that describe the friends and permissions in the friend relationship for LLUUID friendslistowner
///
/// The agent that we're retreiving the friends Data.
List GetUserFriendList(LLUUID friendlistowner);
///
/// Attempts to move currency units between accounts (NOT RELIABLE / TRUSTWORTHY. DONT TRY RUN YOUR OWN CURRENCY EXCHANGE WITH REAL VALUES)
///
/// The account to transfer from
/// The account to transfer to
/// The amount to transfer
/// Successful?
bool MoneyTransferRequest(LLUUID from, LLUUID to, uint amount);
///
/// Attempts to move inventory between accounts, if inventory is copyable it will be copied into the target account.
///
/// User to transfer from
/// User to transfer to
/// Specified inventory item
/// Successful?
bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID inventory);
///
/// Returns the plugin version
///
/// Plugin version in MAJOR.MINOR.REVISION.BUILD format
string Version {get;}
///
/// Returns the plugin name
///
/// Plugin name, eg MySQL User Provider
string Name {get;}
///
/// Initialises the plugin (artificial constructor)
///
void Initialise(string connect);
///
/// Gets the user appearance
///
AvatarAppearance GetUserAppearance(LLUUID user);
void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance);
void AddAttachment(LLUUID user, LLUUID item);
void RemoveAttachment(LLUUID user, LLUUID item);
List GetAttachments(LLUUID user);
}
}