QString DirViewItem::fullName() const { QString fn = m_name; DirViewItem *item = parent(); while (item && item->type() != DirViewItem::Type_Root) { fn.prepend("/"); fn.prepend(item->name()); item = item->parent(); } return fn; }
DirViewItemRoot * MPDParseUtils::parseDirViewItems(const QByteArray * const data) { QList<QByteArray> lines = data->split('\n'); DirViewItemRoot * rootItem = new DirViewItemRoot(""); DirViewItem * currentDir = rootItem; QStringList currentDirList; int amountOfLines = lines.size(); for (int i = 0; i < amountOfLines; i++) { QString line(lines.at(i)); if (line.startsWith("file: ")) { line.remove(0, 6); QStringList parts = line.split("/"); if (currentDir->type() == DirViewItem::Type_Root) static_cast<DirViewItemRoot *>(currentDir)->insertFile(parts.at(parts.size()-1)); else static_cast<DirViewItemDir *>(currentDir)->insertFile(parts.at(parts.size()-1)); } else if (line.startsWith("directory: ")) { line.remove(0, 11); QStringList parts = line.split("/"); /* Check how much matches */ int depth = 0; for (int j = 0; j < currentDirList.size() && j < parts.size(); j++) { if (currentDirList.at(j) != parts.at(j)) break; depth++; } for (int j = currentDirList.size(); j > depth; j--) { currentDir = currentDir->parent(); } if (currentDir->type() == DirViewItem::Type_Root) currentDir = static_cast<DirViewItemRoot *>(currentDir)->createDirectory(parts.at(parts.size()-1)); else currentDir = static_cast<DirViewItemDir *>(currentDir)->createDirectory(parts.at(parts.size()-1)); currentDirList = parts; } } return rootItem; }