HaikuDepot: Request to login before rating a package
* There is now a flow of logging in or creating an account before being able to rate a package and the user is not yet logged in. The UserLoginWindow stores an "on success" BMessenger and BMessage which are send after the alert which confirms successful login or account creation. This is used to make the RatePackageWindow show once logged in successfully.
This commit is contained in:
parent
fb303f1987
commit
1bbda92dc7
@ -240,7 +240,7 @@ MainWindow::MessageReceived(BMessage* message)
|
||||
break;
|
||||
|
||||
case MSG_LOG_IN:
|
||||
_OpenLoginWindow();
|
||||
_OpenLoginWindow(BMessage());
|
||||
break;
|
||||
|
||||
case MSG_LOG_OUT:
|
||||
@ -368,15 +368,8 @@ MainWindow::MessageReceived(BMessage* message)
|
||||
}
|
||||
|
||||
case MSG_RATE_PACKAGE:
|
||||
{
|
||||
// TODO: Allow only one RatePackageWindow
|
||||
// TODO: Mechanism for remembering the window frame
|
||||
RatePackageWindow* window = new RatePackageWindow(this,
|
||||
BRect(0, 0, 500, 400), fModel);
|
||||
window->SetPackage(fPackageInfoView->Package());
|
||||
window->Show();
|
||||
_RatePackage();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
BWindow::MessageReceived(message);
|
||||
@ -896,10 +889,14 @@ MainWindow::_NotifyUser(const char* title, const char* message)
|
||||
|
||||
|
||||
void
|
||||
MainWindow::_OpenLoginWindow()
|
||||
MainWindow::_OpenLoginWindow(const BMessage& onSuccessMessage)
|
||||
{
|
||||
UserLoginWindow* window = new UserLoginWindow(this,
|
||||
BRect(0, 0, 500, 400), fModel);
|
||||
|
||||
if (onSuccessMessage.what != 0)
|
||||
window->SetOnSuccessMessage(BMessenger(this), onSuccessMessage);
|
||||
|
||||
window->Show();
|
||||
}
|
||||
|
||||
@ -911,3 +908,32 @@ MainWindow::_UpdateAuthorization()
|
||||
fLogOutItem->SetEnabled(username.Length() > 0);
|
||||
fFilterView->SetUsername(username);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MainWindow::_RatePackage()
|
||||
{
|
||||
if (fModel.Username().IsEmpty()) {
|
||||
BAlert* alert = new(std::nothrow) BAlert(
|
||||
B_TRANSLATE("Not logged in"),
|
||||
B_TRANSLATE("You need to be logged into an account before you "
|
||||
"can rate packages."),
|
||||
B_TRANSLATE("Cancel"),
|
||||
B_TRANSLATE("Login or Create account"));
|
||||
|
||||
if (alert == NULL)
|
||||
return;
|
||||
|
||||
int32 choice = alert->Go();
|
||||
if (choice == 1)
|
||||
_OpenLoginWindow(BMessage(MSG_RATE_PACKAGE));
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Allow only one RatePackageWindow
|
||||
// TODO: Mechanism for remembering the window frame
|
||||
RatePackageWindow* window = new RatePackageWindow(this,
|
||||
BRect(0, 0, 500, 400), fModel);
|
||||
window->SetPackage(fPackageInfoView->Package());
|
||||
window->Show();
|
||||
}
|
||||
|
@ -71,8 +71,10 @@ private:
|
||||
void _NotifyUser(const char* title,
|
||||
const char* message);
|
||||
|
||||
void _OpenLoginWindow();
|
||||
void _OpenLoginWindow(
|
||||
const BMessage& onSuccessMessage);
|
||||
void _UpdateAuthorization();
|
||||
void _RatePackage();
|
||||
|
||||
private:
|
||||
FilterView* fFilterView;
|
||||
|
@ -233,6 +233,15 @@ UserLoginWindow::MessageReceived(BMessage* message)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UserLoginWindow::SetOnSuccessMessage(
|
||||
const BMessenger& messenger, const BMessage& message)
|
||||
{
|
||||
fOnSuccessTarget = messenger;
|
||||
fOnSuccessMessage = message;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UserLoginWindow::_SetMode(Mode mode)
|
||||
{
|
||||
@ -312,6 +321,31 @@ UserLoginWindow::_RequestCaptcha()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UserLoginWindow::_LoginSuccessful(const BString& message)
|
||||
{
|
||||
// Clone these fields before the window goes away.
|
||||
// (This method is executd from another thread.)
|
||||
BMessenger onSuccessTarget(fOnSuccessTarget);
|
||||
BMessage onSuccessMessage(fOnSuccessMessage);
|
||||
|
||||
BMessenger(this).SendMessage(B_QUIT_REQUESTED);
|
||||
|
||||
BAlert* alert = new(std::nothrow) BAlert(
|
||||
B_TRANSLATE("Success"),
|
||||
message,
|
||||
B_TRANSLATE("Close"));
|
||||
|
||||
if (alert != NULL)
|
||||
alert->Go();
|
||||
|
||||
// Send the success message after the alert has been closed,
|
||||
// otherwise more windows will popup alongside the alert.
|
||||
if (onSuccessTarget.IsValid() && onSuccessMessage.what != 0)
|
||||
onSuccessTarget.SendMessage(&onSuccessMessage);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UserLoginWindow::_SetWorkerThread(thread_id thread)
|
||||
{
|
||||
@ -401,15 +435,7 @@ UserLoginWindow::_AuthenticateThread()
|
||||
_SetWorkerThread(-1);
|
||||
} else {
|
||||
_SetWorkerThread(-1);
|
||||
BMessenger(this).SendMessage(B_QUIT_REQUESTED);
|
||||
|
||||
BAlert* alert = new(std::nothrow) BAlert(
|
||||
B_TRANSLATE("Success"),
|
||||
B_TRANSLATE("The authentication was successful."),
|
||||
B_TRANSLATE("Close"));
|
||||
|
||||
if (alert != NULL)
|
||||
alert->Go();
|
||||
_LoginSuccessful(B_TRANSLATE("The authentication was successful."));
|
||||
}
|
||||
}
|
||||
|
||||
@ -547,16 +573,8 @@ UserLoginWindow::_CreateAccountThread()
|
||||
fModel.SetAuthorization(nickName, passwordClear, true);
|
||||
|
||||
_SetWorkerThread(-1);
|
||||
BMessenger(this).SendMessage(B_QUIT_REQUESTED);
|
||||
|
||||
BAlert* alert = new(std::nothrow) BAlert(
|
||||
B_TRANSLATE("Success"),
|
||||
B_TRANSLATE("Account created successfully. "
|
||||
"You can now rate packages and do other useful things."),
|
||||
B_TRANSLATE("Close"));
|
||||
|
||||
if (alert != NULL)
|
||||
alert->Go();
|
||||
_LoginSuccessful(B_TRANSLATE("Account created successfully. "
|
||||
"You can now rate packages and do other useful things."));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
#define USER_LOGIN_WINDOW_H
|
||||
|
||||
#include <Locker.h>
|
||||
#include <Messenger.h>
|
||||
#include <Window.h>
|
||||
|
||||
#include "PackageInfo.h"
|
||||
@ -27,6 +28,10 @@ public:
|
||||
|
||||
virtual void MessageReceived(BMessage* message);
|
||||
|
||||
void SetOnSuccessMessage(
|
||||
const BMessenger& messenger,
|
||||
const BMessage& message);
|
||||
|
||||
private:
|
||||
enum Mode {
|
||||
NONE = 0,
|
||||
@ -38,6 +43,7 @@ private:
|
||||
void _Login();
|
||||
void _CreateAccount();
|
||||
void _RequestCaptcha();
|
||||
void _LoginSuccessful(const BString& message);
|
||||
|
||||
void _SetWorkerThread(thread_id thread);
|
||||
|
||||
@ -55,6 +61,9 @@ private:
|
||||
BString& error) const;
|
||||
|
||||
private:
|
||||
BMessenger fOnSuccessTarget;
|
||||
BMessage fOnSuccessMessage;
|
||||
|
||||
BTabView* fTabView;
|
||||
|
||||
BTextControl* fUsernameField;
|
||||
|
Loading…
x
Reference in New Issue
Block a user