mirror of
				https://github.com/mmahdium/TorrentMax.git
				synced 2025-11-04 02:58:13 +01:00 
			
		
		
		
	Cleanup API functions
This commit is contained in:
		
							
								
								
									
										72
									
								
								app/lib/api.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								app/lib/api.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					interface MaxedMagnetResponse {
 | 
				
			||||||
 | 
					  totalTrackers: number;
 | 
				
			||||||
 | 
					  name?: string;
 | 
				
			||||||
 | 
					  id: string;
 | 
				
			||||||
 | 
					  maxedMagnet: string;
 | 
				
			||||||
 | 
					  error?: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					export async function getMaxedMagnetUrl(
 | 
				
			||||||
 | 
					  magnet: string
 | 
				
			||||||
 | 
					): Promise<MaxedMagnetResponse> {
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    const response = await fetch("/api/magnet", {
 | 
				
			||||||
 | 
					      method: "POST",
 | 
				
			||||||
 | 
					      headers: {
 | 
				
			||||||
 | 
					        "Content-Type": "application/json",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      body: JSON.stringify({ magnet }),
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!response.ok) {
 | 
				
			||||||
 | 
					      const errorData = await response.json().catch(() => ({}));
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        totalTrackers: 0,
 | 
				
			||||||
 | 
					        id: "",
 | 
				
			||||||
 | 
					        maxedMagnet: "",
 | 
				
			||||||
 | 
					        error: errorData.message || `HTTP error! status: ${response.status}`,
 | 
				
			||||||
 | 
					      } as MaxedMagnetResponse;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return await response.json();
 | 
				
			||||||
 | 
					  } catch (err) {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      totalTrackers: 0,
 | 
				
			||||||
 | 
					      id: "",
 | 
				
			||||||
 | 
					      maxedMagnet: "",
 | 
				
			||||||
 | 
					      error: err instanceof Error ? err.message : "An unknown error occurred",
 | 
				
			||||||
 | 
					    } as MaxedMagnetResponse;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export async function getMaxedMagnetFromTorrent(
 | 
				
			||||||
 | 
					  file: File
 | 
				
			||||||
 | 
					): Promise<MaxedMagnetResponse> {
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    const form = new FormData();
 | 
				
			||||||
 | 
					    form.append("file", file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const response = await fetch("/api/torrent", {
 | 
				
			||||||
 | 
					      method: "POST",
 | 
				
			||||||
 | 
					      body: form,
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!response.ok) {
 | 
				
			||||||
 | 
					      const errorData = await response.json().catch(() => ({}));
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        totalTrackers: 0,
 | 
				
			||||||
 | 
					        id: "",
 | 
				
			||||||
 | 
					        maxedMagnet: "",
 | 
				
			||||||
 | 
					        error: errorData.message || `HTTP error! status: ${response.status}`,
 | 
				
			||||||
 | 
					      } as MaxedMagnetResponse;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return await response.json();
 | 
				
			||||||
 | 
					  } catch (err) {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      totalTrackers: 0,
 | 
				
			||||||
 | 
					      id: "",
 | 
				
			||||||
 | 
					      maxedMagnet: "",
 | 
				
			||||||
 | 
					      error: err instanceof Error ? err.message : "An unknown error occurred",
 | 
				
			||||||
 | 
					    } as MaxedMagnetResponse;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -2,70 +2,45 @@
 | 
				
			|||||||
import MagnetCard from "~/components/MagnetCard.vue";
 | 
					import MagnetCard from "~/components/MagnetCard.vue";
 | 
				
			||||||
import { ref } from "vue";
 | 
					import { ref } from "vue";
 | 
				
			||||||
import IndexHero from "~/components/IndexHero.vue";
 | 
					import IndexHero from "~/components/IndexHero.vue";
 | 
				
			||||||
 | 
					import { getMaxedMagnetFromTorrent, getMaxedMagnetUrl } from "~/lib/api";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface MaxedMagnetResponse {
 | 
					interface MaxedMagnetResponse {
 | 
				
			||||||
  totalTrackers: number;
 | 
					  totalTrackers: number;
 | 
				
			||||||
  name?: string;
 | 
					  name?: string;
 | 
				
			||||||
  id: string;
 | 
					  id: string;
 | 
				
			||||||
  maxedMagnet: string;
 | 
					  maxedMagnet: string;
 | 
				
			||||||
 | 
					  error?: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const maxedMagnet = ref<MaxedMagnetResponse | null>(null);
 | 
					const maxedMagnet = ref<MaxedMagnetResponse | null>(null);
 | 
				
			||||||
const error = ref<string | null>(null);
 | 
					const error = ref<string | null>(null);
 | 
				
			||||||
const loading = ref(false);
 | 
					const loading = ref(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function getMaxedMagnetUrl(magnet: string) {
 | 
					async function handleMagnetSubmit(magnet: string) {
 | 
				
			||||||
  error.value = null; // Clear any previous error
 | 
					  loading.value = true;
 | 
				
			||||||
  loading.value = true; // Set loading to true
 | 
					  error.value = null;
 | 
				
			||||||
 | 
					  maxedMagnet.value = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  try {
 | 
					  const result = await getMaxedMagnetUrl(magnet);
 | 
				
			||||||
    const response = await fetch("/api/magnet", {
 | 
					 | 
				
			||||||
      method: "POST",
 | 
					 | 
				
			||||||
      headers: {
 | 
					 | 
				
			||||||
        "Content-Type": "application/json",
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      body: JSON.stringify({ magnet }),
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!response.ok) {
 | 
					  loading.value = false;
 | 
				
			||||||
      const errorData = await response.json().catch(() => ({}));
 | 
					 | 
				
			||||||
      error.value =
 | 
					 | 
				
			||||||
        errorData.message || `HTTP error! status: ${response.status}`;
 | 
					 | 
				
			||||||
      console.error("API error:", error.value);
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    maxedMagnet.value = await response.json();
 | 
					  if (result.error) {
 | 
				
			||||||
  } catch (err) {
 | 
					    error.value = result.error;
 | 
				
			||||||
    error.value =
 | 
					  } else {
 | 
				
			||||||
      err instanceof Error ? err.message : "An unknown error occurred";
 | 
					    maxedMagnet.value = result;
 | 
				
			||||||
    console.error("Network error:", err);
 | 
					 | 
				
			||||||
  } finally {
 | 
					 | 
				
			||||||
    loading.value = false; // Reset loading state
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function getMaxedMagnetFromTorrent(file: File) {
 | 
					async function handleTorrentUpload(file: File) {
 | 
				
			||||||
  error.value = null; // Clear any previous error
 | 
					  loading.value = true;
 | 
				
			||||||
  loading.value = true; // Set loading to true
 | 
					  const result = await getMaxedMagnetFromTorrent(file);
 | 
				
			||||||
 | 
					  loading.value = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  try {
 | 
					  if (result.error) {
 | 
				
			||||||
    const form = new FormData();
 | 
					    error.value = result.error;
 | 
				
			||||||
    form.append("file", file);
 | 
					  } else {
 | 
				
			||||||
 | 
					    maxedMagnet.value = result;
 | 
				
			||||||
    const res = await fetch("/api/torrent", {
 | 
					 | 
				
			||||||
      method: "POST",
 | 
					 | 
				
			||||||
      body: form,
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const data = await res.json();
 | 
					 | 
				
			||||||
    if (!res.ok) throw new Error(data.message || `HTTP ${res.status}`);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    maxedMagnet.value = data;
 | 
					 | 
				
			||||||
  } catch (e: any) {
 | 
					 | 
				
			||||||
    error.value = e.message || "Upload failed";
 | 
					 | 
				
			||||||
  } finally {
 | 
					 | 
				
			||||||
    loading.value = false;
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@@ -73,12 +48,12 @@ async function getMaxedMagnetFromTorrent(file: File) {
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="flex flex-col min-h-screen bg-base-300">
 | 
					  <div class="flex flex-col min-h-screen bg-base-300">
 | 
				
			||||||
    <div class="grow flex items-start justify-center pt-40 px-4">
 | 
					    <div class="grow flex items-start justify-center pt-40 px-4">
 | 
				
			||||||
      <div class="w-full max-w-2xl" >
 | 
					      <div class="w-full max-w-2xl">
 | 
				
			||||||
        <IndexHero />
 | 
					        <IndexHero />
 | 
				
			||||||
        <div v-if="!maxedMagnet && !loading" class="space-y-6">
 | 
					        <div v-if="!maxedMagnet && !loading" class="space-y-6">
 | 
				
			||||||
          <SearchBar @submit="getMaxedMagnetUrl" />
 | 
					          <SearchBar @submit="handleMagnetSubmit" />
 | 
				
			||||||
          <div class="divider divider-neutral">OR</div>
 | 
					          <div class="divider divider-neutral">OR</div>
 | 
				
			||||||
          <TorrentUpload @submit="getMaxedMagnetFromTorrent" />
 | 
					          <TorrentUpload @submit="handleTorrentUpload" />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div
 | 
					        <div
 | 
				
			||||||
@@ -86,7 +61,7 @@ async function getMaxedMagnetFromTorrent(file: File) {
 | 
				
			|||||||
          v-motion-fade
 | 
					          v-motion-fade
 | 
				
			||||||
          class="flex justify-center items-center p-8"
 | 
					          class="flex justify-center items-center p-8"
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
          <span class="loading loading-infinity loading-lg" />
 | 
					          <span class="loading loading-infinity loading-xl" />
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Error message display -->
 | 
					        <!-- Error message display -->
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user