1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2010 Dennis Nienhüser <nienhueser@kde.org>
4 //
5 
6 #include "MonavMapsModel.h"
7 
8 #include <QDate>
9 
10 namespace Marble
11 {
12 
deleteMapFiles(int row)13 void MonavMapsModel::deleteMapFiles( int row )
14 {
15     if ( row >= 0 && row < m_data.size() ) {
16         m_data.at( row ).remove();
17         beginRemoveRows( QModelIndex(), row, row );
18         m_data.remove( row );
19         endRemoveRows();
20     }
21 }
22 
setInstallableVersions(const QMap<QString,QString> & remoteMaps)23 void MonavMapsModel::setInstallableVersions( const QMap<QString, QString> &remoteMaps )
24 {
25     m_remoteMaps = remoteMaps;
26     beginResetModel();
27     endResetModel();
28 }
29 
MonavMapsModel(const QVector<MonavMap> & data,QObject * parent)30 MonavMapsModel::MonavMapsModel( const QVector<MonavMap> &data, QObject * parent ) :
31     QAbstractTableModel( parent ), m_data( data )
32 {
33     std::sort( m_data.begin(), m_data.end(), &MonavMap::nameLessThan );
34 }
35 
headerData(int section,Qt::Orientation orientation,int role) const36 QVariant MonavMapsModel::headerData ( int section, Qt::Orientation orientation, int role ) const
37 {
38     if ( orientation == Qt::Horizontal && role == Qt::DisplayRole ) {
39         switch( section ) {
40         case 0:
41             return tr( "Name" );
42         case 1:
43             return tr( "Transport" );
44         case 2:
45             return tr( "Size" );
46         case 3:
47             return tr( "Update" );
48         case 4:
49             return tr( "Delete" );
50         case 5:
51             return tr( "Date" );
52         }
53     }
54 
55     return QVariant();
56 }
57 
data(const QModelIndex & index,int role) const58 QVariant MonavMapsModel::data ( const QModelIndex & index, int role ) const
59 {
60     if ( index.isValid() && role == Qt::DisplayRole ) {
61         int const row = index.row();
62         if ( row >= 0 && row < m_data.size() )
63             switch( index.column() ) {
64             case 0:
65                 return m_data.at( row ).name();
66             case 1:
67                 return m_data.at( row ).transport();
68             case 2:
69                 return QString( "%1 MB" ).arg( 1 + m_data.at( row ).size() / 1024 / 1024 );
70             case 3: {
71                 QString payload = m_data.at( row ).payload();
72                 payload = payload.mid(payload.lastIndexOf(QLatin1Char('/')) + 1);
73                 if ( m_remoteMaps.contains( payload ) ) {
74                     QDate remote = QDate::fromString( m_remoteMaps[payload], "MM/dd/yy" );
75                     QDate local = QDate::fromString( m_data.at( row ).date(), "MM/dd/yy" );
76                     return remote > local;
77                 }
78 
79                 return false;
80             }
81             case 4:
82                 return QFileInfo( m_data.at( row ).directory().absolutePath() ).isWritable();
83             case 5:
84                 {
85                     QDate date = QDate::fromString( m_data.at( row ).date(), "MM/dd/yy" );
86                     if ( date.year() < 2000 ) {
87                         // Qt interprets 11 as 1911
88                         date.setDate( date.year() + 100, date.month(), date.day() );
89                     }
90                     return date.toString( Qt::SystemLocaleShortDate );
91                 }
92             }
93     }
94 
95     return QVariant();
96 }
97 
rowCount(const QModelIndex & parent) const98 int MonavMapsModel::rowCount ( const QModelIndex & parent ) const
99 {
100     return parent.isValid() ? 0 : m_data.size();
101 }
102 
columnCount(const QModelIndex & parent) const103 int MonavMapsModel::columnCount ( const QModelIndex & parent ) const
104 {
105     return parent.isValid() ? 0 : 6;
106 }
107 
payload(int index) const108 QString MonavMapsModel::payload( int index ) const
109 {
110     if ( index >= 0 && index <= m_data.size() ) {
111         return m_data.at( index ).payload();
112     }
113 
114     return QString();
115 }
116 
117 }
118 
119 #include "moc_MonavMapsModel.cpp"
120