mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 16:06:15 +00:00
Merge branch 'develop' of github.com:sleuthkit/autopsy into 7212-xleappSources
This commit is contained in:
commit
07146d5792
@ -277,17 +277,20 @@ public final class DiscoveryEventUtils {
|
|||||||
public static final class MiniTimelineResultEvent {
|
public static final class MiniTimelineResultEvent {
|
||||||
|
|
||||||
private final List<MiniTimelineResult> results = new ArrayList<>();
|
private final List<MiniTimelineResult> results = new ArrayList<>();
|
||||||
|
private final String domain;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new MiniTimelineResultEvent.
|
* Construct a new MiniTimelineResultEvent.
|
||||||
*
|
*
|
||||||
* @param results The list of MiniTimelineResults contained in this
|
* @param results The list of MiniTimelineResults contained in this
|
||||||
* event.
|
* event.
|
||||||
|
* @param domain The domain the results are for.
|
||||||
*/
|
*/
|
||||||
public MiniTimelineResultEvent(List<MiniTimelineResult> results) {
|
public MiniTimelineResultEvent(List<MiniTimelineResult> results, String domain) {
|
||||||
if (results != null) {
|
if (results != null) {
|
||||||
this.results.addAll(results);
|
this.results.addAll(results);
|
||||||
}
|
}
|
||||||
|
this.domain = domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -298,6 +301,15 @@ public final class DiscoveryEventUtils {
|
|||||||
public List<MiniTimelineResult> getResultList() {
|
public List<MiniTimelineResult> getResultList() {
|
||||||
return Collections.unmodifiableList(results);
|
return Collections.unmodifiableList(results);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the domain this list of results is for.
|
||||||
|
*
|
||||||
|
* @return The domain the list of results is for.
|
||||||
|
*/
|
||||||
|
public String getDomain() {
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -172,6 +172,7 @@ public final class DiscoveryTopComponent extends TopComponent {
|
|||||||
DiscoveryEventUtils.getDiscoveryEventBus().unregister(resultsPanel);
|
DiscoveryEventUtils.getDiscoveryEventBus().unregister(resultsPanel);
|
||||||
DiscoveryEventUtils.getDiscoveryEventBus().unregister(detailsPanel);
|
DiscoveryEventUtils.getDiscoveryEventBus().unregister(detailsPanel);
|
||||||
if (detailsPanel instanceof DomainDetailsPanel) {
|
if (detailsPanel instanceof DomainDetailsPanel) {
|
||||||
|
((DomainDetailsPanel) detailsPanel).unregister();
|
||||||
selectedDomainTabName = ((DomainDetailsPanel) detailsPanel).getSelectedTabName();
|
selectedDomainTabName = ((DomainDetailsPanel) detailsPanel).getSelectedTabName();
|
||||||
}
|
}
|
||||||
resetBottomComponent();
|
resetBottomComponent();
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
<Properties>
|
<Properties>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[0, 0]"/>
|
<Dimension value="[0, 0]"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[0, 0]"/>
|
<Dimension value="[0, 0]"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="enabled" type="boolean" value="false"/>
|
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
|
@ -39,7 +39,6 @@ final class DomainDetailsPanel extends JPanel {
|
|||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private ArtifactsWorker singleArtifactDomainWorker;
|
private ArtifactsWorker singleArtifactDomainWorker;
|
||||||
private MiniTimelineWorker miniTimelineWorker;
|
|
||||||
private String domain;
|
private String domain;
|
||||||
private String selectedTabName = null;
|
private String selectedTabName = null;
|
||||||
|
|
||||||
@ -51,7 +50,9 @@ final class DomainDetailsPanel extends JPanel {
|
|||||||
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
||||||
DomainDetailsPanel() {
|
DomainDetailsPanel() {
|
||||||
initComponents();
|
initComponents();
|
||||||
jTabbedPane1.add(Bundle.DomainDetailsPanel_miniTimelineTitle_text(), new MiniTimelinePanel());
|
MiniTimelinePanel timelinePanel = new MiniTimelinePanel();
|
||||||
|
DiscoveryEventUtils.getDiscoveryEventBus().register(timelinePanel);
|
||||||
|
jTabbedPane1.add(Bundle.DomainDetailsPanel_miniTimelineTitle_text(), timelinePanel);
|
||||||
for (BlackboardArtifact.ARTIFACT_TYPE type : SearchData.Type.DOMAIN.getArtifactTypes()) {
|
for (BlackboardArtifact.ARTIFACT_TYPE type : SearchData.Type.DOMAIN.getArtifactTypes()) {
|
||||||
jTabbedPane1.add(type.getDisplayName(), new DomainArtifactsTabPanel(type));
|
jTabbedPane1.add(type.getDisplayName(), new DomainArtifactsTabPanel(type));
|
||||||
}
|
}
|
||||||
@ -141,14 +142,9 @@ final class DomainDetailsPanel extends JPanel {
|
|||||||
* mini timeline view to populate.
|
* mini timeline view to populate.
|
||||||
*/
|
*/
|
||||||
private void runMiniTimelineWorker(MiniTimelinePanel miniTimelinePanel) {
|
private void runMiniTimelineWorker(MiniTimelinePanel miniTimelinePanel) {
|
||||||
if (miniTimelineWorker != null && !miniTimelineWorker.isDone()) {
|
|
||||||
miniTimelineWorker.cancel(true);
|
|
||||||
}
|
|
||||||
if (miniTimelinePanel.getStatus() == DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED) {
|
if (miniTimelinePanel.getStatus() == DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED) {
|
||||||
DiscoveryEventUtils.getDiscoveryEventBus().register(miniTimelinePanel);
|
miniTimelinePanel.setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus.POPULATING, domain);
|
||||||
miniTimelinePanel.setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus.POPULATING);
|
new MiniTimelineWorker(domain).execute();
|
||||||
miniTimelineWorker = new MiniTimelineWorker(domain);
|
|
||||||
miniTimelineWorker.execute();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +185,7 @@ final class DomainDetailsPanel extends JPanel {
|
|||||||
if (comp instanceof DomainArtifactsTabPanel) {
|
if (comp instanceof DomainArtifactsTabPanel) {
|
||||||
((DomainArtifactsTabPanel) comp).setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED);
|
((DomainArtifactsTabPanel) comp).setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED);
|
||||||
} else if (comp instanceof MiniTimelinePanel) {
|
} else if (comp instanceof MiniTimelinePanel) {
|
||||||
((MiniTimelinePanel) comp).setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED);
|
((MiniTimelinePanel) comp).setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED, domain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -228,4 +224,15 @@ final class DomainDetailsPanel extends JPanel {
|
|||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JTabbedPane jTabbedPane1;
|
private javax.swing.JTabbedPane jTabbedPane1;
|
||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unregister the MiniTimelinePanel from the event bus.
|
||||||
|
*/
|
||||||
|
void unregister() {
|
||||||
|
for (Component comp : jTabbedPane1.getComponents()) {
|
||||||
|
if (comp instanceof MiniTimelinePanel) {
|
||||||
|
DiscoveryEventUtils.getDiscoveryEventBus().unregister(comp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,13 +19,11 @@
|
|||||||
package org.sleuthkit.autopsy.discovery.ui;
|
package org.sleuthkit.autopsy.discovery.ui;
|
||||||
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import java.util.logging.Level;
|
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.event.ListSelectionEvent;
|
import javax.swing.event.ListSelectionEvent;
|
||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.sleuthkit.autopsy.contentviewers.artifactviewers.GeneralPurposeArtifactViewer;
|
import org.sleuthkit.autopsy.contentviewers.artifactviewers.GeneralPurposeArtifactViewer;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
||||||
import org.sleuthkit.autopsy.discovery.search.DiscoveryEventUtils;
|
import org.sleuthkit.autopsy.discovery.search.DiscoveryEventUtils;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
@ -41,7 +39,7 @@ final class MiniTimelinePanel extends javax.swing.JPanel {
|
|||||||
private final MiniTimelineArtifactListPanel artifactListPanel = new MiniTimelineArtifactListPanel();
|
private final MiniTimelineArtifactListPanel artifactListPanel = new MiniTimelineArtifactListPanel();
|
||||||
private DomainArtifactsTabPanel.ArtifactRetrievalStatus status = DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED;
|
private DomainArtifactsTabPanel.ArtifactRetrievalStatus status = DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED;
|
||||||
private AbstractArtifactDetailsPanel rightPanel = new GeneralPurposeArtifactViewer();
|
private AbstractArtifactDetailsPanel rightPanel = new GeneralPurposeArtifactViewer();
|
||||||
private static final Logger logger = Logger.getLogger(MiniTimelinePanel.class.getName());
|
private String selectedDomain = null;
|
||||||
private final ListSelectionListener artifactListener;
|
private final ListSelectionListener artifactListener;
|
||||||
private final ListSelectionListener dateListener;
|
private final ListSelectionListener dateListener;
|
||||||
|
|
||||||
@ -106,11 +104,13 @@ final class MiniTimelinePanel extends javax.swing.JPanel {
|
|||||||
/**
|
/**
|
||||||
* Manually set the status of the panel.
|
* Manually set the status of the panel.
|
||||||
*
|
*
|
||||||
* @param status The ArtifactRetrievalStatus of the panel.
|
* @param status The ArtifactRetrievalStatus of the panel
|
||||||
|
* @param domain The domain the panel is currently reflecting.
|
||||||
*/
|
*/
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
||||||
void setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus status) {
|
void setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus status, String domain) {
|
||||||
this.status = status;
|
this.status = status;
|
||||||
|
this.selectedDomain = domain;
|
||||||
if (status == DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED) {
|
if (status == DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED) {
|
||||||
artifactListPanel.clearList();
|
artifactListPanel.clearList();
|
||||||
dateListPanel.clearList();
|
dateListPanel.clearList();
|
||||||
@ -123,7 +123,6 @@ final class MiniTimelinePanel extends javax.swing.JPanel {
|
|||||||
removeAll();
|
removeAll();
|
||||||
add(new LoadingPanel(Bundle.MiniTimelinePanel_loadingPanel_details()));
|
add(new LoadingPanel(Bundle.MiniTimelinePanel_loadingPanel_details()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -135,23 +134,19 @@ final class MiniTimelinePanel extends javax.swing.JPanel {
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
void handleMiniTimelineResultEvent(DiscoveryEventUtils.MiniTimelineResultEvent miniTimelineResultEvent) {
|
void handleMiniTimelineResultEvent(DiscoveryEventUtils.MiniTimelineResultEvent miniTimelineResultEvent) {
|
||||||
SwingUtilities.invokeLater(() -> {
|
SwingUtilities.invokeLater(() -> {
|
||||||
dateListPanel.removeListSelectionListener(dateListener);
|
if (miniTimelineResultEvent.getDomain().equals(selectedDomain)) {
|
||||||
artifactListPanel.removeSelectionListener(artifactListener);
|
dateListPanel.removeListSelectionListener(dateListener);
|
||||||
dateListPanel.addArtifacts(miniTimelineResultEvent.getResultList());
|
artifactListPanel.removeSelectionListener(artifactListener);
|
||||||
status = DomainArtifactsTabPanel.ArtifactRetrievalStatus.POPULATED;
|
dateListPanel.addArtifacts(miniTimelineResultEvent.getResultList());
|
||||||
setEnabled(!dateListPanel.isEmpty());
|
status = DomainArtifactsTabPanel.ArtifactRetrievalStatus.POPULATED;
|
||||||
dateListPanel.addSelectionListener(dateListener);
|
setEnabled(!dateListPanel.isEmpty());
|
||||||
artifactListPanel.addSelectionListener(artifactListener);
|
dateListPanel.addSelectionListener(dateListener);
|
||||||
dateListPanel.selectFirst();
|
artifactListPanel.addSelectionListener(artifactListener);
|
||||||
removeAll();
|
dateListPanel.selectFirst();
|
||||||
add(mainSplitPane);
|
removeAll();
|
||||||
revalidate();
|
add(mainSplitPane);
|
||||||
repaint();
|
revalidate();
|
||||||
try {
|
repaint();
|
||||||
DiscoveryEventUtils.getDiscoveryEventBus().unregister(this);
|
|
||||||
} catch (IllegalArgumentException notRegistered) {
|
|
||||||
logger.log(Level.INFO, "Attempting to unregister mini timeline view which was not registered");
|
|
||||||
// attempting to remove a tab that was never registered
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ import org.sleuthkit.autopsy.discovery.search.DomainSearch;
|
|||||||
/**
|
/**
|
||||||
* SwingWorker to retrieve a list of artifacts for a specified type and domain.
|
* SwingWorker to retrieve a list of artifacts for a specified type and domain.
|
||||||
*/
|
*/
|
||||||
class MiniTimelineWorker extends SwingWorker<List<MiniTimelineResult>, Void> {
|
class MiniTimelineWorker extends SwingWorker<Void, Void> {
|
||||||
|
|
||||||
private final static Logger logger = Logger.getLogger(MiniTimelineWorker.class.getName());
|
private final static Logger logger = Logger.getLogger(MiniTimelineWorker.class.getName());
|
||||||
private final String domain;
|
private final String domain;
|
||||||
@ -51,12 +51,13 @@ class MiniTimelineWorker extends SwingWorker<List<MiniTimelineResult>, Void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<MiniTimelineResult> doInBackground() throws Exception {
|
protected Void doInBackground() throws Exception {
|
||||||
List<MiniTimelineResult> results = new ArrayList<>();
|
List<MiniTimelineResult> results = new ArrayList<>();
|
||||||
if (!StringUtils.isBlank(domain)) {
|
if (!StringUtils.isBlank(domain)) {
|
||||||
DomainSearch domainSearch = new DomainSearch();
|
DomainSearch domainSearch = new DomainSearch();
|
||||||
try {
|
try {
|
||||||
results.addAll(domainSearch.getAllArtifactsForDomain(Case.getCurrentCase().getSleuthkitCase(), domain));
|
results.addAll(domainSearch.getAllArtifactsForDomain(Case.getCurrentCase().getSleuthkitCase(), domain));
|
||||||
|
DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.MiniTimelineResultEvent(results, domain));
|
||||||
} catch (DiscoveryException ex) {
|
} catch (DiscoveryException ex) {
|
||||||
if (ex.getCause() instanceof InterruptedException) {
|
if (ex.getCause() instanceof InterruptedException) {
|
||||||
this.cancel(true);
|
this.cancel(true);
|
||||||
@ -66,22 +67,19 @@ class MiniTimelineWorker extends SwingWorker<List<MiniTimelineResult>, Void> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return results;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void done() {
|
protected void done() {
|
||||||
List<MiniTimelineResult> results = new ArrayList<>();
|
|
||||||
if (!isCancelled()) {
|
if (!isCancelled()) {
|
||||||
try {
|
try {
|
||||||
results.addAll(get());
|
get();
|
||||||
DiscoveryEventUtils.getDiscoveryEventBus().post(new DiscoveryEventUtils.MiniTimelineResultEvent(results));
|
|
||||||
} catch (InterruptedException | ExecutionException ex) {
|
} catch (InterruptedException | ExecutionException ex) {
|
||||||
logger.log(Level.SEVERE, "Exception while trying to get list of artifacts for Domain details for mini timeline view for domain: " + domain, ex);
|
logger.log(Level.SEVERE, "Exception while trying to get list of artifacts for Domain details for mini timeline view for domain: " + domain, ex);
|
||||||
} catch (CancellationException ignored) {
|
} catch (CancellationException ignored) {
|
||||||
//Worker was cancelled after previously finishing its background work, exception ignored to cut down on non-helpful logging
|
//Worker was cancelled after previously finishing its background work, exception ignored to cut down on non-helpful logging
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -284,7 +284,11 @@ class Ingester {
|
|||||||
//Make a SolrInputDocument out of the field map
|
//Make a SolrInputDocument out of the field map
|
||||||
SolrInputDocument updateDoc = new SolrInputDocument();
|
SolrInputDocument updateDoc = new SolrInputDocument();
|
||||||
for (String key : fields.keySet()) {
|
for (String key : fields.keySet()) {
|
||||||
updateDoc.addField(key, Chunker.sanitize((String)fields.get(key)).toString());
|
if (fields.get(key).getClass() == String.class) {
|
||||||
|
updateDoc.addField(key, Chunker.sanitize((String)fields.get(key)).toString());
|
||||||
|
} else {
|
||||||
|
updateDoc.addField(key, fields.get(key));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -62,8 +62,12 @@ class LanguageSpecificContentIndexingHelper {
|
|||||||
//Make a SolrInputDocument out of the field map
|
//Make a SolrInputDocument out of the field map
|
||||||
SolrInputDocument updateDoc = new SolrInputDocument();
|
SolrInputDocument updateDoc = new SolrInputDocument();
|
||||||
for (String key : fields.keySet()) {
|
for (String key : fields.keySet()) {
|
||||||
updateDoc.addField(key, Chunker.sanitize((String)fields.get(key)).toString());
|
if (fields.get(key).getClass() == String.class) {
|
||||||
}
|
updateDoc.addField(key, Chunker.sanitize((String)fields.get(key)).toString());
|
||||||
|
} else {
|
||||||
|
updateDoc.addField(key, fields.get(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
updateDoc.setField(Server.Schema.ID.toString(), Chunker.sanitize(MiniChunkHelper.getChunkIdString(baseChunkID)).toString());
|
updateDoc.setField(Server.Schema.ID.toString(), Chunker.sanitize(MiniChunkHelper.getChunkIdString(baseChunkID)).toString());
|
||||||
|
@ -628,9 +628,11 @@ def normalize_db_entry(line, files_table, vs_parts_table, vs_info_table, fs_info
|
|||||||
if legacy_artifact_id != 'NULL' and legacy_artifact_id in artifact_table.keys():
|
if legacy_artifact_id != 'NULL' and legacy_artifact_id in artifact_table.keys():
|
||||||
fields_list[6] = artifact_table[legacy_artifact_id]
|
fields_list[6] = artifact_table[legacy_artifact_id]
|
||||||
|
|
||||||
fields_list[1] = cleanupEventDescription(fields_list[1])
|
|
||||||
fields_list[2] = cleanupEventDescription(fields_list[2])
|
if fields_list[1] == fields_list[2] and fields_list[1] == fields_list[3]:
|
||||||
fields_list[3] = cleanupEventDescription(fields_list[3])
|
fields_list[1] = cleanupEventDescription(fields_list[1])
|
||||||
|
fields_list[2] = cleanupEventDescription(fields_list[2])
|
||||||
|
fields_list[3] = cleanupEventDescription(fields_list[3])
|
||||||
|
|
||||||
newLine = ('INSERT INTO "tsk_event_descriptions" VALUES(' + ','.join(fields_list[1:]) + ');') # remove report_id
|
newLine = ('INSERT INTO "tsk_event_descriptions" VALUES(' + ','.join(fields_list[1:]) + ');') # remove report_id
|
||||||
return newLine
|
return newLine
|
||||||
|
Loading…
x
Reference in New Issue
Block a user