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