[videodb] remove unused seasons table from episode_view
[xbmc.git] / xbmc / platform / posix / filesystem / SMBWSDiscovery.cpp
blobc2f247da10aaa7dff3cbdd1daa759444ae050c4e
1 /*
2 * Copyright (C) 2021- Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "SMBWSDiscovery.h"
11 #include "FileItem.h"
12 #include "FileItemList.h"
13 #include "ServiceBroker.h"
14 #include "network/IWSDiscovery.h"
15 #include "utils/StringUtils.h"
16 #include "utils/log.h"
18 #include "platform/posix/filesystem/SMBWSDiscoveryListener.h"
20 #include <algorithm>
21 #include <chrono>
22 #include <memory>
23 #include <mutex>
24 #include <string>
25 #include <utility>
26 #include <vector>
28 using namespace std::chrono;
29 using namespace WSDiscovery;
31 namespace WSDiscovery
33 std::unique_ptr<IWSDiscovery> IWSDiscovery::GetInstance()
35 return std::make_unique<WSDiscovery::CWSDiscoveryPosix>();
38 std::atomic<bool> CWSDiscoveryPosix::m_isInitialized{false};
40 CWSDiscoveryPosix::CWSDiscoveryPosix()
42 // Set our wsd_instance ID to seconds since epoch
43 auto epochduration = system_clock::now().time_since_epoch();
44 wsd_instance_id = epochduration.count() * system_clock::period::num / system_clock::period::den;
46 m_WSDListenerUDP = std::make_unique<CWSDiscoveryListenerUDP>();
47 m_isInitialized = true;
50 CWSDiscoveryPosix::~CWSDiscoveryPosix()
52 StopServices();
55 bool CWSDiscoveryPosix::StopServices()
57 m_WSDListenerUDP->Stop();
59 return true;
62 bool CWSDiscoveryPosix::StartServices()
64 m_WSDListenerUDP->Start();
66 return true;
69 bool CWSDiscoveryPosix::IsRunning()
71 return m_WSDListenerUDP->IsRunning();
74 bool CWSDiscoveryPosix::GetServerList(CFileItemList& items)
77 std::unique_lock<CCriticalSection> lock(m_critWSD);
79 for (const auto& item : m_vecWSDInfo)
81 auto found = item.computer.find('/');
82 std::string host;
83 if (found != std::string::npos)
84 host = item.computer.substr(0, found);
85 else
87 if (item.xaddrs_host.empty())
88 continue;
89 host = item.xaddrs_host;
92 CFileItemPtr pItem = std::make_shared<CFileItem>(host);
93 pItem->SetPath("smb://" + host + '/');
94 pItem->m_bIsFolder = true;
95 items.Add(pItem);
98 return true;
101 bool CWSDiscoveryPosix::GetCached(const std::string& strHostName, std::string& strIpAddress)
103 const std::string match = strHostName + "/";
105 std::unique_lock<CCriticalSection> lock(m_critWSD);
106 for (const auto& item : m_vecWSDInfo)
108 if (!item.computer.empty() && StringUtils::StartsWithNoCase(item.computer, match))
110 strIpAddress = item.xaddrs_host;
111 CLog::Log(LOGDEBUG, LOGWSDISCOVERY, "CWSDiscoveryPosix::Lookup - {} -> {}", strHostName,
112 strIpAddress);
113 return true;
117 return false;
120 void CWSDiscoveryPosix::SetItems(std::vector<wsd_req_info> entries)
123 std::unique_lock<CCriticalSection> lock(m_critWSD);
124 m_vecWSDInfo = std::move(entries);
127 } // namespace WSDiscovery