void CGUIWindowFileManager::OnSort(int iList) { /* 歌方: 1、 卦指: 1、 傍苧: 1、 */ // always sort the list by label in ascending order for (int i = 0; i < m_vecItems[iList]->Size(); i++) { CFileItemPtr pItem = m_vecItems[iList]->Get(i); if (pItem->m_bIsFolder && (!pItem->m_dwSize || pItem->GetPath().Equals("add"))) pItem->SetLabel2(""); else pItem->SetFileSizeLabel(); // Set free space on disc if (pItem->m_bIsShareOrDrive) { if (pItem->IsHD()) { ULARGE_INTEGER ulBytesFree; if (GetDiskFreeSpaceEx(pItem->GetPath().c_str(), &ulBytesFree, NULL, NULL)) { pItem->m_dwSize = ulBytesFree.QuadPart; pItem->SetFileSizeLabel(); } } else if (pItem->IsDVD() && g_mediaManager.IsDiscInDrive()) { ULARGE_INTEGER ulBytesTotal; if (GetDiskFreeSpaceEx(pItem->GetPath().c_str(), NULL, &ulBytesTotal, NULL)) { pItem->m_dwSize = ulBytesTotal.QuadPart; pItem->SetFileSizeLabel(); } } } // if (pItem->m_bIsShareOrDrive) } m_vecItems[iList]->Sort(SORT_METHOD_LABEL, SORT_ORDER_ASC); }
void CGUIWindowFileManager::OnSort(int iList) { using namespace KODI::PLATFORM::FILESYSTEM; // always sort the list by label in ascending order for (int i = 0; i < m_vecItems[iList]->Size(); i++) { CFileItemPtr pItem = m_vecItems[iList]->Get(i); if (pItem->m_bIsFolder && (!pItem->m_dwSize || pItem->IsPath("add"))) pItem->SetLabel2(""); else pItem->SetFileSizeLabel(); // Set free space on disc if (pItem->m_bIsShareOrDrive) { if (pItem->IsHD()) { std::error_code ec; auto freeSpace = space(pItem->GetPath(), ec); if (ec.value() == 0) { pItem->m_dwSize = freeSpace.free; pItem->SetFileSizeLabel(); } } else if (pItem->IsDVD() && g_mediaManager.IsDiscInDrive()) { std::error_code ec; auto freeSpace = space(pItem->GetPath(), ec); if (ec.value() == 0) { pItem->m_dwSize = freeSpace.capacity; pItem->SetFileSizeLabel(); } } } // if (pItem->m_bIsShareOrDrive) } m_vecItems[iList]->Sort(SortByLabel, SortOrderAscending); }
bool CGUIWindowFileManager::Update(int iList, const CStdString &strDirectory) { /* 歌方: 1、 卦指: 1、 傍苧: 1、 */ // get selected item int iItem = GetSelectedItem(iList); CStdString strSelectedItem = ""; if (iItem >= 0 && iItem < (int)m_vecItems[iList]->Size()) { CFileItemPtr pItem = m_vecItems[iList]->Get(iItem); if (!pItem->IsParentFolder()) { GetDirectoryHistoryString(pItem.get(), strSelectedItem); m_history[iList].SetSelectedItem(strSelectedItem, m_Directory[iList]->GetPath()); } } CStdString strOldDirectory=m_Directory[iList]->GetPath(); m_Directory[iList]->SetPath(strDirectory); CFileItemList items; if (!GetDirectory(iList, m_Directory[iList]->GetPath(), items)) { m_Directory[iList]->SetPath(strOldDirectory); return false; } m_history[iList].SetSelectedItem(strSelectedItem, strOldDirectory); ClearFileItems(iList); m_vecItems[iList]->Append(items); m_vecItems[iList]->SetPath(items.GetPath()); CStdString strParentPath; URIUtils::GetParentPath(strDirectory, strParentPath); if (strDirectory.IsEmpty() && (m_vecItems[iList]->Size() == 0 || g_guiSettings.GetBool("filelists.showaddsourcebuttons"))) { // add 'add source button' CStdString strLabel = g_localizeStrings.Get(1026); CFileItemPtr pItem(new CFileItem(strLabel)); pItem->SetPath("add"); pItem->SetIconImage("DefaultAddSource.png"); pItem->SetLabel(strLabel); pItem->SetLabelPreformated(true); pItem->m_bIsFolder = true; pItem->SetSpecialSort(SORT_ON_BOTTOM); m_vecItems[iList]->Add(pItem); } else if (items.IsEmpty() || g_guiSettings.GetBool("filelists.showparentdiritems")) { CFileItemPtr pItem(new CFileItem("..")); pItem->SetPath(m_rootDir.IsSource(strDirectory) ? "" : strParentPath); pItem->m_bIsFolder = true; pItem->m_bIsShareOrDrive = false; m_vecItems[iList]->AddFront(pItem, 0); } m_strParentPath[iList] = (m_rootDir.IsSource(strDirectory) ? "" : strParentPath); if (strDirectory.IsEmpty()) { CFileItemPtr pItem(new CFileItem("special://profile/", true)); pItem->SetLabel(g_localizeStrings.Get(20070)); pItem->SetThumbnailImage("DefaultFolder.png"); pItem->SetLabelPreformated(true); m_vecItems[iList]->Add(pItem); } // if we have a .tbn file, use itself as the thumb for (int i = 0; i < (int)m_vecItems[iList]->Size(); i++) { CFileItemPtr pItem = m_vecItems[iList]->Get(i); CStdString strExtension; URIUtils::GetExtension(pItem->GetPath(), strExtension); if (pItem->IsHD() && strExtension == ".tbn") { pItem->SetThumbnailImage(pItem->GetPath()); } } m_vecItems[iList]->FillInDefaultIcons(); OnSort(iList); UpdateButtons(); int item = 0; strSelectedItem = m_history[iList].GetSelectedItem(m_Directory[iList]->GetPath()); for (int i = 0; i < m_vecItems[iList]->Size(); ++i) { CFileItemPtr pItem = m_vecItems[iList]->Get(i); CStdString strHistory; GetDirectoryHistoryString(pItem.get(), strHistory); if (strHistory == strSelectedItem) { item = i; break; } } UpdateControl(iList, item); return true; }
bool CGUIWindowFileManager::Update(int iList, const std::string &strDirectory) { // get selected item int iItem = GetSelectedItem(iList); std::string strSelectedItem = ""; if (iItem >= 0 && iItem < (int)m_vecItems[iList]->Size()) { CFileItemPtr pItem = m_vecItems[iList]->Get(iItem); if (!pItem->IsParentFolder()) { GetDirectoryHistoryString(pItem.get(), strSelectedItem); m_history[iList].SetSelectedItem(strSelectedItem, m_Directory[iList]->GetPath()); } } std::string strOldDirectory=m_Directory[iList]->GetPath(); m_Directory[iList]->SetPath(strDirectory); CFileItemList items; if (!GetDirectory(iList, m_Directory[iList]->GetPath(), items)) { if (strDirectory != strOldDirectory && GetDirectory(iList, strOldDirectory, items)) m_Directory[iList]->SetPath(strOldDirectory); // Fallback to old (previous) path) else Update(iList, ""); // Fallback to root return false; } m_history[iList].SetSelectedItem(strSelectedItem, strOldDirectory); ClearFileItems(iList); m_vecItems[iList]->Append(items); m_vecItems[iList]->SetPath(items.GetPath()); std::string strParentPath; URIUtils::GetParentPath(strDirectory, strParentPath); if (strDirectory.empty() && (m_vecItems[iList]->Size() == 0 || CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_SHOWADDSOURCEBUTTONS))) { // add 'add source button' std::string strLabel = g_localizeStrings.Get(1026); CFileItemPtr pItem(new CFileItem(strLabel)); pItem->SetPath("add"); pItem->SetIconImage("DefaultAddSource.png"); pItem->SetLabel(strLabel); pItem->SetLabelPreformated(true); pItem->m_bIsFolder = true; pItem->SetSpecialSort(SortSpecialOnBottom); m_vecItems[iList]->Add(pItem); } else if (items.IsEmpty() || CSettings::GetInstance().GetBool(CSettings::SETTING_FILELISTS_SHOWPARENTDIRITEMS)) { CFileItemPtr pItem(new CFileItem("..")); pItem->SetPath(m_rootDir.IsSource(strDirectory) ? "" : strParentPath); pItem->m_bIsFolder = true; pItem->m_bIsShareOrDrive = false; m_vecItems[iList]->AddFront(pItem, 0); } m_strParentPath[iList] = (m_rootDir.IsSource(strDirectory) ? "" : strParentPath); if (strDirectory.empty()) { CFileItemPtr pItem(new CFileItem("special://profile/", true)); pItem->SetLabel(g_localizeStrings.Get(20070)); pItem->SetArt("thumb", "DefaultFolder.png"); pItem->SetLabelPreformated(true); m_vecItems[iList]->Add(pItem); } // if we have a .tbn file, use itself as the thumb for (int i = 0; i < (int)m_vecItems[iList]->Size(); i++) { CFileItemPtr pItem = m_vecItems[iList]->Get(i); if (pItem->IsHD() && URIUtils::HasExtension(pItem->GetPath(), ".tbn")) { pItem->SetArt("thumb", pItem->GetPath()); } } m_vecItems[iList]->FillInDefaultIcons(); OnSort(iList); UpdateButtons(); int item = 0; strSelectedItem = m_history[iList].GetSelectedItem(m_Directory[iList]->GetPath()); for (int i = 0; i < m_vecItems[iList]->Size(); ++i) { CFileItemPtr pItem = m_vecItems[iList]->Get(i); std::string strHistory; GetDirectoryHistoryString(pItem.get(), strHistory); if (strHistory == strSelectedItem) { item = i; break; } } UpdateControl(iList, item); return true; }
bool CGUIWindowFileManager::Update(int iList, const CStdString &strDirectory) { // get selected item int iItem = GetSelectedItem(iList); CStdString strSelectedItem = ""; if (iItem >= 0 && iItem < (int)m_vecItems[iList]->Size()) { CFileItemPtr pItem = m_vecItems[iList]->Get(iItem); if (!pItem->IsParentFolder()) { GetDirectoryHistoryString(pItem.get(), strSelectedItem); m_history[iList].SetSelectedItem(strSelectedItem, m_Directory[iList]->m_strPath); } } CStdString strOldDirectory=m_Directory[iList]->m_strPath; m_Directory[iList]->m_strPath = strDirectory; CFileItemList items; if (!GetDirectory(iList, m_Directory[iList]->m_strPath, items)) { m_Directory[iList]->m_strPath = strOldDirectory; return false; } m_history[iList].SetSelectedItem(strSelectedItem, strOldDirectory); ClearFileItems(iList); m_vecItems[iList]->Append(items); m_vecItems[iList]->m_strPath = items.m_strPath; if (strDirectory.IsEmpty() && (m_vecItems[iList]->Size() == 0 || !g_guiSettings.GetBool("filelists.disableaddsourcebuttons"))) { // add 'add source button' CStdString strLabel = g_localizeStrings.Get(1026); CFileItemPtr pItem(new CFileItem(strLabel)); pItem->m_strPath = "add"; pItem->SetThumbnailImage("DefaultAddSource.png"); pItem->SetLabel(strLabel); pItem->SetLabelPreformated(true); m_vecItems[iList]->Add(pItem); } // if we have a .tbn file, use itself as the thumb for (int i = 0; i < (int)m_vecItems[iList]->Size(); i++) { CFileItemPtr pItem = m_vecItems[iList]->Get(i); CStdString strExtension; CUtil::GetExtension(pItem->m_strPath, strExtension); if (pItem->IsHD() && strExtension == ".tbn") { pItem->SetThumbnailImage(pItem->m_strPath); } } m_vecItems[iList]->FillInDefaultIcons(); OnSort(iList); UpdateButtons(); int item = 0; strSelectedItem = m_history[iList].GetSelectedItem(m_Directory[iList]->m_strPath); for (int i = 0; i < m_vecItems[iList]->Size(); ++i) { CFileItemPtr pItem = m_vecItems[iList]->Get(i); CStdString strHistory; GetDirectoryHistoryString(pItem.get(), strHistory); if (strHistory == strSelectedItem) { item = i; break; } } UpdateControl(iList, item); return true; }