mirror of
https://github.com/mirror/jdownloader.git
synced 2025-02-17 02:37:56 +00:00
*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:
parent
a0570b9cc9
commit
22f8738d84
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user