void FMoviePlayerSettingsDetails::HandleFilePathPickerPathPicked( const FString& PickedPath, TSharedRef<IPropertyHandle> Property ) { FEditorDirectories::Get().SetLastDirectory(ELastDirectory::GENERIC_OPEN, FPaths::GetPath(PickedPath)); // sanitize the location of the chosen movies to the content/movies directory const FString MoviesBaseDir = FPaths::ConvertRelativePathToFull(FPaths::GameContentDir() + TEXT("Movies/")); const FString FullPath = FPaths::ConvertRelativePathToFull(PickedPath); if (FullPath.StartsWith(MoviesBaseDir)) { // mark for add/checkout FText FailReason; if (SourceControlHelpers::CheckoutOrMarkForAdd(PickedPath, LOCTEXT("MovieFileDescription", "movie"), FOnPostCheckOut(), FailReason)) { // already in the movies dir, so just trim the path so we just have a partial path with no extension (the movie player expects this) Property->SetValue(FPaths::GetBaseFilename(FullPath.RightChop(MoviesBaseDir.Len()))); } else { FNotificationInfo Info(FailReason); Info.ExpireDuration = 3.0f; FSlateNotificationManager::Get().AddNotification(Info); } } else if (!PickedPath.IsEmpty()) { // ask the user if they want to import this movie FSuppressableWarningDialog::FSetupInfo Info( LOCTEXT("ExternalMovieImportWarning", "This movie needs to be copied into your project, would you like to copy the file now?"), LOCTEXT("ExternalMovieImportTitle", "Copy Movie"), TEXT("ImportMovieIntoProject") ); Info.ConfirmText = LOCTEXT("ExternalMovieImport_Confirm", "Copy"); Info.CancelText = LOCTEXT("ExternalMovieImport_Cancel", "Don't Copy"); FSuppressableWarningDialog ImportWarningDialog( Info ); if(ImportWarningDialog.ShowModal() != FSuppressableWarningDialog::EResult::Cancel) { const FString FileName = FPaths::GetCleanFilename(PickedPath); const FString DestPath = MoviesBaseDir / FileName; FText FailReason; if (SourceControlHelpers::CopyFileUnderSourceControl(DestPath, PickedPath, LOCTEXT("MovieFileDescription", "movie"), FailReason)) { // trim the path so we just have a partial path with no extension (the movie player expects this) Property->SetValue(FPaths::GetBaseFilename(DestPath.RightChop(MoviesBaseDir.Len()))); } else { FNotificationInfo FailureInfo(FailReason); FailureInfo.ExpireDuration = 3.0f; FSlateNotificationManager::Get().AddNotification(FailureInfo); } } } else { Property->SetValue(PickedPath); } }
void SDocumentationToolTip::CreateExcerpt( FString FileSource, FString InExcerptName ) { FText CheckoutFailReason; bool bNewFile = true; bool bCheckoutOrAddSucceeded = true; if (FPaths::FileExists(FileSource)) { // Check out the existing file bNewFile = false; bCheckoutOrAddSucceeded = SourceControlHelpers::CheckoutOrMarkForAdd(FileSource, NSLOCTEXT("SToolTip", "DocumentationSCCActionDesc", "tool tip excerpt"), FOnPostCheckOut(), /*out*/ CheckoutFailReason); } FArchive* FileWriter = IFileManager::Get().CreateFileWriter( *FileSource, EFileWrite::FILEWRITE_Append | EFileWrite::FILEWRITE_AllowRead | EFileWrite::FILEWRITE_EvenIfReadOnly ); if (bNewFile) { FString UdnHeader; UdnHeader += "Availability:NoPublish"; UdnHeader += LINE_TERMINATOR; UdnHeader += "Title:"; UdnHeader += LINE_TERMINATOR; UdnHeader += "Crumbs:"; UdnHeader += LINE_TERMINATOR; UdnHeader += "Description:"; UdnHeader += LINE_TERMINATOR; FileWriter->Serialize( TCHAR_TO_ANSI( *UdnHeader ), UdnHeader.Len() ); } FString NewExcerpt; NewExcerpt += LINE_TERMINATOR; NewExcerpt += "[EXCERPT:"; NewExcerpt += InExcerptName; NewExcerpt += "]"; NewExcerpt += LINE_TERMINATOR; NewExcerpt += TextContent.Get().ToString(); NewExcerpt += LINE_TERMINATOR; NewExcerpt += "[/EXCERPT:"; NewExcerpt += InExcerptName; NewExcerpt += "]"; NewExcerpt += LINE_TERMINATOR; if (!bNewFile) { FileWriter->Seek( FMath::Max( FileWriter->TotalSize(), (int64)0 ) ); } FileWriter->Serialize( TCHAR_TO_ANSI( *NewExcerpt ), NewExcerpt.Len() ); FileWriter->Close(); delete FileWriter; if (bNewFile) { // Add the new file bCheckoutOrAddSucceeded = SourceControlHelpers::CheckoutOrMarkForAdd(FileSource, NSLOCTEXT("SToolTip", "DocumentationSCCActionDesc", "tool tip excerpt"), FOnPostCheckOut(), /*out*/ CheckoutFailReason); } ISourceCodeAccessModule& SourceCodeAccessModule = FModuleManager::LoadModuleChecked<ISourceCodeAccessModule>("SourceCodeAccess"); SourceCodeAccessModule.GetAccessor().OpenFileAtLine(FileSource, 0); if (!bCheckoutOrAddSucceeded) { FNotificationInfo Info(CheckoutFailReason); Info.ExpireDuration = 3.0f; FSlateNotificationManager::Get().AddNotification(Info); } ReloadDocumentation(); }