112 lines
2.0 KiB
C++
112 lines
2.0 KiB
C++
/*
|
|
* Copyright 2009-2010, Stephan Aßmus <superstippi@gmx.de>
|
|
* All rights reserved. Distributed under the terms of the MIT License.
|
|
*/
|
|
|
|
#include "ProgressReporter.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <Catalog.h>
|
|
#include <Locale.h>
|
|
|
|
|
|
#undef B_TRANSLATION_CONTEXT
|
|
#define B_TRANSLATION_CONTEXT "InstallProgress"
|
|
|
|
|
|
ProgressReporter::ProgressReporter(const BMessenger& messenger,
|
|
BMessage* message)
|
|
:
|
|
fStartTime(0),
|
|
|
|
fBytesToWrite(0),
|
|
fBytesWritten(0),
|
|
|
|
fItemsToWrite(0),
|
|
fItemsWritten(0),
|
|
|
|
fMessenger(messenger),
|
|
fMessage(message)
|
|
{
|
|
}
|
|
|
|
|
|
ProgressReporter::~ProgressReporter()
|
|
{
|
|
delete fMessage;
|
|
}
|
|
|
|
|
|
void
|
|
ProgressReporter::Reset()
|
|
{
|
|
fBytesToWrite = 0;
|
|
fBytesWritten = 0;
|
|
|
|
fItemsToWrite = 0;
|
|
fItemsWritten = 0;
|
|
|
|
if (fMessage) {
|
|
BMessage message(*fMessage);
|
|
message.AddString("status",
|
|
B_TRANSLATE("Collecting copy information."));
|
|
fMessenger.SendMessage(&message);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
ProgressReporter::AddItems(uint64 count, off_t bytes)
|
|
{
|
|
fBytesToWrite += bytes;
|
|
fItemsToWrite += count;
|
|
}
|
|
|
|
|
|
void
|
|
ProgressReporter::StartTimer()
|
|
{
|
|
fStartTime = system_time();
|
|
|
|
printf("%" B_PRIdOFF " bytes to write in %" B_PRId64 " files\n",
|
|
fBytesToWrite, fItemsToWrite);
|
|
|
|
if (fMessage) {
|
|
BMessage message(*fMessage);
|
|
message.AddString("status", B_TRANSLATE("Performing installation."));
|
|
fMessenger.SendMessage(&message);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
ProgressReporter::ItemsWritten(uint64 items, off_t bytes,
|
|
const char* itemName, const char* targetFolder)
|
|
{
|
|
fItemsWritten += items;
|
|
fBytesWritten += bytes;
|
|
|
|
_UpdateProgress(itemName, targetFolder);
|
|
}
|
|
|
|
|
|
void
|
|
ProgressReporter::_UpdateProgress(const char* itemName,
|
|
const char* targetFolder)
|
|
{
|
|
if (fMessage == NULL)
|
|
return;
|
|
|
|
// TODO: Could add time to finish calculation here...
|
|
|
|
BMessage message(*fMessage);
|
|
float progress = 100.0 * fBytesWritten / fBytesToWrite;
|
|
message.AddFloat("progress", progress);
|
|
message.AddInt32("current", fItemsWritten);
|
|
message.AddInt32("maximum", fItemsToWrite);
|
|
message.AddString("item", itemName);
|
|
message.AddString("folder", targetFolder);
|
|
fMessenger.SendMessage(&message);
|
|
}
|