Chat-O-Matic/libs/libdownload/ActionDownload.h

131 lines
2.2 KiB
C++

/*
* Copyright 2010, Andrea Anzani. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _ACTION_DOWNLOAD_H
#define _ACTION_DOWNLOAD_H
#include <curl/curl.h>
#include <Entry.h>
#include <Looper.h>
#include <File.h>
#include <SupportDefs.h>
#include <DownloadManager.h>
#include "Action.h"
class ActionDownload : public Action
{
public:
enum Status {
ERROR_OPENFILE, // 0
ERROR_CURL_INIT, // 1
ERROR_PERFORMING, // 2
OK_CONNECTING, // 3
OK_PROGRESS, // 4
OK_DOWNLOADED // 5
};
ActionDownload(BString URL, entry_ref dest,
bool allowResume, BLooper* target = NULL, uint32 msg = 0);
virtual ~ActionDownload();
status_t Perform(BMessage* errors);
BString GetDescription();
BString GetLocalPath();
void
SetLooper(BLooper* loop, uint32 msg)
{
fTarget = loop;
fMsg = msg;
};
BLooper*
Looper()
{
return fTarget;
}
uint32
MessageWhat()
{
return fMsg;
}
// For compatibility:
void
SetExtraData(BString extra)
{
extraInfo.AddString("extra", extra);
}
void
SetKey(BString key, BString data)
{
extraInfo.AddString(key.String(), data);
}
void
SetRef(BString key, entry_ref* ref)
{
extraInfo.AddRef(key.String(), ref);
}
status_t
GetRef(BString key, entry_ref* ref)
{
return extraInfo.FindRef(key.String(), ref);
}
BString GetKey(BString key)
{
BString data;
extraInfo.FindString(key.String(), &data);
return data;
}
void
SetShouldStop(bool stop)
{
fShouldStop = stop;
}
bool
ShouldStop()
{
return fShouldStop;
}
void SetDownloadManager(DownloadManager* downloadManager);
private:
status_t openFile(BMessage*);
static void fillMessage(ActionDownload*, BMessage*);
static void sendProgressX(ActionDownload*, double max, double current);
//curl callbacks:
static size_t save_file ( void* ptr, size_t size, size_t nmemb, void* stream);
static int callback (void* clientp, double dltotal,
double dlnow, double , double);
CURL* curl;
BString fUrl;
entry_ref fDest;
BLooper* fTarget;
uint32 fMsg;
BMessage extraInfo;
bool fShouldStop;
BFile* file;
double resuming;
bool fAllowResume;
DownloadManager* fDownloadManager;
BString fFileType;
};
#endif // _ACTION_DOWNLOAD_H