Changeset 17588 in niluje


Ignore:
Timestamp:
Jul 29, 2020, 3:56:04 AM (11 days ago)
Author:
NiLuJe
Message:

MobiCover:

  • Start implement cdetype check
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Configs/trunk/Kindle/Touch_Hacks/MobiCover/LibMobi/mobicover.c

    r17586 r17588  
    2525
    2626#include <mobi.h>
     27#include <meta.h>
    2728#include <nettle/base16.h>
    2829#include <nettle/sha1.h>
     
    341342                        char* infile = argv[optind++];
    342343
     344                        // TODO: Reject unknown file extensions
     345
    343346                        // c.f., mobitool's loadfilename()
    344347                        /* Initialize main MOBIData structure */
     
    368371                        }
    369372
     373                        // Validate cdeType
     374                        if (do_typecheck) {
     375                                // Abort if it's a dictionary (M7 only)
     376                                if (mobi_is_dictionary(m)) {
     377                                        fprintf(stderr, "Input file `%s` is a dictionary!\n", infile);
     378                                        mobi_free(m);
     379                                        return ERRCODE(EXIT_FAILURE);
     380                                }
     381
     382                                // Abort if it's not an EBOK or a PDOC
     383                                if (access("/mnt/us/linkss/periodicals", F_OK) == 0) {
     384                                        char *cde_type = mobi_meta_get_exthstring(m, EXTH_DOCTYPE);
     385                                        if (cde_type == NULL) {
     386                                                fprintf(stderr, "No CDE Type in EXTH for input file `%s`!\n", infile);
     387                                                free(cde_type);
     388                                                mobi_free(m);
     389                                                return ERRCODE(EXIT_FAILURE);
     390                                        } else {
     391                                                if (strcmp(cde_type, "EBOK") != 0 && strcmp(cde_type, "PDOC") != 0 && strcmp(cde_type, "MAGZ") != 0 && strcmp(cde_type, "NWPR") != 0) {
     392                                                        fprintf(stderr, "Input file `%s` is neither a book, a periodical, nor a personal document!\n", infile);
     393                                                        free(cde_type);
     394                                                        mobi_free(m);
     395                                                        return ERRCODE(EXIT_FAILURE);
     396                                                }
     397                                        }
     398                                        free(cde_type);
     399                                } else {
     400                                        char *cde_type = mobi_meta_get_exthstring(m, EXTH_DOCTYPE);
     401                                        if (cde_type == NULL) {
     402                                                fprintf(stderr, "No CDE Type in EXTH for input file `%s`!\n", infile);
     403                                                free(cde_type);
     404                                                mobi_free(m);
     405                                                return ERRCODE(EXIT_FAILURE);
     406                                        } else {
     407                                                if (strcmp(cde_type, "EBOK") != 0 && strcmp(cde_type, "PDOC") != 0) {
     408                                                        fprintf(stderr, "Input file `%s` is neither a book nor a personal document!\n", infile);
     409                                                        free(cde_type);
     410                                                        mobi_free(m);
     411                                                        return ERRCODE(EXIT_FAILURE);
     412                                                }
     413                                        }
     414                                        free(cde_type);
     415                                }
     416
     417
     418                        }
     419
    370420                        /* And now do the thing! */
    371                         // TODO: Implement do_typecheck!
    372421                        rv = dump_cover(m, infile, outdir);
    373422                        mobi_free(m);
Note: See TracChangeset for help on using the changeset viewer.