File indexing completed on 2024-11-10 04:30:22

0001 /*
0002  * SPDX-FileCopyrightText: 2022 Kai Uwe Broulik <kde@broulik.de>
0003  * SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 
0006 #include "afcurl.h"
0007 
0008 AfcUrl::AfcUrl(const QUrl &url)
0009     : m_url(url)
0010 {
0011     if (!url.isValid() || url.scheme() != QLatin1String("afc")) {
0012         return;
0013     }
0014 
0015     m_device = url.host();
0016 
0017     const int defaultPort = static_cast<int>(BrowseMode::FileSystem);
0018     m_browseMode = static_cast<BrowseMode>(url.port(defaultPort));
0019 
0020     m_path = url.path();
0021 
0022     if (!m_path.isEmpty()) {
0023         Q_ASSERT(m_path.startsWith(QLatin1Char('/')));
0024     }
0025 
0026     if (m_browseMode == BrowseMode::Apps) {
0027         int slashAfterAppIdx = m_path.indexOf(QLatin1Char('/'), 1);
0028         if (slashAfterAppIdx == -1) {
0029             slashAfterAppIdx = m_path.length();
0030         }
0031 
0032         m_appId = m_path.mid(1, slashAfterAppIdx - 1); // exclude slashes in app ID
0033         m_path = m_path.mid(slashAfterAppIdx); // include leading slash in path
0034     }
0035 
0036     if (m_path == QLatin1Char('/')) {
0037         m_path.clear();
0038     }
0039 }
0040 
0041 QUrl AfcUrl::url() const
0042 {
0043     return m_url;
0044 }
0045 
0046 AfcUrl::BrowseMode AfcUrl::browseMode() const
0047 {
0048     return m_browseMode;
0049 }
0050 
0051 QString AfcUrl::device() const
0052 {
0053     return m_device;
0054 }
0055 
0056 QString AfcUrl::appId() const
0057 {
0058     return m_appId;
0059 }
0060 
0061 QString AfcUrl::path() const
0062 {
0063     return m_path;
0064 }
0065 
0066 bool AfcUrl::isValid() const
0067 {
0068     return m_browseMode == BrowseMode::FileSystem || m_browseMode == BrowseMode::Apps;
0069 }