*General*

- PackageController: merge: make use of MergePackageSettings, moved "merge multiple packages' copmments" functionality into package merge function

git-svn-id: svn://svn.jdownloader.org/jdownloader/trunk@49566 ebf7c1c2-ba36-0410-9fe8-c592906822b4

Former-commit-id: d6980cd326ddb709daf7ae0576fee2b6cb610b1e
This commit is contained in:
psp 2024-08-09 12:05:15 +00:00
parent a0570b9cc9
commit 22f8738d84
3 changed files with 84 additions and 40 deletions

View File

@ -3,6 +3,7 @@ package jd.controlling.packagecontroller;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
@ -18,6 +19,8 @@ import javax.swing.SwingUtilities;
import org.appwork.utils.DebugMode;
import org.appwork.utils.ModifyLock;
import org.appwork.utils.Regex;
import org.appwork.utils.StringUtils;
import org.appwork.utils.event.queue.Queue;
import org.appwork.utils.event.queue.Queue.QueuePriority;
import org.appwork.utils.event.queue.QueueAction;
@ -30,6 +33,9 @@ import org.jdownloader.gui.views.components.packagetable.PackageControllerSelect
import org.jdownloader.gui.views.components.packagetable.dragdrop.MergePosition;
import org.jdownloader.logging.LogController;
import jd.controlling.linkcrawler.CrawledPackage;
import jd.plugins.FilePackage;
public abstract class PackageController<PackageType extends AbstractPackageNode<ChildType, PackageType>, ChildType extends AbstractPackageChildrenNode<PackageType>> implements AbstractNodeNotifier {
protected final AtomicLong structureChanged = new AtomicLong(System.currentTimeMillis());
protected final AtomicLong childrenChanged = new AtomicLong(System.currentTimeMillis());
@ -578,18 +584,23 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
* // TODO: Make use of this class
*/
public final static class MergePackageSettings {
private MergePosition mergeposition = null;
private MergePosition mergeposition = MergePosition.BOTTOM;
private Boolean mergePackageComments = null;
public MergePackageSettings() {
}
public MergePosition getMergeposition() {
public MergePosition getMergePosition() {
return mergeposition;
}
public void setMergeposition(MergePosition mergeposition) {
this.mergeposition = mergeposition;
public void setMergePosition(MergePosition mergeposition) {
if (mergeposition == null) {
/* Default */
this.mergeposition = MergePosition.BOTTOM;
} else {
this.mergeposition = mergeposition;
}
}
public Boolean getMergePackageComments() {
@ -601,11 +612,11 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
}
}
public void merge(final PackageType dest, final java.util.List<PackageType> srcPkgs, final MergePosition mergeposition) {
merge(dest, null, srcPkgs, mergeposition);
public void merge(final PackageType dest, final List<PackageType> srcPkgs, final MergePackageSettings mergesettings) {
merge(dest, null, srcPkgs, mergesettings);
}
public void merge(final PackageType dest, final java.util.List<ChildType> srcLinks, final java.util.List<PackageType> srcPkgs, final MergePosition mergeposition) {
public void merge(final PackageType dest, final List<ChildType> srcLinks, final List<PackageType> srcPkgs, final MergePackageSettings mergesettings) {
if (dest == null) {
return;
} else if (srcLinks == null && srcPkgs == null) {
@ -615,7 +626,7 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
@Override
protected Void run() throws RuntimeException {
int positionMerge = 0;
switch (mergeposition) {
switch (mergesettings.getMergePosition()) {
case BOTTOM:
positionMerge = dest.getChildren().size();
break;
@ -634,7 +645,8 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
}
}
if (srcPkgs != null) {
for (PackageType pkg : srcPkgs) {
final HashSet<String> commentDups = new HashSet<String>();
for (final PackageType pkg : srcPkgs) {
/* move links from srcPkgs to dest */
int size = pkg.getChildren().size();
moveOrAddAt(dest, pkg.getChildren(), positionMerge);
@ -643,6 +655,41 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
positionMerge += size;
}
}
if (Boolean.TRUE.equals(mergesettings.getMergePackageComments())) {
/* Merge package comments */
/* Place main package at beginning of list so that comment of it is placed first in our merged comment string. */
final StringBuilder sb = new StringBuilder();
srcPkgs.add(0, dest);
for (final PackageType pkg : srcPkgs) {
final String comment;
if (pkg instanceof CrawledPackage) {
comment = ((CrawledPackage) pkg).getComment();
} else {
comment = ((FilePackage) pkg).getComment();
}
if (StringUtils.isEmpty(comment)) {
continue;
}
final String[] commentLines = Regex.getLines(comment);
for (final String commentLine : commentLines) {
if (!StringUtils.isEmpty(commentLine) && commentDups.add(commentLine)) {
if (sb.length() > 0) {
sb.append("\r\n");
}
sb.append(commentLine);
}
}
}
final String mergedComments = sb.toString();
if (!StringUtils.isEmpty(mergedComments)) {
/* Set new comment */
if (dest instanceof CrawledPackage) {
((CrawledPackage) dest).setComment(mergedComments);
} else {
((FilePackage) dest).setComment(mergedComments);
}
}
}
}
return null;
}
@ -958,7 +1005,7 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
});
}
public void move(final java.util.List<PackageType> srcPkgs, final PackageType afterDest) {
public void move(final List<PackageType> srcPkgs, final PackageType afterDest) {
if (srcPkgs == null || srcPkgs.size() == 0) {
return;
}
@ -981,7 +1028,7 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
});
}
public void moveAfter(final java.util.List<ChildType> srcLinks, final PackageType dstPkg, final ChildType after) {
public void moveAfter(final List<ChildType> srcLinks, final PackageType dstPkg, final ChildType after) {
if (dstPkg == null || srcLinks == null || srcLinks.size() == 0) {
return;
}
@ -999,7 +1046,7 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
});
}
public void moveBefore(final java.util.List<ChildType> srcLinks, final PackageType dstPkg, final ChildType before) {
public void moveBefore(final List<ChildType> srcLinks, final PackageType dstPkg, final ChildType before) {
if (dstPkg == null || srcLinks == null || srcLinks.size() == 0) {
return;
}
@ -1053,7 +1100,7 @@ public abstract class PackageController<PackageType extends AbstractPackageNode<
}
@Deprecated
public void move(final java.util.List<ChildType> srcLinks, final PackageType dstPkg, final ChildType afterLink) {
public void move(final List<ChildType> srcLinks, final PackageType dstPkg, final ChildType afterLink) {
moveAfter(srcLinks, dstPkg, afterLink);
}

View File

@ -15,10 +15,6 @@ import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.TransferHandler;
import jd.controlling.packagecontroller.AbstractNode;
import jd.controlling.packagecontroller.AbstractPackageChildrenNode;
import jd.controlling.packagecontroller.AbstractPackageNode;
import org.appwork.exceptions.WTFException;
import org.appwork.scheduler.DelayedRunnable;
import org.appwork.utils.event.queue.Queue.QueuePriority;
@ -27,6 +23,11 @@ import org.jdownloader.gui.views.SelectionInfo;
import org.jdownloader.gui.views.SelectionInfo.PackageView;
import org.jdownloader.gui.views.components.packagetable.PackageControllerTable;
import jd.controlling.packagecontroller.AbstractNode;
import jd.controlling.packagecontroller.AbstractPackageChildrenNode;
import jd.controlling.packagecontroller.AbstractPackageNode;
import jd.controlling.packagecontroller.PackageController.MergePackageSettings;
public abstract class PackageControllerTableTransferHandler<PackageType extends AbstractPackageNode<ChildrenType, PackageType>, ChildrenType extends AbstractPackageChildrenNode<PackageType>> extends TransferHandler {
/**
*
@ -88,13 +89,13 @@ public abstract class PackageControllerTableTransferHandler<PackageType extends
protected final WeakHashMap<Transferable, Map<Object, Object>> transferableCache = new WeakHashMap<Transferable, Map<Object, Object>>();
protected final DelayedRunnable transferableCacheCleanup = new DelayedRunnable(10000) {
@Override
public void delayedrun() {
synchronized (transferableCache) {
transferableCache.size();
}
}
};
@Override
public void delayedrun() {
synchronized (transferableCache) {
transferableCache.size();
}
}
};
protected boolean isDataFlavorSupported(TransferSupport support, DataFlavor flavor) {
try {
@ -365,12 +366,18 @@ public abstract class PackageControllerTableTransferHandler<PackageType extends
table.getController().getQueue().add(new QueueAction<Void, RuntimeException>(prio) {
@Override
protected Void run() throws RuntimeException {
final MergePackageSettings mergesettings = new MergePackageSettings();
if (((PackageType) element).getCurrentSorter() == null) {
table.getController().merge((PackageType) element, links, packages, org.jdownloader.settings.staticreferences.CFG_LINKCOLLECTOR.DO_MERGE_TOP_BOTTOM.isEnabled() ? MergePosition.BOTTOM : MergePosition.TOP);
if (org.jdownloader.settings.staticreferences.CFG_LINKCOLLECTOR.DO_MERGE_TOP_BOTTOM.isEnabled()) {
mergesettings.setMergePosition(MergePosition.BOTTOM);
} else {
mergesettings.setMergePosition(MergePosition.TOP);
}
} else {
// we have a sorter.neither top nor bottom but sorted insert
table.getController().merge((PackageType) element, links, packages, MergePosition.SORTED);
mergesettings.setMergePosition(MergePosition.SORTED);
}
table.getController().merge((PackageType) element, links, packages, mergesettings);
return null;
}
});

View File

@ -7,7 +7,6 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.appwork.utils.StringUtils;
import org.appwork.utils.event.queue.QueueAction;
import org.jdownloader.controlling.contextmenu.ActionContext;
import org.jdownloader.controlling.contextmenu.CustomizableTableContextAppAction;
@ -16,13 +15,11 @@ import org.jdownloader.gui.IconKey;
import org.jdownloader.gui.translate._GUI;
import org.jdownloader.gui.views.SelectionInfo;
import org.jdownloader.gui.views.SelectionInfo.PackageView;
import org.jdownloader.gui.views.components.packagetable.dragdrop.MergePosition;
import jd.controlling.linkcrawler.CrawledPackage;
import jd.controlling.packagecontroller.AbstractPackageChildrenNode;
import jd.controlling.packagecontroller.AbstractPackageNode;
import jd.controlling.packagecontroller.PackageController;
import jd.plugins.FilePackage;
import jd.controlling.packagecontroller.PackageController.MergePackageSettings;
public class MergeSameNamedPackagesAction<PgkType extends AbstractPackageNode<ChildType, PgkType>, ChildType extends AbstractPackageChildrenNode<PgkType>> extends CustomizableTableContextAppAction implements ActionContext {
private boolean caseInsensitive = true;
@ -96,23 +93,16 @@ public class MergeSameNamedPackagesAction<PgkType extends AbstractPackageNode<Ch
final Iterator<Entry<String, List<PgkType>>> dupes_iterator = dupes.entrySet().iterator();
while (dupes_iterator.hasNext()) {
final Entry<String, List<PgkType>> entry = dupes_iterator.next();
// final String compareString = entry.getKey();
final List<PgkType> thisdupes = entry.getValue();
if (thisdupes.size() == 1) {
/* We need at least two packages to be able to merge them. */
continue;
}
final String mergedComments = org.jdownloader.gui.views.linkgrabber.contextmenu.MergeToPackageAction.mergePackageComments(thisdupes);
/* Pick package to merge the others into */
final PgkType target = thisdupes.remove(0);
if (!StringUtils.isEmpty(mergedComments)) {
if (target instanceof CrawledPackage) {
((CrawledPackage) target).setComment(mergedComments);
} else {
((FilePackage) target).setComment(mergedComments);
}
}
controller.merge(target, thisdupes, MergePosition.BOTTOM);
final MergePackageSettings mergesettings = new MergePackageSettings();
mergesettings.setMergePackageComments(true);
controller.merge(target, thisdupes, mergesettings);
}
return null;
}