1 /*
2 SPDX-FileCopyrightText: 2007 James B. Bowlin <bowlin@mindspring.com>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "ksfilereader.h"
8
9 #ifndef KSTARS_LITE
10 #include "kstars.h"
11 #endif
12 #include "kstarsdata.h"
13 #include "ksutils.h"
14
15 #include <QApplication>
16 #include <QDebug>
17 #include <QFile>
18
KSFileReader(qint64 maxLen)19 KSFileReader::KSFileReader(qint64 maxLen) : QTextStream(), m_maxLen(maxLen)
20 {
21 }
22
KSFileReader(QFile & file,qint64 maxLen)23 KSFileReader::KSFileReader(QFile &file, qint64 maxLen)
24 : QTextStream(), m_maxLen(maxLen)
25 {
26 QIODevice *device = (QIODevice *)&file;
27 QTextStream::setDevice(device);
28 QTextStream::setCodec("UTF-8");
29 }
30
open(const QString & fname)31 bool KSFileReader::open(const QString &fname)
32 {
33 if (!KSUtils::openDataFile(m_file, fname))
34 {
35 qWarning() << QString("Couldn't open(%1)").arg(fname);
36 return false;
37 }
38 QTextStream::setDevice(&m_file);
39 QTextStream::setCodec("UTF-8");
40 return true;
41 }
42
openFullPath(const QString & fname)43 bool KSFileReader::openFullPath(const QString &fname)
44 {
45 if (!fname.isNull())
46 {
47 m_file.setFileName(fname);
48 if (!m_file.open(QIODevice::ReadOnly))
49 return false;
50 }
51 QTextStream::setDevice(&m_file);
52 QTextStream::setCodec("UTF-8");
53 return true;
54 }
55
setProgress(QString label,unsigned int totalLines,unsigned int numUpdates)56 void KSFileReader::setProgress(QString label, unsigned int totalLines, unsigned int numUpdates)
57 {
58 m_label = label;
59 m_totalLines = totalLines;
60 if (m_totalLines < 1)
61 m_totalLines = 1;
62 m_targetLine = m_totalLines / 100;
63 m_targetIncrement = m_totalLines / numUpdates;
64
65 connect(this, SIGNAL(progressText(QString)), KStarsData::Instance(), SIGNAL(progressText(QString)));
66 }
67
showProgress()68 void KSFileReader::showProgress()
69 {
70 if (m_curLine < m_targetLine)
71 return;
72 if (m_targetLine < m_targetIncrement)
73 m_targetLine = m_targetIncrement;
74 else
75 m_targetLine += m_targetIncrement;
76
77 int percent = int(.5 + (m_curLine * 100.0) / m_totalLines);
78 //printf("%8d %8d %3d\n", m_curLine, m_totalLines, percent );
79 if (percent > 100)
80 percent = 100;
81 emit progressText(QString("%1 (%2%)").arg(m_label).arg(percent));
82 //#ifdef ANDROID
83 // Can cause crashes on Android
84 qApp->processEvents();
85 //#endif
86 }
87