summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/datamapper.hxx2
-rw-r--r--sc/source/ui/dataprovider/csvdataprovider.cxx6
-rw-r--r--sc/source/ui/dataprovider/dataprovider.cxx15
-rw-r--r--sc/source/ui/inc/dataprovider.hxx9
4 files changed, 30 insertions, 2 deletions
diff --git a/sc/inc/datamapper.hxx b/sc/inc/datamapper.hxx
index b8216b0de0de..55390fc5a39b 100644
--- a/sc/inc/datamapper.hxx
+++ b/sc/inc/datamapper.hxx
@@ -87,7 +87,7 @@ public:
OUString getDBName() const;
void setDBData(ScDBData* pDBData);
- void refresh(ScDocument* pDoc);
+ void refresh(ScDocument* pDoc, bool bDeterministic = false);
};
class SC_DLLPUBLIC ExternalDataMapper
diff --git a/sc/source/ui/dataprovider/csvdataprovider.cxx b/sc/source/ui/dataprovider/csvdataprovider.cxx
index cd87d21c3de4..4e2aea9cffa9 100644
--- a/sc/source/ui/dataprovider/csvdataprovider.cxx
+++ b/sc/source/ui/dataprovider/csvdataprovider.cxx
@@ -202,6 +202,12 @@ void CSVDataProvider::Import()
mpDoc->ResetClip(mpDocument, (SCTAB)0);
mxCSVFetchThread = new CSVFetchThread(*mpDoc, maURL, &maIdle);
mxCSVFetchThread->launch();
+
+ if (mbDeterministic)
+ {
+ SolarMutexReleaser aReleaser;
+ mxCSVFetchThread->join();
+ }
}
IMPL_LINK_NOARG(CSVDataProvider, ImportFinishedHdl, Timer*, void)
diff --git a/sc/source/ui/dataprovider/dataprovider.cxx b/sc/source/ui/dataprovider/dataprovider.cxx
index 119dbdd18e9b..79b936f5d704 100644
--- a/sc/source/ui/dataprovider/dataprovider.cxx
+++ b/sc/source/ui/dataprovider/dataprovider.cxx
@@ -107,7 +107,7 @@ double ExternalDataSource::getUpdateFrequency() const
return mnUpdateFrequency;
}
-void ExternalDataSource::refresh(ScDocument* pDoc)
+void ExternalDataSource::refresh(ScDocument* pDoc, bool bDeterministic)
{
// no DB data available
if (!mpDBDataManager)
@@ -121,6 +121,9 @@ void ExternalDataSource::refresh(ScDocument* pDoc)
if (!mpDataProvider)
return;
+ if (bDeterministic)
+ mpDataProvider->setDeterministic();
+
mpDataProvider->Import();
}
@@ -148,6 +151,16 @@ std::vector<sc::ExternalDataSource>& ExternalDataMapper::getDataSources()
return maDataSources;
}
+DataProvider::DataProvider():
+ mbDeterministic(false)
+{
+}
+
+void DataProvider::setDeterministic()
+{
+ mbDeterministic = true;
+}
+
DataProvider::~DataProvider()
{
}
diff --git a/sc/source/ui/inc/dataprovider.hxx b/sc/source/ui/inc/dataprovider.hxx
index 00fec69638fb..c45adc9616a1 100644
--- a/sc/source/ui/inc/dataprovider.hxx
+++ b/sc/source/ui/inc/dataprovider.hxx
@@ -76,7 +76,14 @@ public:
*/
class DataProvider
{
+protected:
+ /**
+ * If true make the threaded import deterministic for the tests.
+ */
+ bool mbDeterministic;
+
public:
+ DataProvider();
virtual ~DataProvider() = 0;
virtual void Import() = 0;
@@ -84,6 +91,8 @@ public:
virtual const OUString& GetURL() const = 0;
static std::unique_ptr<SvStream> FetchStreamFromURL(const OUString&, OStringBuffer& rBuffer);
+
+ void setDeterministic();
};
class CSVDataProvider : public DataProvider