QString ComputerManager::findRoomOfComputer( const QStringList& hostNames, const QList<QHostAddress>& hostAddresses, const QModelIndex& parent ) { QAbstractItemModel* model = networkObjectModel(); int rows = model->rowCount( parent ); for( int i = 0; i < rows; ++i ) { QModelIndex entryIndex = model->index( i, 0, parent ); auto objectType = static_cast<NetworkObject::Type>( model->data( entryIndex, NetworkObjectModel::TypeRole ).toInt() ); if( objectType == NetworkObject::Group ) { QString room = findRoomOfComputer( hostNames, hostAddresses, entryIndex ); if( room.isEmpty() == false ) { return room; } } else if( objectType == NetworkObject::Host ) { QString currentHost = model->data( entryIndex, NetworkObjectModel::HostAddressRole ).toString().toLower(); QHostAddress currentHostAddress; if( hostNames.contains( currentHost ) || ( currentHostAddress.setAddress( currentHost ) && hostAddresses.contains( currentHostAddress ) ) ) { return model->data( parent, NetworkObjectModel::NameRole ).toString(); } } } return QString(); }
void ComputerManager::initRooms() { QString localHostName = QHostInfo::localHostName(); auto localHostAddresses = QHostInfo::fromName( localHostName ).addresses(); for( auto address : localHostAddresses ) { qDebug() << "ComputerManager::initRooms(): initializing rooms for" << QString( "%1 (%2)" ).arg( localHostName ).arg( address.toString() ); } m_currentRooms.append( findRoomOfComputer( localHostName, localHostAddresses, QModelIndex() ) ); qDebug() << "ComputerManager::initRooms(): found local rooms" << m_currentRooms; if( ItalcCore::config().onlyCurrentRoomVisible() ) { if( m_currentRooms.isEmpty() ) { QMessageBox::warning( nullptr, tr( "Room detection failed" ), tr( "Could not determine the room which this computer belongs to. " "This indicates a problem with the system configuration. " "All rooms will be shown in the computer management instead." ) ); qWarning( "ComputerManager::initRoomFilterList(): room detection failed" ); } m_roomFilterList = m_currentRooms; updateRoomFilterList(); } }