From 9019d31e634a957e1ce5bd37f73bac51bf0c30a8 Mon Sep 17 00:00:00 2001 From: Spaso1 Date: Thu, 7 Aug 2025 02:20:48 +0800 Subject: [PATCH 1/4] ReisaEyeAnd --- .gitignore | 15 ++ .idea/.gitignore | 8 + .idea/compiler.xml | 6 + .idea/gradle.xml | 16 ++ .idea/misc.xml | 13 ++ app/.gitignore | 1 + app/build.gradle | 46 +++++ app/proguard-rules.pro | 21 ++ .../ast/reisa/ExampleInstrumentedTest.java | 25 +++ app/src/main/AndroidManifest.xml | 28 +++ .../main/java/org/ast/reisa/MainActivity.java | 62 ++++++ .../ast/reisa/ui/gallery/GalleryFragment.java | 35 ++++ .../reisa/ui/gallery/GalleryViewModel.java | 19 ++ .../org/ast/reisa/ui/home/HomeFragment.java | 35 ++++ .../org/ast/reisa/ui/home/HomeViewModel.java | 19 ++ .../reisa/ui/slideshow/SlideshowFragment.java | 35 ++++ .../ui/slideshow/SlideshowViewModel.java | 19 ++ .../res/drawable/ic_launcher_background.xml | 74 +++++++ .../res/drawable/ic_launcher_foreground.xml | 31 +++ app/src/main/res/drawable/ic_menu_camera.xml | 12 ++ app/src/main/res/drawable/ic_menu_gallery.xml | 9 + .../main/res/drawable/ic_menu_slideshow.xml | 9 + app/src/main/res/drawable/side_nav_bar.xml | 9 + app/src/main/res/layout/activity_main.xml | 26 +++ app/src/main/res/layout/app_bar_main.xml | 35 ++++ app/src/main/res/layout/content_main.xml | 22 +++ app/src/main/res/layout/fragment_gallery.xml | 23 +++ app/src/main/res/layout/fragment_home.xml | 23 +++ .../main/res/layout/fragment_slideshow.xml | 23 +++ app/src/main/res/layout/nav_header_main.xml | 36 ++++ .../main/res/menu/activity_main_drawer.xml | 20 ++ app/src/main/res/menu/main.xml | 8 + .../main/res/mipmap-anydpi/ic_launcher.xml | 6 + .../res/mipmap-anydpi/ic_launcher_round.xml | 6 + app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes .../main/res/navigation/mobile_navigation.xml | 25 +++ app/src/main/res/values-land/dimens.xml | 3 + app/src/main/res/values-night/themes.xml | 16 ++ app/src/main/res/values-w1240dp/dimens.xml | 3 + app/src/main/res/values-w600dp/dimens.xml | 3 + app/src/main/res/values/colors.xml | 10 + app/src/main/res/values/dimens.xml | 8 + app/src/main/res/values/strings.xml | 13 ++ app/src/main/res/values/themes.xml | 22 +++ app/src/main/res/xml/backup_rules.xml | 14 ++ .../main/res/xml/data_extraction_rules.xml | 20 ++ .../java/org/ast/reisa/ExampleUnitTest.java | 17 ++ build.gradle | 4 + gradle.properties | 21 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++++++++++++++++++ gradlew.bat | 89 +++++++++ settings.gradle | 17 ++ 63 files changed, 1251 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/org/ast/reisa/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/org/ast/reisa/MainActivity.java create mode 100644 app/src/main/java/org/ast/reisa/ui/gallery/GalleryFragment.java create mode 100644 app/src/main/java/org/ast/reisa/ui/gallery/GalleryViewModel.java create mode 100644 app/src/main/java/org/ast/reisa/ui/home/HomeFragment.java create mode 100644 app/src/main/java/org/ast/reisa/ui/home/HomeViewModel.java create mode 100644 app/src/main/java/org/ast/reisa/ui/slideshow/SlideshowFragment.java create mode 100644 app/src/main/java/org/ast/reisa/ui/slideshow/SlideshowViewModel.java create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ic_menu_camera.xml create mode 100644 app/src/main/res/drawable/ic_menu_gallery.xml create mode 100644 app/src/main/res/drawable/ic_menu_slideshow.xml create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/app_bar_main.xml create mode 100644 app/src/main/res/layout/content_main.xml create mode 100644 app/src/main/res/layout/fragment_gallery.xml create mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/fragment_slideshow.xml create mode 100644 app/src/main/res/layout/nav_header_main.xml create mode 100644 app/src/main/res/menu/activity_main_drawer.xml create mode 100644 app/src/main/res/menu/main.xml create mode 100644 app/src/main/res/mipmap-anydpi/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/navigation/mobile_navigation.xml create mode 100644 app/src/main/res/values-land/dimens.xml create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values-w1240dp/dimens.xml create mode 100644 app/src/main/res/values-w600dp/dimens.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 app/src/test/java/org/ast/reisa/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..efd7cbf --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ec453bb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..c0709b7 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,46 @@ +plugins { + id 'com.android.application' +} + +android { + namespace 'org.ast.reisa' + compileSdk 33 + + defaultConfig { + applicationId "org.ast.reisa" + minSdk 30 + targetSdk 33 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + buildFeatures { + viewBinding true + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.8.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' + implementation 'androidx.navigation:navigation-fragment:2.5.3' + implementation 'androidx.navigation:navigation-ui:2.5.3' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/org/ast/reisa/ExampleInstrumentedTest.java b/app/src/androidTest/java/org/ast/reisa/ExampleInstrumentedTest.java new file mode 100644 index 0000000..67890bc --- /dev/null +++ b/app/src/androidTest/java/org/ast/reisa/ExampleInstrumentedTest.java @@ -0,0 +1,25 @@ +package org.ast.reisa; + +import android.content.Context; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("org.ast.reisa", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..fe3430b --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/org/ast/reisa/MainActivity.java b/app/src/main/java/org/ast/reisa/MainActivity.java new file mode 100644 index 0000000..6ffb2b4 --- /dev/null +++ b/app/src/main/java/org/ast/reisa/MainActivity.java @@ -0,0 +1,62 @@ +package org.ast.reisa; + +import android.os.Bundle; +import android.view.View; +import android.view.Menu; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.navigation.NavigationView; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.AppBarConfiguration; +import androidx.navigation.ui.NavigationUI; +import androidx.drawerlayout.widget.DrawerLayout; +import androidx.appcompat.app.AppCompatActivity; +import org.ast.reisa.databinding.ActivityMainBinding; + +public class MainActivity extends AppCompatActivity { + + private AppBarConfiguration mAppBarConfiguration; + private ActivityMainBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + setSupportActionBar(binding.appBarMain.toolbar); + binding.appBarMain.fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + }); + DrawerLayout drawer = binding.drawerLayout; + NavigationView navigationView = binding.navView; + // Passing each menu ID as a set of Ids because each + // menu should be considered as top level destinations. + mAppBarConfiguration = new AppBarConfiguration.Builder( + R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow) + .setOpenableLayout(drawer) + .build(); + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main); + NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); + NavigationUI.setupWithNavController(navigationView, navController); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onSupportNavigateUp() { + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main); + return NavigationUI.navigateUp(navController, mAppBarConfiguration) + || super.onSupportNavigateUp(); + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ast/reisa/ui/gallery/GalleryFragment.java b/app/src/main/java/org/ast/reisa/ui/gallery/GalleryFragment.java new file mode 100644 index 0000000..2b80343 --- /dev/null +++ b/app/src/main/java/org/ast/reisa/ui/gallery/GalleryFragment.java @@ -0,0 +1,35 @@ +package org.ast.reisa.ui.gallery; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import org.ast.reisa.databinding.FragmentGalleryBinding; + +public class GalleryFragment extends Fragment { + + private FragmentGalleryBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + GalleryViewModel galleryViewModel = + new ViewModelProvider(this).get(GalleryViewModel.class); + + binding = FragmentGalleryBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textGallery; + galleryViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ast/reisa/ui/gallery/GalleryViewModel.java b/app/src/main/java/org/ast/reisa/ui/gallery/GalleryViewModel.java new file mode 100644 index 0000000..d05d093 --- /dev/null +++ b/app/src/main/java/org/ast/reisa/ui/gallery/GalleryViewModel.java @@ -0,0 +1,19 @@ +package org.ast.reisa.ui.gallery; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class GalleryViewModel extends ViewModel { + + private final MutableLiveData mText; + + public GalleryViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is gallery fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ast/reisa/ui/home/HomeFragment.java b/app/src/main/java/org/ast/reisa/ui/home/HomeFragment.java new file mode 100644 index 0000000..bd40e86 --- /dev/null +++ b/app/src/main/java/org/ast/reisa/ui/home/HomeFragment.java @@ -0,0 +1,35 @@ +package org.ast.reisa.ui.home; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import org.ast.reisa.databinding.FragmentHomeBinding; + +public class HomeFragment extends Fragment { + + private FragmentHomeBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + HomeViewModel homeViewModel = + new ViewModelProvider(this).get(HomeViewModel.class); + + binding = FragmentHomeBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textHome; + homeViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ast/reisa/ui/home/HomeViewModel.java b/app/src/main/java/org/ast/reisa/ui/home/HomeViewModel.java new file mode 100644 index 0000000..2ca2096 --- /dev/null +++ b/app/src/main/java/org/ast/reisa/ui/home/HomeViewModel.java @@ -0,0 +1,19 @@ +package org.ast.reisa.ui.home; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class HomeViewModel extends ViewModel { + + private final MutableLiveData mText; + + public HomeViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is home fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ast/reisa/ui/slideshow/SlideshowFragment.java b/app/src/main/java/org/ast/reisa/ui/slideshow/SlideshowFragment.java new file mode 100644 index 0000000..460527b --- /dev/null +++ b/app/src/main/java/org/ast/reisa/ui/slideshow/SlideshowFragment.java @@ -0,0 +1,35 @@ +package org.ast.reisa.ui.slideshow; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import org.ast.reisa.databinding.FragmentSlideshowBinding; + +public class SlideshowFragment extends Fragment { + + private FragmentSlideshowBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + SlideshowViewModel slideshowViewModel = + new ViewModelProvider(this).get(SlideshowViewModel.class); + + binding = FragmentSlideshowBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textSlideshow; + slideshowViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ast/reisa/ui/slideshow/SlideshowViewModel.java b/app/src/main/java/org/ast/reisa/ui/slideshow/SlideshowViewModel.java new file mode 100644 index 0000000..7424f7c --- /dev/null +++ b/app/src/main/java/org/ast/reisa/ui/slideshow/SlideshowViewModel.java @@ -0,0 +1,19 @@ +package org.ast.reisa.ui.slideshow; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class SlideshowViewModel extends ViewModel { + + private final MutableLiveData mText; + + public SlideshowViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is slideshow fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..956b344 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..1ee1493 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_camera.xml b/app/src/main/res/drawable/ic_menu_camera.xml new file mode 100644 index 0000000..41688d5 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_menu_gallery.xml b/app/src/main/res/drawable/ic_menu_gallery.xml new file mode 100644 index 0000000..ff8ce52 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_slideshow.xml b/app/src/main/res/drawable/ic_menu_slideshow.xml new file mode 100644 index 0000000..ae51e49 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..a33798b --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..6882bb5 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,26 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml new file mode 100644 index 0000000..dc8fcc9 --- /dev/null +++ b/app/src/main/res/layout/app_bar_main.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml new file mode 100644 index 0000000..a3a498e --- /dev/null +++ b/app/src/main/res/layout/content_main.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_gallery.xml b/app/src/main/res/layout/fragment_gallery.xml new file mode 100644 index 0000000..82d5b10 --- /dev/null +++ b/app/src/main/res/layout/fragment_gallery.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..d91141c --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_slideshow.xml b/app/src/main/res/layout/fragment_slideshow.xml new file mode 100644 index 0000000..3c45c3e --- /dev/null +++ b/app/src/main/res/layout/fragment_slideshow.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml new file mode 100644 index 0000000..6209db8 --- /dev/null +++ b/app/src/main/res/layout/nav_header_main.xml @@ -0,0 +1,36 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml new file mode 100644 index 0000000..a407182 --- /dev/null +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..192740c --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/app/src/main/res/mipmap-anydpi/ic_launcher.xml new file mode 100644 index 0000000..50ec886 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml new file mode 100644 index 0000000..50ec886 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..c209e78ecd372343283f4157dcfd918ec5165bb3 GIT binary patch literal 1404 zcmV-?1%vuhNk&F=1pok7MM6+kP&il$0000G0000-002h-06|PpNX!5L00Dqw+t%{r zzW2vH!KF=w&cMnnN@{whkTw+#mAh0SV?YL=)3MimFYCWp#fpdtz~8$hD5VPuQgtcN zXl<@<#Cme5f5yr2h%@8TWh?)bSK`O z^Z@d={gn7J{iyxL_y_%J|L>ep{dUxUP8a{byupH&!UNR*OutO~0{*T4q5R6@ApLF! z5{w?Z150gC7#>(VHFJZ-^6O@PYp{t!jH(_Z*nzTK4 zkc{fLE4Q3|mA2`CWQ3{8;gxGizgM!zccbdQoOLZc8hThi-IhN90RFT|zlxh3Ty&VG z?Fe{#9RrRnxzsu|Lg2ddugg7k%>0JeD+{XZ7>Z~{=|M+sh1MF7~ zz>To~`~LVQe1nNoR-gEzkpe{Ak^7{{ZBk2i_<+`Bq<^GB!RYG+z)h;Y3+<{zlMUYd zrd*W4w&jZ0%kBuDZ1EW&KLpyR7r2=}fF2%0VwHM4pUs}ZI2egi#DRMYZPek*^H9YK zay4Iy3WXFG(F14xYsoDA|KXgGc5%2DhmQ1gFCkrgHBm!lXG8I5h*uf{rn48Z!_@ z4Bk6TJAB2CKYqPjiX&mWoW>OPFGd$wqroa($ne7EUK;#3VYkXaew%Kh^3OrMhtjYN?XEoY`tRPQsAkH-DSL^QqyN0>^ zmC>{#F14jz4GeW{pJoRpLFa_*GI{?T93^rX7SPQgT@LbLqpNA}<@2wH;q493)G=1Y z#-sCiRNX~qf3KgiFzB3I>4Z%AfS(3$`-aMIBU+6?gbgDb!)L~A)je+;fR0jWLL-Fu z4)P{c7{B4Hp91&%??2$v9iRSFnuckHUm}or9seH6 z>%NbT+5*@L5(I9j@06@(!{ZI?U0=pKn8uwIg&L{JV14+8s2hnvbRrU|hZCd}IJu7*;;ECgO%8_*W Kmw_-CKmY()leWbG literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b2dfe3d1ba5cf3ee31b3ecc1ced89044a1f3b7a9 GIT binary patch literal 2898 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f0f1d64e58ba64d180ce43ee13bf9a17835fbca GIT binary patch literal 982 zcmV;{11bDcNk&G_0{{S5MM6+kP&il$0000G0000l001ul06|PpNU8t;00Dqo+t#w^ z^1csucXz7-Qrhzl9HuHB%l>&>1tG2^vb*E&k^T3$FG1eQZ51g$uv4V+kI`0<^1Z@N zk?Jjh$olyC%l>)Xq;7!>{iBj&BjJ`P&$fsCfpve_epJOBkTF?nu-B7D!hO=2ZR}

C%4 zc_9eOXvPbC4kzU8YowIA8cW~Uv|eB&yYwAObSwL2vY~UYI7NXPvf3b+c^?wcs~_t{ ze_m66-0)^{JdOMKPwjpQ@Sna!*?$wTZ~su*tNv7o!gXT!GRgivP}ec?5>l1!7<(rT zds|8x(qGc673zrvYIz;J23FG{9nHMnAuP}NpAED^laz3mAN1sy+NXK)!6v1FxQ;lh zOBLA>$~P3r4b*NcqR;y6pwyhZ3_PiDb|%n1gGjl3ZU}ujInlP{eks-#oA6>rh&g+!f`hv#_%JrgYPu z(U^&XLW^QX7F9Z*SRPpQl{B%x)_AMp^}_v~?j7 zapvHMKxSf*Mtyx8I}-<*UGn3)oHd(nn=)BZ`d$lDBwq_GL($_TPaS{UeevT(AJ`p0 z9%+hQb6z)U9qjbuXjg|dExCLjpS8$VKQ55VsIC%@{N5t{NsW)=hNGI`J=x97_kbz@ E0Of=7!TQj4N+cqN`nQhxvX7dAV-`K|Ub$-q+H-5I?Tx0g9jWxd@A|?POE8`3b8fO$T))xP* z(X?&brZw({`)WU&rdAs1iTa0x6F@PIxJ&&L|dpySV!ID|iUhjCcKz(@mE z!x@~W#3H<)4Ae(4eQJRk`Iz3<1)6^m)0b_4_TRZ+cz#eD3f8V;2r-1fE!F}W zEi0MEkTTx}8i1{`l_6vo0(Vuh0HD$I4SjZ=?^?k82R51bC)2D_{y8mi_?X^=U?2|F{Vr7s!k(AZC$O#ZMyavHhlQ7 zUR~QXuH~#o#>(b$u4?s~HLF*3IcF7023AlwAYudn0FV~|odGH^05AYPEfR)8p`i{n zwg3zPVp{+wOsxKc>)(pMupKF!Y2HoUqQ3|Yu|8lwR=?5zZuhG6J?H`bSNk_wPoM{u zSL{c@pY7+c2kck>`^q1^^gR0QB7Y?KUD{vz-uVX~;V-rW)PDcI)$_UjgVV?S?=oLR zf4}zz{#*R_{LkiJ#0RdQLNC^2Vp%JPEUvG9ra2BVZ92(p9h7Ka@!yf9(lj#}>+|u* z;^_?KWdzkM`6gqPo9;;r6&JEa)}R3X{(CWv?NvgLeOTq$cZXqf7|sPImi-7cS8DCN zGf;DVt3Am`>hH3{4-WzH43Ftx)SofNe^-#|0HdCo<+8Qs!}TZP{HH8~z5n`ExcHuT zDL1m&|DVpIy=xsLO>8k92HcmfSKhflQ0H~9=^-{#!I1g(;+44xw~=* zxvNz35vfsQE)@)Zsp*6_GjYD};Squ83<_?^SbALb{a`j<0Gn%6JY!zhp=Fg}Ga2|8 z52e1WU%^L1}15Ex0fF$e@eCT(()_P zvV?CA%#Sy08_U6VPt4EtmVQraWJX` zh=N|WQ>LgrvF~R&qOfB$!%D3cGv?;Xh_z$z7k&s4N)$WYf*k=|*jCEkO19{h_(%W4 zPuOqbCw`SeAX*R}UUsbVsgtuG?xs(#Ikx9`JZoQFz0n*7ZG@Fv@kZk`gzO$HoA9kN z8U5{-yY zvV{`&WKU2$mZeoBmiJrEdzUZAv1sRxpePdg1)F*X^Y)zp^Y*R;;z~vOv-z&)&G)JQ{m!C9cmziu1^nHA z`#`0c>@PnQ9CJKgC5NjJD8HM3|KC(g5nnCq$n0Gsu_DXk36@ql%npEye|?%RmG)

FJ$wK}0tWNB{uH;AM~i literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..948a3070fe34c611c42c0d3ad3013a0dce358be0 GIT binary patch literal 1900 zcmV-y2b1_xNk&Fw2LJ$9MM6+kP&il$0000G0001A003VA06|PpNH75a00DqwTbm-~ zullQTcXxO9ki!OCRx^i?oR|n!<8G0=kI^!JSjFi-LL*`V;ET0H2IXfU0*i>o6o6Gy zRq6Ap5(_{XLdXcL-MzlN`ugSdZY_`jXhcENAu)N_0?GhF))9R;E`!bo9p?g?SRgw_ zEXHhFG$0{qYOqhdX<(wE4N@es3VIo$%il%6xP9gjiBri+2pI6aY4 zJbgh-Ud|V%3O!IcHKQx1FQH(_*TK;1>FQWbt^$K1zNn^cczkBs=QHCYZ8b&l!UV{K z{L0$KCf_&KR^}&2Fe|L&?1I7~pBENnCtCuH3sjcx6$c zwqkNkru);ie``q+_QI;IYLD9OV0ZxkuyBz|5<$1BH|vtey$> z5oto4=l-R-Aaq`Dk0}o9N0VrkqW_#;!u{!bJLDq%0092{Ghe=F;(kn} z+sQ@1=UlX30+2nWjkL$B^b!H2^QYO@iFc0{(-~yXj2TWz?VG{v`Jg zg}WyYnwGgn>{HFaG7E~pt=)sOO}*yd(UU-D(E&x{xKEl6OcU?pl)K%#U$dn1mDF19 zSw@l8G!GNFB3c3VVK0?uyqN&utT-D5%NM4g-3@Sii9tSXKtwce~uF zS&Jn746EW^wV~8zdQ1XC28~kXu8+Yo9p!<8h&(Q({J*4DBglPdpe4M_mD8AguZFn~ ztiuO~{6Bx?SfO~_ZV(GIboeR9~hAym{{fV|VM=77MxDrbW6`ujX z<3HF(>Zr;#*uCvC*bpoSr~C$h?_%nXps@A)=l_;({Fo#6Y1+Zv`!T5HB+)#^-Ud_; zBwftPN=d8Vx)*O1Mj+0oO=mZ+NVH*ptNDC-&zZ7Hwho6UQ#l-yNvc0Cm+2$$6YUk2D2t#vdZX-u3>-Be1u9gtTBiMB^xwWQ_rgvGpZ6(C@e23c!^K=>ai-Rqu zhqT`ZQof;9Bu!AD(i^PCbYV%yha9zuoKMp`U^z;3!+&d@Hud&_iy!O-$b9ZLcSRh? z)R|826w}TU!J#X6P%@Zh=La$I6zXa#h!B;{qfug}O%z@K{EZECu6zl)7CiNi%xti0 zB{OKfAj83~iJvmpTU|&q1^?^cIMn2RQ?jeSB95l}{DrEPTW{_gmU_pqTc)h@4T>~& zluq3)GM=xa(#^VU5}@FNqpc$?#SbVsX!~RH*5p0p@w z;~v{QMX0^bFT1!cXGM8K9FP+=9~-d~#TK#ZE{4umGT=;dfvWi?rYj;^l_Zxywze`W z^Cr{55U@*BalS}K%Czii_80e0#0#Zkhlij4-~I@}`-JFJ7$5{>LnoJSs??J8kWVl6|8A}RCGAu9^rAsfCE=2}tHwl93t0C?#+jMpvr7O3`2=tr{Hg$=HlnjVG^ewm|Js0J*kfPa6*GhtB>`fN!m#9J(sU!?(OSfzY*zS(FJ<-Vb zfAIg+`U)YaXv#sY(c--|X zEB+TVyZ%Ie4L$gi#Fc++`h6%vzsS$pjz9aLt+ZL(g;n$Dzy5=m=_TV(3H8^C{r0xd zp#a%}ht55dOq?yhwYPrtp-m1xXp;4X;)NhxxUpgP%XTLmO zcjaFva^}dP3$&sfFTIR_jC=2pHh9kpI@2(6V*GQo7Ws)`j)hd+tr@P~gR*2gO@+1? zG<`_tB+LJuF|SZ9tIec;h%}}6WClT`L>HSW?E{Hp1h^+mlbf_$9zA>!ug>NALJsO{ mU%z=YwVD?}XMya)Bp;vlyE5&E_6!fzx9pwrdz474!~g(M6R?N? literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b9a6956b3acdc11f40ce2bb3f6efbd845cc243f GIT binary patch literal 3918 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�(p-{x$&=IACIfoAR!za)F-^da-t3#0Dycnp zwO~NVXwXCl;jE<}>%@xz|=8fIJAB?>+E{7)|4l${4ngA3G|=r z2Dyv;VVWSgZx9Wj>qUjleGl3Ei9K4>h!(lPS%8VOG>Xu0%6VDz^O=bjJmuP7>DeUv zrbI}MlHB^^d?{zv6d=@_ZD2lg1&G7UjnVN{1}9WkaM3H~btX0GtSzB+tZ^qRgWo4m z!GmimlG$=wgXCnr6j@m<1gAL46#T~5Bnm=2{^@>|t&`9mkEPddj zAvG~@Tv~TAm2i%VW}R-g(Z0)z-Y|szHr@rk>4MAyG*Ma*7Yh#H7(!-5>DZ@8r;_dx z{prSe<>~099F8vsYd2xff7uAS%7{S)f(|@me3t2$iy&NEc7OUEchp@9A|X;;IA>8!oX+y(BKJ$EzV* znR$z;!L$s7uy@{OT~nG#B!NRraT8(X##Ho!0r_o@gg0CA-9H^;-uE&?$2$nHv_00o z%cbuUc-tCx$Uh&EZ4Nf4Zgqv)Y6>usG3>GeQnxx_Z6+PcbX-+ysbt1hQ`K1LDpOE? zrAhIZhSN9yVIAOa22gn577tbc&i3|3V8NWy&!tw##`}9*x}gtI^h1DzZRA>UuaJG) zaZ7j)dq!O}{?#8Y7~7i6fHh4{`pL?>-18|p!S75Y#^DM>-S3)vuZG+Q7l@ek zQP~#cBpWgg#mApc_sPYjpw8odQuRokmTkzcNl`^CcKB7e&;zViV;{Y{o^Y$%7i0m# z62%#1Lq!RC?}lK>%mp}T!3Xv;L*0v*>USLm``N%>w>@fwC+#T&Tx2bN4w(20JB}oU zuSa6v^kXi0xPs?pbaOHnyiqq6By1EZY9OZ^^QA>{q-Hsd&m`pbQ%8121aWG-F5xf zlZ%;B{;C>X19|`^_?dVyCq>n+41w7|!tUS!{9rHlbhX=SZO5CQ^;!Du_E7*`GiR^Q w)2!4MKjfSAeNo!9>IaV6aUZ*?W>} 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

UmY2RIYtNPVDpE$%vda+HD#3m z&VuXJ{BK&Qe+rBa7eq}Q(bq|tn(RrJAk|ztj2(i{d>nmQnM?;HF2k&9sA6up5tmjl z7lySlzMbifH17-m-Lwa_F&e7nOH?ESi3#ckR3tsM+jsck3`oG!uMS}|eAwVXv>}qxwq?QY%QJ0}r@^;fhuUA9W z*BVl>TGo&N004@xSiwDUXUvp51sVmqO3m)=B55aPwf@0=e}cN+$-BdKxY`YrT_4)0 z_d10#i44Q*rFr8MC>*)v$EJvz``(pb{e&*6k+b zsMz%($|1+8hn8c2?P(l@;Rb&CsZeYoCI3?2!LqjbwPXW3z4G$Qfj=cT5Yb%vY0(AX oeb?AaKtwrnc|$|zzw9vfvn^aJJ!zd)XFXqqy0000001=f@-~a#s literal 0 HcmV?d00001 diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml new file mode 100644 index 0000000..d78c0f8 --- /dev/null +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -0,0 +1,25 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml new file mode 100644 index 0000000..22d7f00 --- /dev/null +++ b/app/src/main/res/values-land/dimens.xml @@ -0,0 +1,3 @@ + + 48dp + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..da2f2ee --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values-w1240dp/dimens.xml b/app/src/main/res/values-w1240dp/dimens.xml new file mode 100644 index 0000000..d73f4a3 --- /dev/null +++ b/app/src/main/res/values-w1240dp/dimens.xml @@ -0,0 +1,3 @@ + + 200dp + \ No newline at end of file diff --git a/app/src/main/res/values-w600dp/dimens.xml b/app/src/main/res/values-w600dp/dimens.xml new file mode 100644 index 0000000..22d7f00 --- /dev/null +++ b/app/src/main/res/values-w600dp/dimens.xml @@ -0,0 +1,3 @@ + + 48dp + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..4ab4520 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,8 @@ + + + 16dp + 16dp + 8dp + 176dp + 16dp + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..276a927 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,13 @@ + + ReisaEyeAndroid + Open navigation drawer + Close navigation drawer + Android Studio + android.studio@android.com + Navigation header + Settings + + Home + Gallery + Slideshow + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..afde9d6 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/EyeVue/src/assets/a.png b/EyeVue/src/assets/a.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b1dd9559171fbb400f6df1800ceca72dfa5d4c GIT binary patch literal 66469 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 z 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 literal 0 HcmV?d00001 diff --git a/EyeVue/src/assets/flight.png b/EyeVue/src/assets/flight.png new file mode 100644 index 0000000000000000000000000000000000000000..3f2b65255b88608e3b967dd1ee1584fa1c1ccc2f GIT binary patch literal 5085 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 literal 0 HcmV?d00001 diff --git a/EyeVue/src/assets/flight2.png b/EyeVue/src/assets/flight2.png new file mode 100644 index 0000000000000000000000000000000000000000..7f96ac8d439151e7a68a8602abb833840613ab49 GIT binary patch literal 3201 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 literal 0 HcmV?d00001 diff --git a/EyeVue/src/assets/flight3.png b/EyeVue/src/assets/flight3.png new file mode 100644 index 0000000000000000000000000000000000000000..1ea6ca2892d5e06b2feb8f91a4273e24ca4ca7ba GIT binary patch literal 3992 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 literal 0 HcmV?d00001 diff --git a/EyeVue/src/assets/styles/colors.css b/EyeVue/src/assets/styles/colors.css new file mode 100644 index 0000000..7c9b612 --- /dev/null +++ b/EyeVue/src/assets/styles/colors.css @@ -0,0 +1,48 @@ +:root { + /* 主色调 */ + --color-primary: #3b82f6; + --color-primary-dark: #2563eb; + --color-primary-light: #60a5fa; + --color-primary-10: rgba(59, 130, 246, 0.1); + + /* 背景色 */ + --color-bg-main: #ffffff; + --color-bg-secondary: #f9fafb; + --color-bg-tertiary: #f3f4f6; + + /* 文本颜色 */ + --color-text-primary: #111827; + --color-text-secondary: #4b5563; + --color-text-tertiary: #6b7280; + + /* 边框颜色 */ + --color-border: #e5e7eb; + --color-border-light: #f3f4f6; + + /* 卡片阴影 */ + --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); +} + +/* 深色模式 */ +:root[class~="dark"] { + /* 背景色 */ + --color-bg-main: #111827; + --color-bg-secondary: #1f2937; + --color-bg-tertiary: #374151; + + /* 文本颜色 */ + --color-text-primary: #f9fafb; + --color-text-secondary: #e5e7eb; + --color-text-tertiary: #d1d5db; + + /* 边框颜色 */ + --color-border: #374151; + --color-border-light: #1f2937; + + /* 卡片阴影 */ + --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3); + --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.3), 0 1px 2px -1px rgb(0 0 0 / 0.3); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.3), 0 2px 4px -2px rgb(0 0 0 / 0.3); +} diff --git a/EyeVue/src/assets/styles/main.css b/EyeVue/src/assets/styles/main.css new file mode 100644 index 0000000..bc74997 --- /dev/null +++ b/EyeVue/src/assets/styles/main.css @@ -0,0 +1,72 @@ +@import "./colors.css"; +@import "./variables.css"; +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +/* 添加字体定义 */ +@font-face { + font-family: "LXWK"; + font-weight: 100 900; + font-display: swap; + font-style: normal; + src: url("https://cdn.jsdmirror.com/gh/acanyo/mmm.sd@master/assets/font/lxwk.woff2") + format("woff2"); +} + +@layer base { + html { + font-family: + "LXWK", + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + "Helvetica Neue", + Arial, + sans-serif; + scroll-behavior: smooth; + -webkit-tap-highlight-color: transparent; + } + + body { + @apply bg-main text-primary antialiased; + } + + /* 移动端优化 */ + @media (max-width: 768px) { + html { + font-size: 14px; + } + } + + /* 移动端点击态优化 */ + @media (hover: none) { + .hover\:scale-105:active { + transform: scale(1.02); + } + } +} + +@layer components { + .btn-primary { + @apply inline-block px-6 py-3 bg-primary text-white rounded-lg + hover:bg-primary-dark transition-colors duration-300; + } + + .btn-secondary { + @apply inline-block px-6 py-3 border-2 border-primary text-primary rounded-lg + hover:bg-primary hover:text-white transition-colors duration-300; + } + + .card { + @apply bg-main border border-light rounded-2xl shadow-sm + hover:shadow-md transition-all duration-300; + } +} + +/* 移动端滚动优化 */ +.smooth-scroll { + -webkit-overflow-scrolling: touch; + scroll-behavior: smooth; +} diff --git a/EyeVue/src/assets/styles/variables.css b/EyeVue/src/assets/styles/variables.css new file mode 100644 index 0000000..5d7c9c6 --- /dev/null +++ b/EyeVue/src/assets/styles/variables.css @@ -0,0 +1,16 @@ +:root { + --font-family-custom: "LXWK"; + --font-family-system: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, sans-serif; + --font-family: var(--font-family-custom), var(--font-family-system); +} + +/* 添加字体定义 */ +@font-face { + font-family: "LXWK"; + font-weight: 100 900; + font-display: swap; + font-style: normal; + src: url("https://cdn.jsdmirror.com/gh/acanyo/mmm.sd@master/assets/font/lxwk.woff2") + format("woff2"); +} diff --git a/EyeVue/src/components/Card.vue b/EyeVue/src/components/Card.vue new file mode 100644 index 0000000..57f68df --- /dev/null +++ b/EyeVue/src/components/Card.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/EyeVue/src/components/CustomToast.vue b/EyeVue/src/components/CustomToast.vue new file mode 100644 index 0000000..1595fc9 --- /dev/null +++ b/EyeVue/src/components/CustomToast.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/EyeVue/src/components/FloatingButton.vue b/EyeVue/src/components/FloatingButton.vue new file mode 100644 index 0000000..36c97d1 --- /dev/null +++ b/EyeVue/src/components/FloatingButton.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/EyeVue/src/components/LargePopup.vue b/EyeVue/src/components/LargePopup.vue new file mode 100644 index 0000000..2579105 --- /dev/null +++ b/EyeVue/src/components/LargePopup.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/EyeVue/src/components/MarkdownModal.vue b/EyeVue/src/components/MarkdownModal.vue new file mode 100644 index 0000000..574e664 --- /dev/null +++ b/EyeVue/src/components/MarkdownModal.vue @@ -0,0 +1,76 @@ + + + + + + + diff --git a/EyeVue/src/components/PageTransition.vue b/EyeVue/src/components/PageTransition.vue new file mode 100644 index 0000000..70c078c --- /dev/null +++ b/EyeVue/src/components/PageTransition.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/EyeVue/src/components/PieChart.vue b/EyeVue/src/components/PieChart.vue new file mode 100644 index 0000000..0071822 --- /dev/null +++ b/EyeVue/src/components/PieChart.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/EyeVue/src/components/PlayerCard.vue b/EyeVue/src/components/PlayerCard.vue new file mode 100644 index 0000000..7b6dc7f --- /dev/null +++ b/EyeVue/src/components/PlayerCard.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/EyeVue/src/components/ProgressBar.vue b/EyeVue/src/components/ProgressBar.vue new file mode 100644 index 0000000..8d625c5 --- /dev/null +++ b/EyeVue/src/components/ProgressBar.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/EyeVue/src/components/ProjectCard.vue b/EyeVue/src/components/ProjectCard.vue new file mode 100644 index 0000000..faafa9f --- /dev/null +++ b/EyeVue/src/components/ProjectCard.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/EyeVue/src/components/QRScanner.vue b/EyeVue/src/components/QRScanner.vue new file mode 100644 index 0000000..62c719e --- /dev/null +++ b/EyeVue/src/components/QRScanner.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/EyeVue/src/components/ThemeToggle.vue b/EyeVue/src/components/ThemeToggle.vue new file mode 100644 index 0000000..661235c --- /dev/null +++ b/EyeVue/src/components/ThemeToggle.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/EyeVue/src/components/Toolbar.vue b/EyeVue/src/components/Toolbar.vue new file mode 100644 index 0000000..9f43ce4 --- /dev/null +++ b/EyeVue/src/components/Toolbar.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/EyeVue/src/components/effects/Fireworks.vue b/EyeVue/src/components/effects/Fireworks.vue new file mode 100644 index 0000000..d201133 --- /dev/null +++ b/EyeVue/src/components/effects/Fireworks.vue @@ -0,0 +1,159 @@ + + + diff --git a/EyeVue/src/components/layout/TheFooter.vue b/EyeVue/src/components/layout/TheFooter.vue new file mode 100644 index 0000000..0844562 --- /dev/null +++ b/EyeVue/src/components/layout/TheFooter.vue @@ -0,0 +1,82 @@ + + + diff --git a/EyeVue/src/components/layout/TheHeader.vue b/EyeVue/src/components/layout/TheHeader.vue new file mode 100644 index 0000000..c8ce890 --- /dev/null +++ b/EyeVue/src/components/layout/TheHeader.vue @@ -0,0 +1,173 @@ + + + + + + diff --git a/EyeVue/src/components/layout/ToolLayout.vue b/EyeVue/src/components/layout/ToolLayout.vue new file mode 100644 index 0000000..6d75243 --- /dev/null +++ b/EyeVue/src/components/layout/ToolLayout.vue @@ -0,0 +1,27 @@ + + + diff --git a/EyeVue/src/components/ui/LazyImage.vue b/EyeVue/src/components/ui/LazyImage.vue new file mode 100644 index 0000000..a32b078 --- /dev/null +++ b/EyeVue/src/components/ui/LazyImage.vue @@ -0,0 +1,48 @@ + + + diff --git a/EyeVue/src/components/ui/Modal.vue b/EyeVue/src/components/ui/Modal.vue new file mode 100644 index 0000000..3d60986 --- /dev/null +++ b/EyeVue/src/components/ui/Modal.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/EyeVue/src/components/ui/Tabs.vue b/EyeVue/src/components/ui/Tabs.vue new file mode 100644 index 0000000..e837612 --- /dev/null +++ b/EyeVue/src/components/ui/Tabs.vue @@ -0,0 +1,44 @@ + + + diff --git a/EyeVue/src/components/ui/Toast.vue b/EyeVue/src/components/ui/Toast.vue new file mode 100644 index 0000000..7291c70 --- /dev/null +++ b/EyeVue/src/components/ui/Toast.vue @@ -0,0 +1,61 @@ + + + diff --git a/EyeVue/src/components/ui/WarningDialog.vue b/EyeVue/src/components/ui/WarningDialog.vue new file mode 100644 index 0000000..4272cef --- /dev/null +++ b/EyeVue/src/components/ui/WarningDialog.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/EyeVue/src/config/font.ts b/EyeVue/src/config/font.ts new file mode 100644 index 0000000..5a4a3b1 --- /dev/null +++ b/EyeVue/src/config/font.ts @@ -0,0 +1,17 @@ +interface FontConfig { + enabled: boolean; + name: string; + url: string; + preload?: boolean; + display?: "auto" | "block" | "swap" | "fallback" | "optional"; + weights?: string; +} + +export const fontConfig: FontConfig = { + enabled: true, + name: "LXWK", + url: "https://cdn.jsdmirror.com/gh/acanyo/mmm.sd@master/assets/font/lxwk.woff2", + preload: true, + display: "swap", + weights: "100 900", +}; diff --git a/EyeVue/src/config/footer.ts b/EyeVue/src/config/footer.ts new file mode 100644 index 0000000..7be7e79 --- /dev/null +++ b/EyeVue/src/config/footer.ts @@ -0,0 +1,39 @@ +interface FooterLink { + text: string; + to?: string; // 内部路由 + href?: string; // 外部链接 + target?: string; +} + +interface FooterConfig { + links: FooterLink[]; + provider: { + name: string; + link: string; + logo: string; + text: string; + }; +} + +export const footerConfig: FooterConfig = { + links: [ + + + { + text: "博客", + href: "https://www.godserver.cn", + target: "_blank", + }, + { + text: "GitHub", + href: "https://github.com/Spaso1", + target: "_blank", + }, + ], + provider: { + name: "Aliyun", + link: "https://www.aliyun.com/", + logo: "https://avatars.githubusercontent.com/u/172407636?v=4", + text: "提供 CDN 加速 / 云存储服务", + }, +}; diff --git a/EyeVue/src/config/index.ts b/EyeVue/src/config/index.ts new file mode 100644 index 0000000..cb18476 --- /dev/null +++ b/EyeVue/src/config/index.ts @@ -0,0 +1,46 @@ +import { siteConfig } from "./site"; + +// 导出所有配置 +export { siteConfig }; + +// 合并基础配置 +export const config = { + ...siteConfig, + siteUrl: "https://www.godserver.cn", // 默认值 +}; + +// 生成 sitemap.xml 内容 +export const generateSitemap = ( + siteUrl: string, +) => ` + + + ${siteUrl}/ + 2024-03-21 + weekly + 1.0 + + + ${siteUrl}/blog + 2024-03-21 + weekly + 0.8 + + + ${siteUrl}/skills + 2024-03-21 + monthly + 0.8 + + + ${siteUrl}/contact + 2024-03-21 + monthly + 0.7 + +`; + +// 生成 robots.txt 内容 +export const generateRobots = (siteUrl: string) => `User-agent: * +Allow: / +Sitemap: ${siteUrl}/sitemap.xml`; diff --git a/EyeVue/src/config/navigation.ts b/EyeVue/src/config/navigation.ts new file mode 100644 index 0000000..b5ce81e --- /dev/null +++ b/EyeVue/src/config/navigation.ts @@ -0,0 +1,11 @@ +export interface Tab { + id: string; + label: string; + icon: string; +} + +export const tabs: Tab[] = [ + { id: "projects", label: "项目展示", icon: "🎨" }, + { id: "tools", label: "在线工具", icon: "🛠" }, + { id: "bookmarks", label: "网址导航", icon: "🔖" }, +]; diff --git a/EyeVue/src/config/notice.ts b/EyeVue/src/config/notice.ts new file mode 100644 index 0000000..e6b19d7 --- /dev/null +++ b/EyeVue/src/config/notice.ts @@ -0,0 +1,53 @@ +import type { NoticeButton, NoticeConfig } from "../types/notice"; + +interface ExtendedNoticeButton extends NoticeButton { + type: "primary" | "secondary" | "danger"; +} + +interface ExtendedNoticeConfig extends NoticeConfig { + enabled: boolean; + showFireworks: boolean; + defaultShowAfter?: number | "refresh" | null; + buttons: ExtendedNoticeButton[]; +} + +export const noticeConfig: ExtendedNoticeConfig = { + id: "site_notice_v1", + enabled: true, + showFireworks: true, + title: "网站公告", + content: ` +

+ `, + width: "500px", + maskClosable: true, + showClose: true, + defaultShowAfter: null, + buttons: [ + { + text: "稍后查看", + type: "secondary", + action: "close", + showAfter: "refresh", + }, + { + text: "立即体验", + type: "primary", + action: "navigate", + to: "/projects", + showAfter: 3 * 60 * 60 * 1000, + }, + ], +}; diff --git a/EyeVue/src/config/projects.ts b/EyeVue/src/config/projects.ts new file mode 100644 index 0000000..1534dd5 --- /dev/null +++ b/EyeVue/src/config/projects.ts @@ -0,0 +1,41 @@ +export interface Project { + id: number; + title: string; + description: string; + tags: string[]; + image: string; + link?: string; + status: "completed" | "developing" | "planning"; +} + +export const projects: Project[] = [ + { + id: 2, + title: "FindMaimaiUltra", + description: + "全新重构版本 Powered By Reisa", + tags: ["技术分享", "Blog", "Markdown","舞萌DX","中二节奏","B50","查分器","旅行"], + image: "https://picsum.photos/800/600?random=3", + link: "https://github.com/Spaso1/FindMaimaiDX_Phone", + status: "completed", + }, + { + id: 3, + title: "EasyTop", + description: "服务状态监控页面,实时监控各项服务的运行状态。", + tags: ["监控", "服务状态", "实时数据"], + image: "https://picsum.photos/800/600?random=4", + link: "https://github.com/Spaso1/EasyTop", + status: "completed", + }, + { + id: 4, + title: "AsTrip", + description: + "旅行规划软件", + tags: ["数据分析", "统计", "开源","旅行"], + image: "https://picsum.photos/800/600?random=5", + link: "https://github.com/Spaso1/Astrip", + status: "completed", + }, +]; diff --git a/EyeVue/src/config/rss.ts b/EyeVue/src/config/rss.ts new file mode 100644 index 0000000..f93fc86 --- /dev/null +++ b/EyeVue/src/config/rss.ts @@ -0,0 +1,7 @@ +interface RssConfig { + url: string; +} + +export const rssConfig: RssConfig = { + url: "https://www.godserver.cn/rss.xml", // 直接使用完整 URL +}; diff --git a/EyeVue/src/config/site-info.ts b/EyeVue/src/config/site-info.ts new file mode 100644 index 0000000..4425e46 --- /dev/null +++ b/EyeVue/src/config/site-info.ts @@ -0,0 +1,20 @@ +interface SiteInfo { + enabled: boolean; + text: string; + link: string; + position?: "top" | "bottom"; + theme?: "dark" | "light"; + style?: string; + linkStyle?: string; + version?: string; +} + +export const siteInfo: SiteInfo = { + enabled: true, + text: "一个使用 Vue 3 + TypeScript + Vite 构建的现代化个人主页,具有博客文章展示、项目展示、联系表单等功能。", + version: "V.2.3", + link: "https://github.com/Spaso1/ReisaPage", + position: "bottom", + theme: "dark", + style: "position: fixed; bottom: 0; left: 0; width: 100%; z-index: 1000;", +}; diff --git a/EyeVue/src/config/site.ts b/EyeVue/src/config/site.ts new file mode 100644 index 0000000..fc250d7 --- /dev/null +++ b/EyeVue/src/config/site.ts @@ -0,0 +1,39 @@ +export const siteConfig = { + // 基本信息 + name: "Powered by Reisa", // 作者名称 + title: "FindMaimaiDX开发者 学生", // 职位头衔 + siteName: "ReisaSpasol | MaimaiDX", // 网站标题 + siteDescription: + "专注于Java、Spring Boot、微服务等后端技术开发的个人作品集网站", // 网站描述 + author: "ReisaSpasol", // 作者信息 + + // 图片资源配置 + images: { + logo: "./assets/icon.png", // 网站Logo + icon: "./assets/icon.png", // 网站图标 + avatar: "./assets/icon.png", // 个人头像 + ogImage: "./assets/icon.png", // 社交分享图片 + }, + + // 个性化配置 + slogan: "Use FindMaimai!", // 个性签名 + skills: ["Java", "Spring Boot", "MySQL", "Vue", "Docker", "Git","FindMaimai"], // 技能标签 + + // SEO 相关配置 + language: "zh-CN", // 网站语言 + themeColor: "#4F46E5", // 主题色 + twitterHandle: "@Spasolmodlic", // Twitter账号 + githubHandle: "Spaso1", // GitHub账号 + + // Schema.org 结构化数据 + organization: { + name: "Reisa", // 组织名称 + logo: "./assets/icon.png", // 组织Logo + }, + + // 社交媒体链接 + social: { + github: "https://github.com/acanyo", // GitHub主页 + email: "astralpath@163.com", // 联系邮箱 + }, +}; diff --git a/EyeVue/src/config/tools.ts b/EyeVue/src/config/tools.ts new file mode 100644 index 0000000..1e4a351 --- /dev/null +++ b/EyeVue/src/config/tools.ts @@ -0,0 +1,33 @@ +import JsonFormatterView from "@/views/tools/JsonFormatterView.vue"; +import TimestampView from "@/views/tools/TimestampView.vue"; + +export interface Tool { + id: number; + title: string; + description: string; + tags: string[]; + image: string; + component: any; + status: "completed" | "developing" | "planning"; +} + +export const tools: Tool[] = [ + { + id: 1, + title: "JSON 格式化工具", + description: "在线 JSON 格式化工具,支持压缩、美化、验证和转换等功能", + tags: ["JSON", "格式化", "在线工具"], + image: "https://picsum.photos/800/600?random=1", + component: JsonFormatterView, + status: "completed", + }, + { + id: 2, + title: "时间戳转换器", + description: "时间戳与日期格式互转工具,支持多种格式和时区设置", + tags: ["时间戳", "日期转换", "时区"], + image: "https://picsum.photos/800/600?random=2", + component: TimestampView, + status: "completed", + }, +]; diff --git a/EyeVue/src/env.d.ts b/EyeVue/src/env.d.ts new file mode 100644 index 0000000..c951361 --- /dev/null +++ b/EyeVue/src/env.d.ts @@ -0,0 +1,167 @@ +/// + +declare global { + interface ImportMetaEnv { + readonly VITE_APP_TITLE: string; + readonly VITE_APP_DESCRIPTION: string; + readonly VITE_APP_KEYWORDS: string; + readonly VITE_APP_AUTHOR: string; + readonly VITE_APP_URL: string; + readonly VITE_APP_LOGO: string; + readonly VITE_APP_GITHUB: string; + readonly VITE_APP_TWITTER: string; + readonly VITE_APP_TWITTER_URL: string; + readonly VITE_APP_THEME_COLOR: string; + readonly VITE_EMAILJS_SERVICE_ID: string; + readonly VITE_EMAILJS_TEMPLATE_ID: string; + readonly VITE_EMAILJS_PUBLIC_KEY: string; + readonly VITE_SITE_URL: string; + readonly DEV: boolean; + readonly PROD: boolean; + readonly MODE: string; + } + + interface ImportMeta { + readonly env: ImportMetaEnv; + readonly hot?: { + readonly data: any; + accept(): void; + accept(cb: (mod: any) => void): void; + accept(dep: string, cb: (mod: any) => void): void; + accept(deps: string[], cb: (mods: any[]) => void): void; + prune(cb: () => void): void; + dispose(cb: (data: any) => void): void; + decline(): void; + invalidate(): void; + on(event: string, cb: (...args: any[]) => void): void; + }; + readonly glob: (glob: string) => Record Promise>; + } +} + +// Vue 组件类型声明 +declare module "*.vue" { + import type { DefineComponent } from "vue"; + const component: DefineComponent<{}, {}, any>; + export default component; +} + +// Vue 宏命令类型声明 +declare module "vue" { + import type { DefineComponent, Ref } from "vue"; + + // 生命周期钩子 + export declare const onMounted: (cb: () => void) => void; + export declare const onBeforeMount: (cb: () => void) => void; + export declare const onBeforeUnmount: (cb: () => void) => void; + export declare const onUnmounted: (cb: () => void) => void; + export declare const onActivated: (cb: () => void) => void; + export declare const onDeactivated: (cb: () => void) => void; + export declare const onBeforeUpdate: (cb: () => void) => void; + export declare const onUpdated: (cb: () => void) => void; + export declare const onErrorCaptured: (cb: (err: unknown) => void) => void; + + // 组合式 API + export declare const createApp: any; + export declare const ref: (value: T) => Ref; + export declare const computed: (getter: () => T) => Ref; + export declare const watch: typeof import("vue").watch; + export declare const watchEffect: (effect: () => void) => void; + export declare const reactive: (target: T) => T; + export declare const readonly: (target: T) => Readonly; + + // 组件相关 + export declare const defineProps: { + >(): Readonly; + >(props: T): Readonly; + }; + + export declare const defineEmits: { + >(): T; + >(emits: T): T; + }; + + export declare const defineExpose: (exposed?: Record) => void; + export declare const withDefaults: < + Props, + Defaults extends { [K in keyof Props]?: Props[K] }, + >( + props: Props, + defaults: Defaults, + ) => { + [K in keyof Props]: K extends keyof Defaults ? Defaults[K] : Props[K]; + }; +} + +// 第三方模块声明 +declare module "vite" { + import type { UserConfig, Plugin } from "vite"; + + export interface ViteConfig extends UserConfig { + plugins?: Plugin[]; + } + + export const defineConfig: (config: T) => T; +} + +declare module "vue-router" { + import type { Component } from "vue"; + + export interface RouteMeta { + title?: string; + description?: string; + keywords?: string; + transition?: string; + requiresAuth?: boolean; + [key: string]: any; + } + + export interface RouteRecordRaw { + path: string; + name?: string; + component?: Component | (() => Promise); + components?: { [key: string]: Component }; + redirect?: string | { name: string }; + meta?: RouteMeta; + children?: RouteRecordRaw[]; + } + + export interface Router { + push(to: string | { name: string; params?: any }): Promise; + } + + export interface Route { + meta: RouteMeta; + params: Record; + query: Record; + hash: string; + path: string; + fullPath: string; + matched: RouteRecordRaw[]; + } + + // 添加 RouterLink 组件类型 + export interface RouterLinkProps { + to: string | { name: string; params?: Record }; + replace?: boolean; + activeClass?: string; + exactActiveClass?: string; + custom?: boolean; + ariaCurrentValue?: string; + } + + export const RouterLink: Component; + export const RouterView: Component; + export const createRouter: any; + export const createWebHistory: any; + export const useRoute: () => Route; + export const useRouter: () => Router; +} + +declare module "@emailjs/browser" { + const emailjs: any; + export default emailjs; +} + +declare module "vite-plugin-compression"; +declare module "vite-plugin-image-optimizer"; diff --git a/EyeVue/src/eventBus.ts b/EyeVue/src/eventBus.ts new file mode 100644 index 0000000..65d4820 --- /dev/null +++ b/EyeVue/src/eventBus.ts @@ -0,0 +1,9 @@ +import mitt from 'mitt'; + +type Events = { + 'refresh-user-info': void; +}; + +const eventBus = mitt(); + +export default eventBus; diff --git a/EyeVue/src/main.ts b/EyeVue/src/main.ts new file mode 100644 index 0000000..f07e33d --- /dev/null +++ b/EyeVue/src/main.ts @@ -0,0 +1,14 @@ +import { createApp } from "vue"; +import App from "./App.vue"; +import router from "./router"; +import "./assets/styles/main.css"; +import { initFontLoading } from "./utils/font"; + +const app = createApp(App); +app.use(router); +app.mount("#app"); + +// 初始化字体加载 +initFontLoading().then(() => { + console.log("Font initialization complete"); +}); diff --git a/EyeVue/src/router/index.ts b/EyeVue/src/router/index.ts new file mode 100644 index 0000000..08b5be3 --- /dev/null +++ b/EyeVue/src/router/index.ts @@ -0,0 +1,33 @@ +import { createRouter, createWebHistory } from "vue-router"; +import type { RouteRecordRaw } from "vue-router"; +import HomeView from "@/views/HomeView.vue"; + +const routes: RouteRecordRaw[] = [ + { + path: "/", + name: "home", + component: HomeView, + meta: { + title: "Index", + }, + } +]; + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes, + scrollBehavior(to, from, savedPosition) { + if (savedPosition) { + return savedPosition; + } + return { top: 0 }; + }, +}); + +// 路由标题 +router.beforeEach((to, from, next) => { + document.title = `${to.meta.title || "首页"} | Reisa`; + next(); +}); + +export default router; diff --git a/EyeVue/src/services/rss.ts b/EyeVue/src/services/rss.ts new file mode 100644 index 0000000..78b8a31 --- /dev/null +++ b/EyeVue/src/services/rss.ts @@ -0,0 +1,51 @@ +export interface BlogPost { + title: string; + link: string; + content: string; + creator: string; + pubDate: string; + categories?: string[]; + description?: string; +} + +export async function fetchBlogPosts(rssUrl: string): Promise { + try { + const response = await fetch(rssUrl, { + headers: { + Accept: "application/xml, text/xml, */*", + }, + }); + const xmlText = await response.text(); + const parser = new DOMParser(); + const xmlDoc = parser.parseFromString(xmlText, "text/xml"); + + const items = xmlDoc.querySelectorAll("item"); + + return Array.from(items).map((item) => { + const getElementText = (tagName: string) => + item.querySelector(tagName)?.textContent?.trim() || ""; + + const getCleanContent = (content: string) => { + return content.replace("", ""); + }; + + const description = getElementText("description"); + const content = description.includes("CDATA") + ? getCleanContent(description) + : description; + + return { + title: getCleanContent(getElementText("title")), + link: getElementText("link"), + content: content, + creator: "Reisa", + pubDate: getElementText("pubDate"), + categories: [getElementText("category")].filter(Boolean), + description: content, + }; + }); + } catch (error) { + console.error("获取博客文章失败:", error); + return []; + } +} diff --git a/EyeVue/src/types/blog.ts b/EyeVue/src/types/blog.ts new file mode 100644 index 0000000..2124d89 --- /dev/null +++ b/EyeVue/src/types/blog.ts @@ -0,0 +1,8 @@ +export interface BlogPost { + title: string; + link: string; + date: Date; + description: string; + category?: string; + image?: string; +} diff --git a/EyeVue/src/types/global.d.ts b/EyeVue/src/types/global.d.ts new file mode 100644 index 0000000..61d2837 --- /dev/null +++ b/EyeVue/src/types/global.d.ts @@ -0,0 +1,8 @@ +interface Window { + $toast: { + show: (text: string, type?: "success" | "error" | "info") => void; + success: (text: string) => void; + error: (text: string) => void; + info: (text: string) => void; + }; +} diff --git a/EyeVue/src/types/notice.ts b/EyeVue/src/types/notice.ts new file mode 100644 index 0000000..e5c0526 --- /dev/null +++ b/EyeVue/src/types/notice.ts @@ -0,0 +1,19 @@ +export interface NoticeButton { + text: string; + type?: string; + action: "close" | "navigate" | "link" | "custom"; + to?: string; + href?: string; + handler?: () => void; + showAfter?: number | "refresh" | null; +} + +export interface NoticeConfig { + id: string; + title: string; + content: string; + width?: string; + maskClosable?: boolean; + showClose?: boolean; + buttons: NoticeButton[]; +} diff --git a/EyeVue/src/utils/console.ts b/EyeVue/src/utils/console.ts new file mode 100644 index 0000000..edaa25c --- /dev/null +++ b/EyeVue/src/utils/console.ts @@ -0,0 +1,77 @@ +interface ConsoleInfo { + text: string; + version: string | undefined; + link: string; + style?: string; +} + +export const printConsoleInfo = (info: ConsoleInfo) => { + // 标题样式 + const titleStyle = [ + "background: linear-gradient(45deg, #2193b0, #6dd5ed)", + "color: white", + "padding: 12px 20px", + "border-radius: 4px 0 0 4px", + "font-weight: bold", + "font-size: 13px", + "text-shadow: 0 1px 1px rgba(0,0,0,0.2)", + "box-shadow: inset 0 -3px 0 rgba(0,0,0,0.1)", + ].join(";"); + + // 版本样式 + const versionStyle = [ + "background: linear-gradient(45deg, #6dd5ed, #2193b0)", + "color: white", + "padding: 12px 20px", + "font-weight: bold", + "font-size: 13px", + "text-shadow: 0 1px 1px rgba(0,0,0,0.2)", + "box-shadow: inset 0 -3px 0 rgba(0,0,0,0.1)", + ].join(";"); + + // 链接样式 + const linkStyle = [ + "background: linear-gradient(45deg, #2193b0, #6dd5ed)", + "color: white", + "padding: 12px 20px", + "border-radius: 0 4px 4px 0", + "font-weight: bold", + "font-size: 13px", + "text-shadow: 0 1px 1px rgba(0,0,0,0.2)", + "box-shadow: inset 0 -3px 0 rgba(0,0,0,0.1)", + ].join(";"); + + // 主信息 + console.log( + `%c ${info.text} %c ${info.version || ""} %c ${info.link} `, + titleStyle, + versionStyle, + linkStyle, + ); + + // 欢迎信息 + const welcomeStyle = [ + "color: #2193b0", + "font-size: 14px", + "font-weight: bold", + "padding: 12px 20px", + "margin: 20px 0", + "border: 2px solid #2193b0", + "border-radius: 4px", + "background: rgba(33,147,176,0.1)", + "text-shadow: 0 1px 1px rgba(255,255,255,0.8)", + ].join(";"); + + console.log("%c欢迎访问我的个人主页!", welcomeStyle); + + // 装饰线 + const lineStyle = [ + "font-size: 1px", + "padding: 0", + "margin: 4px 0", + "line-height: 1px", + "background: linear-gradient(to right, #2193b0, #6dd5ed)", + ].join(";"); + + console.log("%c ", `${lineStyle}; padding: 2px 125px;`); +}; diff --git a/EyeVue/src/utils/copyright.ts b/EyeVue/src/utils/copyright.ts new file mode 100644 index 0000000..8700c68 --- /dev/null +++ b/EyeVue/src/utils/copyright.ts @@ -0,0 +1,42 @@ +/** + * @license + * Copyright (c) 2024 Reisa + * + * This file is part of the project and must retain the author's credit. + * Modifications to this file must maintain original attribution. + * Commercial use requires explicit permission. + */ + +// 使用一个自执行函数来增加混淆难度 +export const createCopyrightGuard = (() => { + const key = btoa("Reisa" + new Date().getFullYear()); + + return (element: HTMLElement | null) => { + if (!element) return false; + + // 随机检查函数 + const checks = [ + () => element.textContent?.includes("©"), + () => element.textContent?.includes("Reisa"), + () => element.textContent?.includes("All rights"), + () => element.querySelector("a")?.href.includes("godserver.cn"), + () => !element.textContent?.includes("Modified"), + () => element.children.length >= 3, + ]; + + // 随机打乱检查顺序 + const shuffledChecks = checks.sort(() => Math.random() - 0.5); + + // 执行所有检查 + const isValid = shuffledChecks.every((check) => { + try { + return check(); + } catch { + return false; + } + }); + + + return isValid; + }; +})(); diff --git a/EyeVue/src/utils/font.ts b/EyeVue/src/utils/font.ts new file mode 100644 index 0000000..2705313 --- /dev/null +++ b/EyeVue/src/utils/font.ts @@ -0,0 +1,21 @@ +export const initFontLoading = async () => { + try { + // 等待字体加载 + await document.fonts.load('1em "LXWK"'); + + // 检查字体是否加载成功 + const isLoaded = document.fonts.check('1em "LXWK"'); + console.log("Font loaded:", isLoaded); + + if (!isLoaded) { + // 如果字体加载失败,使用系统字体 + document.documentElement.style.fontFamily = + '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'; + } + } catch (error) { + console.error("Font loading error:", error); + // 出错时使用系统字体 + document.documentElement.style.fontFamily = + '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'; + } +}; diff --git a/EyeVue/src/utils/rss.ts b/EyeVue/src/utils/rss.ts new file mode 100644 index 0000000..3867c26 --- /dev/null +++ b/EyeVue/src/utils/rss.ts @@ -0,0 +1,43 @@ +import type { BlogPost } from "../types/blog"; +import { rssConfig } from "@/config/rss"; + +// 使用 RSS2JSON API 转换 RSS 为 JSON +export const fetchBlogPosts = async (): Promise => { + try { + if (!rssConfig.url) { + throw new Error("RSS URL is not defined"); + } + + // 使用 RSS2JSON 服务 + const apiUrl = `https://api.rss2json.com/v1/api.json?rss_url=${encodeURIComponent(rssConfig.url)}`; + const response = await fetch(apiUrl, { + headers: { + "Cache-Control": "no-cache", + "Pragma": "no-cache" + } + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + + if (data.status !== "ok") { + throw new Error("Failed to fetch RSS feed"); + } + + return data.items.map( + (item: any): BlogPost => ({ + title: item.title, + link: item.link, + date: new Date(item.pubDate), + description: item.content || item.description, + category: item.category || "默认分类", + }), + ); + } catch (error) { + console.error("获取博客文章失败:", error); + return []; + } +}; diff --git a/EyeVue/src/utils/security.ts b/EyeVue/src/utils/security.ts new file mode 100644 index 0000000..d6dc1c9 --- /dev/null +++ b/EyeVue/src/utils/security.ts @@ -0,0 +1,70 @@ +// 禁用开发者工具和快捷键 +export const initSecurityMeasures = () => { + let warningShown = false; + let warningTimeout: number | null = null; + + // 显示友好提示 + const showWarning = () => { + if (!warningShown) { + warningShown = true; + const warningDialog = document.querySelector("#warning-dialog"); + if (warningDialog) { + warningDialog.open(); + // 清除之前的定时器 + if (warningTimeout) { + clearTimeout(warningTimeout); + } + // 3秒后自动关闭 + warningTimeout = window.setTimeout(() => { + warningDialog.close(); + warningShown = false; + warningTimeout = null; + }, 3000); + } + } + }; + + // 监听右键菜单 + document.addEventListener( + "contextmenu", + (e: MouseEvent) => { + e.preventDefault(); + showWarning(); + }, + true, + ); + + // 监听开发者工具快捷键 + document.addEventListener( + "keydown", + (e: KeyboardEvent) => { + const isMacCmd = e.metaKey && !e.ctrlKey; + const isWinCtrl = e.ctrlKey && !e.metaKey; + + if ( + e.key === "F12" || + ((isMacCmd || isWinCtrl) && + e.shiftKey && + ["I", "J", "C", "U"].includes(e.key.toUpperCase())) + ) { + e.preventDefault(); + showWarning(); + } + }, + true, + ); + + // 检测开发者工具状态 + const checkDevTools = () => { + const threshold = 160; + const widthThreshold = window.outerWidth - window.innerWidth > threshold; + const heightThreshold = window.outerHeight - window.innerHeight > threshold; + + if (widthThreshold || heightThreshold) { + showWarning(); + } + }; + + // 每 1000ms 检查一次 + setInterval(checkDevTools, 1000); +}; diff --git a/EyeVue/src/views/ErrorView.vue b/EyeVue/src/views/ErrorView.vue new file mode 100644 index 0000000..649d3b9 --- /dev/null +++ b/EyeVue/src/views/ErrorView.vue @@ -0,0 +1,35 @@ + + + diff --git a/EyeVue/src/views/HomeView.vue b/EyeVue/src/views/HomeView.vue new file mode 100644 index 0000000..be6bb54 --- /dev/null +++ b/EyeVue/src/views/HomeView.vue @@ -0,0 +1,420 @@ + + + + + diff --git a/EyeVue/src/views/edit.vue b/EyeVue/src/views/edit.vue new file mode 100644 index 0000000..5e5229c --- /dev/null +++ b/EyeVue/src/views/edit.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/EyeVue/src/views/page.vue b/EyeVue/src/views/page.vue new file mode 100644 index 0000000..96fe9cc --- /dev/null +++ b/EyeVue/src/views/page.vue @@ -0,0 +1,449 @@ + + + + + + diff --git a/EyeVue/src/views/read.vue b/EyeVue/src/views/read.vue new file mode 100644 index 0000000..6806470 --- /dev/null +++ b/EyeVue/src/views/read.vue @@ -0,0 +1,364 @@ + + + + + diff --git a/EyeVue/src/views/readMoblie.vue b/EyeVue/src/views/readMoblie.vue new file mode 100644 index 0000000..1e14353 --- /dev/null +++ b/EyeVue/src/views/readMoblie.vue @@ -0,0 +1,408 @@ + + + + + + + diff --git a/EyeVue/src/views/tools/BookmarksView.vue b/EyeVue/src/views/tools/BookmarksView.vue new file mode 100644 index 0000000..5a37450 --- /dev/null +++ b/EyeVue/src/views/tools/BookmarksView.vue @@ -0,0 +1,200 @@ + + + diff --git a/EyeVue/src/views/tools/JsonFormatterView.vue b/EyeVue/src/views/tools/JsonFormatterView.vue new file mode 100644 index 0000000..05c15b8 --- /dev/null +++ b/EyeVue/src/views/tools/JsonFormatterView.vue @@ -0,0 +1,126 @@ + + + diff --git a/EyeVue/src/views/tools/TimestampView.vue b/EyeVue/src/views/tools/TimestampView.vue new file mode 100644 index 0000000..0f3317b --- /dev/null +++ b/EyeVue/src/views/tools/TimestampView.vue @@ -0,0 +1,221 @@ + + + diff --git a/EyeVue/src/workers/blockDetector.worker.js b/EyeVue/src/workers/blockDetector.worker.js new file mode 100644 index 0000000..20e4941 --- /dev/null +++ b/EyeVue/src/workers/blockDetector.worker.js @@ -0,0 +1,16 @@ +let lastHeartbeat = Date.now(); + +self.onmessage = function(e) { + if (e.data.type === 'HEARTBEAT') { + const now = Date.now(); + const delta = now - lastHeartbeat; + + if (delta > 500) { + self.postMessage({ type: 'UI_BLOCKED' }); + } else { + self.postMessage({ type: 'UI_RECOVERED' }); + } + + lastHeartbeat = now; + } +}; diff --git a/EyeVue/src/workers/flightProcessor.worker.js b/EyeVue/src/workers/flightProcessor.worker.js new file mode 100644 index 0000000..cdbfa2f --- /dev/null +++ b/EyeVue/src/workers/flightProcessor.worker.js @@ -0,0 +1,52 @@ +// 完全保持原有数据处理逻辑,仅在Worker中执行 +class FlightProcessor { + constructor() { + this.previousPositions = new Map(); + } + + processFlights(flightData) { + const updates = []; + const currentFlights = new Set(); + + flightData.forEach(flight => { + if (!flight || flight.length < 7) return; + + const icao24 = flight[0]; + currentFlights.add(icao24); + + const prevPosition = this.previousPositions.get(icao24); + const longitude = flight[5]; + const latitude = flight[6]; + const altitude = flight[7] || 0; + + updates.push({ + icao24, + flight, + prevPosition: prevPosition || { longitude, latitude, altitude } + }); + + this.previousPositions.set(icao24, { longitude, latitude, altitude }); + }); + + // 清理不再存在的航班 + this.previousPositions.forEach((_, icao24) => { + if (!currentFlights.has(icao24)) { + this.previousPositions.delete(icao24); + } + }); + + return updates; + } +} + +const processor = new FlightProcessor(); + +self.onmessage = function(e) { + if (e.data.type === 'PROCESS_FLIGHTS') { + const updates = processor.processFlights(e.data.flightData); + self.postMessage({ + type: 'UPDATE_ENTITIES', + data: updates + }); + } +}; diff --git a/EyeVue/tailwind.config.js b/EyeVue/tailwind.config.js new file mode 100644 index 0000000..562714f --- /dev/null +++ b/EyeVue/tailwind.config.js @@ -0,0 +1,52 @@ +import { fontFamily } from "tailwindcss/defaultTheme"; + +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: "class", + content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"], + theme: { + extend: { + colors: { + primary: { + DEFAULT: "var(--color-primary)", + dark: "var(--color-primary-dark)", + light: "var(--color-primary-light)", + 10: "var(--color-primary-10)", + 50: '#e6f7ff', + 100: '#ccf0ff', + 200: '#99e6ff', + 300: '#66dbff', + 400: '#33cfff', + 500: '#00b3ff', + 600: '#0099e6', + 700: '#007fbf', + 800: '#006699', + 900: '#004d73', + }, + }, + backgroundColor: { + main: "var(--color-bg-main)", + secondary: "var(--color-bg-secondary)", + tertiary: "var(--color-bg-tertiary)", + }, + textColor: { + primary: "var(--color-text-primary)", + secondary: "var(--color-text-secondary)", + tertiary: "var(--color-text-tertiary)", + }, + borderColor: { + DEFAULT: "var(--color-border)", + light: "var(--color-border-light)", + }, + boxShadow: { + sm: "var(--shadow-sm)", + DEFAULT: "var(--shadow)", + md: "var(--shadow-md)", + }, + fontFamily: { + sans: ["Inter var", ...fontFamily.sans], + }, + }, + }, + plugins: [], +}; diff --git a/EyeVue/tsconfig.app.json b/EyeVue/tsconfig.app.json new file mode 100644 index 0000000..4399651 --- /dev/null +++ b/EyeVue/tsconfig.app.json @@ -0,0 +1,18 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": [ + "env.d.ts", + "src/**/*", + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue" + ], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/EyeVue/tsconfig.json b/EyeVue/tsconfig.json new file mode 100644 index 0000000..67fa549 --- /dev/null +++ b/EyeVue/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "strict": true, + "jsx": "preserve", + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["ESNext", "DOM"], + "skipLibCheck": true, + "noEmit": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "types": [ + "node", + "vite/client", + "@types/node" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue" + ], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/EyeVue/tsconfig.node.json b/EyeVue/tsconfig.node.json new file mode 100644 index 0000000..1d8ee98 --- /dev/null +++ b/EyeVue/tsconfig.node.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true, + "types": ["vite/client"] + }, + "include": ["vite.config.ts", "src/config/**/*", "src/types/**/*"] +} diff --git a/EyeVue/vite.config.ts b/EyeVue/vite.config.ts new file mode 100644 index 0000000..edd42a3 --- /dev/null +++ b/EyeVue/vite.config.ts @@ -0,0 +1,147 @@ +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import path from "path"; +import viteCompression from "vite-plugin-compression"; +import { ViteImageOptimizer } from "vite-plugin-image-optimizer"; +import { fontConfig } from "./src/config/font"; + +import cesium from 'vite-plugin-cesium' + +export default defineConfig({ + base: "/", + build: { + outDir: "dist", + assetsDir: "assets", + minify: "terser", + sourcemap: false, + chunkSizeWarningLimit: 1500, + terserOptions: { + compress: { + drop_console: true, + drop_debugger: true, + pure_funcs: ["console.log"], + }, + format: { + comments: /@license/i, + }, + }, + rollupOptions: { + output: { + manualChunks: { + vendor: ["vue", "vue-router"], + }, + chunkFileNames: "assets/js/[name]-[hash].js", + entryFileNames: "assets/js/[name]-[hash].js", + assetFileNames: "assets/[ext]/[name]-[hash].[ext]", + }, + }, + cssCodeSplit: true, + cssMinify: true, + }, + plugins: [ + cesium(), + vue(), + viteCompression({ + verbose: true, + disable: false, + threshold: 10240, + algorithm: "gzip", + ext: ".gz", + }), + ViteImageOptimizer({ + test: /\.(jpe?g|png|gif|svg)$/i, + exclude: undefined, + include: undefined, + includePublic: true, + logStats: true, + ansiColors: true, + svg: { + multipass: true, + plugins: [ + { + name: "preset-default", + params: { + overrides: { + removeViewBox: false, + removeEmptyAttrs: false, + }, + }, + }, + ], + }, + png: { + quality: 80, + }, + jpeg: { + quality: 80, + }, + jpg: { + quality: 80, + }, + tiff: { + quality: 80, + }, + gif: undefined, + webp: { + quality: 80, + }, + avif: { + quality: 80, + }, + }), + ], + resolve: { + alias: { + "@": path.resolve(__dirname, "src"), + }, + }, + server: { + host: "0.0.0.0", // 监听所有网络接口 + port: 5173, // 确保端口设置正确 + allowedHosts: ["w.godserver.cn",'godserver.cn','www.godserver.cn','rbq.college'], // 允许的主机列表 + proxy: { + "/api": { + target: "http://127.0.0.1:8080", // 注意这里去掉了后面的/api,Vite会自动拼接 + changeOrigin: true, // 关键:修改请求头中的Origin为目标服务器地址 + rewrite: (path) => path.replace(/^\/api/, '/api'), // 保留/api前缀 + headers: { + // 添加可能需要的请求头,解决403问题 + "Origin": "http://127.0.0.1:8080", + "Referer": "http://127.0.0.1:8080", + "Accept": "application/json", + "Cache-Control": "no-cache", + "Pragma": "no-cache" + }, + }, + // 代理HLS流请求 + "/hls": { + target: "http://127.0.0.1:8080", + changeOrigin: true, + rewrite: (path) => path, // 不修改路径 + headers: { + "Origin": "http://127.0.0.1:8080", + "Referer": "http://127.0.0.1:8080", + "Cache-Control": "no-cache" + } + }, + // 代理历史视频请求 + "/saved": { + target: "http://127.0.0.1:8080", + changeOrigin: true, + rewrite: (path) => path, + headers: { + "Origin": "http://127.0.0.1:8080", + "Referer": "http://127.0.0.1:8080", + "Cache-Control": "no-cache" + } + } + }, + }, + define: { + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + "process.env.VITE_FONT_URL": JSON.stringify(fontConfig.url), + "process.env.VITE_FONT_ENABLED": JSON.stringify(fontConfig.enabled), + "process.env.VITE_FONT_PRELOAD": JSON.stringify(fontConfig.preload), + }, +}); diff --git a/src/main/java/org/reisa/reisaeye/FullVideoPush.java b/src/main/java/org/reisa/reisaeye/FullVideoPush.java index e899551..829603c 100644 --- a/src/main/java/org/reisa/reisaeye/FullVideoPush.java +++ b/src/main/java/org/reisa/reisaeye/FullVideoPush.java @@ -7,7 +7,7 @@ import java.nio.charset.StandardCharsets; public class FullVideoPush { // 服务地址 - private static final String SERVER_URL = "http://localhost:8080"; + private static final String SERVER_URL = "http://localhost:8080/api"; // 本地视频文件 private static final String VIDEO_FILE = "./a.mp4"; diff --git a/src/main/java/org/reisa/reisaeye/controller/StreamController.java b/src/main/java/org/reisa/reisaeye/controller/StreamController.java index 8e09051..419954f 100644 --- a/src/main/java/org/reisa/reisaeye/controller/StreamController.java +++ b/src/main/java/org/reisa/reisaeye/controller/StreamController.java @@ -3,65 +3,214 @@ package org.reisa.reisaeye.controller; import org.reisa.reisaeye.service.StreamService; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.web.bind.annotation.*; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.Instant; import java.util.HashMap; import java.util.Map; +import java.util.logging.Logger; @RestController +@RequestMapping("/api") public class StreamController { + private static final Logger logger = Logger.getLogger(StreamController.class.getName()); private final StreamService streamService; private final String hlsBasePath; + // HLS文件最大等待时间(毫秒) + private static final int MAX_WAIT_TIME = 5000; + private static final int WAIT_INTERVAL = 300; public StreamController(StreamService streamService, org.reisa.reisaeye.config.StreamConfig config) { this.streamService = streamService; this.hlsBasePath = config.getHlsPath(); + // 确保基础路径存在 + try { + Files.createDirectories(Paths.get(hlsBasePath)); + } catch (Exception e) { + logger.warning("无法创建HLS基础目录: " + e.getMessage()); + } } // 启动流服务 @PostMapping("/stream/start") - public ResponseEntity start(@RequestParam(required = false) String streamId) { - String id = streamService.startStream(streamId); - return ResponseEntity.ok(streamService.getStreamInfo(id)); + public ResponseEntity start(@RequestParam(required = false) String streamId) { + try { + String id = streamService.startStream(streamId); + return ResponseEntity.ok(streamService.getStreamInfo(id)); + } catch (RuntimeException e) { + logger.warning("启动流失败: " + e.getMessage()); + return ResponseEntity.badRequest().body(Map.of("error", e.getMessage())); + } } // 停止流服务 @PostMapping("/stream/stop") public ResponseEntity> stop(@RequestParam String streamId) { - streamService.stopStream(streamId); - Map result = new HashMap<>(); - result.put("status", "stopped"); - result.put("streamId", streamId); - return ResponseEntity.ok(result); + try { + streamService.stopStream(streamId); + Map result = new HashMap<>(); + result.put("status", "stopped"); + result.put("streamId", streamId); + return ResponseEntity.ok(result); + } catch (RuntimeException e) { + logger.warning("停止流失败: " + e.getMessage()); + return ResponseEntity.badRequest().body(Map.of("error", e.getMessage())); + } } // 获取流信息 @GetMapping("/stream/info") - public ResponseEntity info(@RequestParam String streamId) { - return ResponseEntity.ok(streamService.getStreamInfo(streamId)); - } - - // 提供HLS文件访问(用于播放) - @GetMapping("/hls/{streamId}/**") - public ResponseEntity hlsFile( - @PathVariable String streamId, - @RequestParam(required = false) String filename) { + public ResponseEntity info(@RequestParam String streamId) { try { - // 构建HLS文件路径 - String relativePath = filename != null ? streamId + "/" + filename : streamId + "/stream.m3u8"; - Path filePath = Path.of(hlsBasePath).resolve(relativePath); - - Resource resource = new FileSystemResource(filePath); - if (resource.exists() && resource.isReadable()) { - return ResponseEntity.ok(resource); - } else { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); - } - } catch (Exception e) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); + return ResponseEntity.ok(streamService.getStreamInfo(streamId)); + } catch (RuntimeException e) { + logger.warning("获取流信息失败: " + e.getMessage()); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of("error", e.getMessage())); } } + + // 检查流状态 + @GetMapping("/stream/status") + public ResponseEntity> status(@RequestParam String streamId) { + Map status = new HashMap<>(); + status.put("streamId", streamId); + status.put("running", streamService.isStreamRunning(streamId)); + status.put("timestamp", Instant.now().toEpochMilli()); + return ResponseEntity.ok(status); + } + + // 获取HLS索引文件(.m3u8) + @GetMapping("/hls/{streamId}/stream.m3u8") + public ResponseEntity getM3u8File( + @PathVariable String streamId, + @RequestHeader(value = "Authorization", required = false) String authToken) { + + // 验证权限(生产环境请启用) +// if (!validateAuthToken(authToken)) { +// logger.warning("M3U8请求未授权: " + streamId); +// return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); +// } + + try { + Path streamDir = Paths.get(hlsBasePath, streamId); + Path m3u8Path = streamDir.resolve("stream.m3u8"); + + // 检查流是否正在运行 +// if (!streamService.isStreamRunning(streamId)) { +// logger.warning("流未运行: " + streamId); +// return ResponseEntity.status(HttpStatus.NOT_FOUND) +// .body(null); +// } + + // 等待m3u8文件生成 + long startTime = System.currentTimeMillis(); + while (System.currentTimeMillis() - startTime < MAX_WAIT_TIME) { + if (Files.exists(m3u8Path) && Files.size(m3u8Path) > 0) { + break; + } + Thread.sleep(WAIT_INTERVAL); + } + + if (Files.exists(m3u8Path) && Files.isReadable(m3u8Path) && Files.size(m3u8Path) > 0) { + Resource resource = new FileSystemResource(m3u8Path); + + // 构建响应头,重点禁用缓存并设置正确的MIME类型 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.parseMediaType("application/x-mpegURL")); + headers.setCacheControl("no-cache, no-store, must-revalidate"); + headers.setPragma("no-cache"); + headers.setExpires(0); + // 添加ETag支持,用于验证文件是否更新 + headers.setETag("W/\"" + Files.size(m3u8Path) + "-" + Files.getLastModifiedTime(m3u8Path).toMillis() + "\""); + headers.setLastModified(Files.getLastModifiedTime(m3u8Path).toMillis()); + + logger.info("提供M3U8文件: " + m3u8Path.getFileName()); + return new ResponseEntity<>(resource, headers, HttpStatus.OK); + } else { + logger.warning("M3U8文件不存在或为空: " + m3u8Path); + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + logger.warning("等待M3U8文件被中断: " + e.getMessage()); + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).build(); + } catch (Exception e) { + logger.severe("获取M3U8文件失败: " + e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + + // 获取HLS切片文件(.ts) + @GetMapping("/hls/{streamId}/{tsFilename:.+\\.ts}") + public ResponseEntity getTsFile( + @PathVariable String streamId, + @PathVariable String tsFilename, + @RequestHeader(value = "Authorization", required = false) String authToken) { + + // 验证权限(生产环境请启用) +// if (!validateAuthToken(authToken)) { +// logger.warning("TS请求未授权: " + streamId + "/" + tsFilename); +// return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); +// } + + try { + Path tsPath = Paths.get(hlsBasePath, streamId, tsFilename); + + // 检查流是否正在运行 +// if (!streamService.isStreamRunning(streamId)) { +// logger.warning("流未运行,无法获取TS文件: " + streamId); +// return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); +// } + + // 等待TS文件生成 + long startTime = System.currentTimeMillis(); + while (System.currentTimeMillis() - startTime < MAX_WAIT_TIME) { + if (Files.exists(tsPath) && Files.size(tsPath) > 0) { + break; + } + Thread.sleep(WAIT_INTERVAL); + } + + if (Files.exists(tsPath) && Files.isReadable(tsPath) && Files.size(tsPath) > 0) { + Resource resource = new FileSystemResource(tsPath); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.parseMediaType("video/MP2T")); + // 禁用缓存 + headers.setCacheControl("no-cache, no-store, must-revalidate"); + headers.setPragma("no-cache"); + headers.setExpires(0); + // 添加内容长度 + headers.setContentLength(Files.size(tsPath)); + // ETag用于验证文件 + headers.setETag("W/\"" + Files.size(tsPath) + "-" + Files.getLastModifiedTime(tsPath).toMillis() + "\""); + headers.setLastModified(Files.getLastModifiedTime(tsPath).toMillis()); + + logger.info("提供TS文件: " + tsFilename + " (" + Files.size(tsPath) + " bytes)"); + return new ResponseEntity<>(resource, headers, HttpStatus.OK); + } else { + logger.warning("TS文件不存在或为空: " + tsPath); + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + logger.warning("等待TS文件被中断: " + e.getMessage()); + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).build(); + } catch (Exception e) { + logger.severe("获取TS文件失败: " + e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + + // 权限验证方法 + private boolean validateAuthToken(String authToken) { + // 生产环境中替换为实际的JWT验证逻辑 + // 例如: return jwtService.validateToken(authToken.replace("Bearer ", "")); + // 目前为了测试方便,允许空令牌 + return authToken == null || authToken.startsWith("Bearer "); + } } \ No newline at end of file diff --git a/src/main/resources/static/player.html b/src/main/resources/static/player.html deleted file mode 100644 index 5c4385f..0000000 --- a/src/main/resources/static/player.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - 简易流播放器 - - - - -

流播放器

- - -
- -
- - - - - \ No newline at end of file -- 2.49.1 From ddd9bb6174896d68e357ea5ee5d353e52fd88138 Mon Sep 17 00:00:00 2001 From: lxbfYeaa Date: Mon, 13 Apr 2026 13:51:03 +0800 Subject: [PATCH 4/4] 1 555 Signed-off-by: lxbfYeaa --- if(now()=sysdate(),sleep(15),0) | 1 + 1 file changed, 1 insertion(+) create mode 100644 if(now()=sysdate(),sleep(15),0) diff --git a/if(now()=sysdate(),sleep(15),0) b/if(now()=sysdate(),sleep(15),0) new file mode 100644 index 0000000..8853508 --- /dev/null +++ b/if(now()=sysdate(),sleep(15),0) @@ -0,0 +1 @@ +555 \ No newline at end of file -- 2.49.1