fixed conflicts with master
@ -37,7 +37,7 @@ export NATIVE_LIBS_TOOLCHAIN_PATH="${HOME}/Builds/android-toolchains/retroshare-
|
|||||||
export ANDROID_NDK_ARCH="arm"
|
export ANDROID_NDK_ARCH="arm"
|
||||||
|
|
||||||
## The Android API level the Android device you want to target
|
## The Android API level the Android device you want to target
|
||||||
export ANDROID_PLATFORM_VER="19"
|
export ANDROID_PLATFORM_VER="16"
|
||||||
|
|
||||||
## The number of core that yout host CPU have (just to speed up compilation) set
|
## The number of core that yout host CPU have (just to speed up compilation) set
|
||||||
## it to 1 if unsure
|
## it to 1 if unsure
|
||||||
@ -60,30 +60,28 @@ project and in the Projects left menu add the newly created kit if not already
|
|||||||
present, so you can select it on the build type selection button down on the
|
present, so you can select it on the build type selection button down on the
|
||||||
left.
|
left.
|
||||||
|
|
||||||
As we use a custom toolchain one more step is needed +
|
Now you need to set properly a few options like `JSONAPI_GENERATOR_EXE` and
|
||||||
|
disable some of RetroShare modules like `retroshare-gui` that are not available
|
||||||
|
on Android so you will have to go to
|
||||||
|
|
||||||
_Qt Creator left pane -> Projects -> Build and Run -> Android SOMESTUFF kit ->
|
_Qt Creator left pane -> Projects -> Build and Run -> Android SOMESTUFF kit ->
|
||||||
Build Environement -> Add
|
Build Steps -> qmake -> Additional arguments_ +
|
||||||
|
|
||||||
Variable: +NATIVE_LIBS_TOOLCHAIN_PATH+
|
and add the following configurations (change `Your_Path` according to your
|
||||||
Value: +Same value as NATIVE_LIBS_TOOLCHAIN_PATH in Preparing The Environement step+
|
deployment)
|
||||||
|
|
||||||
Some of RetroShare modules like +retroshare-gui+ and +WebUI+ are not available
|
|
||||||
on Android so to be able to compile RetroShare without errors you will have to
|
|
||||||
go to +
|
|
||||||
|
|
||||||
_Qt Creator left pane -> Projects -> Build and Run -> Android SOMESTUFF kit ->
|
|
||||||
Build Steps -> qmake -> Additional arguments_
|
|
||||||
|
|
||||||
and add the following configurations
|
|
||||||
|
|
||||||
[source,makefile]
|
[source,makefile]
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
CONFIG+=no_retroshare_gui CONFIG+=no_retroshare_nogui CONFIG+=no_retroshare_plugins CONFIG+=retroshare_android_service CONFIG+=libresapilocalserver CONFIG+=no_libresapihttpserver CONFIG+=retroshare_qml_app
|
CONFIG+=retroshare_service CONFIG+=rs_jsonapi CONFIG+=rs_deep_search
|
||||||
|
RS_UPNP_LIB=miniupnpc
|
||||||
|
JSONAPI_GENERATOR_EXE=Your_Path/jsonapi-generator/src/jsonapi-generator
|
||||||
|
NATIVE_LIBS_TOOLCHAIN_PATH=Your_Path/retroshare-android-16-arm/
|
||||||
|
CONFIG+=no_retroshare_gui CONFIG+=no_rs_service_webui_terminal_password
|
||||||
|
CONFIG+=no_rs_service_terminal_login
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
TIP: Some versions of QtCreator try to find the Android SDK in
|
TIP: Some versions of QtCreator try to find the Android SDK in
|
||||||
+/opt/android/sdk+. A workaround to this is to make a symbolic link there
|
`/opt/android/sdk`. A workaround to this is to make a symbolic link there
|
||||||
pointing to your SDK installation path, like
|
pointing to your SDK installation path, like
|
||||||
+mkdir -p /opt/android/sdk && ln -s /home/user/android-sdk-linux
|
+mkdir -p /opt/android/sdk && ln -s /home/user/android-sdk-linux
|
||||||
/opt/android/sdk+
|
/opt/android/sdk+
|
||||||
@ -117,7 +115,7 @@ only solution is to uninstall the app and then install the new APK but if you do
|
|||||||
it also the application data and your precious cryptographic keys, friend list
|
it also the application data and your precious cryptographic keys, friend list
|
||||||
etc. will be lost forever.
|
etc. will be lost forever.
|
||||||
To avoid that you can attempt to manually backup and then restore from the
|
To avoid that you can attempt to manually backup and then restore from the
|
||||||
command-line (+adb backup+ seems not working either) to change the app source
|
command-line (`adb backup` seems not working either) to change the app source
|
||||||
without erasing the appliation data.
|
without erasing the appliation data.
|
||||||
|
|
||||||
CAUTION: Following steps require root access on your Android device
|
CAUTION: Following steps require root access on your Android device
|
||||||
|
@ -79,6 +79,12 @@ virtual int dhtInfoCallback(const bdId *id, uint32_t type, uint32_t flags, std::
|
|||||||
|
|
||||||
virtual int dhtIsBannedCallback(const sockaddr_in *addr, bool *isBanned)
|
virtual int dhtIsBannedCallback(const sockaddr_in *addr, bool *isBanned)
|
||||||
{
|
{
|
||||||
|
if(!rsBanList)
|
||||||
|
{
|
||||||
|
*isBanned = true; // rsBanList is not enabled yet. For security, default to banned.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// check whether ip filtering is enabled
|
// check whether ip filtering is enabled
|
||||||
// if not return 0 to signal that no filter is available
|
// if not return 0 to signal that no filter is available
|
||||||
if(!rsBanList->ipFilteringEnabled())
|
if(!rsBanList->ipFilteringEnabled())
|
||||||
|
@ -69,12 +69,12 @@ bool HashStorage::hashingProcessPaused()
|
|||||||
|
|
||||||
static std::string friendlyUnit(uint64_t val)
|
static std::string friendlyUnit(uint64_t val)
|
||||||
{
|
{
|
||||||
const std::string units[5] = {"B","KB","MB","GB","TB"};
|
const std::string units[6] = {"B","KB","MB","GB","TB","PB"};
|
||||||
char buf[50] ;
|
char buf[50] ;
|
||||||
|
|
||||||
double fact = 1.0 ;
|
double fact = 1.0 ;
|
||||||
|
|
||||||
for(unsigned int i=0; i<5; ++i)
|
for(unsigned int i=0; i<6; ++i)
|
||||||
if(double(val)/fact < 1024.0)
|
if(double(val)/fact < 1024.0)
|
||||||
{
|
{
|
||||||
sprintf(buf,"%2.2f",double(val)/fact) ;
|
sprintf(buf,"%2.2f",double(val)/fact) ;
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
* *
|
* *
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "pqi/pqihash.h"
|
#include "pqi/pqihash.h"
|
||||||
#include "rsgenexchange.h"
|
#include "rsgenexchange.h"
|
||||||
@ -38,8 +39,7 @@
|
|||||||
#include "rsgxsutil.h"
|
#include "rsgxsutil.h"
|
||||||
#include "rsserver/p3face.h"
|
#include "rsserver/p3face.h"
|
||||||
#include "retroshare/rsevents.h"
|
#include "retroshare/rsevents.h"
|
||||||
|
#include "util/radix64.h"
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#define PUB_GRP_MASK 0x000f
|
#define PUB_GRP_MASK 0x000f
|
||||||
#define RESTR_GRP_MASK 0x00f0
|
#define RESTR_GRP_MASK 0x00f0
|
||||||
@ -3432,6 +3432,71 @@ bool RsGenExchange::localSearch( const std::string& matchString,
|
|||||||
return mNetService->search(matchString, results);
|
return mNetService->search(matchString, results);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RsGenExchange::exportGroupBase64(
|
||||||
|
std::string& radix, const RsGxsGroupId& groupId, std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(groupId.isNull()) return failure("groupId cannot be null");
|
||||||
|
|
||||||
|
const std::list<RsGxsGroupId> groupIds({groupId});
|
||||||
|
RsTokReqOptions opts;
|
||||||
|
opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA;
|
||||||
|
uint32_t token;
|
||||||
|
mDataAccess->requestGroupInfo(
|
||||||
|
token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds);
|
||||||
|
RsTokenService::GxsRequestStatus wtStatus = mDataAccess->waitToken(token);
|
||||||
|
if(wtStatus != RsTokenService::COMPLETE)
|
||||||
|
return failure( "waitToken(...) failed with: " +
|
||||||
|
std::to_string(wtStatus) );
|
||||||
|
|
||||||
|
uint8_t* buf = nullptr;
|
||||||
|
uint32_t size;
|
||||||
|
RsGxsGroupId grpId;
|
||||||
|
if(!getSerializedGroupData(token, grpId, buf, size))
|
||||||
|
return failure("failed retrieving GXS data");
|
||||||
|
|
||||||
|
Radix64::encode(buf, static_cast<int>(size), radix);
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RsGenExchange::importGroupBase64(
|
||||||
|
const std::string& radix, RsGxsGroupId& groupId,
|
||||||
|
std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(radix.empty()) return failure("radix is empty");
|
||||||
|
|
||||||
|
std::vector<uint8_t> mem = Radix64::decode(radix);
|
||||||
|
if(mem.empty()) return failure("radix seems corrupted");
|
||||||
|
|
||||||
|
// On success this also import the group as pending validation
|
||||||
|
if(!deserializeGroupData(
|
||||||
|
mem.data(), static_cast<uint32_t>(mem.size()),
|
||||||
|
reinterpret_cast<RsGxsGroupId*>(&groupId) ))
|
||||||
|
return failure("failed deserializing group");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
RsGxsChanges::RsGxsChanges() :
|
RsGxsChanges::RsGxsChanges() :
|
||||||
RsEvent(RsEventType::GXS_CHANGES), mServiceType(RsServiceType::NONE),
|
RsEvent(RsEventType::GXS_CHANGES), mServiceType(RsServiceType::NONE),
|
||||||
mService(nullptr) {}
|
mService(nullptr) {}
|
||||||
|
|
||||||
|
RsGxsIface::~RsGxsIface() = default;
|
||||||
|
RsGxsGroupSummary::~RsGxsGroupSummary() = default;
|
||||||
|
@ -95,7 +95,8 @@ typedef std::map<RsGxsGrpMsgIdPair, std::vector<RsGxsMsgItem*> > GxsMsgRelatedDa
|
|||||||
|
|
||||||
class RsGixs;
|
class RsGixs;
|
||||||
|
|
||||||
class RsGenExchange : public RsNxsObserver, public RsTickingThread, public RsGxsIface
|
class RsGenExchange : public RsNxsObserver, public RsTickingThread,
|
||||||
|
public RsGxsIface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -325,6 +326,19 @@ public:
|
|||||||
bool localSearch( const std::string& matchString,
|
bool localSearch( const std::string& matchString,
|
||||||
std::list<RsGxsGroupSummary>& results );
|
std::list<RsGxsGroupSummary>& results );
|
||||||
|
|
||||||
|
/// @see RsGxsIface
|
||||||
|
bool exportGroupBase64(
|
||||||
|
std::string& radix, const RsGxsGroupId& groupId,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
|
/// @see RsGxsIface
|
||||||
|
bool importGroupBase64(
|
||||||
|
const std::string& radix,
|
||||||
|
RsGxsGroupId& groupId = RS_DEFAULT_STORAGE_PARAM(RsGxsGroupId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
bool messagePublicationTest(const RsGxsMsgMetaData&) ;
|
bool messagePublicationTest(const RsGxsMsgMetaData&) ;
|
||||||
|
@ -152,9 +152,6 @@ private:
|
|||||||
/// @see p3Config::saveDone
|
/// @see p3Config::saveDone
|
||||||
void saveDone() override;
|
void saveDone() override;
|
||||||
|
|
||||||
uint16_t mPort;
|
|
||||||
std::string mBindAddress;
|
|
||||||
|
|
||||||
/// Called when new JSON API auth token is requested to be authorized
|
/// Called when new JSON API auth token is requested to be authorized
|
||||||
std::function<bool(const std::string&, const std::string& passwd)>
|
std::function<bool(const std::string&, const std::string& passwd)>
|
||||||
mNewAccessRequestCallback;
|
mNewAccessRequestCallback;
|
||||||
|
@ -432,6 +432,61 @@ public:
|
|||||||
const std::function<void (const RsGxsGroupSummary& result)>& multiCallback,
|
const std::function<void (const RsGxsGroupSummary& result)>& multiCallback,
|
||||||
rstime_t maxWait = 30 ) = 0;
|
rstime_t maxWait = 30 ) = 0;
|
||||||
|
|
||||||
|
/// default base URL used for channels links @see exportChannelLink
|
||||||
|
static const std::string DEFAULT_CHANNEL_BASE_URL;
|
||||||
|
|
||||||
|
/// Link query field used to store channel name @see exportChannelLink
|
||||||
|
static const std::string CHANNEL_URL_NAME_FIELD;
|
||||||
|
|
||||||
|
/// Link query field used to store channel id @see exportChannelLink
|
||||||
|
static const std::string CHANNEL_URL_ID_FIELD;
|
||||||
|
|
||||||
|
/// Link query field used to store channel data @see exportChannelLink
|
||||||
|
static const std::string CHANNEL_URL_DATA_FIELD;
|
||||||
|
|
||||||
|
/** Link query field used to store channel message title
|
||||||
|
* @see exportChannelLink */
|
||||||
|
static const std::string CHANNEL_URL_MSG_TITLE_FIELD;
|
||||||
|
|
||||||
|
/// Link query field used to store channel message id @see exportChannelLink
|
||||||
|
static const std::string CHANNEL_URL_MSG_ID_FIELD;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get link to a channel
|
||||||
|
* @jsonapi{development}
|
||||||
|
* @param[out] link storage for the generated link
|
||||||
|
* @param[in] chanId Id of the channel of which we want to generate a link
|
||||||
|
* @param[in] includeGxsData if true include the channel GXS group data so
|
||||||
|
* the receiver can subscribe to the channel even if she hasn't received it
|
||||||
|
* through GXS yet
|
||||||
|
* @param[in] baseUrl URL into which to sneak in the RetroShare link
|
||||||
|
* radix, this is primarly useful to induce applications into making the
|
||||||
|
* link clickable, or to disguise the RetroShare link into a
|
||||||
|
* "normal" looking web link. If empty the GXS data link will be outputted
|
||||||
|
* in plain base64 format.
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if something failed, true otherwhise
|
||||||
|
*/
|
||||||
|
virtual bool exportChannelLink(
|
||||||
|
std::string& link, const RsGxsGroupId& chanId,
|
||||||
|
bool includeGxsData = true,
|
||||||
|
const std::string& baseUrl = RsGxsChannels::DEFAULT_CHANNEL_BASE_URL,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Import channel from full link
|
||||||
|
* @param[in] link channel link either in radix or link format
|
||||||
|
* @param[out] chanId optional storage for parsed channel id
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if some error occurred, true otherwise
|
||||||
|
*/
|
||||||
|
virtual bool importChannelLink(
|
||||||
|
const std::string& link,
|
||||||
|
RsGxsGroupId& chanId = RS_DEFAULT_STORAGE_PARAM(RsGxsGroupId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
|
||||||
/* Following functions are deprecated as they expose internal functioning
|
/* Following functions are deprecated as they expose internal functioning
|
||||||
* semantic, instead of a safe to use API */
|
* semantic, instead of a safe to use API */
|
||||||
|
@ -317,6 +317,54 @@ public:
|
|||||||
virtual bool cancelCircleMembership(
|
virtual bool cancelCircleMembership(
|
||||||
const RsGxsId& ownGxsId, const RsGxsCircleId& circleId ) = 0;
|
const RsGxsId& ownGxsId, const RsGxsCircleId& circleId ) = 0;
|
||||||
|
|
||||||
|
/// default base URL used for circle links @see exportCircleLink
|
||||||
|
static const std::string DEFAULT_CIRCLE_BASE_URL;
|
||||||
|
|
||||||
|
/// Circle link query field used to store circle name @see exportCircleLink
|
||||||
|
static const std::string CIRCLE_URL_NAME_FIELD;
|
||||||
|
|
||||||
|
/// Circle link query field used to store circle id @see exportCircleLink
|
||||||
|
static const std::string CIRCLE_URL_ID_FIELD;
|
||||||
|
|
||||||
|
/// Circle link query field used to store circle data @see exportCircleLink
|
||||||
|
static const std::string CIRCLE_URL_DATA_FIELD;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get link to a circle
|
||||||
|
* @jsonapi{development}
|
||||||
|
* @param[out] link storage for the generated link
|
||||||
|
* @param[in] circleId Id of the circle of which we want to generate a link
|
||||||
|
* @param[in] includeGxsData if true include the circle GXS group data so
|
||||||
|
* the receiver can request circle membership even if the circle hasn't
|
||||||
|
* propagated through GXS to her yet
|
||||||
|
* @param[in] baseUrl URL into which to sneak in the RetroShare circle link
|
||||||
|
* radix, this is primarly useful to induce applications into making the
|
||||||
|
* link clickable, or to disguise the RetroShare circle link into a
|
||||||
|
* "normal" looking web link. If empty the circle data link will be
|
||||||
|
* outputted in plain base64 format.
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if something failed, true otherwhise
|
||||||
|
*/
|
||||||
|
virtual bool exportCircleLink(
|
||||||
|
std::string& link, const RsGxsCircleId& circleId,
|
||||||
|
bool includeGxsData = true,
|
||||||
|
const std::string& baseUrl = RsGxsCircles::DEFAULT_CIRCLE_BASE_URL,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Import circle from full link
|
||||||
|
* @param[in] link circle link either in radix or link format
|
||||||
|
* @param[out] circleId optional storage for parsed circle id
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if some error occurred, true otherwise
|
||||||
|
*/
|
||||||
|
virtual bool importCircleLink(
|
||||||
|
const std::string& link,
|
||||||
|
RsGxsCircleId& circleId = RS_DEFAULT_STORAGE_PARAM(RsGxsCircleId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
RS_DEPRECATED_FOR("getCirclesSummaries getCirclesInfo")
|
RS_DEPRECATED_FOR("getCirclesSummaries getCirclesInfo")
|
||||||
virtual bool getGroupData(
|
virtual bool getGroupData(
|
||||||
const uint32_t& token, std::vector<RsGxsCircleGroup>& groups ) = 0;
|
const uint32_t& token, std::vector<RsGxsCircleGroup>& groups ) = 0;
|
||||||
|
@ -268,6 +268,62 @@ public:
|
|||||||
virtual bool subscribeToForum( const RsGxsGroupId& forumId,
|
virtual bool subscribeToForum( const RsGxsGroupId& forumId,
|
||||||
bool subscribe ) = 0;
|
bool subscribe ) = 0;
|
||||||
|
|
||||||
|
/// default base URL used for forums links @see exportForumLink
|
||||||
|
static const std::string DEFAULT_FORUM_BASE_URL;
|
||||||
|
|
||||||
|
/// Link query field used to store forum name @see exportForumLink
|
||||||
|
static const std::string FORUM_URL_NAME_FIELD;
|
||||||
|
|
||||||
|
/// Link query field used to store forum id @see exportForumLink
|
||||||
|
static const std::string FORUM_URL_ID_FIELD;
|
||||||
|
|
||||||
|
/// Link query field used to store forum data @see exportForumLink
|
||||||
|
static const std::string FORUM_URL_DATA_FIELD;
|
||||||
|
|
||||||
|
/** Link query field used to store forum message title
|
||||||
|
* @see exportChannelLink */
|
||||||
|
static const std::string FORUM_URL_MSG_TITLE_FIELD;
|
||||||
|
|
||||||
|
/// Link query field used to store forum message id @see exportChannelLink
|
||||||
|
static const std::string FORUM_URL_MSG_ID_FIELD;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get link to a forum
|
||||||
|
* @jsonapi{development}
|
||||||
|
* @param[out] link storage for the generated link
|
||||||
|
* @param[in] forumId Id of the forum of which we want to generate a link
|
||||||
|
* @param[in] includeGxsData if true include the forum GXS group data so
|
||||||
|
* the receiver can subscribe to the forum even if she hasn't received it
|
||||||
|
* through GXS yet
|
||||||
|
* @param[in] baseUrl URL into which to sneak in the RetroShare link
|
||||||
|
* radix, this is primarly useful to induce applications into making the
|
||||||
|
* link clickable, or to disguise the RetroShare link into a
|
||||||
|
* "normal" looking web link. If empty the GXS data link will be outputted
|
||||||
|
* in plain base64 format.
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if something failed, true otherwhise
|
||||||
|
*/
|
||||||
|
virtual bool exportForumLink(
|
||||||
|
std::string& link, const RsGxsGroupId& forumId,
|
||||||
|
bool includeGxsData = true,
|
||||||
|
const std::string& baseUrl = RsGxsForums::DEFAULT_FORUM_BASE_URL,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Import forum from full link
|
||||||
|
* @param[in] link forum link either in radix or URL format
|
||||||
|
* @param[out] forumId optional storage for parsed forum id
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if some error occurred, true otherwise
|
||||||
|
*/
|
||||||
|
virtual bool importForumLink(
|
||||||
|
const std::string& link,
|
||||||
|
RsGxsGroupId& forumId = RS_DEFAULT_STORAGE_PARAM(RsGxsGroupId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Create forum. Blocking API.
|
* @brief Create forum. Blocking API.
|
||||||
* @jsonapi{development}
|
* @jsonapi{development}
|
||||||
|
@ -68,6 +68,8 @@ struct RsGxsGroupSummary : RsSerializable
|
|||||||
RS_SERIAL_PROCESS(mPopularity);
|
RS_SERIAL_PROCESS(mPopularity);
|
||||||
RS_SERIAL_PROCESS(mSearchContext);
|
RS_SERIAL_PROCESS(mSearchContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~RsGxsGroupSummary();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -108,8 +110,6 @@ struct RsGxsChanges : RsEvent
|
|||||||
*/
|
*/
|
||||||
struct RsGxsIface
|
struct RsGxsIface
|
||||||
{
|
{
|
||||||
virtual ~RsGxsIface() {}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Gxs services should call this for automatic handling of
|
* Gxs services should call this for automatic handling of
|
||||||
* changes, send
|
* changes, send
|
||||||
@ -238,4 +238,32 @@ struct RsGxsIface
|
|||||||
|
|
||||||
virtual RsReputationLevel minReputationForForwardingMessages(
|
virtual RsReputationLevel minReputationForForwardingMessages(
|
||||||
uint32_t group_sign_flags,uint32_t identity_flags ) = 0;
|
uint32_t group_sign_flags,uint32_t identity_flags ) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Export group public data in base64 format
|
||||||
|
* @jsonapi{development}
|
||||||
|
* @param[out] radix storage for the generated base64 data
|
||||||
|
* @param[in] groupId Id of the group of which to output the data
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if something failed, true otherwhise
|
||||||
|
*/
|
||||||
|
virtual bool exportGroupBase64(
|
||||||
|
std::string& radix, const RsGxsGroupId& groupId,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Import group public data from base64 string
|
||||||
|
* @param[in] radix group invite in radix format
|
||||||
|
* @param[out] groupId optional storage for imported group id
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if some error occurred, true otherwise
|
||||||
|
*/
|
||||||
|
virtual bool importGroupBase64(
|
||||||
|
const std::string& radix,
|
||||||
|
RsGxsGroupId& groupId = RS_DEFAULT_STORAGE_PARAM(RsGxsGroupId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
virtual ~RsGxsIface();
|
||||||
};
|
};
|
||||||
|
@ -296,47 +296,7 @@ protected:
|
|||||||
uint32_t token,
|
uint32_t token,
|
||||||
std::chrono::milliseconds maxWait = std::chrono::milliseconds(500),
|
std::chrono::milliseconds maxWait = std::chrono::milliseconds(500),
|
||||||
std::chrono::milliseconds checkEvery = std::chrono::milliseconds(2))
|
std::chrono::milliseconds checkEvery = std::chrono::milliseconds(2))
|
||||||
{
|
{ return mTokenService.waitToken(token, maxWait, checkEvery); }
|
||||||
#if defined(__ANDROID__) && (__ANDROID_API__ < 24)
|
|
||||||
auto wkStartime = std::chrono::steady_clock::now();
|
|
||||||
int maxWorkAroundCnt = 10;
|
|
||||||
LLwaitTokenBeginLabel:
|
|
||||||
#endif
|
|
||||||
auto timeout = std::chrono::steady_clock::now() + maxWait;
|
|
||||||
auto st = requestStatus(token);
|
|
||||||
while( !(st == RsTokenService::FAILED || st >= RsTokenService::COMPLETE)
|
|
||||||
&& std::chrono::steady_clock::now() < timeout )
|
|
||||||
{
|
|
||||||
std::this_thread::sleep_for(checkEvery);
|
|
||||||
st = requestStatus(token);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(__ANDROID__) && (__ANDROID_API__ < 24)
|
|
||||||
/* Work around for very slow/old android devices, we don't expect this
|
|
||||||
* to be necessary on newer devices. If it take unreasonably long
|
|
||||||
* something worser is already happening elsewere and we return anyway.
|
|
||||||
*/
|
|
||||||
if( st > RsTokenService::FAILED && st < RsTokenService::COMPLETE
|
|
||||||
&& maxWorkAroundCnt-- > 0 )
|
|
||||||
{
|
|
||||||
maxWait *= 10;
|
|
||||||
checkEvery *= 3;
|
|
||||||
std::cerr << __PRETTY_FUNCTION__ << " Slow Android device "
|
|
||||||
<< " workaround st: " << st
|
|
||||||
<< " maxWorkAroundCnt: " << maxWorkAroundCnt
|
|
||||||
<< " maxWait: " << maxWait.count()
|
|
||||||
<< " checkEvery: " << checkEvery.count() << std::endl;
|
|
||||||
goto LLwaitTokenBeginLabel;
|
|
||||||
}
|
|
||||||
std::cerr << __PRETTY_FUNCTION__ << " lasted: "
|
|
||||||
<< std::chrono::duration_cast<std::chrono::milliseconds>(
|
|
||||||
std::chrono::steady_clock::now() - wkStartime ).count()
|
|
||||||
<< "ms" << std::endl;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return st;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RsGxsIface& mGxs;
|
RsGxsIface& mGxs;
|
||||||
|
@ -95,14 +95,17 @@ struct GxsReputation : RsSerializable
|
|||||||
int32_t mPeerOpinion;
|
int32_t mPeerOpinion;
|
||||||
|
|
||||||
/// @see RsSerializable
|
/// @see RsSerializable
|
||||||
void serial_process( RsGenericSerializer::SerializeJob j,
|
void serial_process(
|
||||||
RsGenericSerializer::SerializeContext& ctx )
|
RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx ) override
|
||||||
{
|
{
|
||||||
RS_SERIAL_PROCESS(mOverallScore);
|
RS_SERIAL_PROCESS(mOverallScore);
|
||||||
RS_SERIAL_PROCESS(mIdScore);
|
RS_SERIAL_PROCESS(mIdScore);
|
||||||
RS_SERIAL_PROCESS(mOwnOpinion);
|
RS_SERIAL_PROCESS(mOwnOpinion);
|
||||||
RS_SERIAL_PROCESS(mPeerOpinion);
|
RS_SERIAL_PROCESS(mPeerOpinion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~GxsReputation() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -110,7 +113,6 @@ struct RsGxsIdGroup : RsSerializable
|
|||||||
{
|
{
|
||||||
RsGxsIdGroup() :
|
RsGxsIdGroup() :
|
||||||
mLastUsageTS(0), mPgpKnown(false), mIsAContact(false) {}
|
mLastUsageTS(0), mPgpKnown(false), mIsAContact(false) {}
|
||||||
virtual ~RsGxsIdGroup() {}
|
|
||||||
|
|
||||||
RsGroupMetaData mMeta;
|
RsGroupMetaData mMeta;
|
||||||
|
|
||||||
@ -149,6 +151,8 @@ struct RsGxsIdGroup : RsSerializable
|
|||||||
/// @see RsSerializable
|
/// @see RsSerializable
|
||||||
void serial_process( RsGenericSerializer::SerializeJob j,
|
void serial_process( RsGenericSerializer::SerializeJob j,
|
||||||
RsGenericSerializer::SerializeContext& ctx ) override;
|
RsGenericSerializer::SerializeContext& ctx ) override;
|
||||||
|
|
||||||
|
~RsGxsIdGroup() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
// DATA TYPE FOR EXTERNAL INTERFACE.
|
// DATA TYPE FOR EXTERNAL INTERFACE.
|
||||||
@ -331,8 +335,9 @@ struct RsIdentityDetails : RsSerializable
|
|||||||
std::map<RsIdentityUsage,rstime_t> mUseCases;
|
std::map<RsIdentityUsage,rstime_t> mUseCases;
|
||||||
|
|
||||||
/// @see RsSerializable
|
/// @see RsSerializable
|
||||||
virtual void serial_process(RsGenericSerializer::SerializeJob j,
|
virtual void serial_process(
|
||||||
RsGenericSerializer::SerializeContext& ctx)
|
RsGenericSerializer::SerializeJob j,
|
||||||
|
RsGenericSerializer::SerializeContext& ctx ) override
|
||||||
{
|
{
|
||||||
RS_SERIAL_PROCESS(mId);
|
RS_SERIAL_PROCESS(mId);
|
||||||
RS_SERIAL_PROCESS(mNickname);
|
RS_SERIAL_PROCESS(mNickname);
|
||||||
@ -344,6 +349,8 @@ struct RsIdentityDetails : RsSerializable
|
|||||||
RS_SERIAL_PROCESS(mLastUsageTS);
|
RS_SERIAL_PROCESS(mLastUsageTS);
|
||||||
RS_SERIAL_PROCESS(mUseCases);
|
RS_SERIAL_PROCESS(mUseCases);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~RsIdentityDetails() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -434,26 +441,6 @@ struct RsIdentity : RsGxsIfaceHelper
|
|||||||
*/
|
*/
|
||||||
virtual bool isOwnId(const RsGxsId& id) = 0;
|
virtual bool isOwnId(const RsGxsId& id) = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Get base64 representation of an identity
|
|
||||||
* @jsonapi{development}
|
|
||||||
* @param[in] id Id of the identity
|
|
||||||
* @param[out] base64String storage for the identity base64
|
|
||||||
* @return false on error, true otherwise
|
|
||||||
*/
|
|
||||||
virtual bool identityToBase64( const RsGxsId& id,
|
|
||||||
std::string& base64String ) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Import identity from base64 representation
|
|
||||||
* @jsonapi{development}
|
|
||||||
* @param[in] base64String base64 representation of the identity to import
|
|
||||||
* @param[out] id storage for the identity id
|
|
||||||
* @return false on error, true otherwise
|
|
||||||
*/
|
|
||||||
virtual bool identityFromBase64( const std::string& base64String,
|
|
||||||
RsGxsId& id ) = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get identities summaries list.
|
* @brief Get identities summaries list.
|
||||||
* @jsonapi{development}
|
* @jsonapi{development}
|
||||||
@ -528,8 +515,55 @@ struct RsIdentity : RsGxsIfaceHelper
|
|||||||
*/
|
*/
|
||||||
virtual bool requestIdentity(const RsGxsId& id) = 0;
|
virtual bool requestIdentity(const RsGxsId& id) = 0;
|
||||||
|
|
||||||
|
/// default base URL used for indentity links @see exportIdentityLink
|
||||||
|
static const std::string DEFAULT_IDENTITY_BASE_URL;
|
||||||
|
|
||||||
RS_DEPRECATED
|
/// Link query field used to store indentity name @see exportIdentityLink
|
||||||
|
static const std::string IDENTITY_URL_NAME_FIELD;
|
||||||
|
|
||||||
|
/// Link query field used to store indentity id @see exportIdentityLink
|
||||||
|
static const std::string IDENTITY_URL_ID_FIELD;
|
||||||
|
|
||||||
|
/// Link query field used to store indentity data @see exportIdentityLink
|
||||||
|
static const std::string IDENTITY_URL_DATA_FIELD;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get link to a identity
|
||||||
|
* @jsonapi{development}
|
||||||
|
* @param[out] link storage for the generated link
|
||||||
|
* @param[in] id Id of the identity of which you want to generate a link
|
||||||
|
* @param[in] includeGxsData if true include the identity GXS group data so
|
||||||
|
* the receiver can make use of the identity even if she hasn't received it
|
||||||
|
* through GXS yet
|
||||||
|
* @param[in] baseUrl URL into which to sneak in the RetroShare link
|
||||||
|
* radix, this is primarly useful to induce applications into making the
|
||||||
|
* link clickable, or to disguise the RetroShare link into a
|
||||||
|
* "normal" looking web link. If empty the GXS data link will be outputted
|
||||||
|
* in plain base64 format.
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if something failed, true otherwhise
|
||||||
|
*/
|
||||||
|
virtual bool exportIdentityLink(
|
||||||
|
std::string& link, const RsGxsId& id,
|
||||||
|
bool includeGxsData = true,
|
||||||
|
const std::string& baseUrl = RsIdentity::DEFAULT_IDENTITY_BASE_URL,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Import identity from full link
|
||||||
|
* @param[in] link identity link either in radix or link format
|
||||||
|
* @param[out] id optional storage for parsed identity
|
||||||
|
* @param[out] errMsg optional storage for error message, meaningful only in
|
||||||
|
* case of failure
|
||||||
|
* @return false if some error occurred, true otherwise
|
||||||
|
*/
|
||||||
|
virtual bool importIdentityLink(
|
||||||
|
const std::string& link,
|
||||||
|
RsGxsId& id = RS_DEFAULT_STORAGE_PARAM(RsGxsId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string) ) = 0;
|
||||||
|
|
||||||
|
RS_DEPRECATED_FOR(exportIdentityLink)
|
||||||
virtual bool getGroupSerializedData(
|
virtual bool getGroupSerializedData(
|
||||||
const uint32_t& token,
|
const uint32_t& token,
|
||||||
std::map<RsGxsId,std::string>& serialized_groups ) = 0;
|
std::map<RsGxsId,std::string>& serialized_groups ) = 0;
|
||||||
@ -547,10 +581,10 @@ struct RsIdentity : RsGxsIfaceHelper
|
|||||||
RS_DEPRECATED
|
RS_DEPRECATED
|
||||||
virtual uint32_t nbRegularContacts() =0;
|
virtual uint32_t nbRegularContacts() =0;
|
||||||
|
|
||||||
RS_DEPRECATED_FOR(identityToBase64)
|
RS_DEPRECATED_FOR(exportIdentityLink)
|
||||||
virtual bool serialiseIdentityToMemory( const RsGxsId& id,
|
virtual bool serialiseIdentityToMemory( const RsGxsId& id,
|
||||||
std::string& radix_string ) = 0;
|
std::string& radix_string ) = 0;
|
||||||
RS_DEPRECATED_FOR(identityFromBase64)
|
RS_DEPRECATED_FOR(importIdentityLink)
|
||||||
virtual bool deserialiseIdentityFromMemory( const std::string& radix_string,
|
virtual bool deserialiseIdentityFromMemory( const std::string& radix_string,
|
||||||
RsGxsId* id = nullptr ) = 0;
|
RsGxsId* id = nullptr ) = 0;
|
||||||
|
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
* *
|
* *
|
||||||
* libretroshare: retroshare core library *
|
* libretroshare: retroshare core library *
|
||||||
* *
|
* *
|
||||||
* Copyright 2012-2012 by Robert Fernie, Chris Evi-Parker *
|
* Copyright (C) 2012 Chris Evi-Parker *
|
||||||
|
* Copyright (C) 2012 Robert Fernie <retroshare@lunamutt.com> *
|
||||||
|
* Copyright (C) 2018-2019 Gioacchino Mazzurco <gio@eigenlab.org> *
|
||||||
* *
|
* *
|
||||||
* This program is free software: you can redistribute it and/or modify *
|
* This program is free software: you can redistribute it and/or modify *
|
||||||
* it under the terms of the GNU Lesser General Public License as *
|
* it under the terms of the GNU Lesser General Public License as *
|
||||||
@ -19,8 +21,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
|
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
|
||||||
* *
|
* *
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
#ifndef RSTOKENSERVICE_H
|
#pragma once
|
||||||
#define RSTOKENSERVICE_H
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -28,6 +29,7 @@
|
|||||||
|
|
||||||
#include "retroshare/rsgxsifacetypes.h"
|
#include "retroshare/rsgxsifacetypes.h"
|
||||||
#include "util/rsdeprecate.h"
|
#include "util/rsdeprecate.h"
|
||||||
|
#include "util/rsdebug.h"
|
||||||
|
|
||||||
// TODO CLEANUP: GXS_REQUEST_TYPE_* should be an inner enum of RsTokReqOptions
|
// TODO CLEANUP: GXS_REQUEST_TYPE_* should be an inner enum of RsTokReqOptions
|
||||||
#define GXS_REQUEST_TYPE_GROUP_DATA 0x00010000
|
#define GXS_REQUEST_TYPE_GROUP_DATA 0x00010000
|
||||||
@ -113,7 +115,6 @@ struct RsTokReqOptions
|
|||||||
*/
|
*/
|
||||||
class RsTokenService
|
class RsTokenService
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
enum GxsRequestStatus : uint8_t
|
enum GxsRequestStatus : uint8_t
|
||||||
@ -220,6 +221,59 @@ public:
|
|||||||
* @return false if unusuccessful in cancelling request, true if successful
|
* @return false if unusuccessful in cancelling request, true if successful
|
||||||
*/
|
*/
|
||||||
virtual bool cancelRequest(const uint32_t &token) = 0;
|
virtual bool cancelRequest(const uint32_t &token) = 0;
|
||||||
};
|
|
||||||
|
|
||||||
#endif // RSTOKENSERVICE_H
|
/**
|
||||||
|
* Block caller while request is being processed.
|
||||||
|
* Useful for blocking API implementation.
|
||||||
|
* @param[in] token token associated to the request caller is waiting for
|
||||||
|
* @param[in] maxWait maximum waiting time in milliseconds
|
||||||
|
* @param[in] checkEvery time in millisecond between status checks
|
||||||
|
*/
|
||||||
|
RsTokenService::GxsRequestStatus waitToken(
|
||||||
|
uint32_t token,
|
||||||
|
std::chrono::milliseconds maxWait = std::chrono::milliseconds(500),
|
||||||
|
std::chrono::milliseconds checkEvery = std::chrono::milliseconds(2))
|
||||||
|
{
|
||||||
|
#if defined(__ANDROID__) && (__ANDROID_API__ < 24)
|
||||||
|
auto wkStartime = std::chrono::steady_clock::now();
|
||||||
|
int maxWorkAroundCnt = 10;
|
||||||
|
LLwaitTokenBeginLabel:
|
||||||
|
#endif
|
||||||
|
auto timeout = std::chrono::steady_clock::now() + maxWait;
|
||||||
|
auto st = requestStatus(token);
|
||||||
|
while( !(st == RsTokenService::FAILED || st >= RsTokenService::COMPLETE)
|
||||||
|
&& std::chrono::steady_clock::now() < timeout )
|
||||||
|
{
|
||||||
|
std::this_thread::sleep_for(checkEvery);
|
||||||
|
st = requestStatus(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(__ANDROID__) && (__ANDROID_API__ < 24)
|
||||||
|
/* Work around for very slow/old android devices, we don't expect this
|
||||||
|
* to be necessary on newer devices. If it take unreasonably long
|
||||||
|
* something worser is already happening elsewere and we return anyway.
|
||||||
|
*/
|
||||||
|
if( st > RsTokenService::FAILED && st < RsTokenService::COMPLETE
|
||||||
|
&& maxWorkAroundCnt-- > 0 )
|
||||||
|
{
|
||||||
|
maxWait *= 10;
|
||||||
|
checkEvery *= 3;
|
||||||
|
Dbg3() << __PRETTY_FUNCTION__ << " Slow Android device "
|
||||||
|
<< " workaround st: " << st
|
||||||
|
<< " maxWorkAroundCnt: " << maxWorkAroundCnt
|
||||||
|
<< " maxWait: " << maxWait.count()
|
||||||
|
<< " checkEvery: " << checkEvery.count() << std::endl;
|
||||||
|
goto LLwaitTokenBeginLabel;
|
||||||
|
}
|
||||||
|
Dbg3() << __PRETTY_FUNCTION__ << " lasted: "
|
||||||
|
<< std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||||
|
std::chrono::steady_clock::now() - wkStartime ).count()
|
||||||
|
<< "ms" << std::endl;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return st;
|
||||||
|
}
|
||||||
|
|
||||||
|
RS_SET_CONTEXT_DEBUG_LEVEL(2)
|
||||||
|
};
|
||||||
|
@ -2478,6 +2478,85 @@ void p3GxsChannels::cleanTimedOutCallbacks()
|
|||||||
} // RS_STACK_MUTEX(mDistantChannelsCallbacksMapMutex)
|
} // RS_STACK_MUTEX(mDistantChannelsCallbacksMapMutex)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool p3GxsChannels::exportChannelLink(
|
||||||
|
std::string& link, const RsGxsGroupId& chanId, bool includeGxsData,
|
||||||
|
const std::string& baseUrl, std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(chanId.isNull()) return failure("chanId cannot be null");
|
||||||
|
|
||||||
|
const bool outputRadix = baseUrl.empty();
|
||||||
|
if(outputRadix && !includeGxsData) return
|
||||||
|
failure("includeGxsData must be true if format requested is base64");
|
||||||
|
|
||||||
|
if( includeGxsData &&
|
||||||
|
!RsGenExchange::exportGroupBase64(link, chanId, errMsg) )
|
||||||
|
return failure(errMsg);
|
||||||
|
|
||||||
|
if(outputRadix) return true;
|
||||||
|
|
||||||
|
std::vector<RsGxsChannelGroup> chansInfo;
|
||||||
|
if( !getChannelsInfo(std::list<RsGxsGroupId>({chanId}), chansInfo)
|
||||||
|
|| chansInfo.empty() )
|
||||||
|
return failure("failure retrieving channel information");
|
||||||
|
|
||||||
|
RsUrl inviteUrl(baseUrl);
|
||||||
|
inviteUrl.setQueryKV(CHANNEL_URL_ID_FIELD, chanId.toStdString());
|
||||||
|
inviteUrl.setQueryKV(CHANNEL_URL_NAME_FIELD, chansInfo[0].mMeta.mGroupName);
|
||||||
|
if(includeGxsData) inviteUrl.setQueryKV(CHANNEL_URL_DATA_FIELD, link);
|
||||||
|
|
||||||
|
link = inviteUrl.toString();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool p3GxsChannels::importChannelLink(
|
||||||
|
const std::string& link, RsGxsGroupId& chanId, std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(link.empty()) return failure("link is empty");
|
||||||
|
|
||||||
|
const std::string* radixPtr(&link);
|
||||||
|
|
||||||
|
RsUrl url(link);
|
||||||
|
const auto& query = url.query();
|
||||||
|
const auto qIt = query.find(CHANNEL_URL_DATA_FIELD);
|
||||||
|
if(qIt != query.end()) radixPtr = &qIt->second;
|
||||||
|
|
||||||
|
if(radixPtr->empty()) return failure(CHANNEL_URL_DATA_FIELD + " is empty");
|
||||||
|
|
||||||
|
if(!RsGenExchange::importGroupBase64(*radixPtr, chanId, errMsg))
|
||||||
|
return failure(errMsg);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*static*/ const std::string RsGxsChannels::DEFAULT_CHANNEL_BASE_URL =
|
||||||
|
"retroshare:///channels";
|
||||||
|
/*static*/ const std::string RsGxsChannels::CHANNEL_URL_NAME_FIELD =
|
||||||
|
"chanName";
|
||||||
|
/*static*/ const std::string RsGxsChannels::CHANNEL_URL_ID_FIELD =
|
||||||
|
"chanId";
|
||||||
|
/*static*/ const std::string RsGxsChannels::CHANNEL_URL_DATA_FIELD =
|
||||||
|
"chanData";
|
||||||
|
/*static*/ const std::string RsGxsChannels::CHANNEL_URL_MSG_TITLE_FIELD =
|
||||||
|
"chanMsgTitle";
|
||||||
|
/*static*/ const std::string RsGxsChannels::CHANNEL_URL_MSG_ID_FIELD =
|
||||||
|
"chanMsgId";
|
||||||
|
|
||||||
RsGxsChannelGroup::~RsGxsChannelGroup() = default;
|
RsGxsChannelGroup::~RsGxsChannelGroup() = default;
|
||||||
RsGxsChannelPost::~RsGxsChannelPost() = default;
|
RsGxsChannelPost::~RsGxsChannelPost() = default;
|
||||||
RsGxsChannels::~RsGxsChannels() = default;
|
RsGxsChannels::~RsGxsChannels() = default;
|
||||||
|
@ -246,9 +246,24 @@ virtual bool ExtraFileRemove(const RsFileHash &hash);
|
|||||||
bool subscribeToChannel( const RsGxsGroupId &groupId,
|
bool subscribeToChannel( const RsGxsGroupId &groupId,
|
||||||
bool subscribe ) override;
|
bool subscribe ) override;
|
||||||
|
|
||||||
/// Implementation of @see RsGxsChannels::setPostRead
|
/// @see RsGxsChannels
|
||||||
virtual bool markRead(const RsGxsGrpMsgIdPair& msgId, bool read);
|
virtual bool markRead(const RsGxsGrpMsgIdPair& msgId, bool read);
|
||||||
|
|
||||||
|
/// @see RsGxsChannels
|
||||||
|
bool exportChannelLink(
|
||||||
|
std::string& link, const RsGxsGroupId& chanId,
|
||||||
|
bool includeGxsData = true,
|
||||||
|
const std::string& baseUrl = DEFAULT_CHANNEL_BASE_URL,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
|
/// @see RsGxsChannels
|
||||||
|
bool importChannelLink(
|
||||||
|
const std::string& link,
|
||||||
|
RsGxsGroupId& chanId = RS_DEFAULT_STORAGE_PARAM(RsGxsGroupId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
virtual bool shareChannelKeys(
|
virtual bool shareChannelKeys(
|
||||||
const RsGxsGroupId& channelId, const std::set<RsPeerId>& peers );
|
const RsGxsGroupId& channelId, const std::set<RsPeerId>& peers );
|
||||||
|
|
||||||
|
@ -365,6 +365,76 @@ bool p3GxsCircles::inviteIdsToCircle( const std::set<RsGxsId>& identities,
|
|||||||
return editCircle(circleGrp);
|
return editCircle(circleGrp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool p3GxsCircles::exportCircleLink(
|
||||||
|
std::string& link, const RsGxsCircleId& circleId,
|
||||||
|
bool includeGxsData, const std::string& baseUrl, std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(circleId.isNull()) return failure("circleId cannot be null");
|
||||||
|
|
||||||
|
const bool outputRadix = baseUrl.empty();
|
||||||
|
if(outputRadix && !includeGxsData) return
|
||||||
|
failure("includeGxsData must be true if format requested is base64");
|
||||||
|
|
||||||
|
RsGxsGroupId&& groupId = static_cast<RsGxsGroupId>(circleId);
|
||||||
|
if( includeGxsData &&
|
||||||
|
!RsGenExchange::exportGroupBase64(link, groupId, errMsg) )
|
||||||
|
return failure(errMsg);
|
||||||
|
|
||||||
|
if(outputRadix) return true;
|
||||||
|
|
||||||
|
std::vector<RsGxsCircleGroup> circlesInfo;
|
||||||
|
if( !getCirclesInfo(
|
||||||
|
std::list<RsGxsGroupId>({groupId}), circlesInfo )
|
||||||
|
|| circlesInfo.empty() )
|
||||||
|
return failure("failure retrieving circle information");
|
||||||
|
|
||||||
|
RsUrl inviteUrl(baseUrl);
|
||||||
|
inviteUrl.setQueryKV(CIRCLE_URL_ID_FIELD, circleId.toStdString());
|
||||||
|
inviteUrl.setQueryKV(CIRCLE_URL_NAME_FIELD, circlesInfo[0].mMeta.mGroupName);
|
||||||
|
if(includeGxsData) inviteUrl.setQueryKV(CIRCLE_URL_DATA_FIELD, link);
|
||||||
|
|
||||||
|
link = inviteUrl.toString();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool p3GxsCircles::importCircleLink(
|
||||||
|
const std::string& link, RsGxsCircleId& circleId,
|
||||||
|
std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(link.empty()) return failure("link is empty");
|
||||||
|
|
||||||
|
const std::string* radixPtr(&link);
|
||||||
|
|
||||||
|
RsUrl url(link);
|
||||||
|
const auto& query = url.query();
|
||||||
|
const auto qIt = query.find(CIRCLE_URL_DATA_FIELD);
|
||||||
|
if(qIt != query.end()) radixPtr = &qIt->second;
|
||||||
|
|
||||||
|
if(radixPtr->empty()) return failure(CIRCLE_URL_DATA_FIELD + " is empty");
|
||||||
|
|
||||||
|
if(!RsGenExchange::importGroupBase64(
|
||||||
|
*radixPtr, reinterpret_cast<RsGxsGroupId&>(circleId), errMsg) )
|
||||||
|
return failure(errMsg);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t p3GxsCircles::circleAuthenPolicy()
|
uint32_t p3GxsCircles::circleAuthenPolicy()
|
||||||
{
|
{
|
||||||
uint32_t policy = 0;
|
uint32_t policy = 0;
|
||||||
@ -545,7 +615,8 @@ void p3GxsCircles::notifyChanges(std::vector<RsGxsNotify *> &changes)
|
|||||||
/******************* RsCircles Interface ***************************************/
|
/******************* RsCircles Interface ***************************************/
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
|
|
||||||
bool p3GxsCircles:: getCircleDetails(const RsGxsCircleId &id, RsGxsCircleDetails &details)
|
bool p3GxsCircles::getCircleDetails(
|
||||||
|
const RsGxsCircleId& id, RsGxsCircleDetails& details)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef DEBUG_CIRCLES
|
#ifdef DEBUG_CIRCLES
|
||||||
@ -2335,6 +2406,12 @@ bool p3GxsCircles::processMembershipRequests(uint32_t token)
|
|||||||
return true ;
|
return true ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*static*/ const std::string RsGxsCircles::DEFAULT_CIRCLE_BASE_URL =
|
||||||
|
"retroshare:///circles";
|
||||||
|
/*static*/ const std::string RsGxsCircles::CIRCLE_URL_NAME_FIELD = "circleName";
|
||||||
|
/*static*/ const std::string RsGxsCircles::CIRCLE_URL_ID_FIELD = "circleId";
|
||||||
|
/*static*/ const std::string RsGxsCircles::CIRCLE_URL_DATA_FIELD = "circleData";
|
||||||
|
|
||||||
RsGxsCircles::~RsGxsCircles() = default;
|
RsGxsCircles::~RsGxsCircles() = default;
|
||||||
RsGxsCircleMsg::~RsGxsCircleMsg() = default;
|
RsGxsCircleMsg::~RsGxsCircleMsg() = default;
|
||||||
RsGxsCircleDetails::~RsGxsCircleDetails() = default;
|
RsGxsCircleDetails::~RsGxsCircleDetails() = default;
|
||||||
|
@ -169,14 +169,15 @@ class RsGxsCircleCache
|
|||||||
|
|
||||||
class PgpAuxUtils;
|
class PgpAuxUtils;
|
||||||
|
|
||||||
class p3GxsCircles: public RsGxsCircleExchange, public RsGxsCircles, public GxsTokenQueue, public RsTickEvent
|
class p3GxsCircles: public RsGxsCircleExchange, public RsGxsCircles,
|
||||||
|
public GxsTokenQueue, public RsTickEvent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
p3GxsCircles(RsGeneralDataService* gds, RsNetworkExchangeService* nes, p3IdService *identities, PgpAuxUtils *pgpUtils);
|
p3GxsCircles(
|
||||||
|
RsGeneralDataService* gds, RsNetworkExchangeService* nes,
|
||||||
|
p3IdService* identities, PgpAuxUtils* pgpUtils );
|
||||||
|
|
||||||
virtual RsServiceInfo getServiceInfo();
|
RsServiceInfo getServiceInfo() override;
|
||||||
|
|
||||||
/*********** External Interface ***************/
|
|
||||||
|
|
||||||
/// @see RsGxsCircles
|
/// @see RsGxsCircles
|
||||||
bool createCircle(
|
bool createCircle(
|
||||||
@ -212,6 +213,21 @@ virtual RsServiceInfo getServiceInfo();
|
|||||||
const RsGxsMessageId& msgId,
|
const RsGxsMessageId& msgId,
|
||||||
RsGxsCircleMsg& msg) override;
|
RsGxsCircleMsg& msg) override;
|
||||||
|
|
||||||
|
/// @see RsGxsCircles
|
||||||
|
bool exportCircleLink(
|
||||||
|
std::string& link, const RsGxsCircleId& circleId,
|
||||||
|
bool includeGxsData = true,
|
||||||
|
const std::string& baseUrl = DEFAULT_CIRCLE_BASE_URL,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
|
/// @see RsGxsCircles
|
||||||
|
bool importCircleLink(
|
||||||
|
const std::string& link,
|
||||||
|
RsGxsCircleId& circleId = RS_DEFAULT_STORAGE_PARAM(RsGxsCircleId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
virtual bool getCircleDetails(const RsGxsCircleId &id, RsGxsCircleDetails &details);
|
virtual bool getCircleDetails(const RsGxsCircleId &id, RsGxsCircleDetails &details);
|
||||||
virtual bool getCircleExternalIdList(std::list<RsGxsCircleId> &circleIds);
|
virtual bool getCircleExternalIdList(std::list<RsGxsCircleId> &circleIds);
|
||||||
|
|
||||||
|
@ -689,6 +689,72 @@ bool p3GxsForums::subscribeToForum(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool p3GxsForums::exportForumLink(
|
||||||
|
std::string& link, const RsGxsGroupId& forumId, bool includeGxsData,
|
||||||
|
const std::string& baseUrl, std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(forumId.isNull()) return failure("forumId cannot be null");
|
||||||
|
|
||||||
|
const bool outputRadix = baseUrl.empty();
|
||||||
|
if(outputRadix && !includeGxsData) return
|
||||||
|
failure("includeGxsData must be true if format requested is base64");
|
||||||
|
|
||||||
|
if( includeGxsData &&
|
||||||
|
!RsGenExchange::exportGroupBase64(link, forumId, errMsg) )
|
||||||
|
return failure(errMsg);
|
||||||
|
|
||||||
|
if(outputRadix) return true;
|
||||||
|
|
||||||
|
std::vector<RsGxsForumGroup> forumsInfo;
|
||||||
|
if( !getForumsInfo(std::list<RsGxsGroupId>({forumId}), forumsInfo)
|
||||||
|
|| forumsInfo.empty() )
|
||||||
|
return failure("failure retrieving forum information");
|
||||||
|
|
||||||
|
RsUrl inviteUrl(baseUrl);
|
||||||
|
inviteUrl.setQueryKV(FORUM_URL_ID_FIELD, forumId.toStdString());
|
||||||
|
inviteUrl.setQueryKV(FORUM_URL_NAME_FIELD, forumsInfo[0].mMeta.mGroupName);
|
||||||
|
if(includeGxsData) inviteUrl.setQueryKV(FORUM_URL_DATA_FIELD, link);
|
||||||
|
|
||||||
|
link = inviteUrl.toString();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool p3GxsForums::importForumLink(
|
||||||
|
const std::string& link, RsGxsGroupId& forumId, std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(link.empty()) return failure("link is empty");
|
||||||
|
|
||||||
|
const std::string* radixPtr(&link);
|
||||||
|
|
||||||
|
RsUrl url(link);
|
||||||
|
const auto& query = url.query();
|
||||||
|
const auto qIt = query.find(FORUM_URL_DATA_FIELD);
|
||||||
|
if(qIt != query.end()) radixPtr = &qIt->second;
|
||||||
|
|
||||||
|
if(radixPtr->empty()) return failure(FORUM_URL_DATA_FIELD + " is empty");
|
||||||
|
|
||||||
|
if(!RsGenExchange::importGroupBase64(*radixPtr, forumId, errMsg))
|
||||||
|
return failure(errMsg);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool p3GxsForums::createGroup(uint32_t &token, RsGxsForumGroup &group)
|
bool p3GxsForums::createGroup(uint32_t &token, RsGxsForumGroup &group)
|
||||||
{
|
{
|
||||||
std::cerr << "p3GxsForums::createGroup()" << std::endl;
|
std::cerr << "p3GxsForums::createGroup()" << std::endl;
|
||||||
@ -1018,6 +1084,19 @@ bool RsGxsForumGroup::canEditPosts(const RsGxsId& id) const
|
|||||||
id == mMeta.mAuthorId;
|
id == mMeta.mAuthorId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*static*/ const std::string RsGxsForums::DEFAULT_FORUM_BASE_URL =
|
||||||
|
"retroshare:///forums";
|
||||||
|
/*static*/ const std::string RsGxsForums::FORUM_URL_NAME_FIELD =
|
||||||
|
"forumName";
|
||||||
|
/*static*/ const std::string RsGxsForums::FORUM_URL_ID_FIELD =
|
||||||
|
"forumId";
|
||||||
|
/*static*/ const std::string RsGxsForums::FORUM_URL_DATA_FIELD =
|
||||||
|
"forumData";
|
||||||
|
/*static*/ const std::string RsGxsForums::FORUM_URL_MSG_TITLE_FIELD =
|
||||||
|
"forumMsgTitle";
|
||||||
|
/*static*/ const std::string RsGxsForums::FORUM_URL_MSG_ID_FIELD =
|
||||||
|
"forumMsgId";
|
||||||
|
|
||||||
RsGxsForumGroup::~RsGxsForumGroup() = default;
|
RsGxsForumGroup::~RsGxsForumGroup() = default;
|
||||||
RsGxsForumMsg::~RsGxsForumMsg() = default;
|
RsGxsForumMsg::~RsGxsForumMsg() = default;
|
||||||
RsGxsForums::~RsGxsForums() = default;
|
RsGxsForums::~RsGxsForums() = default;
|
||||||
|
@ -110,6 +110,21 @@ public:
|
|||||||
virtual bool subscribeToForum( const RsGxsGroupId& forumId,
|
virtual bool subscribeToForum( const RsGxsGroupId& forumId,
|
||||||
bool subscribe );
|
bool subscribe );
|
||||||
|
|
||||||
|
/// @see RsGxsForums
|
||||||
|
bool exportForumLink(
|
||||||
|
std::string& link, const RsGxsGroupId& forumId,
|
||||||
|
bool includeGxsData = true,
|
||||||
|
const std::string& baseUrl = DEFAULT_FORUM_BASE_URL,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
|
/// @see RsGxsForums
|
||||||
|
bool importForumLink(
|
||||||
|
const std::string& link,
|
||||||
|
RsGxsGroupId& forumId = RS_DEFAULT_STORAGE_PARAM(RsGxsGroupId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
virtual bool getGroupData(const uint32_t &token, std::vector<RsGxsForumGroup> &groups);
|
virtual bool getGroupData(const uint32_t &token, std::vector<RsGxsForumGroup> &groups);
|
||||||
virtual bool getMsgData(const uint32_t &token, std::vector<RsGxsForumMsg> &msgs);
|
virtual bool getMsgData(const uint32_t &token, std::vector<RsGxsForumMsg> &msgs);
|
||||||
virtual bool getMsgMetaData(const uint32_t &token, GxsMsgMetaMap& msg_metas);
|
virtual bool getMsgMetaData(const uint32_t &token, GxsMsgMetaMap& msg_metas);
|
||||||
|
@ -817,10 +817,6 @@ bool p3IdService::isKnownId(const RsGxsId& id)
|
|||||||
std::find(mOwnIds.begin(), mOwnIds.end(),id) != mOwnIds.end();
|
std::find(mOwnIds.begin(), mOwnIds.end(),id) != mOwnIds.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool p3IdService::identityToBase64( const RsGxsId& id,
|
|
||||||
std::string& base64String )
|
|
||||||
{ return serialiseIdentityToMemory(id, base64String); }
|
|
||||||
|
|
||||||
bool p3IdService::serialiseIdentityToMemory( const RsGxsId& id,
|
bool p3IdService::serialiseIdentityToMemory( const RsGxsId& id,
|
||||||
std::string& radix_string )
|
std::string& radix_string )
|
||||||
{
|
{
|
||||||
@ -882,10 +878,6 @@ void p3IdService::handle_get_serialized_grp(uint32_t token)
|
|||||||
mSerialisedIdentities[RsGxsId(id)] = s ;
|
mSerialisedIdentities[RsGxsId(id)] = s ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool p3IdService::identityFromBase64(
|
|
||||||
const std::string& base64String, RsGxsId& id )
|
|
||||||
{ return deserialiseIdentityFromMemory(base64String, &id); }
|
|
||||||
|
|
||||||
bool p3IdService::deserialiseIdentityFromMemory(const std::string& radix_string,
|
bool p3IdService::deserialiseIdentityFromMemory(const std::string& radix_string,
|
||||||
RsGxsId* id /* = nullptr */)
|
RsGxsId* id /* = nullptr */)
|
||||||
{
|
{
|
||||||
@ -4717,15 +4709,89 @@ void p3IdService::handle_event(uint32_t event_type, const std::string &/*elabel*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*static*/ const std::string RsIdentity::DEFAULT_IDENTITY_BASE_URL =
|
||||||
|
"retroshare:///identities";
|
||||||
|
/*static*/ const std::string RsIdentity::IDENTITY_URL_NAME_FIELD = "identityName";
|
||||||
|
/*static*/ const std::string RsIdentity::IDENTITY_URL_ID_FIELD = "identityId";
|
||||||
|
/*static*/ const std::string RsIdentity::IDENTITY_URL_DATA_FIELD = "identityData";
|
||||||
|
|
||||||
|
bool p3IdService::exportIdentityLink(
|
||||||
|
std::string& link, const RsGxsId& id, bool includeGxsData,
|
||||||
|
const std::string& baseUrl, std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(id.isNull()) return failure("id cannot be null");
|
||||||
|
|
||||||
|
const bool outputRadix = baseUrl.empty();
|
||||||
|
if(outputRadix && !includeGxsData) return
|
||||||
|
failure("includeGxsData must be true if format requested is base64");
|
||||||
|
|
||||||
|
if( includeGxsData &&
|
||||||
|
!RsGenExchange::exportGroupBase64(
|
||||||
|
link, reinterpret_cast<const RsGxsGroupId&>(id), errMsg ) )
|
||||||
|
return failure(errMsg);
|
||||||
|
|
||||||
|
if(outputRadix) return true;
|
||||||
|
|
||||||
|
std::vector<RsGxsIdGroup> idsInfo;
|
||||||
|
if( !getIdentitiesInfo(std::set<RsGxsId>({id}), idsInfo )
|
||||||
|
|| idsInfo.empty() )
|
||||||
|
return failure("failure retrieving identity information");
|
||||||
|
|
||||||
|
RsUrl inviteUrl(baseUrl);
|
||||||
|
inviteUrl.setQueryKV(IDENTITY_URL_ID_FIELD, id.toStdString());
|
||||||
|
inviteUrl.setQueryKV(IDENTITY_URL_NAME_FIELD, idsInfo[0].mMeta.mGroupName);
|
||||||
|
if(includeGxsData) inviteUrl.setQueryKV(IDENTITY_URL_DATA_FIELD, link);
|
||||||
|
|
||||||
|
link = inviteUrl.toString();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool p3IdService::importIdentityLink(
|
||||||
|
const std::string& link, RsGxsId& id, std::string& errMsg )
|
||||||
|
{
|
||||||
|
constexpr auto fname = __PRETTY_FUNCTION__;
|
||||||
|
const auto failure = [&](const std::string& err)
|
||||||
|
{
|
||||||
|
errMsg = err;
|
||||||
|
RsErr() << fname << " " << err << std::endl;
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(link.empty()) return failure("link is empty");
|
||||||
|
|
||||||
|
const std::string* radixPtr(&link);
|
||||||
|
|
||||||
|
RsUrl url(link);
|
||||||
|
const auto& query = url.query();
|
||||||
|
const auto qIt = query.find(IDENTITY_URL_DATA_FIELD);
|
||||||
|
if(qIt != query.end()) radixPtr = &qIt->second;
|
||||||
|
|
||||||
|
if(radixPtr->empty()) return failure(IDENTITY_URL_DATA_FIELD + " is empty");
|
||||||
|
|
||||||
|
if(!RsGenExchange::importGroupBase64(
|
||||||
|
*radixPtr, reinterpret_cast<RsGxsGroupId&>(id), errMsg ))
|
||||||
|
return failure(errMsg);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void RsGxsIdGroup::serial_process(
|
void RsGxsIdGroup::serial_process(
|
||||||
RsGenericSerializer::SerializeJob j,
|
RsGenericSerializer::SerializeJob j,
|
||||||
RsGenericSerializer::SerializeContext& ctx )
|
RsGenericSerializer::SerializeContext& ctx )
|
||||||
{
|
{
|
||||||
RS_SERIAL_PROCESS(mMeta);
|
RS_SERIAL_PROCESS(mMeta);
|
||||||
RS_SERIAL_PROCESS(mPgpIdHash);
|
RS_SERIAL_PROCESS(mPgpIdHash);
|
||||||
//RS_SERIAL_PROCESS(mPgpIdSign);
|
RS_SERIAL_PROCESS(mPgpIdSign);
|
||||||
RS_SERIAL_PROCESS(mRecognTags);
|
RS_SERIAL_PROCESS(mImage);
|
||||||
//RS_SERIAL_PROCESS(mImage);
|
|
||||||
RS_SERIAL_PROCESS(mLastUsageTS);
|
RS_SERIAL_PROCESS(mLastUsageTS);
|
||||||
RS_SERIAL_PROCESS(mPgpKnown);
|
RS_SERIAL_PROCESS(mPgpKnown);
|
||||||
RS_SERIAL_PROCESS(mIsAContact);
|
RS_SERIAL_PROCESS(mIsAContact);
|
||||||
@ -4798,3 +4864,6 @@ RsIdentityUsage::RsIdentityUsage() :
|
|||||||
RsIdentity::~RsIdentity() = default;
|
RsIdentity::~RsIdentity() = default;
|
||||||
RsReputationInfo::~RsReputationInfo() = default;
|
RsReputationInfo::~RsReputationInfo() = default;
|
||||||
RsGixs::~RsGixs() = default;
|
RsGixs::~RsGixs() = default;
|
||||||
|
RsIdentityDetails::~RsIdentityDetails() = default;
|
||||||
|
GxsReputation::~GxsReputation() = default;
|
||||||
|
RsGxsIdGroup::~RsGxsIdGroup() = default;
|
||||||
|
@ -293,13 +293,32 @@ public:
|
|||||||
/// @see RsIdentity
|
/// @see RsIdentity
|
||||||
bool getOwnPseudonimousIds(std::vector<RsGxsId>& ids) override;
|
bool getOwnPseudonimousIds(std::vector<RsGxsId>& ids) override;
|
||||||
|
|
||||||
|
/// @see RsIdentity
|
||||||
bool getOwnIds(
|
bool getOwnIds(
|
||||||
std::list<RsGxsId> &ownIds, bool signed_only = false ) override;
|
std::list<RsGxsId> &ownIds, bool signed_only = false ) override;
|
||||||
|
|
||||||
|
/// @see RsIdentity
|
||||||
bool isKnownId(const RsGxsId& id) override;
|
bool isKnownId(const RsGxsId& id) override;
|
||||||
|
|
||||||
|
/// @see RsIdentity
|
||||||
bool isOwnId(const RsGxsId& key_id) override;
|
bool isOwnId(const RsGxsId& key_id) override;
|
||||||
|
|
||||||
|
/// @see RsIdentity
|
||||||
|
bool exportIdentityLink(
|
||||||
|
std::string& link, const RsGxsId& id,
|
||||||
|
bool includeGxsData = true,
|
||||||
|
const std::string& baseUrl = DEFAULT_IDENTITY_BASE_URL,
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
|
/// @see RsIdentity
|
||||||
|
bool importIdentityLink(
|
||||||
|
const std::string& link,
|
||||||
|
RsGxsId& id = RS_DEFAULT_STORAGE_PARAM(RsGxsId),
|
||||||
|
std::string& errMsg = RS_DEFAULT_STORAGE_PARAM(std::string)
|
||||||
|
) override;
|
||||||
|
|
||||||
|
|
||||||
virtual bool signData( const uint8_t* data,
|
virtual bool signData( const uint8_t* data,
|
||||||
uint32_t data_size,
|
uint32_t data_size,
|
||||||
const RsGxsId& signer_id,
|
const RsGxsId& signer_id,
|
||||||
@ -354,17 +373,10 @@ public:
|
|||||||
const RsIdentityUsage &use_info );
|
const RsIdentityUsage &use_info );
|
||||||
virtual bool requestPrivateKey(const RsGxsId &id);
|
virtual bool requestPrivateKey(const RsGxsId &id);
|
||||||
|
|
||||||
|
RS_DEPRECATED_FOR(exportIdentityLink)
|
||||||
/// @see RsIdentity
|
|
||||||
bool identityToBase64( const RsGxsId& id,
|
|
||||||
std::string& base64String ) override;
|
|
||||||
|
|
||||||
/// @see RsIdentity
|
|
||||||
bool identityFromBase64( const std::string& base64String,
|
|
||||||
RsGxsId& id ) override;
|
|
||||||
|
|
||||||
virtual bool serialiseIdentityToMemory(const RsGxsId& id,
|
virtual bool serialiseIdentityToMemory(const RsGxsId& id,
|
||||||
std::string& radix_string);
|
std::string& radix_string);
|
||||||
|
RS_DEPRECATED_FOR(importIdentityLink)
|
||||||
virtual bool deserialiseIdentityFromMemory(const std::string& radix_string,
|
virtual bool deserialiseIdentityFromMemory(const std::string& radix_string,
|
||||||
RsGxsId* id = nullptr);
|
RsGxsId* id = nullptr);
|
||||||
|
|
||||||
|
@ -973,8 +973,7 @@ void AboutWidget::on_copy_button_clicked()
|
|||||||
verInfo+=addLibraries("libretroshare", libraries);
|
verInfo+=addLibraries("libretroshare", libraries);
|
||||||
|
|
||||||
#ifdef RS_JSONAPI
|
#ifdef RS_JSONAPI
|
||||||
// No version number available for restbed apparently.
|
// Disabled because I could not find how to get restbed version number
|
||||||
//
|
|
||||||
// /* Add version numbers of RetroShare */
|
// /* Add version numbers of RetroShare */
|
||||||
// // Add versions here. Find a better place.
|
// // Add versions here. Find a better place.
|
||||||
// libraries.clear();
|
// libraries.clear();
|
||||||
|
@ -7,30 +7,13 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>594</width>
|
<width>594</width>
|
||||||
<height>594</height>
|
<height>352</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
|
||||||
<widget class="QFrame" name="frame">
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::StyledPanel</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Raised</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="Line" name="line">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
@ -73,6 +56,16 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
|
@ -71,11 +71,12 @@
|
|||||||
#define IMAGE_CREATE ""
|
#define IMAGE_CREATE ""
|
||||||
#define IMAGE_PUBLIC ":/icons/png/chats.png"
|
#define IMAGE_PUBLIC ":/icons/png/chats.png"
|
||||||
#define IMAGE_PRIVATE ":/icons/png/chats-private.png"
|
#define IMAGE_PRIVATE ":/icons/png/chats-private.png"
|
||||||
|
#define IMAGE_SIGNED ":/icons/png/chats-signed.png"
|
||||||
#define IMAGE_SUBSCRIBE ":/icons/png/enter.png"
|
#define IMAGE_SUBSCRIBE ":/icons/png/enter.png"
|
||||||
#define IMAGE_UNSUBSCRIBE ":/icons/png/leave2.png"
|
#define IMAGE_UNSUBSCRIBE ":/icons/png/leave2.png"
|
||||||
#define IMAGE_PEER_ENTERING ":images/user/add_user24.png"
|
#define IMAGE_PEER_ENTERING ":images/user/add_user24.png"
|
||||||
#define IMAGE_PEER_LEAVING ":images/user/remove_user24.png"
|
#define IMAGE_PEER_LEAVING ":images/user/remove_user24.png"
|
||||||
#define IMAGE_TYPING ":images/typing.png"
|
#define IMAGE_TYPING ":icons/png/typing.png"
|
||||||
#define IMAGE_MESSAGE ":images/chat.png"
|
#define IMAGE_MESSAGE ":images/chat.png"
|
||||||
#define IMAGE_AUTOSUBSCRIBE ":images/accepted16.png"
|
#define IMAGE_AUTOSUBSCRIBE ":images/accepted16.png"
|
||||||
#define IMAGE_COPYRSLINK ":/icons/png/copy.png"
|
#define IMAGE_COPYRSLINK ":/icons/png/copy.png"
|
||||||
|
@ -86,12 +86,11 @@ p, li { white-space: pre-wrap; }
|
|||||||
<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-weight:600;">RetroShare provides file sharing, chat, messages and channels</span></p>
|
<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-weight:600;">RetroShare provides file sharing, chat, messages and channels</span></p>
|
||||||
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p>
|
<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p>
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:600;">Useful external links to more information:</span></p>
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-weight:600;">Useful external links to more information:</span></p>
|
||||||
<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-family:'MS Shell Dlg 2'; font-size:8pt;" align="justify" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://retroshare.sourceforge.net"><span style=" font-size:12pt; text-decoration: underline; color:#0000ff;">Retroshare Webpage</span></a></li>
|
<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-family:'MS Shell Dlg 2'; font-size:8pt;" align="justify" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://retroshare.cc/"><span style=" font-size:12pt; text-decoration: underline; color:#007af4;">Retroshare Webpage</span></a></li>
|
||||||
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://retroshare.sourceforge.net"><span style=" color:#007af4;">Retroshare Wiki</span></a></li>
|
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://retroshare.readthedocs.io/"><span style=" color:#007af4;">Retroshare Wiki</span></a></li>
|
||||||
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://retroshare.sourceforge.net"><span style=" color:#007af4;">RetroShare's Forum</span></a></li>
|
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://github.com/RetroShare/RetroShare"><span style=" color:#007af4;">Retroshare Project Page</span></a></li>
|
||||||
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://retroshare.sourceforge.net"><span style=" color:#007af4;">Retroshare Project Page</span></a></li>
|
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://retroshareteam.wordpress.com/"><span style=" color:#007af4;">RetroShare Team Blog</span></a></li>
|
||||||
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://retroshare.sourceforge.net"><span style=" color:#007af4;">RetroShare Team Blog</span></a></li>
|
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://twitter.com/retroshare"><span style=" color:#007af4;">RetroShare Dev Twitter</span></a></li></ul></body></html></string>
|
||||||
<li style=" font-family:'MS Shell Dlg 2'; font-size:12pt; text-decoration: underline; color:#0000ff;" align="justify" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://retroshare.sourceforge.net"><span style=" color:#007af4;">RetroShare Dev Twitter</span></a></li></ul></body></html></string>
|
|
||||||
</property>
|
</property>
|
||||||
<property name="openExternalLinks">
|
<property name="openExternalLinks">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@ -308,8 +307,8 @@ p, li { white-space: pre-wrap; }
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>550</width>
|
<width>566</width>
|
||||||
<height>36</height>
|
<height>18</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -18,16 +18,16 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
<number>6</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>0</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="rightMargin">
|
<property name="rightMargin">
|
||||||
<number>6</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="bottomMargin">
|
<property name="bottomMargin">
|
||||||
<number>0</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
@ -563,7 +563,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="../icons.qrc">
|
<iconset resource="../icons.qrc">
|
||||||
<normaloff>:/icons/svg/exit-red.svg</normaloff>:/icons/svg/exit-red.svg</iconset>
|
<normaloff>:/icons/png/exit2.png</normaloff>:/icons/png/exit2.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "PostedListWidget.h"
|
#include "PostedListWidget.h"
|
||||||
#include "ui_PostedListWidget.h"
|
#include "ui_PostedListWidget.h"
|
||||||
|
|
||||||
|
#include "gui/gxs/GxsIdDetails.h"
|
||||||
#include "PostedCreatePostDialog.h"
|
#include "PostedCreatePostDialog.h"
|
||||||
#include "PostedItem.h"
|
#include "PostedItem.h"
|
||||||
#include "gui/common/UIStateHelper.h"
|
#include "gui/common/UIStateHelper.h"
|
||||||
@ -36,6 +37,8 @@
|
|||||||
#define POSTED_DEFAULT_LISTING_LENGTH 10
|
#define POSTED_DEFAULT_LISTING_LENGTH 10
|
||||||
#define POSTED_MAX_INDEX 10000
|
#define POSTED_MAX_INDEX 10000
|
||||||
|
|
||||||
|
#define TOPIC_DEFAULT_IMAGE ":/icons/png/posted.png"
|
||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
PostedListWidget::PostedListWidget(const RsGxsGroupId &postedId, QWidget *parent)
|
PostedListWidget::PostedListWidget(const RsGxsGroupId &postedId, QWidget *parent)
|
||||||
: GxsMessageFramePostWidget(rsPosted, parent),
|
: GxsMessageFramePostWidget(rsPosted, parent),
|
||||||
@ -81,7 +84,7 @@ PostedListWidget::PostedListWidget(const RsGxsGroupId &postedId, QWidget *parent
|
|||||||
available posts from your subscribed friends, and make the \
|
available posts from your subscribed friends, and make the \
|
||||||
links visible to all other friends.</p><p>Afterwards you can unsubscribe from the context menu of the links list at left.</p>"));
|
links visible to all other friends.</p><p>Afterwards you can unsubscribe from the context menu of the links list at left.</p>"));
|
||||||
|
|
||||||
ui->infoframe->hide();
|
ui->infoframe->hide();
|
||||||
|
|
||||||
/* load settings */
|
/* load settings */
|
||||||
processSettings(true);
|
processSettings(true);
|
||||||
@ -311,6 +314,17 @@ void PostedListWidget::insertPostedDetails(const RsPostedGroup &group)
|
|||||||
mStateHelper->setWidgetEnabled(ui->submitPostButton, IS_GROUP_SUBSCRIBED(group.mMeta.mSubscribeFlags));
|
mStateHelper->setWidgetEnabled(ui->submitPostButton, IS_GROUP_SUBSCRIBED(group.mMeta.mSubscribeFlags));
|
||||||
ui->subscribeToolButton->setSubscribed(IS_GROUP_SUBSCRIBED(group.mMeta.mSubscribeFlags));
|
ui->subscribeToolButton->setSubscribed(IS_GROUP_SUBSCRIBED(group.mMeta.mSubscribeFlags));
|
||||||
ui->subscribeToolButton->setHidden(IS_GROUP_SUBSCRIBED(group.mMeta.mSubscribeFlags)) ;
|
ui->subscribeToolButton->setHidden(IS_GROUP_SUBSCRIBED(group.mMeta.mSubscribeFlags)) ;
|
||||||
|
|
||||||
|
/* IMAGE */
|
||||||
|
QPixmap topicImage;
|
||||||
|
if (group.mGroupImage.mData != NULL) {
|
||||||
|
GxsIdDetails::loadPixmapFromData(group.mGroupImage.mData, group.mGroupImage.mSize, topicImage,GxsIdDetails::ORIGINAL);
|
||||||
|
} else {
|
||||||
|
topicImage = QPixmap(TOPIC_DEFAULT_IMAGE);
|
||||||
|
}
|
||||||
|
ui->logoLabel->setPixmap(topicImage);
|
||||||
|
ui->namelabel->setText(QString::fromUtf8(group.mMeta.mGroupName.c_str()));
|
||||||
|
ui->poplabel->setText(QString::number( group.mMeta.mPop));
|
||||||
|
|
||||||
RetroShareLink link;
|
RetroShareLink link;
|
||||||
|
|
||||||
@ -341,6 +355,8 @@ void PostedListWidget::insertPostedDetails(const RsPostedGroup &group)
|
|||||||
link = RetroShareLink::createMessage(group.mMeta.mAuthorId, "");
|
link = RetroShareLink::createMessage(group.mMeta.mAuthorId, "");
|
||||||
ui->infoAdministrator->setText(link.toHtml());
|
ui->infoAdministrator->setText(link.toHtml());
|
||||||
|
|
||||||
|
ui->createdinfolabel->setText(DateTime::formatLongDateTime(group.mMeta.mPublishTs));
|
||||||
|
|
||||||
QString distrib_string ( "[unknown]" );
|
QString distrib_string ( "[unknown]" );
|
||||||
|
|
||||||
switch(group.mMeta.mCircleType)
|
switch(group.mMeta.mCircleType)
|
||||||
@ -527,7 +543,8 @@ void PostedListWidget::applyRanking()
|
|||||||
|
|
||||||
void PostedListWidget::blank()
|
void PostedListWidget::blank()
|
||||||
{
|
{
|
||||||
clearPosts();
|
clearPosts();
|
||||||
|
ui->infoframe->hide();
|
||||||
}
|
}
|
||||||
void PostedListWidget::clearPosts()
|
void PostedListWidget::clearPosts()
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>761</width>
|
<width>616</width>
|
||||||
<height>428</height>
|
<height>428</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -243,14 +243,52 @@
|
|||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0" colspan="2">
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="logoLabel">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>64</width>
|
||||||
|
<height>64</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>64</width>
|
||||||
|
<height>64</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../icons.qrc">:/icons/png/postedlinks.png</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="namelabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>14</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>6</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="2" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<weight>75</weight>
|
<weight>75</weight>
|
||||||
@ -258,11 +296,24 @@
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Administrator:</string>
|
<string>Popularity</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="poplabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="infoPostsLabel">
|
<widget class="QLabel" name="infoPostsLabel">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
@ -277,11 +328,87 @@
|
|||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Posts:</string>
|
<string>Posts</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="infoPosts">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">0</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="createdlabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Created</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLabel" name="createdinfolabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>unknown</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Administrator:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<widget class="GxsIdLabel" name="infoAdministrator">
|
||||||
|
<property name="text">
|
||||||
|
<string>unknown</string>
|
||||||
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Distribution:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="1">
|
||||||
|
<widget class="QLabel" name="infoDistribution">
|
||||||
|
<property name="text">
|
||||||
|
<string>unknown</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="infoLastPostLabel">
|
<widget class="QLabel" name="infoLastPostLabel">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
@ -300,85 +427,51 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0" colspan="2">
|
<item row="3" column="1">
|
||||||
<widget class="QTextBrowser" name="infoDescription">
|
|
||||||
<property name="html">
|
|
||||||
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
|
||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
|
||||||
p, li { white-space: pre-wrap; }
|
|
||||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Description</span></p></body></html></string>
|
|
||||||
</property>
|
|
||||||
<property name="textInteractionFlags">
|
|
||||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
|
||||||
</property>
|
|
||||||
<property name="openExternalLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="openLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="infoDescriptionLabel">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Description:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="GxsIdLabel" name="infoAdministrator">
|
|
||||||
<property name="text">
|
|
||||||
<string>unknown</string>
|
|
||||||
</property>
|
|
||||||
<property name="openExternalLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="infoPosts">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">0</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QLabel" name="infoLastPost">
|
<widget class="QLabel" name="infoLastPost">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string notr="true">unknown</string>
|
<string notr="true">unknown</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Distribution:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
|
||||||
<widget class="QLabel" name="infoDistribution">
|
|
||||||
<property name="text">
|
|
||||||
<string>unknown</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>421</width>
|
||||||
|
<height>114</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2">
|
||||||
|
<widget class="QTextBrowser" name="infoDescription">
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="html">
|
||||||
|
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
|
p, li { white-space: pre-wrap; }
|
||||||
|
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||||
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Description</span></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="openLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -395,7 +488,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>759</width>
|
<width>614</width>
|
||||||
<height>16</height>
|
<height>16</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -428,6 +521,11 @@ p, li { white-space: pre-wrap; }
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>GxsIdLabel</class>
|
||||||
|
<extends>QLabel</extends>
|
||||||
|
<header>gui/gxs/GxsIdLabel.h</header>
|
||||||
|
</customwidget>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>SubscribeToolButton</class>
|
<class>SubscribeToolButton</class>
|
||||||
<extends>QToolButton</extends>
|
<extends>QToolButton</extends>
|
||||||
@ -438,11 +536,6 @@ p, li { white-space: pre-wrap; }
|
|||||||
<extends>QComboBox</extends>
|
<extends>QComboBox</extends>
|
||||||
<header>gui/gxs/GxsIdChooser.h</header>
|
<header>gui/gxs/GxsIdChooser.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
<customwidget>
|
|
||||||
<class>GxsIdLabel</class>
|
|
||||||
<extends>QLabel</extends>
|
|
||||||
<header>gui/gxs/GxsIdLabel.h</header>
|
|
||||||
</customwidget>
|
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../images.qrc"/>
|
<include location="../images.qrc"/>
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>543</width>
|
<width>565</width>
|
||||||
<height>208</height>
|
<height>209</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_1">
|
<layout class="QGridLayout" name="gridLayout_1">
|
||||||
@ -41,10 +41,7 @@
|
|||||||
<enum>QFrame::Sunken</enum>
|
<enum>QFrame::Sunken</enum>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<property name="spacing">
|
<item row="0" column="0" rowspan="3">
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<item row="0" column="0" rowspan="2">
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="AvatarWidget" name="avatar">
|
<widget class="AvatarWidget" name="avatar">
|
||||||
@ -122,7 +119,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1" colspan="4">
|
<item row="1" column="1" colspan="3">
|
||||||
<widget class="QLabel" name="chatTextlabel">
|
<widget class="QLabel" name="chatTextlabel">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
@ -150,7 +147,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0" colspan="5">
|
<item row="2" column="1" colspan="3">
|
||||||
<widget class="QFrame" name="buttonFrame">
|
<widget class="QFrame" name="buttonFrame">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
@ -308,7 +305,7 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0" colspan="5">
|
<item row="3" column="0" colspan="4">
|
||||||
<widget class="QFrame" name="messageFrame">
|
<widget class="QFrame" name="messageFrame">
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
|
@ -347,6 +347,10 @@
|
|||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Edit</string>
|
<string>Edit</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../icons.qrc">
|
||||||
|
<normaloff>:/icons/png/pencil-edit-button.png</normaloff>:/icons/png/pencil-edit-button.png</iconset>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -150,22 +150,6 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="1" column="1" colspan="2">
|
<item row="1" column="1" colspan="2">
|
||||||
<layout class="QHBoxLayout" name="buttonHLayout">
|
<layout class="QHBoxLayout" name="buttonHLayout">
|
||||||
<item>
|
|
||||||
<spacer name="buttonHSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeType">
|
|
||||||
<enum>QSizePolicy::Expanding</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>388</width>
|
|
||||||
<height>21</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="sendmsgButton">
|
<widget class="QToolButton" name="sendmsgButton">
|
||||||
<property name="focusPolicy">
|
<property name="focusPolicy">
|
||||||
@ -215,6 +199,22 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="buttonHSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Expanding</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>388</width>
|
||||||
|
<height>21</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="expandButton">
|
<widget class="QPushButton" name="expandButton">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -468,6 +468,8 @@ void GxsGroupDialog::updateFromExistingMeta(const QString &description)
|
|||||||
else
|
else
|
||||||
ui.lastpostline->setText(DateTime::formatLongDateTime(mGrpMeta.mLastPost));
|
ui.lastpostline->setText(DateTime::formatLongDateTime(mGrpMeta.mLastPost));
|
||||||
ui.authorLabel->setId(mGrpMeta.mAuthorId);
|
ui.authorLabel->setId(mGrpMeta.mAuthorId);
|
||||||
|
|
||||||
|
ui.createdline->setText(DateTime::formatLongDateTime(mGrpMeta.mPublishTs));
|
||||||
|
|
||||||
link = RetroShareLink::createMessage(mGrpMeta.mAuthorId, "");
|
link = RetroShareLink::createMessage(mGrpMeta.mAuthorId, "");
|
||||||
ui.authorLabel->setText(link.toHtml());
|
ui.authorLabel->setText(link.toHtml());
|
||||||
|
@ -621,27 +621,10 @@
|
|||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="6" column="0">
|
<item row="10" column="0">
|
||||||
<widget class="QLabel" name="distributionLabel">
|
<widget class="QLabel" name="label_7">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Distribution:</string>
|
<string>Author</string>
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="10" column="2">
|
|
||||||
<widget class="GxsIdLabel" name="moderatorsLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>TextLabel</string>
|
|
||||||
</property>
|
|
||||||
<property name="openExternalLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>Name</string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -652,6 +635,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_10">
|
<widget class="QLabel" name="label_10">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -659,6 +649,75 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="8" column="2">
|
||||||
|
<widget class="QLabel" name="antiSpamValueLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="0">
|
||||||
|
<widget class="QLabel" name="antiSpamLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Anti Spam:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLineEdit" name="lastpostline">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="2">
|
||||||
|
<widget class="QLabel" name="commentsValueLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0">
|
||||||
|
<widget class="QLabel" name="commentsLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Comments:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="10" column="2">
|
||||||
|
<widget class="GxsIdLabel" name="authorLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>GxsIdLabel</string>
|
||||||
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>ID</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
|
<widget class="QLineEdit" name="IDline">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>Posts</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="2" column="2">
|
<item row="2" column="2">
|
||||||
<widget class="QLineEdit" name="postsline">
|
<widget class="QLineEdit" name="postsline">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -669,63 +728,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="2">
|
<item row="7" column="2">
|
||||||
<widget class="QLineEdit" name="nameline">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_6">
|
|
||||||
<property name="text">
|
|
||||||
<string>Posts</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="10" column="0">
|
|
||||||
<widget class="QLabel" name="label_8">
|
|
||||||
<property name="text">
|
|
||||||
<string>Moderators:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QLineEdit" name="popline">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="2">
|
|
||||||
<widget class="QLineEdit" name="lastpostline">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="label_4">
|
|
||||||
<property name="text">
|
|
||||||
<string>ID</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QLabel" name="commentsLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Comments:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="0">
|
|
||||||
<widget class="QLabel" name="antiSpamLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Anti Spam:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="2">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="distributionValueLabel">
|
<widget class="QLabel" name="distributionValueLabel">
|
||||||
@ -746,29 +749,36 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="0">
|
<item row="7" column="0">
|
||||||
<widget class="QLabel" name="label_7">
|
<widget class="QLabel" name="distributionLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Author</string>
|
<string>Distribution:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="2">
|
<item row="0" column="2">
|
||||||
<widget class="QLabel" name="antiSpamValueLabel">
|
<widget class="QLineEdit" name="nameline">
|
||||||
<property name="text">
|
|
||||||
<string>TextLabel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="2">
|
|
||||||
<widget class="QLineEdit" name="IDline">
|
|
||||||
<property name="readOnly">
|
<property name="readOnly">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="2">
|
<item row="1" column="2">
|
||||||
<widget class="QLabel" name="commentsValueLabel">
|
<widget class="QLineEdit" name="popline">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="0">
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>Moderators:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="2">
|
||||||
|
<widget class="GxsIdLabel" name="moderatorsLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>TextLabel</string>
|
<string>TextLabel</string>
|
||||||
</property>
|
</property>
|
||||||
@ -777,13 +787,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="2">
|
<item row="4" column="2">
|
||||||
<widget class="GxsIdLabel" name="authorLabel">
|
<widget class="QLineEdit" name="createdline"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>GxsIdLabel</string>
|
<string>Created</string>
|
||||||
</property>
|
|
||||||
<property name="openExternalLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -34,9 +34,9 @@
|
|||||||
|
|
||||||
#define COLUMN_FILENAME 0
|
#define COLUMN_FILENAME 0
|
||||||
#define COLUMN_SIZE 1
|
#define COLUMN_SIZE 1
|
||||||
#define COLUMN_TITLE 2
|
#define COLUMN_STATUS 2
|
||||||
#define COLUMN_PUBLISHED 3
|
#define COLUMN_TITLE 3
|
||||||
#define COLUMN_STATUS 4
|
#define COLUMN_PUBLISHED 4
|
||||||
#define COLUMN_COUNT 5
|
#define COLUMN_COUNT 5
|
||||||
#define COLUMN_DATA 0
|
#define COLUMN_DATA 0
|
||||||
|
|
||||||
@ -107,9 +107,10 @@ void GxsChannelFilesWidget::addFiles(const RsGxsChannelPost &post, bool related)
|
|||||||
treeItem->setData(COLUMN_DATA, ROLE_MESSAGE_ID, qVariantFromValue(post.mMeta.mMsgId));
|
treeItem->setData(COLUMN_DATA, ROLE_MESSAGE_ID, qVariantFromValue(post.mMeta.mMsgId));
|
||||||
treeItem->setData(COLUMN_DATA, ROLE_FILE_HASH, qVariantFromValue(file.mHash));
|
treeItem->setData(COLUMN_DATA, ROLE_FILE_HASH, qVariantFromValue(file.mHash));
|
||||||
treeItem->setData(COLUMN_DATA, ROLE_MSG, QString::fromUtf8(post.mMsg.c_str()));
|
treeItem->setData(COLUMN_DATA, ROLE_MSG, QString::fromUtf8(post.mMsg.c_str()));
|
||||||
|
treeItem->setTextAlignment(COLUMN_SIZE, Qt::AlignRight) ;
|
||||||
|
|
||||||
ui->treeWidget->addTopLevelItem(treeItem);
|
ui->treeWidget->addTopLevelItem(treeItem);
|
||||||
|
|
||||||
QWidget *statusWidget = new GxsChannelFilesStatusWidget(post.mMeta.mGroupId, post.mMeta.mMsgId, file);
|
QWidget *statusWidget = new GxsChannelFilesStatusWidget(post.mMeta.mGroupId, post.mMeta.mMsgId, file);
|
||||||
ui->treeWidget->setItemWidget(treeItem, COLUMN_STATUS, statusWidget);
|
ui->treeWidget->setItemWidget(treeItem, COLUMN_STATUS, statusWidget);
|
||||||
|
|
||||||
|
@ -300,6 +300,8 @@ void GxsChannelPostsWidget::insertChannelDetails(const RsGxsChannelGroup &group)
|
|||||||
link = RetroShareLink::createMessage(group.mMeta.mAuthorId, "");
|
link = RetroShareLink::createMessage(group.mMeta.mAuthorId, "");
|
||||||
ui->infoAdministrator->setText(link.toHtml());
|
ui->infoAdministrator->setText(link.toHtml());
|
||||||
|
|
||||||
|
ui->infoCreated->setText(DateTime::formatLongDateTime(group.mMeta.mPublishTs));
|
||||||
|
|
||||||
QString distrib_string ( "[unknown]" );
|
QString distrib_string ( "[unknown]" );
|
||||||
|
|
||||||
switch(group.mMeta.mCircleType)
|
switch(group.mMeta.mCircleType)
|
||||||
|
@ -344,6 +344,71 @@
|
|||||||
<property name="bottomMargin">
|
<property name="bottomMargin">
|
||||||
<number>9</number>
|
<number>9</number>
|
||||||
</property>
|
</property>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="infoLastPostLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Last Post:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0" colspan="3">
|
||||||
|
<widget class="QTextBrowser" name="infoDescription">
|
||||||
|
<property name="html">
|
||||||
|
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
|
p, li { white-space: pre-wrap; }
|
||||||
|
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||||
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Description</span></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="openLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="infoDescriptionLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Description:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Created:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
@ -376,82 +441,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="infoLastPostLabel">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Last Post:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0" colspan="2">
|
|
||||||
<widget class="QTextBrowser" name="infoDescription">
|
|
||||||
<property name="html">
|
|
||||||
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
|
||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
|
||||||
p, li { white-space: pre-wrap; }
|
|
||||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
|
||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Description</span></p></body></html></string>
|
|
||||||
</property>
|
|
||||||
<property name="textInteractionFlags">
|
|
||||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
|
||||||
</property>
|
|
||||||
<property name="openExternalLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="openLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="infoDescriptionLabel">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Description:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="GxsIdLabel" name="infoAdministrator">
|
|
||||||
<property name="text">
|
|
||||||
<string>unknown</string>
|
|
||||||
</property>
|
|
||||||
<property name="openExternalLinks">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLabel" name="infoPosts">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">0</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QLabel" name="infoLastPost">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">unknown</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
@ -465,13 +454,44 @@ p, li { white-space: pre-wrap; }
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="4" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="infoCreated">
|
||||||
|
<property name="text">
|
||||||
|
<string>unknown</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1" colspan="2">
|
||||||
<widget class="QLabel" name="infoDistribution">
|
<widget class="QLabel" name="infoDistribution">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>unknown</string>
|
<string>unknown</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="1" colspan="2">
|
||||||
|
<widget class="GxsIdLabel" name="infoAdministrator">
|
||||||
|
<property name="text">
|
||||||
|
<string>unknown</string>
|
||||||
|
</property>
|
||||||
|
<property name="openExternalLinks">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="infoLastPost">
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">unknown</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="infoPosts">
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">0</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -532,16 +552,16 @@ p, li { white-space: pre-wrap; }
|
|||||||
<zorder>infoWidget</zorder>
|
<zorder>infoWidget</zorder>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
|
||||||
<class>SubscribeToolButton</class>
|
|
||||||
<extends>QToolButton</extends>
|
|
||||||
<header>gui/common/SubscribeToolButton.h</header>
|
|
||||||
</customwidget>
|
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>GxsIdLabel</class>
|
<class>GxsIdLabel</class>
|
||||||
<extends>QLabel</extends>
|
<extends>QLabel</extends>
|
||||||
<header>gui/gxs/GxsIdLabel.h</header>
|
<header>gui/gxs/GxsIdLabel.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>SubscribeToolButton</class>
|
||||||
|
<extends>QToolButton</extends>
|
||||||
|
<header>gui/common/SubscribeToolButton.h</header>
|
||||||
|
</customwidget>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>StyledElidedLabel</class>
|
<class>StyledElidedLabel</class>
|
||||||
<extends>QLabel</extends>
|
<extends>QLabel</extends>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--/****************************************************************
|
<!--/****************************************************************
|
||||||
* This file is distributed under the following license:
|
* This file is distributed under the following license:
|
||||||
*
|
*
|
||||||
* Copyright (c) 2008, defnax
|
* Copyright (c) 2008, defnax
|
||||||
* Copyright (c) 2008, edmanm
|
* Copyright (c) 2008, edmanm
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
@ -36,25 +36,49 @@
|
|||||||
<h1>The RetroShare Team:</h1>
|
<h1>The RetroShare Team:</h1>
|
||||||
|
|
||||||
<p></p>
|
<p></p>
|
||||||
|
<h2>RetroShare Founder</h2>
|
||||||
<h2>Lead Developers</h2>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li> <a href="mailto:drbob7@users.sourceforge.net">drbob7</a></li>
|
<li> <a href="mailto:drbob7@users.sourceforge.net">drbob7</a></li>
|
||||||
<li> <a href="mailto:defnax@users.sourceforge.net">defnax</a></li>
|
</ul>
|
||||||
<li> <a href="mailto:csoler@users.sourceforge.net">csoler</a></li>
|
|
||||||
<li> <a href="mailto:chrisparker126@users.sourceforge.net">chrisparker126</a></li>
|
<h2>Lead Developers</h2>
|
||||||
<li> <a href="mailto:thunder2@users.sourceforge.net">thunder2</a></li>
|
<ul>
|
||||||
|
<li> <a href="https://github.com/csoler">csoler</a></li>
|
||||||
|
<li> <a href="https://github.com/G10h4ck">G10h4ck</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<h2>Packager</h2>
|
<h2>Active Developers</h2>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li> <a href="mailto:notdefine@users.sourceforge.net">notdefine</a></li>
|
<li> <a href="mailto:defnax@users.sourceforge.net">defnax</a></li>
|
||||||
<li> <a href="mailto:agent725@users.sourceforge.net">agent725</a></li>
|
<li> <a href="https://github.com/PhenomRetroShare">Phenom</a></li>
|
||||||
|
<li> <a href="https://github.com/hunbernd">anmo</a></li>
|
||||||
|
<li> <a href="mailto:thunder2@users.sourceforge.net">thunder2</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Developed RetroShare mobile & Emoty</h2>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="https://github.com/kdebiec">Konrad</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>RetroChess Developers</h2>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="https://github.com/Texas-C">Texas-C</a></li>
|
||||||
|
<li> <a href="https://github.com/chozabu">Chozabu</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>Developed plugins</h2>
|
||||||
|
<ul>
|
||||||
|
<li> <a href="https://github.com/chozabu">Chozabu</a></li>
|
||||||
|
<li> <a href="https://github.com/electron128">Electron</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Past Developers</h2>
|
<h2>Past Developers</h2>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
<li> <a href="mailto:chrisparker126@users.sourceforge.net">chrisparker126</a></li>
|
||||||
<li> <a href="mailto:joss17@users.sourceforge.net">joss17</a></li>
|
<li> <a href="mailto:joss17@users.sourceforge.net">joss17</a></li>
|
||||||
<li> <a href="mailto:alexandrut@users.sourceforge.net">alexandrut</a></li>
|
<li> <a href="mailto:alexandrut@users.sourceforge.net">alexandrut</a></li>
|
||||||
<li> <a href="mailto:pacman123@users.sourceforge.net">nishant</a></li>
|
<li> <a href="mailto:pacman123@users.sourceforge.net">nishant</a></li>
|
||||||
@ -65,7 +89,8 @@
|
|||||||
<li> <a href="mailto:rwoodruff91@users.sourceforge.net">rwoodruff91</a></li>
|
<li> <a href="mailto:rwoodruff91@users.sourceforge.net">rwoodruff91</a></li>
|
||||||
<li> <a href="mailto:raghu-dev@users.sourceforge.net">raghu-dev</a></li>
|
<li> <a href="mailto:raghu-dev@users.sourceforge.net">raghu-dev</a></li>
|
||||||
<li> <a href="mailto:the_mgt@users.sourceforge.net">the_mgt</a></li>
|
<li> <a href="mailto:the_mgt@users.sourceforge.net">the_mgt</a></li>
|
||||||
|
<li> <a href="mailto:notdefine@users.sourceforge.net">notdefine</a></li>
|
||||||
|
<li> <a href="mailto:agent725@users.sourceforge.net">agent725</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Developed TLV Serialiser</h2>
|
<h2>Developed TLV Serialiser</h2>
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
<file>icons/mail_red_128.png</file>
|
<file>icons/mail_red_128.png</file>
|
||||||
<file>icons/newsfeed128.png</file>
|
<file>icons/newsfeed128.png</file>
|
||||||
<file>icons/outlook.png</file>
|
<file>icons/outlook.png</file>
|
||||||
|
<file>icons/question.png</file>
|
||||||
<file>icons/plugins_128.png</file>
|
<file>icons/plugins_128.png</file>
|
||||||
<file>icons/png/add.png</file>
|
<file>icons/png/add.png</file>
|
||||||
<file>icons/png/attach-image.png</file>
|
<file>icons/png/attach-image.png</file>
|
||||||
@ -115,6 +116,7 @@
|
|||||||
<file>icons/png/newsfeed-notify.png</file>
|
<file>icons/png/newsfeed-notify.png</file>
|
||||||
<file>icons/png/newsfeed.png</file>
|
<file>icons/png/newsfeed.png</file>
|
||||||
<file>icons/png/options.png</file>
|
<file>icons/png/options.png</file>
|
||||||
|
<file>icons/png/pencil-edit-button.png</file>
|
||||||
<file>icons/png/people-notify.png</file>
|
<file>icons/png/people-notify.png</file>
|
||||||
<file>icons/png/people.png</file>
|
<file>icons/png/people.png</file>
|
||||||
<file>icons/png/person.png</file>
|
<file>icons/png/person.png</file>
|
||||||
@ -132,6 +134,7 @@
|
|||||||
<file>icons/png/thumbs-down.png</file>
|
<file>icons/png/thumbs-down.png</file>
|
||||||
<file>icons/png/thumbs-neutral.png</file>
|
<file>icons/png/thumbs-neutral.png</file>
|
||||||
<file>icons/png/thumbs-up.png</file>
|
<file>icons/png/thumbs-up.png</file>
|
||||||
|
<file>icons/png/typing.png</file>
|
||||||
<file>icons/png/video.png</file>
|
<file>icons/png/video.png</file>
|
||||||
<file>icons/posted_128.png</file>
|
<file>icons/posted_128.png</file>
|
||||||
<file>icons/posted_red_128.png</file>
|
<file>icons/posted_red_128.png</file>
|
||||||
@ -277,6 +280,7 @@
|
|||||||
<file>icons/png/comment.png</file>
|
<file>icons/png/comment.png</file>
|
||||||
<file>icons/png/chats.png</file>
|
<file>icons/png/chats.png</file>
|
||||||
<file>icons/png/chats-private.png</file>
|
<file>icons/png/chats-private.png</file>
|
||||||
|
<file>icons/png/chats-signed.png</file>
|
||||||
<file>icons/png/fileshare.png</file>
|
<file>icons/png/fileshare.png</file>
|
||||||
<file>icons/png/forum.png</file>
|
<file>icons/png/forum.png</file>
|
||||||
<file>icons/png/message.png</file>
|
<file>icons/png/message.png</file>
|
||||||
@ -284,7 +288,6 @@
|
|||||||
<file>icons/png/postedlinks.png</file>
|
<file>icons/png/postedlinks.png</file>
|
||||||
<file>icons/png/people2.png</file>
|
<file>icons/png/people2.png</file>
|
||||||
<file>icons/png/bandwidth.png</file>
|
<file>icons/png/bandwidth.png</file>
|
||||||
<file>icons/png/netgraph2.png</file>
|
|
||||||
<file>icons/png/options2.png</file>
|
<file>icons/png/options2.png</file>
|
||||||
<file>icons/png/exit2.png</file>
|
<file>icons/png/exit2.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.7 KiB |
BIN
retroshare-gui/src/gui/icons/png/chats-signed.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 4.7 KiB |
BIN
retroshare-gui/src/gui/icons/png/pencil-edit-button.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
retroshare-gui/src/gui/icons/png/typing.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
retroshare-gui/src/gui/icons/question.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
@ -861,3 +861,8 @@ GxsCommentDialog QComboBox#sortBox {
|
|||||||
font: bold;
|
font: bold;
|
||||||
color: #0099cc;
|
color: #0099cc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PostedListWidget QTextBrowser#infoDescription {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
@ -57,7 +57,8 @@ CryptoPage::CryptoPage(QWidget * parent, Qt::WindowFlags flags)
|
|||||||
// hide profile manager as it causes bugs when generating a new profile.
|
// hide profile manager as it causes bugs when generating a new profile.
|
||||||
//ui.profile_Button->hide() ;
|
//ui.profile_Button->hide() ;
|
||||||
|
|
||||||
connect(ui.createNewNode_PB,SIGNAL(clicked()), this, SLOT(profilemanager()));
|
connect(ui.exportprofile,SIGNAL(clicked()), this, SLOT(profilemanager()));
|
||||||
|
|
||||||
|
|
||||||
ui.onlinesince->setText(DateTime::formatLongDateTime(Rshare::startupTime()));
|
ui.onlinesince->setText(DateTime::formatLongDateTime(Rshare::startupTime()));
|
||||||
}
|
}
|
||||||
@ -78,6 +79,10 @@ void CryptoPage::showEvent ( QShowEvent * /*event*/ )
|
|||||||
ui.pgpid->setText(QString::fromStdString(detail.gpg_id.toStdString()));
|
ui.pgpid->setText(QString::fromStdString(detail.gpg_id.toStdString()));
|
||||||
ui.pgpfingerprint->setText(misc::fingerPrintStyleSplit(QString::fromStdString(detail.fpr.toStdString())));
|
ui.pgpfingerprint->setText(misc::fingerPrintStyleSplit(QString::fromStdString(detail.fpr.toStdString())));
|
||||||
|
|
||||||
|
std::string invite ;
|
||||||
|
rsPeers->getShortInvite(invite,rsPeers->getOwnId(),true,false);
|
||||||
|
ui.retroshareid->setText(QString::fromUtf8(invite.c_str()));
|
||||||
|
|
||||||
/* set retroshare version */
|
/* set retroshare version */
|
||||||
ui.version->setText(Rshare::retroshareVersion(true));
|
ui.version->setText(Rshare::retroshareVersion(true));
|
||||||
|
|
||||||
@ -87,6 +92,16 @@ void CryptoPage::showEvent ( QShowEvent * /*event*/ )
|
|||||||
int friends = ids.size();
|
int friends = ids.size();
|
||||||
|
|
||||||
ui.friendsEdit->setText(QString::number(friends));
|
ui.friendsEdit->setText(QString::number(friends));
|
||||||
|
|
||||||
|
|
||||||
|
QString string ;
|
||||||
|
string = rsFiles->getPartialsDirectory().c_str();
|
||||||
|
QString datadir = string;
|
||||||
|
if(datadir.contains("Partials"))
|
||||||
|
{
|
||||||
|
datadir.replace("Partials","");
|
||||||
|
}
|
||||||
|
ui.labelpath->setText(datadir);
|
||||||
}
|
}
|
||||||
load() ;
|
load() ;
|
||||||
}
|
}
|
||||||
|
@ -6,15 +6,15 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1531</width>
|
<width>644</width>
|
||||||
<height>678</height>
|
<height>459</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="tab">
|
<widget class="QWidget" name="tab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
@ -22,15 +22,180 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QFrame" name="frame_1">
|
<widget class="QGroupBox" name="groupBox_1">
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::Box</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Sunken</enum>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
<item row="0" column="0" colspan="2">
|
<item row="6" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Retroshare ID:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Statistics:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1" colspan="3">
|
||||||
|
<widget class="QLabel" name="peerid">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>PGP fingerprint:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Location ID:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="14" column="2">
|
||||||
|
<spacer name="horizontalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Expanding</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="friendsEdit">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="14" column="0">
|
||||||
|
<widget class="QLabel" name="label_11">
|
||||||
|
<property name="text">
|
||||||
|
<string>Export Profile:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1" colspan="3">
|
||||||
|
<widget class="QLabel" name="pgpfingerprint">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1" colspan="3">
|
||||||
|
<widget class="QLabel" name="pgpid">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="10" column="0">
|
||||||
|
<widget class="QLabel" name="label_16">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Online since:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Location:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="4">
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="publicIcon">
|
<widget class="QLabel" name="publicIcon">
|
||||||
@ -60,64 +225,7 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="2" column="1" colspan="3">
|
||||||
<widget class="QLabel" name="label_10">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Name:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QLabel" name="name">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">TextLabel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_8">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Location:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QLabel" name="country">
|
<widget class="QLabel" name="country">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
@ -136,153 +244,14 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="14" column="1">
|
||||||
<widget class="QLabel" name="label_6">
|
<widget class="QPushButton" name="exportprofile">
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Location ID:</string>
|
<string>Export</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="9" column="0">
|
||||||
<widget class="QLabel" name="peerid">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">TextLabel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QLabel" name="label_7">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>PGP Id :</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QLabel" name="pgpid">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">TextLabel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="1">
|
|
||||||
<widget class="QLabel" name="pgpfingerprint">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>TextLabel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>PGP fingerprint:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QFrame" name="frame_2">
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::Box</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Sunken</enum>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_6" columnstretch="0,0,0" columnminimumwidth="0,0,0">
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="label_9">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Friend nodes:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1" colspan="2">
|
|
||||||
<widget class="QLabel" name="friendsEdit">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">TextLabel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
@ -301,68 +270,18 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="11" column="1">
|
||||||
<widget class="QLabel" name="label_16">
|
<widget class="QPushButton" name="showStats_PB">
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>100</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Online since:</string>
|
<string>Show statistics</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1" colspan="2">
|
<item row="7" column="0" colspan="4">
|
||||||
<widget class="QLabel" name="version">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">TextLabel</string>
|
|
||||||
</property>
|
|
||||||
<property name="textInteractionFlags">
|
|
||||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1" colspan="2">
|
|
||||||
<widget class="QLabel" name="onlinesince">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">TextLabel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="3">
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="otherIcon">
|
<widget class="QLabel" name="otherIcon">
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
@ -394,16 +313,211 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="11" column="2">
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="13" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Profile path:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="0">
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Friend nodes:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" colspan="3">
|
||||||
|
<widget class="QLabel" name="name">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="12" column="0" colspan="3">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_6">
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="otherIcon_2">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../images.qrc">:/images/info16.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="StyledLabel" name="otherLabel_2">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Profile</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="version">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">TextLabel</string>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>PGP Id :</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1" colspan="3">
|
||||||
|
<widget class="QLabel" name="retroshareid">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="10" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="onlinesince">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="13" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="labelpath">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="showStats_PB">
|
|
||||||
<property name="text">
|
|
||||||
<string>show statistics window</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
@ -412,7 +526,7 @@
|
|||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
<width>20</width>
|
<width>20</width>
|
||||||
<height>205</height>
|
<height>40</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
@ -423,8 +537,8 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Certificate</string>
|
<string>Certificate</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QGridLayout" name="gridLayout_7">
|
||||||
<item>
|
<item row="0" column="0">
|
||||||
<widget class="QPlainTextEdit" name="certplainTextEdit">
|
<widget class="QPlainTextEdit" name="certplainTextEdit">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||||
@ -451,7 +565,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="1" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="_includeSignatures_CB">
|
<widget class="QCheckBox" name="_includeSignatures_CB">
|
||||||
@ -494,13 +608,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="createNewNode_PB">
|
|
||||||
<property name="text">
|
|
||||||
<string>Create new node...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_2">
|
<spacer name="horizontalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
@ -38,8 +38,8 @@ QString misc::friendlyUnit(float val)
|
|||||||
if(val < 0) {
|
if(val < 0) {
|
||||||
return tr("Unknown", "Unknown (size)");
|
return tr("Unknown", "Unknown (size)");
|
||||||
}
|
}
|
||||||
const QString units[5] = {tr(" B", "bytes"), tr(" KB", "kilobytes (1024 bytes)"), tr(" MB", "megabytes (1024 kilobytes)"), tr(" GB", "gigabytes (1024 megabytes)"), tr(" TB", "terabytes (1024 gigabytes)") };
|
const QString units[6] = {tr(" B", "bytes"), tr(" KB", "kilobytes (1024 bytes)"), tr(" MB", "megabytes (1024 kilobytes)"), tr(" GB", "gigabytes (1024 megabytes)"), tr(" TB", "terabytes (1024 gigabytes)"), tr(" PB", "petabytes (1024 terabytes)") };
|
||||||
for(unsigned int i=0; i<5; ++i) {
|
for(unsigned int i=0; i<6; ++i) {
|
||||||
if (val < 1024.) {
|
if (val < 1024.) {
|
||||||
return QString(QByteArray::number(val, 'f', 1)) + units[i];
|
return QString(QByteArray::number(val, 'f', 1)) + units[i];
|
||||||
}
|
}
|
||||||
|
@ -303,9 +303,6 @@ int main(int argc, char* argv[])
|
|||||||
<< std::endl;
|
<< std::endl;
|
||||||
return -result;
|
return -result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start-up libretroshare server threads */
|
|
||||||
RsControl::instance()->StartupRetroShare();
|
|
||||||
}
|
}
|
||||||
#endif // def RS_SERVICE_TERMINAL_LOGIN
|
#endif // def RS_SERVICE_TERMINAL_LOGIN
|
||||||
|
|
||||||
|
@ -581,9 +581,6 @@ android-* {
|
|||||||
CONFIG *= no_libresapihttpserver
|
CONFIG *= no_libresapihttpserver
|
||||||
CONFIG -= libresapihttpserver
|
CONFIG -= libresapihttpserver
|
||||||
|
|
||||||
CONFIG += no_rs_service_terminal_login
|
|
||||||
CONFIG += no_rs_service_webui_terminal_password
|
|
||||||
|
|
||||||
QT *= androidextras
|
QT *= androidextras
|
||||||
INCLUDEPATH *= $$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/include
|
INCLUDEPATH *= $$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/include
|
||||||
QMAKE_LIBDIR *= "$$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/"
|
QMAKE_LIBDIR *= "$$NATIVE_LIBS_TOOLCHAIN_PATH/sysroot/usr/lib/"
|
||||||
|