Writes a lot of the code necessary for the parse function to work, though it's still not finished
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				KnarCraft/FFmpegConvert/pipeline/head This commit looks good
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	KnarCraft/FFmpegConvert/pipeline/head This commit looks good
				
			This commit is contained in:
		@@ -4,6 +4,7 @@ import net.knarcraft.ffmpegconverter.parser.ConverterArgument;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.parser.ConverterArgumentValue;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -22,29 +23,58 @@ public final class Parser {
 | 
			
		||||
    private static void parse(List<String> tokens) {
 | 
			
		||||
        String[] types = {"animeconverter", "audioconverter", "videoconverter"};
 | 
			
		||||
        ConverterArgument[] commonArgs = {
 | 
			
		||||
                new ConverterArgument("-recursions", true, ConverterArgumentValue.INT)
 | 
			
		||||
                new ConverterArgument("recursions", 'r', true, ConverterArgumentValue.INT),
 | 
			
		||||
                new ConverterArgument("infile", 'i', true, ConverterArgumentValue.STRING)
 | 
			
		||||
        };
 | 
			
		||||
        ConverterArgument[] animeArgs = {
 | 
			
		||||
 | 
			
		||||
                new ConverterArgument("audiolang", 'a', true, ConverterArgumentValue.COMMA_SEPARATED_LIST),
 | 
			
		||||
                new ConverterArgument("subtitlelang", 's', true, ConverterArgumentValue.COMMA_SEPARATED_LIST),
 | 
			
		||||
                new ConverterArgument("tostereo", 't', false, ConverterArgumentValue.BOOLEAN),
 | 
			
		||||
                new ConverterArgument("preventpartialsubtitles", 'p', false, ConverterArgumentValue.BOOLEAN)
 | 
			
		||||
        };
 | 
			
		||||
        ConverterArgument[] audioArgs = {
 | 
			
		||||
                new ConverterArgument("-outext", true,
 | 
			
		||||
                        ConverterArgumentValue.SINGLE_VALUE)
 | 
			
		||||
        ConverterArgument[] audioVideoArgs = {
 | 
			
		||||
                new ConverterArgument("-outext", 'o', true,
 | 
			
		||||
                        ConverterArgumentValue.STRING)
 | 
			
		||||
        };
 | 
			
		||||
        ConverterArgument[] videoArgs = {
 | 
			
		||||
                new ConverterArgument("-outext", true,
 | 
			
		||||
                        ConverterArgumentValue.SINGLE_VALUE)
 | 
			
		||||
        };
 | 
			
		||||
        String type = tokens.get(0).toLowerCase();
 | 
			
		||||
        String type = tokens.remove(0).toLowerCase();
 | 
			
		||||
        if (!ListUtil.listContains(types, s -> s.equals(type))) {
 | 
			
		||||
            throw new IllegalArgumentException("Unknown converter type chosen.");
 | 
			
		||||
        }
 | 
			
		||||
        if (tokens.size() < 2) {
 | 
			
		||||
            throw new IllegalArgumentException("No file/folder path in argument.");
 | 
			
		||||
        }
 | 
			
		||||
        for (int i = 1; i < tokens.size() - 1; i++) {
 | 
			
		||||
            //TODO: Find the type of argument and check the value
 | 
			
		||||
            //TODO: Find an executable way to represent the chain of commands parsed
 | 
			
		||||
        List<ConverterArgument> converterArguments;
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case "animeconverter":
 | 
			
		||||
                converterArguments = new ArrayList<>(Arrays.asList(ListUtil.concatenate(commonArgs, animeArgs)));
 | 
			
		||||
                break;
 | 
			
		||||
            case "audioconverter":
 | 
			
		||||
            case "videoconverter":
 | 
			
		||||
                converterArguments = new ArrayList<>(Arrays.asList(ListUtil.concatenate(commonArgs, audioVideoArgs)));
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                throw new IllegalArgumentException("Unknown converter type chosen.");
 | 
			
		||||
        }
 | 
			
		||||
        while (!tokens.isEmpty()) {
 | 
			
		||||
            String currentToken = tokens.remove(0);
 | 
			
		||||
            List<ConverterArgument> foundArguments;
 | 
			
		||||
            if (currentToken.startsWith("--")) {
 | 
			
		||||
                String argumentName = currentToken.substring(2);
 | 
			
		||||
                foundArguments = ListUtil.getMatching(converterArguments, (item) -> item.getName().equals(argumentName));
 | 
			
		||||
            } else if (currentToken.startsWith("-")) {
 | 
			
		||||
                String argumentShorthand = currentToken.substring(1);
 | 
			
		||||
                foundArguments = ListUtil.getMatching(converterArguments, (item) -> item.getName().equals(argumentShorthand));
 | 
			
		||||
            } else {
 | 
			
		||||
                throw new IllegalArgumentException("Unexpected value when not given an argument.");
 | 
			
		||||
            }
 | 
			
		||||
            if (foundArguments.isEmpty()) {
 | 
			
		||||
                throw new IllegalArgumentException(String.format("Invalid argument %s encountered.", currentToken));
 | 
			
		||||
            }
 | 
			
		||||
            ConverterArgument foundArgument = foundArguments.get(0);
 | 
			
		||||
            String argumentValue = tokens.get(0);
 | 
			
		||||
            //TODO: Check if the value is an argument, and if not consume the value
 | 
			
		||||
            //TODO: If the value is an argument, but a value is necessary, throw an error
 | 
			
		||||
            //TODO: Store the found parameter values into a hashmap and send it to the converter as input
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user