From 77fc877a3985fd9cad49ed0250ab1bdf478e6638 Mon Sep 17 00:00:00 2001 From: ZenWalker Date: Tue, 1 Nov 2016 01:13:24 +0100 Subject: comics backend: add support for unarchiver (unar and lsar) unar is able to extract all supported comics archive format CBR give unar priority over bsdtar, because it works better CBZ CB7 CBT give bsdtar priority over unar, because it is much faster --- backend/comics/comics-document.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'backend') diff --git a/backend/comics/comics-document.c b/backend/comics/comics-document.c index 841524e7..9f945c6f 100644 --- a/backend/comics/comics-document.c +++ b/backend/comics/comics-document.c @@ -45,7 +45,8 @@ typedef enum GNAUNRAR, UNZIP, P7ZIP, - TAR + TAR, + UNARCHIVER } ComicBookDecompressType; typedef struct _ComicsDocumentClass ComicsDocumentClass; @@ -107,7 +108,10 @@ static const ComicBookDecompressCommand command_usage_def[] = { {NULL , "%s l -- %s" , "%s x -y %s -o%s", FALSE, OFFSET_7Z}, /* tar */ - {"%s -xOf" , "%s -tf %s" , NULL , FALSE, NO_OFFSET} + {"%s -xOf" , "%s -tf %s" , NULL , FALSE, NO_OFFSET}, + + /* UNARCHIVER */ + {"unar -o -" , "%s %s" , NULL , FALSE, NO_OFFSET} }; static void comics_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface); @@ -355,6 +359,12 @@ comics_check_decompress_command (gchar *mime_type, comics_document->command_usage = GNAUNRAR; return TRUE; } + comics_document->selected_command = + g_find_program_in_path ("lsar"); + if (comics_document->selected_command) { + comics_document->command_usage = UNARCHIVER; + return TRUE; + } comics_document->selected_command = g_find_program_in_path ("bsdtar"); if (comics_document->selected_command) { @@ -380,6 +390,12 @@ comics_check_decompress_command (gchar *mime_type, comics_document->command_usage = TAR; return TRUE; } + comics_document->selected_command = + g_find_program_in_path ("lsar"); + if (comics_document->selected_command) { + comics_document->command_usage = UNARCHIVER; + return TRUE; + } } else if (g_content_type_is_a (mime_type, "application/x-cb7") || g_content_type_is_a (mime_type, "application/x-7z-compressed")) { @@ -409,6 +425,12 @@ comics_check_decompress_command (gchar *mime_type, comics_document->command_usage = TAR; return TRUE; } + comics_document->selected_command = + g_find_program_in_path ("lsar"); + if (comics_document->selected_command) { + comics_document->command_usage = UNARCHIVER; + return TRUE; + } } else if (g_content_type_is_a (mime_type, "application/x-cbt") || g_content_type_is_a (mime_type, "application/x-tar")) { /* tar utility (Tape ARchive) */ @@ -424,6 +446,12 @@ comics_check_decompress_command (gchar *mime_type, comics_document->command_usage = TAR; return TRUE; } + comics_document->selected_command = + g_find_program_in_path ("lsar"); + if (comics_document->selected_command) { + comics_document->command_usage = UNARCHIVER; + return TRUE; + } } else { g_set_error (error, EV_DOCUMENT_ERROR, -- cgit v1.2.1