refactored the curl methods (read/write URL) into a separate utility class
This commit is contained in:
parent
c82210fbc6
commit
65854d7073
8 changed files with 277 additions and 174 deletions
|
@ -134,7 +134,8 @@ CORE_LIB_OBJS = ${TMP_DIR}/UniqueId.o \
|
||||||
${TMP_DIR}/SearchCriteria.o \
|
${TMP_DIR}/SearchCriteria.o \
|
||||||
${TMP_DIR}/MetadataType.o \
|
${TMP_DIR}/MetadataType.o \
|
||||||
${TMP_DIR}/MetadataTypeContainer.o \
|
${TMP_DIR}/MetadataTypeContainer.o \
|
||||||
${TMP_DIR}/OptionsContainer.o
|
${TMP_DIR}/OptionsContainer.o \
|
||||||
|
${TMP_DIR}/FileTools.o
|
||||||
|
|
||||||
TEST_RUNNER_OBJS = ${TMP_DIR}/TestRunner.o \
|
TEST_RUNNER_OBJS = ${TMP_DIR}/TestRunner.o \
|
||||||
${TMP_DIR}/UuidTest.o \
|
${TMP_DIR}/UuidTest.o \
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2004 Media Development Loan Fund
|
||||||
|
|
||||||
|
This file is part of the LiveSupport project.
|
||||||
|
http://livesupport.campware.org/
|
||||||
|
To report bugs, send an e-mail to bugs@campware.org
|
||||||
|
|
||||||
|
LiveSupport is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
LiveSupport is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with LiveSupport; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Author : $Author: fgerlits $
|
||||||
|
Version : $Revision$
|
||||||
|
Location : $URL: svn+ssh://fgerlits@code.campware.org/home/svn/repo/livesupport/trunk/livesupport/src/modules/core/include/LiveSupport/Core/FileTools.h $
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------*/
|
||||||
|
#ifndef LiveSupport_Core_FileTools_h
|
||||||
|
#define LiveSupport_Core_FileTools_h
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#error This is a C++ include file
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* ============================================================ include files */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "configure.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include "LiveSupport/Core/Ptr.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace LiveSupport {
|
||||||
|
namespace Core {
|
||||||
|
|
||||||
|
using namespace LiveSupport;
|
||||||
|
using namespace LiveSupport::Core;
|
||||||
|
|
||||||
|
/* ================================================================ constants */
|
||||||
|
|
||||||
|
|
||||||
|
/* =================================================================== macros */
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================== data types */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of tools for handling files and URLs.
|
||||||
|
*
|
||||||
|
* @author $Author: fgerlits $
|
||||||
|
* @version $Revision$
|
||||||
|
*/
|
||||||
|
class FileTools
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Copy the contents of a URL to a local file.
|
||||||
|
*
|
||||||
|
* @param url the URL to read.
|
||||||
|
* @param path the local path where the file is saved.
|
||||||
|
* @exception std::runtime_error on errors.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
copyUrlToFile(const std::string & url,
|
||||||
|
const std::string & path)
|
||||||
|
throw (std::runtime_error);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Upload the contents of a local file to a writable URL.
|
||||||
|
*
|
||||||
|
* @param path the local path where the file is.
|
||||||
|
* @param url the URL to write.
|
||||||
|
* @exception std::runtime_error on errors.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
copyFileToUrl(const std::string & path,
|
||||||
|
const std::string & url)
|
||||||
|
throw (std::runtime_error);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ================================================= external data structures */
|
||||||
|
|
||||||
|
|
||||||
|
/* ====================================================== function prototypes */
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace Core
|
||||||
|
} // namespace LiveSupport
|
||||||
|
|
||||||
|
#endif // LiveSupport_Core_FileTools_h
|
||||||
|
|
146
livesupport/src/modules/core/src/FileTools.cxx
Normal file
146
livesupport/src/modules/core/src/FileTools.cxx
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2004 Media Development Loan Fund
|
||||||
|
|
||||||
|
This file is part of the LiveSupport project.
|
||||||
|
http://livesupport.campware.org/
|
||||||
|
To report bugs, send an e-mail to bugs@campware.org
|
||||||
|
|
||||||
|
LiveSupport is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
LiveSupport is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with LiveSupport; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Author : $Author: fgerlits $
|
||||||
|
Version : $Revision$
|
||||||
|
Location : $URL: svn+ssh://fgerlits@code.campware.org/home/svn/repo/livesupport/trunk/livesupport/src/modules/core/src/FileTools.cxx $
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* ============================================================ include files */
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "configure.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_TIME_H
|
||||||
|
#include <time.h>
|
||||||
|
#else
|
||||||
|
#error need time.h
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <curl/curl.h>
|
||||||
|
#include <curl/easy.h>
|
||||||
|
|
||||||
|
#include "LiveSupport/Core/FileTools.h"
|
||||||
|
|
||||||
|
|
||||||
|
using namespace LiveSupport;
|
||||||
|
using namespace LiveSupport::Core;
|
||||||
|
|
||||||
|
/* =================================================== local data structures */
|
||||||
|
|
||||||
|
|
||||||
|
/* ================================================ local constants & macros */
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================== local function prototypes */
|
||||||
|
|
||||||
|
|
||||||
|
/* ============================================================= module code */
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Copy the contents of a URL to a local file.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
FileTools :: copyUrlToFile(const std::string & url,
|
||||||
|
const std::string & path)
|
||||||
|
throw (std::runtime_error)
|
||||||
|
{
|
||||||
|
FILE* file = fopen(path.c_str(), "wb");
|
||||||
|
if (!file) {
|
||||||
|
throw std::runtime_error("File location is not writable.");
|
||||||
|
}
|
||||||
|
|
||||||
|
CURL* handle = curl_easy_init();
|
||||||
|
if (!handle) {
|
||||||
|
fclose(file);
|
||||||
|
throw std::runtime_error("Could not obtain curl handle.");
|
||||||
|
}
|
||||||
|
|
||||||
|
int status = curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
|
||||||
|
status |= curl_easy_setopt(handle, CURLOPT_WRITEDATA, file);
|
||||||
|
status |= curl_easy_setopt(handle, CURLOPT_HTTPGET);
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
fclose(file);
|
||||||
|
throw std::runtime_error("Could not set curl options.");
|
||||||
|
}
|
||||||
|
|
||||||
|
status = curl_easy_perform(handle);
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
fclose(file);
|
||||||
|
throw std::runtime_error("Error downloading file.");
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_easy_cleanup(handle);
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Upload the contents of a local file to a writable URL.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
FileTools :: copyFileToUrl(const std::string & path,
|
||||||
|
const std::string & url)
|
||||||
|
throw (std::runtime_error)
|
||||||
|
{
|
||||||
|
FILE* file = fopen(path.c_str(), "rb");
|
||||||
|
if (!file) {
|
||||||
|
throw std::runtime_error("File not found.");
|
||||||
|
}
|
||||||
|
fseek(file, 0, SEEK_END);
|
||||||
|
long fileSize = ftell(file);
|
||||||
|
rewind(file);
|
||||||
|
|
||||||
|
CURL* handle = curl_easy_init();
|
||||||
|
if (!handle) {
|
||||||
|
throw std::runtime_error("Could not obtain curl handle.");
|
||||||
|
}
|
||||||
|
|
||||||
|
int status = curl_easy_setopt(handle, CURLOPT_READDATA, file);
|
||||||
|
status |= curl_easy_setopt(handle, CURLOPT_INFILESIZE, fileSize);
|
||||||
|
// works for files of size up to 2 GB
|
||||||
|
status |= curl_easy_setopt(handle, CURLOPT_PUT, 1);
|
||||||
|
status |= curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
|
||||||
|
// status |= curl_easy_setopt(handle, CURLOPT_HEADER, 1);
|
||||||
|
// status |= curl_easy_setopt(handle, CURLOPT_ENCODING, "deflate");
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
throw std::runtime_error("Could not set curl options.");
|
||||||
|
}
|
||||||
|
|
||||||
|
status = curl_easy_perform(handle);
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
throw std::runtime_error("Error uploading file.");
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_easy_cleanup(handle);
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
|
|
@ -40,12 +40,9 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
|
||||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||||
#include <XmlRpcClient.h>
|
#include <XmlRpcClient.h>
|
||||||
#include <XmlRpcUtil.h>
|
#include <XmlRpcUtil.h>
|
||||||
#include <curl/curl.h>
|
|
||||||
#include <curl/easy.h>
|
|
||||||
|
|
||||||
#include "LiveSupport/Core/Md5.h"
|
#include "LiveSupport/Core/Md5.h"
|
||||||
#include "LiveSupport/Core/XmlRpcCommunicationException.h"
|
#include "LiveSupport/Core/XmlRpcCommunicationException.h"
|
||||||
|
@ -55,6 +52,8 @@
|
||||||
#include "LiveSupport/Core/XmlRpcIOException.h"
|
#include "LiveSupport/Core/XmlRpcIOException.h"
|
||||||
#include "LiveSupport/Core/XmlRpcInvalidDataException.h"
|
#include "LiveSupport/Core/XmlRpcInvalidDataException.h"
|
||||||
#include "LiveSupport/Core/TimeConversion.h"
|
#include "LiveSupport/Core/TimeConversion.h"
|
||||||
|
#include "LiveSupport/Core/FileTools.h"
|
||||||
|
|
||||||
#include "WebStorageClient.h"
|
#include "WebStorageClient.h"
|
||||||
|
|
||||||
using namespace boost::posix_time;
|
using namespace boost::posix_time;
|
||||||
|
@ -1901,39 +1900,12 @@ WebStorageClient :: storeAudioClip(Ptr<SessionId>::Ref sessionId,
|
||||||
std::string url = std::string(result[storeAudioClipUrlParamName]);
|
std::string url = std::string(result[storeAudioClipUrlParamName]);
|
||||||
std::string token = std::string(result[storeAudioClipTokenParamName]);
|
std::string token = std::string(result[storeAudioClipTokenParamName]);
|
||||||
|
|
||||||
FILE* binaryFile = fopen(binaryFileName.c_str(), "rb");
|
try {
|
||||||
if (!binaryFile) {
|
FileTools::copyFileToUrl(binaryFileName, url);
|
||||||
throw XmlRpcIOException("Binary audio clip file not found.");
|
|
||||||
|
} catch (std::runtime_error &e) {
|
||||||
|
throw XmlRpcCommunicationException(e.what());
|
||||||
}
|
}
|
||||||
fseek(binaryFile, 0, SEEK_END);
|
|
||||||
long binaryFileSize = ftell(binaryFile);
|
|
||||||
rewind(binaryFile);
|
|
||||||
|
|
||||||
CURL* handle = curl_easy_init();
|
|
||||||
if (!handle) {
|
|
||||||
throw XmlRpcCommunicationException("Could not obtain curl handle.");
|
|
||||||
}
|
|
||||||
|
|
||||||
int status = curl_easy_setopt(handle, CURLOPT_READDATA, binaryFile);
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_INFILESIZE, binaryFileSize);
|
|
||||||
// works for files of size up to 2 GB
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_PUT, 1);
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
|
|
||||||
// status |= curl_easy_setopt(handle, CURLOPT_HEADER, 1);
|
|
||||||
// status |= curl_easy_setopt(handle, CURLOPT_ENCODING, "deflate");
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
throw XmlRpcCommunicationException("Could not set curl options.");
|
|
||||||
}
|
|
||||||
|
|
||||||
status = curl_easy_perform(handle);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
throw XmlRpcCommunicationException("Error uploading file.");
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_easy_cleanup(handle);
|
|
||||||
fclose(binaryFile);
|
|
||||||
|
|
||||||
parameters.clear();
|
parameters.clear();
|
||||||
parameters[storeAudioClipSessionIdParamName]
|
parameters[storeAudioClipSessionIdParamName]
|
||||||
|
@ -2571,37 +2543,12 @@ WebStorageClient :: importPlaylist(
|
||||||
std::string url = std::string(result[importPlaylistUrlParamName]);
|
std::string url = std::string(result[importPlaylistUrlParamName]);
|
||||||
std::string token = std::string(result[importPlaylistTokenParamName]);
|
std::string token = std::string(result[importPlaylistTokenParamName]);
|
||||||
|
|
||||||
FILE* binaryFile = fopen(path->c_str(), "rb");
|
try {
|
||||||
if (!binaryFile) {
|
FileTools::copyFileToUrl(*path, url);
|
||||||
throw XmlRpcIOException("The playlist archive file disappeared.");
|
|
||||||
|
} catch (std::runtime_error &e) {
|
||||||
|
throw XmlRpcCommunicationException(e.what());
|
||||||
}
|
}
|
||||||
fseek(binaryFile, 0, SEEK_END);
|
|
||||||
long binaryFileSize = ftell(binaryFile);
|
|
||||||
rewind(binaryFile);
|
|
||||||
|
|
||||||
CURL* handle = curl_easy_init();
|
|
||||||
if (!handle) {
|
|
||||||
throw XmlRpcCommunicationException("Could not obtain curl handle.");
|
|
||||||
}
|
|
||||||
|
|
||||||
int status = curl_easy_setopt(handle, CURLOPT_READDATA, binaryFile);
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_INFILESIZE, binaryFileSize);
|
|
||||||
// works for files of size up to 2 GB
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_PUT, 1);
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
throw XmlRpcCommunicationException("Could not set curl options.");
|
|
||||||
}
|
|
||||||
|
|
||||||
status = curl_easy_perform(handle);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
throw XmlRpcCommunicationException("Error uploading file.");
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_easy_cleanup(handle);
|
|
||||||
fclose(binaryFile);
|
|
||||||
|
|
||||||
parameters.clear();
|
parameters.clear();
|
||||||
parameters[importPlaylistTokenParamName]
|
parameters[importPlaylistTokenParamName]
|
||||||
|
|
|
@ -39,12 +39,12 @@
|
||||||
#error need pwd.h
|
#error need pwd.h
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <curl/curl.h>
|
|
||||||
#include <curl/easy.h>
|
|
||||||
#include <gtkmm/filechooserdialog.h>
|
#include <gtkmm/filechooserdialog.h>
|
||||||
#include <gtkmm/stock.h>
|
#include <gtkmm/stock.h>
|
||||||
#include <gtkmm/paned.h>
|
#include <gtkmm/paned.h>
|
||||||
|
|
||||||
|
#include "LiveSupport/Core/FileTools.h"
|
||||||
|
|
||||||
#include "BackupView.h"
|
#include "BackupView.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -341,47 +341,12 @@ BackupView :: onSaveButtonClicked(void) throw ()
|
||||||
}
|
}
|
||||||
|
|
||||||
fileName->assign(dialog->get_filename());
|
fileName->assign(dialog->get_filename());
|
||||||
copyUrlToFile(url, fileName);
|
try {
|
||||||
}
|
FileTools::copyUrlToFile(*url, *fileName);
|
||||||
|
|
||||||
|
} catch (std::runtime_error &e) {
|
||||||
/*------------------------------------------------------------------------------
|
// TODO: handle error
|
||||||
* Fetch the backup file from an URL and save it to a local file.
|
|
||||||
*----------------------------------------------------------------------------*/
|
|
||||||
bool
|
|
||||||
BackupView :: copyUrlToFile(Ptr<Glib::ustring>::Ref url,
|
|
||||||
Ptr<Glib::ustring>::Ref fileName) throw ()
|
|
||||||
{
|
|
||||||
FILE* localFile = fopen(fileName->c_str(), "wb");
|
|
||||||
if (!localFile) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CURL* handle = curl_easy_init();
|
|
||||||
if (!handle) {
|
|
||||||
fclose(localFile);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int status = curl_easy_setopt(handle, CURLOPT_URL, url->c_str());
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_WRITEDATA, localFile);
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_HTTPGET);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
fclose(localFile);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = curl_easy_perform(handle);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
fclose(localFile);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_easy_cleanup(handle);
|
|
||||||
fclose(localFile);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -139,17 +139,6 @@ class BackupView : public Gtk::VBox,
|
||||||
Gtk::Box *
|
Gtk::Box *
|
||||||
constructBackupListView(void) throw ();
|
constructBackupListView(void) throw ();
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch the backup file from an URL and save it to a local file.
|
|
||||||
*
|
|
||||||
* @param url the URL to fetch.
|
|
||||||
* @param fileName the local file to save as.
|
|
||||||
* @return the status reported by curl (true if everything is OK).
|
|
||||||
*/
|
|
||||||
bool
|
|
||||||
copyUrlToFile(Ptr<Glib::ustring>::Ref url,
|
|
||||||
Ptr<Glib::ustring>::Ref fileName) throw ();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read the title of the backup from the entry field.
|
* Read the title of the backup from the entry field.
|
||||||
* If the entry is blank, a default title is used.
|
* If the entry is blank, a default title is used.
|
||||||
|
|
|
@ -39,11 +39,10 @@
|
||||||
#error need pwd.h
|
#error need pwd.h
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <curl/curl.h>
|
|
||||||
#include <curl/easy.h>
|
|
||||||
#include <gtkmm/filechooserdialog.h>
|
#include <gtkmm/filechooserdialog.h>
|
||||||
#include <gtkmm/stock.h>
|
#include <gtkmm/stock.h>
|
||||||
|
|
||||||
|
#include "LiveSupport/Core/FileTools.h"
|
||||||
#include "LiveSupport/Widgets/WidgetFactory.h"
|
#include "LiveSupport/Widgets/WidgetFactory.h"
|
||||||
|
|
||||||
#include "ExportPlaylistWindow.h"
|
#include "ExportPlaylistWindow.h"
|
||||||
|
@ -215,8 +214,10 @@ ExportPlaylistWindow :: onSaveButtonClicked(void) throw ()
|
||||||
// save the exported playlist as a local file
|
// save the exported playlist as a local file
|
||||||
if (result == Gtk::RESPONSE_OK) {
|
if (result == Gtk::RESPONSE_OK) {
|
||||||
fileName->assign(dialog->get_filename());
|
fileName->assign(dialog->get_filename());
|
||||||
bool success = copyUrlToFile(url, fileName);
|
try {
|
||||||
if (!success) {
|
FileTools::copyUrlToFile(*url, *fileName);
|
||||||
|
|
||||||
|
} catch (std::runtime_error &e) {
|
||||||
Ptr<Glib::ustring>::Ref errorMsg = getResourceUstring(
|
Ptr<Glib::ustring>::Ref errorMsg = getResourceUstring(
|
||||||
"saveExportErrorMsg");
|
"saveExportErrorMsg");
|
||||||
gLiveSupport->displayMessageWindow(errorMsg);
|
gLiveSupport->displayMessageWindow(errorMsg);
|
||||||
|
@ -230,47 +231,6 @@ ExportPlaylistWindow :: onSaveButtonClicked(void) throw ()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
|
||||||
* Fetch the exported playlist from a URL and save it to a local file.
|
|
||||||
*----------------------------------------------------------------------------*/
|
|
||||||
bool
|
|
||||||
ExportPlaylistWindow :: copyUrlToFile(Ptr<Glib::ustring>::Ref url,
|
|
||||||
Ptr<Glib::ustring>::Ref fileName)
|
|
||||||
throw ()
|
|
||||||
{
|
|
||||||
FILE* localFile = fopen(fileName->c_str(), "wb");
|
|
||||||
if (!localFile) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
CURL* handle = curl_easy_init();
|
|
||||||
if (!handle) {
|
|
||||||
fclose(localFile);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int status = curl_easy_setopt(handle, CURLOPT_URL, url->c_str());
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_WRITEDATA, localFile);
|
|
||||||
status |= curl_easy_setopt(handle, CURLOPT_HTTPGET);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
fclose(localFile);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = curl_easy_perform(handle);
|
|
||||||
|
|
||||||
if (status) {
|
|
||||||
fclose(localFile);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_easy_cleanup(handle);
|
|
||||||
fclose(localFile);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
/*------------------------------------------------------------------------------
|
||||||
* Event handler called when the the window gets hidden.
|
* Event handler called when the the window gets hidden.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -86,17 +86,6 @@ class ExportPlaylistWindow : public GuiWindow
|
||||||
*/
|
*/
|
||||||
ExportFormatRadioButtons * formatButtons;
|
ExportFormatRadioButtons * formatButtons;
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch the exported playlist from a URL and save it to a local file.
|
|
||||||
*
|
|
||||||
* @param url the URL to fetch.
|
|
||||||
* @param fileName the local file to save as.
|
|
||||||
* @return the status reported by curl (true if everything is OK).
|
|
||||||
*/
|
|
||||||
bool
|
|
||||||
copyUrlToFile(Ptr<Glib::ustring>::Ref url,
|
|
||||||
Ptr<Glib::ustring>::Ref fileName) throw ();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancel the current operation.
|
* Cancel the current operation.
|
||||||
* Call exportPlaylistClose() on token, and reset it to 0.
|
* Call exportPlaylistClose() on token, and reset it to 0.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue