Files
haiku-beta6/src/apps/installer/ProgressReporter.cpp
T
Matt Madia e904ecc93e Updated to use B_TRANSLATE* macros. relates to #5408.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36667 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-05-06 20:14:37 +00:00

111 lines
2.0 KiB
C++

/*
* Copyright 2009-2010, Stephan Aßmus <[email protected]>
* All rights reserved. Distributed under the terms of the MIT License.
*/
#include "ProgressReporter.h"
#include <stdio.h>
#include <Catalog.h>
#undef TR_CONTEXT
#define TR_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("%lld bytes to write in %lld 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);
}