Kaydet (Commit) 7ca8de76 authored tarafından Rachit Gupta's avatar Rachit Gupta Kaydeden (comit) Jan Holesovsky

Added SearchAndParseThread.

The search results data is retrieved and parsed in a separate
thread so that the UI doesn't hang awkwardly.

Change-Id: I51437edd4cfbd45f5fb7e487ad2baf5dba6618a4
üst bda81996
......@@ -35,7 +35,6 @@ using namespace ::com::sun::star::ucb;
SelectPersonaDialog::SelectPersonaDialog( Window *pParent )
: ModalDialog( pParent, "SelectPersonaDialog", "cui/ui/select_persona_dialog.ui" )
{
PushButton *pButton;
get( pButton, "search_personas" );
pButton->SetClickHdl( LINK( this, SelectPersonaDialog, VisitPersonas ) );
......@@ -55,29 +54,10 @@ OUString SelectPersonaDialog::GetPersonaURL() const
IMPL_LINK( SelectPersonaDialog, VisitPersonas, PushButton*, /*pButton*/ )
{
Reference<XComponentContext> xContext( ::comphelper::getProcessComponentContext() );
Reference< xml::sax::XParser > xParser = xml::sax::Parser::create(xContext);
PersonasDocHandler* pHandler = new PersonasDocHandler();
Reference< xml::sax::XDocumentHandler > xDocHandler = pHandler;
uno::Reference< ucb::XSimpleFileAccess3 > xFileAccess( ucb::SimpleFileAccess::create( comphelper::getProcessComponentContext() ), uno::UNO_QUERY );
uno::Reference< io::XInputStream > xStream;
xParser->setDocumentHandler( xDocHandler );
OUString searchTerm = m_pEdit->GetText();
OUString rURL = "https://addons.allizom.org/en-US/firefox/api/1.5/search/" + searchTerm + "/9/";
if ( !xFileAccess.is() )
return false;
try {
xStream = xFileAccess->openFileRead( rURL );
}
catch (...)
{
return false;
}
xml::sax::InputSource aParserInput;
aParserInput.aInputStream = xStream;
xParser->parseStream( aParserInput );
m_aSearchThread = new SearchAndParseThread( this, rURL );
m_aSearchThread->launch();
return 0;
}
......@@ -297,4 +277,42 @@ bool SvxPersonalizationTabPage::CopyPersonaToGallery( const OUString &rURL )
return true;
}
SearchAndParseThread::SearchAndParseThread( SelectPersonaDialog* pDialog,
const OUString& rURL ) :
Thread( "cuiPersonasSearchThread" ),
m_pPersonaDialog( pDialog ),
m_aURL( rURL )
{
}
SearchAndParseThread::~SearchAndParseThread()
{
}
void SearchAndParseThread::execute()
{
Reference<XComponentContext> xContext( ::comphelper::getProcessComponentContext() );
Reference< xml::sax::XParser > xParser = xml::sax::Parser::create(xContext);
PersonasDocHandler* pHandler = new PersonasDocHandler();
Reference< xml::sax::XDocumentHandler > xDocHandler = pHandler;
uno::Reference< ucb::XSimpleFileAccess3 > xFileAccess( ucb::SimpleFileAccess::create( comphelper::getProcessComponentContext() ), uno::UNO_QUERY );
uno::Reference< io::XInputStream > xStream;
xParser->setDocumentHandler( xDocHandler );
// if ( !xFileAccess.is() )
// return false;
try {
xStream = xFileAccess->openFileRead( m_aURL );
}
catch (...)
{
// return false;
}
xml::sax::InputSource aParserInput;
aParserInput.aInputStream = xStream;
xParser->parseStream( aParserInput );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -11,8 +11,12 @@
#define INCLUDED_CUI_SOURCE_OPTIONS_PERSONALIZATION_HXX
#include <sfx2/tabdlg.hxx>
#include <salhelper/thread.hxx>
#include <rtl/ref.hxx>
#include <vcl/prgsbar.hxx>
class FixedText;
class SearchAndParseThread;
class SvxPersonalizationTabPage : public SfxTabPage
{
......@@ -57,9 +61,12 @@ class SelectPersonaDialog : public ModalDialog
{
private:
Edit *m_pEdit; ///< The input line for the Persona URL
PushButton *pButton;
public:
SelectPersonaDialog( Window *pParent );
::rtl::Reference< SearchAndParseThread > m_aSearchThread;
/// Get the URL from the Edit field.
OUString GetPersonaURL() const;
......@@ -69,7 +76,21 @@ private:
DECL_LINK( VisitPersonas, PushButton* );
};
class SearchAndParseThread: public salhelper::Thread
{
private:
SelectPersonaDialog *m_pPersonaDialog;
OUString m_aURL;
virtual ~SearchAndParseThread();
virtual void execute() SAL_OVERRIDE;
public:
SearchAndParseThread( SelectPersonaDialog* pDialog,
const OUString& rURL );
};
#endif // INCLUDED_CUI_SOURCE_OPTIONS_PERSONALIZATION_HXX
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment