Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added a download checkbox to the import dialog #6381

Merged
merged 12 commits into from
May 4, 2020
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve
- We added support for basic markdown in custom formatted previews [#6194](https://github.com/JabRef/jabref/issues/6194)
- We now show the number of items found and selected to import in the online search dialog. [#6248](https://github.com/JabRef/jabref/pull/6248)
- We created a new install screen for macOS. [#5759](https://github.com/JabRef/jabref/issues/5759)
- We implemented an option to download fulltext files while importing. [#6381](https://github.com/JabRef/jabref/pull/6381)

### Changed

Expand All @@ -26,6 +27,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve
- We changed the buttons for import/export/show all/reset of preferences to smaller icon buttons in the preferences dialog. [#6130](https://github.com/JabRef/jabref/pull/6130)
- We moved the functionality "Manage field names & content" from the "Library" menu to the "Edit" menu, because it affects the selected entries and not the whole library
- We merged the functionality "Append contents from a BibTeX library into the currently viewed library" into the "Import into database" functionality. Fixes [#6049](https://github.com/JabRef/jabref/issues/6049).
- We changed the directory where fulltext downloads are stored to the directory set in the import-tab in preferences. [#6381](https://github.com/JabRef/jabref/pull/6381)
- We improved the error message for invalid jstyles. [#6303](https://github.com/JabRef/jabref/issues/6303)

### Fixed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.jabref.logic.l10n.Localization;
import org.jabref.logic.net.URLDownload;
import org.jabref.logic.util.io.FileNameUniqueness;
import org.jabref.logic.util.io.FileUtil;
import org.jabref.logic.xmp.XmpPreferences;
import org.jabref.logic.xmp.XmpUtilWriter;
import org.jabref.model.database.BibDatabaseContext;
Expand Down Expand Up @@ -415,6 +416,7 @@ public void download() {
LinkedFile newLinkedFile = LinkedFilesEditorViewModel.fromFile(destination, databaseContext.getFileDirectoriesAsPaths(filePreferences), externalFileTypes);
linkedFile.setLink(newLinkedFile.getLink());
linkedFile.setFileType(newLinkedFile.getFileType());
entry.addFile(0, newLinkedFile);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@btut Thanks for your implementation. I fear this addition here now duplicates the file if you right-click an online link and select "Download". Can you please double check this.
(In case this is really an issue, one option would be to use prepareDownloadTask below in the importer. Then you can also display a nice progress window for the downloads.)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point @tobiasdiez. I checked, and this does indeed duplicate the entry.
the progress-bar next to the link entry does look very nice indeed and would probably be good to have when working with large files or slow connections. I can imagine people thinking it didn't work because the file doesn't show up immediately.

I don't understand your suggestion of using prepareDownloadTask, though. Isn't that implicitly used by the download() method anyway?

As far as I can tell the right-click -> download menu item just calls the download-function of the LinkedFileViewModel. In that case, the LInkedFileViewModel is the one that is actually displayed. Therefore the progress bar can be shown. However; I have no access to that object, correct? I have the LinkedFileViewModel that I use for the download, but I cannot add it to any LinkedFilesEditorViewModel to be displayed.

One quick fix I could think of would be to keep the online-link even for right-click->download actions or delete the link for both methods. There would still be no progress bar for the imported files, but at least it stops duplication.

The best fix (IMO) would be to gain somehow access to the actual LinkedFileViewModel of the online link after the import and call download from there, basically imitating a user right-clicking the item and selecting download. I would need some pointers on how to get that access though.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess it would work if I moved the downloadProgressProperty from LinkedFileViewModel to LinkedFile. That object lives in the BibEntry and (AFAICT) and would be the same both for the importer and the LinkedFileViewModel.
Would moving that property be an acceptable option?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@btut Have a look at the method addLinkedFileFromURL in DownloadFullTextAction, that solves a similar case
In the importer you would create a progressbar/dialog and bind it to the prepareDownloadTask.progressProperty

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That method just notifies the user after a successful download. I see no progress bar. My issue is not in getting the progress of the download, but where to display the progress bar. Just popping up a dialogue with a bar is no viable solution in my opinion. When I import an entry I don't want to watch a progress bar while most of the entry is already there, I want to start working with the entry.

As I said, a progress bar would be very helpful, but I don't think popping a dialogue (or remaining in the import dialogue as long as the files are not ready, if that is what you mean) would be a good idea. I like how the right-click -> download action puts a small progress bar in the file entry itself. I can work with the bib entry, and if I try to open up the file, I see the progress bar.

However, since there is no access to the linked files editor from the importer, I cannot add the progress bar there. I think moving the download-related properties to LinkedFile would work quite well; I just don't know if it is compliant with how JabRef is developed.

One more thought on that addLinkedFileFromURL method you mentioned. It seems to share a lot of code with the download method of LinkedFileViewModel. If we move the properties I was talking about to the LinkedFile class; the LinkedFilesEditorViewModel would always correctly display the progress no matter where the download() method of LinkedFileViewModel would be called from. In that case, I would suggest calling the download Method from addLinkedFileFromURL to reduce code duplication and have a unique way of handling file downloads and showing it's progress.

Copy link
Member

@tobiasdiez tobiasdiez May 6, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, you convinced me, let's continue trying to do it in the background. If users experience problems, then we can investigate of how to best solve them and maybe go back to the blocking-ui strategy if nothing else works.

I noticed in the code (never while running JabRef and I cannot find any piece of code where it is actually used and even setting it's visibility to true does not show anything, maybe it's just dead code) that there is a progress bar in the right end of the status line

The old JabRef 3.x contained a status bar, which was removed since it wasn't used that much. So if there is still code related to this in the code base, then it is definitely dead code and can safely be removed. May I ask you to open a PR removing it? Thanks!

If that progress bar is dead code, I guess there was one at some point which was then removed, so you probably didn't like it. In that case, what do you think about having a small loading circle or a download icon in the top right, next to the menu bar? It could be turning/greyed out while downloading and a tooltip could display the progress of single files.

I like it! Very good idea. Might also be helpful to show progress for other actions as well (e.g. cleanup). One possibility to implement this would be adding an ObservableList of open tasks (including their progress) in StatusManager.

I guess the most pressing thing would be to fix the download right-click, and then afterwards worry about a nice progress display.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like it! Very good idea. Might also be helpful to show progress for other actions as well (e.g. cleanup). One possibility to implement this would be adding an ObservableList of open tasks (including their progress) in StatusManager.

That was the basic idea. BackgroundTask already has a workDonePercentageProperty, so all thats left to do is build a list of them and display it.
I have a couple of questions though:

  • The list of tasks would consist of a text label and a progress bar. BackgroundTask has a StringProperty message, I would use that one for the label. Unfortunately, the message does not seem to be set by the file downloaders. It is only set by the UnlinkedFilesCrawler. Did I miss something? If not, I would add a message (something like "Downloading file from "). For other tasks that use BackgroundTask we could either add a message parameter to the Background-Task constructor to force users to provide a sensible message, or we could set the default message to " in progress", so at the very least it says "BackgroundTask" in progress, for child-classes it would take the child's name and produce a somewhat usable label.

  • I can't seem to find the fxml file for the main JabRef frame where I would add the status wheel. Could you please help me out here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@btut The StringProperty is as the name implies a property that you can set for the task.In the File Download task you can simply set it to (calling setValue) on it with a text. e.g. "Downloading files".
As this property is exposed you can bind a label to it.
For a quick understanding what those properties are and how they work:
https://www.dummies.com/programming/java/javafx-binding-properties/

JabRefFrame has no fxml. Have a look at the init/ initLayout Method().
You can always add

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the input. I already started drafting some code and came by the properties and did some reading.
I implemented a simple dialog using the TaskProgressView from javafx control. That looks pretty nice IMO. Unfortunately (and quite obviously) it works on a list of javafx tasks, not JabRef BackgroundTasks.
I noticed that BackgroundTasks are converted to javafx tasks anyways, so when that is done I enlist them in an ObservableList I created in StateManager. The tasks show up, but the bindings do not seem to work, I still have to figure out why. So right now, one can see a list of tasks, but the tasks have no title, no message and an infinite progress bar.

If you don't mind I would like to open a WIP PR and if I need some help I would start a discussion there. Is that ok?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, go ahead with a PR, makes it easier to help for specific questions

});
downloadProgress.bind(downloadTask.workDonePercentageProperty());
taskExecutor.execute(downloadTask);
Expand All @@ -431,8 +433,9 @@ public BackgroundTask<Path> prepareDownloadTask(Path targetDirectory, URLDownloa
String suggestedTypeName = externalFileType.getName();
linkedFile.setFileType(suggestedTypeName);
String suggestedName = linkedFileHandler.getSuggestedFileName(externalFileType.getExtension());
suggestedName = FileNameUniqueness.getNonOverWritingFileName(targetDirectory, suggestedName);
return targetDirectory.resolve(suggestedName);
String fulltextDir = FileUtil.createDirNameFromPattern(databaseContext.getDatabase(), entry, filePreferences.getFileDirPattern());
suggestedName = FileNameUniqueness.getNonOverWritingFileName(targetDirectory.resolve(fulltextDir), suggestedName);
return targetDirectory.resolve(fulltextDir).resolve(suggestedName);
})
.then(destination -> new FileDownloadTask(urlDownload.getSource(), destination))
.onFailure(exception -> dialogService.showErrorDialogAndWait("Download failed", exception));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ButtonType?>
<?import javafx.scene.control.DialogPane?>
<?import javafx.scene.control.Label?>
Expand Down Expand Up @@ -38,6 +39,7 @@
<Label fx:id="selectedItems" GridPane.rowIndex="1" GridPane.columnIndex="1"/>
</GridPane>
</HBox>
<CheckBox fx:id="downloadLinkedOnlineFiles" text="%Download linked online files"/>
</VBox>
</content>
<ButtonType fx:id="importButton" buttonData="OK_DONE" text="%Import entries"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.Tooltip;
Expand Down Expand Up @@ -50,6 +51,7 @@ public class ImportEntriesDialog extends BaseDialog<Boolean> {
public ButtonType importButton;
public Label totalItems;
public Label selectedItems;
public CheckBox downloadLinkedOnlineFiles;
private final BackgroundTask<ParserResult> task;
private ImportEntriesViewModel viewModel;
@Inject private TaskExecutor taskExecutor;
Expand Down Expand Up @@ -77,9 +79,11 @@ public ImportEntriesDialog(BibDatabaseContext database, BackgroundTask<ParserRes
Button btn = (Button) this.getDialogPane().lookupButton(importButton);
btn.disableProperty().bind(booleanBind);

downloadLinkedOnlineFiles.setSelected(preferences.getFilePreferences().getDownloadLinkedFiles());

setResultConverter(button -> {
if (button == importButton) {
viewModel.importEntries(entriesListView.getCheckModel().getCheckedItems());
viewModel.importEntries(entriesListView.getCheckModel().getCheckedItems(), downloadLinkedOnlineFiles.isSelected());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As JabRef uses the MVVM approach, the ideal solution would be to add a property for the checkbox in the viewmodel and bind that to the checkbox's selected item property. That should have ideally also be already the case for the checkedItems.. Don't know why it's not done.

https://devdocs.jabref.org/readings-on-coding/javafx

} else {
dialogService.notify(Localization.lang("Import canceled"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.jabref.gui.duplicationFinder.DuplicateResolverDialog;
import org.jabref.gui.externalfiles.ImportHandler;
import org.jabref.gui.externalfiletype.ExternalFileTypes;
import org.jabref.gui.fieldeditors.LinkedFileViewModel;
import org.jabref.gui.groups.GroupTreeNodeViewModel;
import org.jabref.gui.groups.UndoableAddOrRemoveGroup;
import org.jabref.gui.undo.NamedCompound;
Expand All @@ -31,6 +32,7 @@
import org.jabref.model.database.BibDatabaseContext;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.BibtexString;
import org.jabref.model.entry.LinkedFile;
import org.jabref.model.groups.GroupTreeNode;
import org.jabref.model.metadata.MetaData;
import org.jabref.model.util.FileUpdateMonitor;
Expand All @@ -44,6 +46,7 @@ public class ImportEntriesViewModel extends AbstractViewModel {
private static final Logger LOGGER = LoggerFactory.getLogger(ImportEntriesViewModel.class);

private final StringProperty message;
private final TaskExecutor taskExecutor;
private final BibDatabaseContext databaseContext;
private final DialogService dialogService;
private final UndoManager undoManager;
Expand All @@ -58,6 +61,7 @@ public class ImportEntriesViewModel extends AbstractViewModel {
* @param task the task executed for parsing the selected files(s).
*/
public ImportEntriesViewModel(BackgroundTask<ParserResult> task, TaskExecutor taskExecutor, BibDatabaseContext databaseContext, DialogService dialogService, UndoManager undoManager, PreferencesService preferences, StateManager stateManager, FileUpdateMonitor fileUpdateMonitor) {
this.taskExecutor = taskExecutor;
this.databaseContext = databaseContext;
this.dialogService = dialogService;
this.undoManager = undoManager;
Expand Down Expand Up @@ -99,7 +103,7 @@ public boolean hasDuplicate(BibEntry entry) {
*
* @param entriesToImport subset of the entries contained in parserResult
*/
public void importEntries(List<BibEntry> entriesToImport) {
public void importEntries(List<BibEntry> entriesToImport, boolean downloadFiles) {
// Check if we are supposed to warn about duplicates.
// If so, then see if there are duplicates, and warn if yes.
if (preferences.shouldWarnAboutDuplicatesForImport()) {
Expand All @@ -126,6 +130,15 @@ public void importEntries(List<BibEntry> entriesToImport) {
buildImportHandlerThenImportEntries(entriesToImport);
}

if (downloadFiles) {
for (BibEntry bibEntry : entriesToImport) {
for (LinkedFile linkedFile : bibEntry.getFiles()) {
LinkedFileViewModel linkedFileViewModel = new LinkedFileViewModel(linkedFile, bibEntry, databaseContext, taskExecutor, dialogService, preferences.getXMPPreferences(), preferences.getFilePreferences(), ExternalFileTypes.getInstance());
linkedFileViewModel.download();
}
}
}

NamedCompound namedCompound = new NamedCompound(Localization.lang("Import file"));
namedCompound.addEdit(new UndoableInsertEntries(databaseContext.getDatabase(), entriesToImport));

Expand Down
2 changes: 2 additions & 0 deletions src/main/java/org/jabref/gui/preferences/ImportTab.fxml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
Expand Down Expand Up @@ -30,5 +31,6 @@
<Label text="%File directory pattern" GridPane.rowIndex="1"/>
<TextField fx:id="fileDirPattern" GridPane.columnIndex="1" GridPane.rowIndex="1"
prefWidth="300" minWidth="300" maxWidth="300"/>
<CheckBox fx:id="downloadLinkedFiles" text="%Download linked online files" GridPane.rowIndex="2"/>
</GridPane>
</fx:root>
3 changes: 3 additions & 0 deletions src/main/java/org/jabref/gui/preferences/ImportTabView.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.jabref.gui.preferences;

import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;

Expand All @@ -13,6 +14,7 @@ public class ImportTabView extends AbstractPreferenceTabView<ImportTabViewModel>

@FXML private ComboBox<String> fileNamePattern;
@FXML private TextField fileDirPattern;
@FXML private CheckBox downloadLinkedFiles;

public ImportTabView(JabRefPreferences preferences) {
this.preferences = preferences;
Expand All @@ -28,6 +30,7 @@ public void initialize() {
fileNamePattern.valueProperty().bindBidirectional(viewModel.fileNamePatternProperty());
fileNamePattern.itemsProperty().bind(viewModel.defaultFileNamePatternsProperty());
fileDirPattern.textProperty().bindBidirectional(viewModel.fileDirPatternProperty());
downloadLinkedFiles.selectedProperty().bindBidirectional(viewModel.downloadLinkedFilesProperty());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import java.util.ArrayList;
import java.util.List;

import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
Expand All @@ -19,6 +21,7 @@ public class ImportTabViewModel implements PreferenceTabViewModel {
private final ListProperty<String> defaultFileNamePatternsProperty = new SimpleListProperty<>(FXCollections.observableArrayList(DEFAULT_FILENAME_PATTERNS));
private final StringProperty fileNamePatternProperty = new SimpleStringProperty();
private final StringProperty fileDirPatternProperty = new SimpleStringProperty();
private final BooleanProperty downloadLinkedFilesProperty = new SimpleBooleanProperty();

private final DialogService dialogService;
private final JabRefPreferences preferences;
Expand All @@ -32,12 +35,14 @@ public ImportTabViewModel(DialogService dialogService, JabRefPreferences prefere
public void setValues() {
fileNamePatternProperty.setValue(preferences.get(JabRefPreferences.IMPORT_FILENAMEPATTERN));
fileDirPatternProperty.setValue(preferences.get(JabRefPreferences.IMPORT_FILEDIRPATTERN));
downloadLinkedFilesProperty.setValue(preferences.getBoolean(JabRefPreferences.DOWNLOAD_LINKED_FILES));
}

@Override
public void storeSettings() {
preferences.put(JabRefPreferences.IMPORT_FILENAMEPATTERN, fileNamePatternProperty.getValue());
preferences.put(JabRefPreferences.IMPORT_FILEDIRPATTERN, fileDirPatternProperty.getValue());
preferences.putBoolean(JabRefPreferences.DOWNLOAD_LINKED_FILES, downloadLinkedFilesProperty.getValue());
}

@Override
Expand All @@ -55,4 +60,6 @@ public List<String> getRestartWarnings() {
public StringProperty fileNamePatternProperty() { return fileNamePatternProperty; }

public StringProperty fileDirPatternProperty() { return fileDirPatternProperty; }

public BooleanProperty downloadLinkedFilesProperty() { return downloadLinkedFilesProperty; }
}
6 changes: 6 additions & 0 deletions src/main/java/org/jabref/model/entry/BibEntry.java
Original file line number Diff line number Diff line change
Expand Up @@ -948,6 +948,12 @@ public Optional<FieldChange> addFile(LinkedFile file) {
return setFiles(linkedFiles);
}

public Optional<FieldChange> addFile(int index, LinkedFile file) {
List<LinkedFile> linkedFiles = getFiles();
linkedFiles.add(index, file);
return setFiles(linkedFiles);
}

public ObservableMap<Field, String> getFieldsObservable() {
return fields;
}
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/org/jabref/model/metadata/FilePreferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,20 @@ public class FilePreferences {
private final boolean bibLocationAsPrimary;
private final String fileNamePattern;
private final String fileDirPattern;
private final boolean downloadLinkedFiles;

public FilePreferences(String user,
String mainFileDirectory,
boolean bibLocationAsPrimary,
String fileNamePattern,
String fileDirPattern) {
String fileDirPattern,
boolean downloadLinkedFiles) {
this.user = user;
this.mainFileDirectory = mainFileDirectory;
this.bibLocationAsPrimary = bibLocationAsPrimary;
this.fileNamePattern = fileNamePattern;
this.fileDirPattern = fileDirPattern;
this.downloadLinkedFiles = downloadLinkedFiles;
}

public String getUser() {
Expand All @@ -48,4 +51,6 @@ public String getFileNamePattern() {
public String getFileDirPattern() {
return fileDirPattern;
}

public boolean getDownloadLinkedFiles() { return downloadLinkedFiles; }
}
6 changes: 5 additions & 1 deletion src/main/java/org/jabref/preferences/JabRefPreferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ public class JabRefPreferences implements PreferencesService {
public static final String CLEANUP_FORMATTERS = "CleanUpFormatters";
public static final String IMPORT_FILENAMEPATTERN = "importFileNamePattern";
public static final String IMPORT_FILEDIRPATTERN = "importFileDirPattern";
public static final String DOWNLOAD_LINKED_FILES = "downloadLinkedFiles";
public static final String NAME_FORMATTER_VALUE = "nameFormatterFormats";
public static final String NAME_FORMATER_KEY = "nameFormatterNames";
public static final String PUSH_TO_APPLICATION = "pushToApplication";
Expand Down Expand Up @@ -629,6 +630,8 @@ private JabRefPreferences() {
defaults.put(IMPORT_FILENAMEPATTERN, ImportTabViewModel.DEFAULT_FILENAME_PATTERNS[1]);
// Default empty String to be backwards compatible
defaults.put(IMPORT_FILEDIRPATTERN, "");
// Don't download files by default
defaults.put(DOWNLOAD_LINKED_FILES, false);

customImports = new CustomImportList(this);

Expand Down Expand Up @@ -1201,7 +1204,8 @@ public FilePreferences getFilePreferences() {
get(MAIN_FILE_DIRECTORY),
getBoolean(BIB_LOC_AS_PRIMARY_DIR),
get(IMPORT_FILENAMEPATTERN),
get(IMPORT_FILEDIRPATTERN));
get(IMPORT_FILEDIRPATTERN),
getBoolean(DOWNLOAD_LINKED_FILES));
}

@Override
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/l10n/JabRef_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1902,6 +1902,7 @@ Import\ canceled=Import canceled
Select\ all\ new\ entries=Select all new entries
Total\ items\ found\:=Total items found:
Selected\ items\:=Selected items:
Download\ linked\ online\ files=Download linked online files
Select\ the\ entries\ to\ be\ imported\:=Select the entries to be imported\:
Add\ new\ String=Add new String
Remove\ selected\ Strings=Remove selected Strings
Expand Down