| 181 | } |
| 182 | |
| 183 | bool ParseTrackFile(unzip::File & zipReader, Track & trackData) noexcept |
| 184 | { |
| 185 | unzip::FileInfo fileInfo; |
| 186 | if (unzip::GetCurrentFileInfo(zipReader, fileInfo) != unzip::Code::Ok) |
| 187 | { |
| 188 | LOG(LERROR, ("Unable to get file info from zip archive")); |
| 189 | return false; |
| 190 | } |
| 191 | |
| 192 | auto archiveInfo = tracking::archival_file::ParseArchiveFilename(fileInfo.m_filename); |
| 193 | |
| 194 | if (unzip::OpenCurrentFile(zipReader) != unzip::Code::Ok) |
| 195 | { |
| 196 | LOG(LERROR, ("Unable to open file from zip archive")); |
| 197 | return false; |
| 198 | } |
| 199 | |
| 200 | unzip::Buffer fileData; |
| 201 | int dataSize = unzip::ReadCurrentFile(zipReader, fileData); |
| 202 | if (dataSize < 0) |
| 203 | { |
| 204 | LOG(LERROR, ("Unable to read file from zip archive")); |
| 205 | return false; |
| 206 | } |
| 207 | |
| 208 | bool result = false; |
| 209 | if (archiveInfo.m_trackType == routing::RouterType::Vehicle) |
| 210 | { |
| 211 | result = ReadTrackFromArchive<ReaderSource<MemReaderWithExceptions>, tracking::PacketCar>(fileData.data(), dataSize, |
| 212 | trackData); |
| 213 | } |
| 214 | else |
| 215 | { |
| 216 | result = ReadTrackFromArchive<ReaderSource<MemReaderWithExceptions>, tracking::Packet>(fileData.data(), dataSize, |
| 217 | trackData); |
| 218 | } |
| 219 | |
| 220 | if (unzip::CloseCurrentFile(zipReader) != unzip::Code::Ok) |
| 221 | { |
| 222 | LOG(LERROR, ("Unable to close file from zip archive")); |
| 223 | return false; |
| 224 | } |
| 225 | |
| 226 | return result; |
| 227 | } |
| 228 | |
| 229 | optional<Track> ParseTrackArchiveData(string const & content, TemporaryFile & tmpArchiveFile) |
| 230 | { |
no test coverage detected