sonygod commited on
Commit
20bd56a
·
1 Parent(s): 267eeb9

修复压缩包

Browse files
Files changed (1) hide show
  1. youtube_sub.js +32 -58
youtube_sub.js CHANGED
@@ -13,7 +13,7 @@
13
  // @connect sonygod-flash.hf.space
14
  // @require https://cdn.jsdelivr.net/npm/marked/marked.min.js
15
  // @require https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.0.6/purify.min.js
16
- // @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js
17
  // @run-at document-end
18
  // ==/UserScript==
19
 
@@ -676,74 +676,48 @@ GM_addStyle(`
676
  // Add export button after existing exports
677
  exportDiv.appendChild(createExportButton('Export Words by Letter (ZIP)', async () => {
678
  try {
 
679
  console.log('Starting ZIP export...');
680
  const words = [...this.loadNewWordsCache()].sort();
681
- console.log(`Got ${words.length} words`);
682
-
683
- // Create ZIP
684
- const zip = new JSZip();
685
-
686
- // Group and add files
687
- const groups = words.reduce((acc, word) => {
688
  const letter = word[0].toLowerCase();
689
  if (/[a-z]/.test(letter)) {
690
- if (!acc[letter]) acc[letter] = [];
691
- acc[letter].push(word);
692
  }
693
- return acc;
694
- }, {});
695
 
696
- Object.entries(groups).forEach(([letter, words]) => {
697
- zip.file(`${letter}.txt`, words.join('\n'));
698
- console.log(`Added ${letter}.txt with ${words.length} words`);
 
 
699
  });
700
 
701
- // Try TamperMonkey GM_download first
702
- try {
703
- const base64 = await zip.generateAsync({
704
- type: "base64",
705
- compression: "DEFLATE"
706
- });
707
-
708
- console.log('ZIP generated in base64');
709
-
710
- // Define download handler
711
- const downloadHandler = {
712
- url: "data:application/zip;base64," + base64,
713
- name: "words.zip",
714
- saveAs: true,
715
- onload: () => console.log('Download started'),
716
- onerror: (err) => {
717
- console.error('GM_download failed:', err);
718
- throw err;
719
- }
720
- };
721
 
722
- console.log('Initiating GM_download...');
723
- GM_download(downloadHandler);
724
-
725
- } catch (gmError) {
726
- console.error('GM_download failed, falling back to blob:', gmError);
727
-
728
- // Fallback to Blob approach
729
- const blob = await zip.generateAsync({
730
- type: "blob",
731
- compression: "DEFLATE"
732
- });
733
-
734
- const url = URL.createObjectURL(blob);
735
- const link = document.createElement('a');
736
- link.href = url;
737
- link.download = 'words.zip';
738
- document.body.appendChild(link);
739
- link.click();
740
- document.body.removeChild(link);
741
- URL.revokeObjectURL(url);
742
- }
743
 
744
  } catch (error) {
745
- console.error('ZIP export failed:', error);
746
- alert('Failed to export ZIP file: ' + error.message);
747
  }
748
  }));
749
 
 
13
  // @connect sonygod-flash.hf.space
14
  // @require https://cdn.jsdelivr.net/npm/marked/marked.min.js
15
  // @require https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.0.6/purify.min.js
16
+ // @require https://cdn.jsdelivr.net/npm/fflate/umd/index.js
17
  // @run-at document-end
18
  // ==/UserScript==
19
 
 
676
  // Add export button after existing exports
677
  exportDiv.appendChild(createExportButton('Export Words by Letter (ZIP)', async () => {
678
  try {
679
+
680
  console.log('Starting ZIP export...');
681
  const words = [...this.loadNewWordsCache()].sort();
682
+
683
+ // Group words by letter
684
+ const files = {};
685
+ words.forEach(word => {
 
 
 
686
  const letter = word[0].toLowerCase();
687
  if (/[a-z]/.test(letter)) {
688
+ if (!files[letter]) files[letter] = [];
689
+ files[letter].push(word);
690
  }
691
+ });
 
692
 
693
+ // Prepare files for ZIP
694
+ const zipObj = {};
695
+ Object.entries(files).forEach(([letter, words]) => {
696
+ const content = words.join('\n');
697
+ zipObj[`${letter}.txt`] = new TextEncoder().encode(content);
698
  });
699
 
700
+ // Create ZIP using fflate
701
+ const zipData = fflate.zipSync(zipObj, {
702
+ level: 6,
703
+ mem: 8
704
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
705
 
706
+ // Convert to blob and download
707
+ const blob = new Blob([zipData], { type: 'application/zip' });
708
+ const url = URL.createObjectURL(blob);
709
+ const link = document.createElement('a');
710
+ link.href = url;
711
+ link.download = 'words.zip';
712
+ document.body.appendChild(link);
713
+ link.click();
714
+ document.body.removeChild(link);
715
+ URL.revokeObjectURL(url);
716
+ console.log('ZIP download completed');
 
 
 
 
 
 
 
 
 
 
717
 
718
  } catch (error) {
719
+ console.error('ZIP generation failed:', error);
720
+ alert('Failed to create ZIP file: ' + error.message);
721
  }
722
  }));
723