Index: src/new_dialog.c =================================================================== --- src/new_dialog.c (revision 29994) +++ src/new_dialog.c (working copy) @@ -202,6 +202,8 @@ type = XARCHIVETYPE_GZIP; else if (strcmp ( ComboArchiveType,"lzma") == 0) type = XARCHIVETYPE_LZMA; + else if (strcmp ( ComboArchiveType,"xz") == 0) + type = XARCHIVETYPE_XZ; else if (strcmp ( ComboArchiveType,"lzo") == 0) type = XARCHIVETYPE_LZOP; else if (strcmp ( ComboArchiveType,"rar") == 0) @@ -214,6 +216,8 @@ type = XARCHIVETYPE_TAR_GZ; else if (strcmp ( ComboArchiveType,"tar.lzma") == 0) type = XARCHIVETYPE_TAR_LZMA; + else if (strcmp ( ComboArchiveType,"tar.xz") == 0) + type = XARCHIVETYPE_TAR_XZ; else if (strcmp ( ComboArchiveType,"tar.lzo") == 0) type = XARCHIVETYPE_TAR_LZOP; else if (strcmp ( ComboArchiveType,"jar") == 0 || strcmp ( ComboArchiveType,"zip") == 0 ) Index: src/extract_dialog.c =================================================================== --- src/extract_dialog.c (revision 29994) +++ src/extract_dialog.c (working copy) @@ -809,6 +809,11 @@ archive->type = XARCHIVETYPE_TAR_LZMA; archive->extract = extract[XARCHIVETYPE_TAR_LZMA]; } + else if (g_str_has_suffix(archive->escaped_path,".tar.xz")|| g_str_has_suffix (archive->escaped_path,".txz")) + { + archive->type = XARCHIVETYPE_TAR_XZ; + archive->extract = extract[XARCHIVETYPE_TAR_XZ]; + } else if (g_str_has_suffix(archive->escaped_path,".tar.lzop") || g_str_has_suffix (archive->escaped_path,".tzo") || g_str_has_suffix(archive->escaped_path,".tar.lzo")) Index: src/window.c =================================================================== --- src/window.c (revision 29994) +++ src/window.c (working copy) @@ -1126,6 +1126,8 @@ xx = XARCHIVETYPE_GZIP; else if (memcmp ( magic,"\x5d\x00\x00\x80",4) == 0) xx = XARCHIVETYPE_LZMA; + else if (memcmp ( magic,"\xFD7zXZ\x00\0x00",3) || memcmp ( magic, "\xFD7zXZ\x00\0x10",3) == 0) + xx = XARCHIVETYPE_XZ; else if (memcmp ( magic,"\211LZO",4) == 0) xx = XARCHIVETYPE_LZOP; else if (memcmp ( magic,"\xed\xab\xee\xdb",4) == 0) @@ -1463,6 +1465,7 @@ case XARCHIVETYPE_GZIP: case XARCHIVETYPE_BZIP2: case XARCHIVETYPE_LZMA: + case XARCHIVETYPE_XZ: case XARCHIVETYPE_LZOP: case XARCHIVETYPE_RPM: pos = 3; @@ -1482,6 +1485,7 @@ case XARCHIVETYPE_TAR_GZ: case XARCHIVETYPE_TAR_BZ2: case XARCHIVETYPE_TAR_LZMA: + case XARCHIVETYPE_TAR_XZ: case XARCHIVETYPE_TAR_LZOP: case XARCHIVETYPE_TAR: case XARCHIVETYPE_ZIP: @@ -1526,6 +1530,7 @@ case XARCHIVETYPE_GZIP: case XARCHIVETYPE_BZIP2: case XARCHIVETYPE_LZMA: + case XARCHIVETYPE_XZ: case XARCHIVETYPE_LZOP: case XARCHIVETYPE_RPM: pos = 3; @@ -1545,6 +1550,7 @@ case XARCHIVETYPE_TAR_GZ: case XARCHIVETYPE_TAR_BZ2: case XARCHIVETYPE_TAR_LZMA: + case XARCHIVETYPE_TAR_XZ: case XARCHIVETYPE_TAR_LZOP: case XARCHIVETYPE_TAR: case XARCHIVETYPE_ZIP: Index: src/add_dialog.c =================================================================== --- src/add_dialog.c (revision 29994) +++ src/add_dialog.c (working copy) @@ -204,7 +204,7 @@ else gtk_widget_set_size_request (add_dialog->dialog1,530,420); - if (archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_LZOP) + if (archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_XZ || archive->type == XARCHIVETYPE_LZOP) gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(add_dialog->filechooserwidget1),FALSE); else gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(add_dialog->filechooserwidget1),TRUE); @@ -217,7 +217,7 @@ else gtk_widget_set_sensitive(add_dialog->store_path,TRUE); /* 7z doesn't appear to let the user chooses if storing full paths */ - if (archive->type == XARCHIVETYPE_7ZIP || archive->type == XARCHIVETYPE_LZOP || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA) + if (archive->type == XARCHIVETYPE_7ZIP || archive->type == XARCHIVETYPE_LZOP || archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_XZ ) { flag = FALSE; } @@ -239,7 +239,7 @@ flag = TRUE; gtk_widget_set_sensitive(add_dialog->solid_archive,flag); - if (archive->type != XARCHIVETYPE_TAR && archive->type != XARCHIVETYPE_TAR_GZ && archive->type != XARCHIVETYPE_TAR_LZMA && archive->type != XARCHIVETYPE_TAR_BZ2 && archive->type != XARCHIVETYPE_TAR_LZOP) + if (archive->type != XARCHIVETYPE_TAR && archive->type != XARCHIVETYPE_TAR_GZ && archive->type != XARCHIVETYPE_TAR_LZMA && archive->type != XARCHIVETYPE_TAR_XZ && archive->type != XARCHIVETYPE_TAR_BZ2 && archive->type != XARCHIVETYPE_TAR_LZOP) { flag = TRUE; if (archive->type == XARCHIVETYPE_7ZIP) @@ -301,7 +301,7 @@ g_signal_connect (G_OBJECT (add_dialog->compression_value),"value-changed",G_CALLBACK (fix_adjustment_value), NULL); gtk_tooltips_set_tip (add_dialog->option_tooltip,add_dialog->compression_scale, compression_msg, NULL ); - if (archive->type == XARCHIVETYPE_TAR || archive->type == XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR_LZMA || archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type == XARCHIVETYPE_TAR_LZOP) + if (archive->type == XARCHIVETYPE_TAR || archive->type == XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR_LZMA || archive->type == XARCHIVETYPE_TAR_XZ || archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type == XARCHIVETYPE_TAR_LZOP) flag = FALSE; else flag = TRUE; Index: src/main.c =================================================================== --- src/main.c (revision 29994) +++ src/main.c (working copy) @@ -311,9 +311,10 @@ open_archive[XARCHIVETYPE_BZIP2] = &xa_open_bzip2_lzma; open_archive[XARCHIVETYPE_GZIP] = &xa_open_gzip; open_archive[XARCHIVETYPE_LZMA] = &xa_open_bzip2_lzma; + open_archive[XARCHIVETYPE_XZ] = &xa_open_bzip2_lzma; open_archive[XARCHIVETYPE_RAR] = &xa_open_rar; open_archive[XARCHIVETYPE_RPM] = &xa_open_rpm; - open_archive[XARCHIVETYPE_TAR] = open_archive[XARCHIVETYPE_TAR_BZ2] = open_archive[XARCHIVETYPE_TAR_GZ] = open_archive[XARCHIVETYPE_TAR_LZMA] = open_archive[XARCHIVETYPE_TAR_LZOP] = &xa_open_tar; + open_archive[XARCHIVETYPE_TAR] = open_archive[XARCHIVETYPE_TAR_BZ2] = open_archive[XARCHIVETYPE_TAR_GZ] = open_archive[XARCHIVETYPE_TAR_LZMA] = open_archive[XARCHIVETYPE_TAR_XZ] = open_archive[XARCHIVETYPE_TAR_LZOP] = &xa_open_tar; open_archive[XARCHIVETYPE_ZIP] = &xa_open_zip; open_archive[XARCHIVETYPE_LHA] = &xa_open_lha; open_archive[XARCHIVETYPE_LZOP] = &xa_open_bzip2_lzma; @@ -325,6 +326,7 @@ delete[XARCHIVETYPE_BZIP2] = 0; delete[XARCHIVETYPE_GZIP] = 0; delete[XARCHIVETYPE_LZMA] = 0; + delete[XARCHIVETYPE_XZ] = 0; delete[XARCHIVETYPE_RAR] = &xa_rar_delete; delete[XARCHIVETYPE_RPM] = 0; delete[XARCHIVETYPE_TAR] = delete[XARCHIVETYPE_TAR_BZ2] = delete[XARCHIVETYPE_TAR_GZ] = delete[XARCHIVETYPE_TAR_LZMA] = delete[XARCHIVETYPE_TAR_LZOP] = &xa_tar_delete; @@ -340,7 +342,7 @@ add[XARCHIVETYPE_BZIP2] = add[XARCHIVETYPE_GZIP] = add[XARCHIVETYPE_LZMA] = &xa_tar_add; add[XARCHIVETYPE_RAR] = &xa_rar_add; add[XARCHIVETYPE_RPM] = 0; - add[XARCHIVETYPE_TAR] = add[XARCHIVETYPE_TAR_BZ2] = add[XARCHIVETYPE_TAR_GZ] = add[XARCHIVETYPE_TAR_LZMA] = add[XARCHIVETYPE_TAR_LZOP] = &xa_tar_add; + add[XARCHIVETYPE_TAR] = add[XARCHIVETYPE_TAR_BZ2] = add[XARCHIVETYPE_TAR_GZ] = add[XARCHIVETYPE_TAR_LZMA] = add[XARCHIVETYPE_TAR_XZ] = add[XARCHIVETYPE_TAR_LZOP] = &xa_tar_add; add[XARCHIVETYPE_ZIP] = &xa_zip_add; add[XARCHIVETYPE_LHA] = &xa_lha_add; add[XARCHIVETYPE_LZOP] = &xa_tar_add; @@ -352,7 +354,7 @@ extract[XARCHIVETYPE_BZIP2] = extract[XARCHIVETYPE_GZIP] = extract[XARCHIVETYPE_LZMA] = &xa_tar_extract; extract[XARCHIVETYPE_RAR] = &xa_rar_extract; extract[XARCHIVETYPE_RPM] = &xa_rpm_extract; - extract[XARCHIVETYPE_TAR] = extract[XARCHIVETYPE_TAR_BZ2] = extract[XARCHIVETYPE_TAR_GZ] = extract[XARCHIVETYPE_TAR_LZMA] = extract[XARCHIVETYPE_TAR_LZOP] = &xa_tar_extract; + extract[XARCHIVETYPE_TAR] = extract[XARCHIVETYPE_TAR_BZ2] = extract[XARCHIVETYPE_TAR_GZ] = extract[XARCHIVETYPE_TAR_LZMA] = extract[XARCHIVETYPE_TAR_XZ] = extract[XARCHIVETYPE_TAR_LZOP] = &xa_tar_extract; extract[XARCHIVETYPE_ZIP] = &xa_zip_extract; extract[XARCHIVETYPE_LHA] = &xa_lha_extract; extract[XARCHIVETYPE_LZOP] = &xa_tar_extract; @@ -363,7 +365,7 @@ test[XARCHIVETYPE_DEB] = test[XARCHIVETYPE_BZIP2] = test[XARCHIVETYPE_GZIP] = test[XARCHIVETYPE_LZMA] = 0; test[XARCHIVETYPE_RAR] = &xa_rar_test; test[XARCHIVETYPE_RPM] = 0; - test[XARCHIVETYPE_TAR] = test[XARCHIVETYPE_TAR_BZ2] = test[XARCHIVETYPE_TAR_GZ] = test[XARCHIVETYPE_TAR_LZMA] = test[XARCHIVETYPE_TAR_LZOP] = 0; + test[XARCHIVETYPE_TAR] = test[XARCHIVETYPE_TAR_BZ2] = test[XARCHIVETYPE_TAR_GZ] = test[XARCHIVETYPE_TAR_LZMA] = test[XARCHIVETYPE_TAR_XZ] = test[XARCHIVETYPE_TAR_LZOP] = 0; test[XARCHIVETYPE_ZIP] = &xa_zip_test; test[XARCHIVETYPE_LHA] = &xa_lha_test; test[XARCHIVETYPE_LZOP] = 0; @@ -475,6 +477,11 @@ ArchiveType = g_list_append(ArchiveType, "tar.lzma"); ArchiveSuffix = g_list_append(ArchiveSuffix, "*.tlz"); } + if ( g_list_find ( ArchiveType , "xz") ) + { + ArchiveType = g_list_append(ArchiveType, "tar.xz"); + ArchiveSuffix = g_list_append(ArchiveSuffix, "*.txz"); + } if ( g_list_find ( ArchiveType , "lzo") ) { ArchiveType = g_list_append(ArchiveType, "tar.lzo"); @@ -543,6 +550,8 @@ archive->type = XARCHIVETYPE_TAR_GZ; else if ( g_str_has_suffix ( archive->escaped_path , ".tar.lzma") || g_str_has_suffix ( archive->escaped_path , ".tlz") ) archive->type = XARCHIVETYPE_TAR_LZMA; + else if ( g_str_has_suffix ( archive->escaped_path , ".tar.xz") || g_str_has_suffix ( archive->escaped_path , ".txz") ) + archive->type = XARCHIVETYPE_TAR_XZ; else if ( g_str_has_suffix ( archive->escaped_path , ".tar.lzo") || g_str_has_suffix ( archive->escaped_path , ".tzo") || g_str_has_suffix ( archive->escaped_path , ".tar.lzop")) Index: src/archive.h =================================================================== --- src/archive.h (revision 29994) +++ src/archive.h (working copy) @@ -30,6 +30,7 @@ XARCHIVETYPE_BZIP2, XARCHIVETYPE_GZIP, XARCHIVETYPE_LZMA, + XARCHIVETYPE_XZ, XARCHIVETYPE_LZOP, XARCHIVETYPE_RAR, XARCHIVETYPE_RPM, @@ -37,6 +38,7 @@ XARCHIVETYPE_TAR_BZ2, XARCHIVETYPE_TAR_GZ, XARCHIVETYPE_TAR_LZMA, + XARCHIVETYPE_TAR_XZ, XARCHIVETYPE_TAR_LZOP, XARCHIVETYPE_ZIP, XARCHIVETYPE_LHA, Index: src/bzip2.c =================================================================== --- src/bzip2.c (revision 29994) +++ src/bzip2.c (working copy) @@ -54,6 +54,15 @@ archive->extract = extract[archive->type]; xa_open_tar_compressed_file(archive); } + else if (g_str_has_suffix(archive->escaped_path,".tar.xz") || g_str_has_suffix (archive->escaped_path,".txz")) + { + archive->type = XARCHIVETYPE_TAR_XZ; + archive->format = "TAR.XZ"; + archive->delete = delete[archive->type]; + archive->add = add[archive->type]; + archive->extract = extract[archive->type]; + xa_open_tar_compressed_file(archive); + } else if (g_str_has_suffix(archive->escaped_path,".tar.lzop") || g_str_has_suffix (archive->escaped_path,".tzo") || g_str_has_suffix(archive->escaped_path,".tar.lzo")) @@ -85,6 +94,12 @@ executable = "lzma "; len = 5; } + else if (archive->type == XARCHIVETYPE_XZ) + { + archive->format = "XZ"; + executable = "xz "; + len = 5; + } else if (archive->type == XARCHIVETYPE_LZOP) { archive->format = "LZOP"; @@ -163,6 +178,8 @@ command = g_strconcat(tar," tfjv ",archive->escaped_path,NULL); else if (archive->type == XARCHIVETYPE_TAR_LZMA) command = g_strconcat(tar," tv --use-compress-program=lzma -f ",archive->escaped_path,NULL); + else if (archive->type == XARCHIVETYPE_TAR_XZ) + command = g_strconcat(tar," tv --use-compress-program=xz -f ",archive->escaped_path,NULL); else if (archive->type == XARCHIVETYPE_TAR_LZOP) command = g_strconcat(tar," tv --use-compress-program=lzop -f ",archive->escaped_path,NULL); /* else fail? */ @@ -205,6 +222,11 @@ executable = "lzma "; len = 5; } + else if (archive->type == XARCHIVETYPE_XZ) + { + executable = "xz "; + len = 5; + } else if (archive->type == XARCHIVETYPE_LZOP) { executable = "lzop "; Index: src/tar.c =================================================================== --- src/tar.c (revision 29994) +++ src/tar.c (working copy) @@ -242,14 +242,14 @@ files->str , NULL ); break; - case XARCHIVETYPE_TAR_LZOP: + case XARCHIVETYPE_TAR_XZ: if ( g_file_test ( archive->escaped_path , G_FILE_TEST_EXISTS ) ) xa_add_delete_bzip2_gzip_lzma_compressed_tar (files,archive,1); else command = g_strconcat (tar, " ", archive->add_recurse ? "" : "--no-recursion ", archive->remove_files ? "--remove-files " : "", - "--use-compress-program=lzop -cvvf ",archive->escaped_path, + "--use-compress-program=xz -cvvf ",archive->escaped_path, files->str , NULL ); break; @@ -449,6 +449,10 @@ executable = "lzma -f "; filename = "dummy.lzma"; break; + case XARCHIVETYPE_TAR_XZ: + executable = "xz -f "; + filename = "dummy.xz"; + break; case XARCHIVETYPE_TAR_LZOP: executable = "lzop -f "; filename = "dummy.lzo";