@ -44,6 +44,18 @@
@@ -44,6 +44,18 @@
# define SETTINGS_KEY(name) u"TorrentCreator / " name
namespace
{
// When the root file/directory of the created torrent is a symlink, we want to keep the symlink name in the torrent.
// On Windows, however, QFileDialog::DontResolveSymlinks disables shortcuts (.lnk files) expansion, making it impossible to pick a file if its path contains a shortcut.
// As of NTFS symlinks, they don't seem to be resolved anyways.
# ifndef Q_OS_WIN
const QFileDialog : : Options FILE_DIALOG_OPTIONS { QFileDialog : : DontResolveSymlinks } ;
# else
const QFileDialog : : Options FILE_DIALOG_OPTIONS { } ;
# endif
}
TorrentCreatorDialog : : TorrentCreatorDialog ( QWidget * parent , const Path & defaultPath )
: QDialog ( parent )
, m_ui ( new Ui : : TorrentCreatorDialog )
@ -106,14 +118,15 @@ void TorrentCreatorDialog::updateInputPath(const Path &path)
@@ -106,14 +118,15 @@ void TorrentCreatorDialog::updateInputPath(const Path &path)
void TorrentCreatorDialog : : onAddFolderButtonClicked ( )
{
const QString oldPath = m_ui - > textInputPath - > text ( ) ;
const Path path { QFileDialog : : getExistingDirectory ( this , tr ( " Select folder " ) , oldPath ) } ;
const Path path { QFileDialog : : getExistingDirectory ( this , tr ( " Select folder " )
, oldPath , ( QFileDialog : : ShowDirsOnly | FILE_DIALOG_OPTIONS ) ) } ;
updateInputPath ( path ) ;
}
void TorrentCreatorDialog : : onAddFileButtonClicked ( )
{
const QString oldPath = m_ui - > textInputPath - > text ( ) ;
const Path path { QFileDialog : : getOpenFileName ( this , tr ( " Select file " ) , oldPath ) } ;
const Path path { QFileDialog : : getOpenFileName ( this , tr ( " Select file " ) , oldPath , QString ( ) , nullptr , FILE_DIALOG_OPTIONS ) } ;
updateInputPath ( path ) ;
}
@ -170,7 +183,12 @@ void TorrentCreatorDialog::dragEnterEvent(QDragEnterEvent *event)
@@ -170,7 +183,12 @@ void TorrentCreatorDialog::dragEnterEvent(QDragEnterEvent *event)
// Main function that create a .torrent file
void TorrentCreatorDialog : : onCreateButtonClicked ( )
{
# ifdef Q_OS_WIN
// Resolve the path in case it contains a shortcut (otherwise, the following usages will consider it invalid)
const auto inputPath = Utils : : Fs : : toCanonicalPath ( Path ( m_ui - > textInputPath - > text ( ) . trimmed ( ) ) ) ;
# else
const auto inputPath = Path ( m_ui - > textInputPath - > text ( ) . trimmed ( ) ) ;
# endif
// test if readable
if ( ! Utils : : Fs : : isReadable ( inputPath ) )