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; ...@@ -35,7 +35,6 @@ using namespace ::com::sun::star::ucb;
SelectPersonaDialog::SelectPersonaDialog( Window *pParent ) SelectPersonaDialog::SelectPersonaDialog( Window *pParent )
: ModalDialog( pParent, "SelectPersonaDialog", "cui/ui/select_persona_dialog.ui" ) : ModalDialog( pParent, "SelectPersonaDialog", "cui/ui/select_persona_dialog.ui" )
{ {
PushButton *pButton;
get( pButton, "search_personas" ); get( pButton, "search_personas" );
pButton->SetClickHdl( LINK( this, SelectPersonaDialog, VisitPersonas ) ); pButton->SetClickHdl( LINK( this, SelectPersonaDialog, VisitPersonas ) );
...@@ -55,29 +54,10 @@ OUString SelectPersonaDialog::GetPersonaURL() const ...@@ -55,29 +54,10 @@ OUString SelectPersonaDialog::GetPersonaURL() const
IMPL_LINK( SelectPersonaDialog, VisitPersonas, PushButton*, /*pButton*/ ) 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 searchTerm = m_pEdit->GetText();
OUString rURL = "https://addons.allizom.org/en-US/firefox/api/1.5/search/" + searchTerm + "/9/"; OUString rURL = "https://addons.allizom.org/en-US/firefox/api/1.5/search/" + searchTerm + "/9/";
if ( !xFileAccess.is() ) m_aSearchThread = new SearchAndParseThread( this, rURL );
return false; m_aSearchThread->launch();
try {
xStream = xFileAccess->openFileRead( rURL );
}
catch (...)
{
return false;
}
xml::sax::InputSource aParserInput;
aParserInput.aInputStream = xStream;
xParser->parseStream( aParserInput );
return 0; return 0;
} }
...@@ -297,4 +277,42 @@ bool SvxPersonalizationTabPage::CopyPersonaToGallery( const OUString &rURL ) ...@@ -297,4 +277,42 @@ bool SvxPersonalizationTabPage::CopyPersonaToGallery( const OUString &rURL )
return true; 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: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -11,8 +11,12 @@ ...@@ -11,8 +11,12 @@
#define INCLUDED_CUI_SOURCE_OPTIONS_PERSONALIZATION_HXX #define INCLUDED_CUI_SOURCE_OPTIONS_PERSONALIZATION_HXX
#include <sfx2/tabdlg.hxx> #include <sfx2/tabdlg.hxx>
#include <salhelper/thread.hxx>
#include <rtl/ref.hxx>
#include <vcl/prgsbar.hxx>
class FixedText; class FixedText;
class SearchAndParseThread;
class SvxPersonalizationTabPage : public SfxTabPage class SvxPersonalizationTabPage : public SfxTabPage
{ {
...@@ -57,9 +61,12 @@ class SelectPersonaDialog : public ModalDialog ...@@ -57,9 +61,12 @@ class SelectPersonaDialog : public ModalDialog
{ {
private: private:
Edit *m_pEdit; ///< The input line for the Persona URL Edit *m_pEdit; ///< The input line for the Persona URL
PushButton *pButton;
public: public:
SelectPersonaDialog( Window *pParent ); SelectPersonaDialog( Window *pParent );
::rtl::Reference< SearchAndParseThread > m_aSearchThread;
/// Get the URL from the Edit field. /// Get the URL from the Edit field.
OUString GetPersonaURL() const; OUString GetPersonaURL() const;
...@@ -69,7 +76,21 @@ private: ...@@ -69,7 +76,21 @@ private:
DECL_LINK( VisitPersonas, PushButton* ); 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 #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