diff --git a/Transmission.xcodeproj/project.pbxproj b/Transmission.xcodeproj/project.pbxproj index 8de604b78..2d962c901 100644 --- a/Transmission.xcodeproj/project.pbxproj +++ b/Transmission.xcodeproj/project.pbxproj @@ -237,7 +237,6 @@ A2D77451154CC25700A62B93 /* WebSeedTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D7744F154CC25700A62B93 /* WebSeedTableView.h */; }; A2D77452154CC25700A62B93 /* WebSeedTableView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A2D77450154CC25700A62B93 /* WebSeedTableView.mm */; }; A2D77453154CC72B00A62B93 /* WebSeedTableView.mm in Sources */ = {isa = PBXBuildFile; fileRef = A2D77450154CC25700A62B93 /* WebSeedTableView.mm */; }; - A2D8CFBA15F82DFA0056E93D /* NSApplicationAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = A29D84031049C25600D1987A /* NSApplicationAdditions.mm */; }; A2D8CFBB15F82E030056E93D /* NSStringAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4DE5CC9C0980656F00BE280E /* NSStringAdditions.mm */; }; A2DF37070C220D03006523C1 /* CreatorWindowController.mm in Sources */ = {isa = PBXBuildFile; fileRef = A2DF37050C220D03006523C1 /* CreatorWindowController.mm */; }; A2E384DA130DFB3A001F501B /* templates.h in Headers */ = {isa = PBXBuildFile; fileRef = A2E384D2130DFB3A001F501B /* templates.h */; }; @@ -1257,10 +1256,10 @@ buildActionMask = 2147483647; files = ( A2F35BBC15C5A0A100EBF632 /* QuickLook.framework in Frameworks */, - C88771AD2803EE7B005C7523 /* libz.tbd in Frameworks */, A2F35BE115C5A7ED00EBF632 /* Cocoa.framework in Frameworks */, A2F35BE315C5A7F900EBF632 /* Foundation.framework in Frameworks */, A2F35BD415C5A19A00EBF632 /* libtransmission.a in Frameworks */, + C88771AD2803EE7B005C7523 /* libz.tbd in Frameworks */, C88771B12803EE86005C7523 /* libiconv.tbd in Frameworks */, 55869932257074FE00F77A43 /* libcurl.tbd in Frameworks */, ); @@ -3103,9 +3102,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A2D8CFBB15F82E030056E93D /* NSStringAdditions.mm in Sources */, - A2D8CFBA15F82DFA0056E93D /* NSApplicationAdditions.mm in Sources */, A29304EE15D7497C00B1F726 /* main.cc in Sources */, + A2D8CFBB15F82E030056E93D /* NSStringAdditions.mm in Sources */, A2F35BCA15C5A0A100EBF632 /* GenerateThumbnailForURL.mm in Sources */, A2F35BCC15C5A0A100EBF632 /* GeneratePreviewForURL.mm in Sources */, ); diff --git a/libtransmission/torrent-files.h b/libtransmission/torrent-files.h index ace496698..d5dd33756 100644 --- a/libtransmission/torrent-files.h +++ b/libtransmission/torrent-files.h @@ -5,9 +5,11 @@ #pragma once +#include // std::sort() #include #include // uint64_t #include +#include #include #include #include @@ -72,6 +74,21 @@ public: total_size_ = uint64_t{}; } + auto sortedByPath() const + { + auto ret = std::vector>{}; + ret.reserve(std::size(files_)); + std::transform( + std::begin(files_), + std::end(files_), + std::back_inserter(ret), + [](auto const& in) { return std::make_pair(in.path_, in.size_); }); + + std::sort(std::begin(ret), std::end(ret), [](auto const& lhs, auto const& rhs) { return lhs.first < rhs.first; }); + + return ret; + } + tr_file_index_t add(std::string_view path, uint64_t file_size) { auto const ret = static_cast(std::size(files_)); diff --git a/libtransmission/torrent.cc b/libtransmission/torrent.cc index ed0dda395..427cb6881 100644 --- a/libtransmission/torrent.cc +++ b/libtransmission/torrent.cc @@ -49,7 +49,6 @@ #include "torrent-metainfo.h" #include "torrent.h" #include "tr-assert.h" -#include "tr-assert.h" #include "trevent.h" /* tr_runInEventThread() */ #include "utils.h" #include "variant.h" diff --git a/macosx/NSStringAdditions.mm b/macosx/NSStringAdditions.mm index 46ee1ce0a..7b94eeb33 100644 --- a/macosx/NSStringAdditions.mm +++ b/macosx/NSStringAdditions.mm @@ -5,7 +5,6 @@ #include #include -#import "NSApplicationAdditions.h" #import "NSStringAdditions.h" @interface NSString (Private) diff --git a/macosx/QuickLookPlugin/CMakeLists.txt b/macosx/QuickLookPlugin/CMakeLists.txt index 3ab770ac4..e890d1407 100644 --- a/macosx/QuickLookPlugin/CMakeLists.txt +++ b/macosx/QuickLookPlugin/CMakeLists.txt @@ -1,7 +1,6 @@ project(trmacql) set(${PROJECT_NAME}_SOURCES - ../NSApplicationAdditions.mm ../NSStringAdditions.mm GeneratePreviewForURL.mm GenerateThumbnailForURL.mm diff --git a/macosx/QuickLookPlugin/GeneratePreviewForURL.mm b/macosx/QuickLookPlugin/GeneratePreviewForURL.mm index 948c0af1b..dc396e0c3 100644 --- a/macosx/QuickLookPlugin/GeneratePreviewForURL.mm +++ b/macosx/QuickLookPlugin/GeneratePreviewForURL.mm @@ -1,4 +1,5 @@ -#import +#import +#import #import #include @@ -9,8 +10,10 @@ #import "NSStringAdditions.h" +QL_EXTERN_C_BEGIN OSStatus GeneratePreviewForURL(void* thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options); void CancelPreviewGeneration(void* thisInterface, QLPreviewRequestRef preview); +QL_EXTERN_C_END NSString* generateIconData(NSString* fileExtension, NSUInteger width, NSMutableDictionary* allImgProps) { @@ -187,21 +190,22 @@ OSStatus GeneratePreviewForURL(void* thisInterface, QLPreviewRequestRef preview, stringWithFormat:NSLocalizedStringFromTableInBundle(@"%lu Files", nil, bundle, "quicklook file header"), n_files]; [listSection appendFormat:@"%@", fileTitleString]; -#warning display size? #warning display folders? - for (tr_file_index_t i = 0; i < n_files; ++i) + for (auto const& [path, size] : metainfo.files().sortedByPath()) { - NSString* fullFilePath = [NSString stringWithUTF8String:metainfo.fileSubpath(i).c_str()]; + NSString* fullFilePath = [NSString stringWithUTF8String:path.c_str()]; NSCAssert([fullFilePath hasPrefix:[name stringByAppendingString:@"/"]], @"Expected file path %@ to begin with %@/", fullFilePath, name); NSString* shortenedFilePath = [fullFilePath substringFromIndex:[name length] + 1]; + NSString* shortenedFilePathAndSize = [NSString + stringWithFormat:@"%@ - %@", shortenedFilePath, [NSString stringForFileSize:size]]; NSUInteger const width = 16; [listSection appendFormat:@"%@", generateIconData([shortenedFilePath pathExtension], width, allImgProps), width, width, - shortenedFilePath]; + shortenedFilePathAndSize]; } [listSection appendString:@""]; diff --git a/macosx/QuickLookPlugin/GenerateThumbnailForURL.mm b/macosx/QuickLookPlugin/GenerateThumbnailForURL.mm index 4aa8ef6ed..44286d5c9 100644 --- a/macosx/QuickLookPlugin/GenerateThumbnailForURL.mm +++ b/macosx/QuickLookPlugin/GenerateThumbnailForURL.mm @@ -1,9 +1,11 @@ #import -#import +#import #import +QL_EXTERN_C_BEGIN OSStatus GenerateThumbnailForURL(void* thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize); void CancelThumbnailGeneration(void* thisInterface, QLThumbnailRequestRef thumbnail); +QL_EXTERN_C_END /* ----------------------------------------------------------------------------- Generate a thumbnail for file diff --git a/macosx/QuickLookPlugin/QuickLookPlugin-Prefix.pch b/macosx/QuickLookPlugin/QuickLookPlugin-Prefix.pch index 7e8817cf5..56ee384d5 100644 --- a/macosx/QuickLookPlugin/QuickLookPlugin-Prefix.pch +++ b/macosx/QuickLookPlugin/QuickLookPlugin-Prefix.pch @@ -1,4 +1,5 @@ #ifdef __OBJC__ #import +#import #import #endif diff --git a/macosx/QuickLookPlugin/main.cc b/macosx/QuickLookPlugin/main.cc index bd6d0bf55..c06724459 100644 --- a/macosx/QuickLookPlugin/main.cc +++ b/macosx/QuickLookPlugin/main.cc @@ -9,7 +9,6 @@ #include #include -#include #include // ----------------------------------------------------------------------------- @@ -30,6 +29,7 @@ // typedefs // ----------------------------------------------------------------------------- +QL_EXTERN_C_BEGIN // The thumbnail generation function to be implemented in GenerateThumbnailForURL.c OSStatus GenerateThumbnailForURL( void* thisInterface, @@ -69,6 +69,7 @@ HRESULT QuickLookGeneratorQueryInterface(void* thisInstance, REFIID iid, LPVOID* void* QuickLookGeneratorPluginFactory(CFAllocatorRef allocator, CFUUIDRef typeID); ULONG QuickLookGeneratorPluginAddRef(void* thisInstance); ULONG QuickLookGeneratorPluginRelease(void* thisInstance); +QL_EXTERN_C_END // ----------------------------------------------------------------------------- // myInterfaceFtbl definition