Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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;
}