haiku/headers/private/package/FetchFileJob.h
Rene Gollent 9345049af8 Package Kit: Implement progress notifications.
- BJobStateListener: Add progress state and corresponding hook.
- FetchFileJob: Notify job progress hook on libcurl notifications.
- UserInteractionHandler: Add hooks for download progress and checksum
  validation progress.
- PackageManager: inherit from JobStateListener and watch for job
  notifications for internally generated jobs. Forward to corresponding
  UserInteractionHandler hooks as needed.
- Adapt pkgman, HaikuDepot and package_daemon to above changes.
  Neither HaikuDepot nor package_daemon's progress hooks are wired up to
  do anything yet though.
2013-09-29 17:25:33 -04:00

63 lines
1.3 KiB
C++

/*
* Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de>
* Copyright 2013, Rene Gollent <rene@gollent.com>
* Distributed under the terms of the MIT License.
*/
#ifndef _PACKAGE__PRIVATE__FETCH_FILE_JOB_H_
#define _PACKAGE__PRIVATE__FETCH_FILE_JOB_H_
#include <Entry.h>
#include <File.h>
#include <String.h>
#include <package/Job.h>
namespace BPackageKit {
namespace BPrivate {
class FetchFileJob : public BJob {
typedef BJob inherited;
public:
FetchFileJob(const BContext& context,
const BString& title,
const BString& fileURL,
const BEntry& targetEntry);
virtual ~FetchFileJob();
float DownloadProgress() const;
const char* DownloadURL() const;
const char* DownloadFileName() const;
protected:
virtual status_t Execute();
virtual void Cleanup(status_t jobResult);
private:
// libcurl callbacks
static int _ProgressCallback(void *clientp,
double dltotal, double dlnow,
double ultotal, double ulnow);
static size_t _WriteCallback(void *buffer, size_t size,
size_t nmemb, void *userp);
private:
BString fFileURL;
BEntry fTargetEntry;
BFile fTargetFile;
float fDownloadProgress;
};
} // namespace BPrivate
} // namespace BPackageKit
#endif // _PACKAGE__PRIVATE__FETCH_FILE_JOB_H_