mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-01-11 20:10:25 +00:00
update readme
This commit is contained in:
parent
210ae6b0ee
commit
a52a2ccc31
7 changed files with 263 additions and 22 deletions
31
README.md
31
README.md
|
|
@ -1,16 +1,15 @@
|
|||
<!-- Improved compatibility of back to top link -->
|
||||
<a id="readme-top"></a>
|
||||
|
||||
<!-- PROJECT SHIELDS -->
|
||||
[![Contributors][contributors-shield]][contributors-url]
|
||||
[![Forks][forks-shield]][forks-url]
|
||||
[![Stargazers][stars-shield]][stars-url]
|
||||
[![Issues][issues-shield]][issues-url]
|
||||
[![License][license-shield]][license-url]
|
||||
|
||||
<!-- PROJECT LOGO -->
|
||||
<br />
|
||||
<div align="center">
|
||||
<a id="readme-top"></a>
|
||||
|
||||
[![Contributors][contributors-shield]][contributors-url]
|
||||
[![Forks][forks-shield]][forks-url]
|
||||
[![Stargazers][stars-shield]][stars-url]
|
||||
[![Issues][issues-shield]][issues-url]
|
||||
[![License][license-shield]][license-url]
|
||||
|
||||
<br />
|
||||
<br />
|
||||
<img src="assets/titlelogo.png" alt="Nuvio Logo" width="120" />
|
||||
<h1 align="center">🎬 Nuvio Media Hub</h1>
|
||||
<p align="center">
|
||||
|
|
@ -41,7 +40,9 @@
|
|||
<li><a href="#getting-started">Getting Started</a></li>
|
||||
<li><a href="#contributing">Contributing</a></li>
|
||||
<li><a href="#support">Support</a></li>
|
||||
<li><a href="#support">Support</a></li>
|
||||
<li><a href="#license">License</a></li>
|
||||
<li><a href="#legal">Legal</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
<li><a href="#acknowledgments">Acknowledgments</a></li>
|
||||
<li><a href="#built-with">Built With</a></li>
|
||||
|
|
@ -139,6 +140,14 @@ Distributed under the GNU GPLv3 License. See `LICENSE` for more information.
|
|||
|
||||
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
||||
|
||||
## Legal
|
||||
|
||||
For comprehensive legal information, including our full disclaimer, third-party extension policy, and DMCA/Copyright information, please visit our **[Legal & Disclaimer Page](https://tapframe.github.io/NuvioStreaming/#legal)**.
|
||||
|
||||
**Disclaimer:** Nuvio functions solely as a client-side interface for browsing metadata and playing media files provided by user-installed extensions. It does not host, store, or distribute any media content.
|
||||
|
||||
<p align="right">(<a href="#readme-top">back to top</a>)</p>
|
||||
|
||||
## Contact
|
||||
|
||||
**Project Links:**
|
||||
|
|
|
|||
102
index.html
102
index.html
|
|
@ -913,6 +913,67 @@
|
|||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Legal Section -->
|
||||
<section id="legal" class="privacy-policy">
|
||||
<div class="container">
|
||||
<div class="privacy-content">
|
||||
<button class="privacy-back-btn" onclick="hideAllDetailSections()">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||
<path d="M19 12H5M12 19l-7-7 7-7" />
|
||||
</svg>
|
||||
Back
|
||||
</button>
|
||||
<h1>Legal & Disclaimer</h1>
|
||||
<p class="last-updated">Last updated: January 2026</p>
|
||||
|
||||
<div class="privacy-section">
|
||||
<h2>Nature of the Application</h2>
|
||||
<p>Nuvio is a media player and metadata management application. It acts solely as a client-side
|
||||
interface for browsing publicly available metadata (movies, TV shows, etc.) and playing media
|
||||
files
|
||||
provided by the user or third-party extensions. Nuvio itself does not host, store, distribute,
|
||||
or
|
||||
index any media content.</p>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section">
|
||||
<h2>Third-Party Extensions</h2>
|
||||
<p>Nuvio uses an extensible architecture that allows users to install third-party plugins
|
||||
(extensions).
|
||||
These extensions are developed and maintained by independent developers not affiliated with
|
||||
Nuvio.
|
||||
We have no control over, and assume no responsibility for, the content, legality, or
|
||||
functionality
|
||||
of any third-party extension.</p>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section">
|
||||
<h2>User Responsibility</h2>
|
||||
<p>Users are solely responsible for the extensions they install and the content they access. By
|
||||
using
|
||||
this application, you agree to ensure that you have the legal right to access any content you
|
||||
view
|
||||
using Nuvio. The developers of Nuvio do not endorse or encourage copyright infringement.</p>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section">
|
||||
<h2>Copyright & DMCA</h2>
|
||||
<p>We respect the intellectual property rights of others. Since Nuvio does not host any content, we
|
||||
cannot remove content from the internet. However, if you believe that the application interface
|
||||
itself infringes on your rights, please contact us.</p>
|
||||
</div>
|
||||
|
||||
<div class="privacy-section">
|
||||
<h2>No Warranty</h2>
|
||||
<p>This software is provided "as is", without warranty of any kind, express or implied. In no event
|
||||
shall the authors or copyright holders be liable for any claim, damages, or other liability
|
||||
arising
|
||||
from the use of this software.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-content">
|
||||
|
|
@ -945,9 +1006,12 @@
|
|||
<img src="https://github.githubassets.com/assets/GitHub-Mark-ea2971cee799.png" alt="GitHub">
|
||||
GitHub
|
||||
</a>
|
||||
<a href="#privacy-policy" class="footer-link" onclick="showPrivacyPolicy()">
|
||||
<a href="#privacy-policy" class="footer-link" onclick="showSection('privacy-policy')">
|
||||
Privacy
|
||||
</a>
|
||||
<a href="#legal" class="footer-link" onclick="showSection('legal')">
|
||||
Legal
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p class="footer-copyright">© 2025 Nuvio. GNU GPLv3. Free and Open Source.</p>
|
||||
|
|
@ -1035,26 +1099,42 @@
|
|||
});
|
||||
});
|
||||
|
||||
// Privacy Policy
|
||||
function showPrivacyPolicy() {
|
||||
document.querySelectorAll('body > *:not(#privacy-policy)').forEach(el => el.style.display = 'none');
|
||||
document.getElementById('privacy-policy').style.display = 'block';
|
||||
// Detail Sections (Privacy, Legal)
|
||||
const detailSections = ['privacy-policy', 'legal'];
|
||||
|
||||
function showSection(sectionId) {
|
||||
// Hide everything except the requested section
|
||||
document.querySelectorAll('body > *:not(#' + sectionId + ')').forEach(el => el.style.display = 'none');
|
||||
document.getElementById(sectionId).style.display = 'block';
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
function hidePrivacyPolicy() {
|
||||
document.getElementById('privacy-policy').style.display = 'none';
|
||||
document.querySelectorAll('body > *:not(#privacy-policy)').forEach(el => el.style.display = '');
|
||||
function hideAllDetailSections() {
|
||||
detailSections.forEach(id => {
|
||||
const el = document.getElementById(id);
|
||||
if (el) el.style.display = 'none';
|
||||
});
|
||||
// Show main content
|
||||
document.querySelectorAll('body > *').forEach(el => {
|
||||
if (!detailSections.includes(el.id)) el.style.display = '';
|
||||
});
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
window.addEventListener('popstate', function () {
|
||||
if (window.location.hash === '#privacy-policy') showPrivacyPolicy();
|
||||
else hidePrivacyPolicy();
|
||||
const hash = window.location.hash.substring(1); // remove #
|
||||
if (detailSections.includes(hash)) {
|
||||
showSection(hash);
|
||||
} else {
|
||||
hideAllDetailSections();
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
if (window.location.hash === '#privacy-policy') showPrivacyPolicy();
|
||||
const hash = window.location.hash.substring(1);
|
||||
if (detailSections.includes(hash)) {
|
||||
showSection(hash);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -643,6 +643,7 @@
|
|||
"danger_zone": "DANGER ZONE"
|
||||
},
|
||||
"items": {
|
||||
"legal": "Legal & Disclaimer",
|
||||
"privacy_policy": "Privacy Policy",
|
||||
"report_issue": "Report Issue",
|
||||
"version": "Version",
|
||||
|
|
@ -1224,5 +1225,18 @@
|
|||
"cancel": "Cancel",
|
||||
"back": "Settings"
|
||||
}
|
||||
},
|
||||
"legal": {
|
||||
"title": "Legal & Disclaimer",
|
||||
"intro_title": "Nature of the Application",
|
||||
"intro_text": "Nuvio is a media player and metadata management application. It acts solely as a client-side interface for browsing publicly available metadata (movies, TV shows, etc.) and playing media files provided by the user or third-party extensions. Nuvio itself does not host, store, distribute, or index any media content.",
|
||||
"extensions_title": "Third-Party Extensions",
|
||||
"extensions_text": "Nuvio uses an extensible architecture that allows users to install third-party plugins (extensions). These extensions are developed and maintained by independent developers not affiliated with Nuvio. We have no control over, and assume no responsibility for, the content, legality, or functionality of any third-party extension.",
|
||||
"user_resp_title": "User Responsibility",
|
||||
"user_resp_text": "Users are solely responsible for the extensions they install and the content they access. By using this application, you agree to ensure that you have the legal right to access any content you view using Nuvio. The developers of Nuvio do not endorse or encourage copyright infringement.",
|
||||
"dmca_title": "Copyright & DMCA",
|
||||
"dmca_text": "We respect the intellectual property rights of others. Since Nuvio does not host any content, we cannot remove content from the internet. However, if you believe that the application interface itself infringes on your rights, please contact us.",
|
||||
"warranty_title": "No Warranty",
|
||||
"warranty_text": "This software is provided \"as is\", without warranty of any kind, express or implied. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability arising from the use of this software."
|
||||
}
|
||||
}
|
||||
|
|
@ -79,6 +79,7 @@ import {
|
|||
PlaybackSettingsScreen,
|
||||
AboutSettingsScreen,
|
||||
DeveloperSettingsScreen,
|
||||
LegalScreen,
|
||||
} from '../screens/settings';
|
||||
|
||||
|
||||
|
|
@ -217,6 +218,7 @@ export type RootStackParamList = {
|
|||
PlaybackSettings: undefined;
|
||||
AboutSettings: undefined;
|
||||
DeveloperSettings: undefined;
|
||||
Legal: undefined;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -1751,6 +1753,21 @@ const InnerNavigator = ({ initialRouteName }: { initialRouteName?: keyof RootSta
|
|||
},
|
||||
}}
|
||||
/>
|
||||
<Stack.Screen
|
||||
name="Legal"
|
||||
component={LegalScreen}
|
||||
options={{
|
||||
animation: Platform.OS === 'android' ? 'slide_from_right' : 'slide_from_right',
|
||||
animationDuration: Platform.OS === 'android' ? 250 : 300,
|
||||
presentation: 'card',
|
||||
gestureEnabled: true,
|
||||
gestureDirection: 'horizontal',
|
||||
headerShown: false,
|
||||
contentStyle: {
|
||||
backgroundColor: currentTheme.colors.darkBackground,
|
||||
},
|
||||
}}
|
||||
/>
|
||||
</Stack.Navigator>
|
||||
</View>
|
||||
</PaperProvider>
|
||||
|
|
|
|||
|
|
@ -55,6 +55,13 @@ export const AboutSettingsContent: React.FC<AboutSettingsContentProps> = ({
|
|||
return (
|
||||
<>
|
||||
<SettingsCard title={t('settings.sections.information')} isTablet={isTablet}>
|
||||
<SettingItem
|
||||
title={t('settings.items.legal')}
|
||||
icon="file-text"
|
||||
onPress={() => navigation.navigate('Legal')}
|
||||
renderControl={() => <ChevronRight />}
|
||||
isTablet={isTablet}
|
||||
/>
|
||||
<SettingItem
|
||||
title={t('settings.items.privacy_policy')}
|
||||
icon="lock"
|
||||
|
|
|
|||
113
src/screens/settings/LegalScreen.tsx
Normal file
113
src/screens/settings/LegalScreen.tsx
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
import React from 'react';
|
||||
import { View, Text, StyleSheet, ScrollView, StatusBar } from 'react-native';
|
||||
import { useNavigation } from '@react-navigation/native';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useTheme } from '../../contexts/ThemeContext';
|
||||
import ScreenHeader from '../../components/common/ScreenHeader';
|
||||
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
||||
import { RootStackParamList } from '../../navigation/AppNavigator';
|
||||
import { NavigationProp } from '@react-navigation/native';
|
||||
|
||||
const LegalScreen: React.FC = () => {
|
||||
const { t } = useTranslation();
|
||||
const { currentTheme } = useTheme();
|
||||
const navigation = useNavigation<NavigationProp<RootStackParamList>>();
|
||||
const insets = useSafeAreaInsets();
|
||||
|
||||
const sections = [
|
||||
{
|
||||
title: t('legal.intro_title'),
|
||||
text: t('legal.intro_text')
|
||||
},
|
||||
{
|
||||
title: t('legal.extensions_title'),
|
||||
text: t('legal.extensions_text')
|
||||
},
|
||||
{
|
||||
title: t('legal.user_resp_title'),
|
||||
text: t('legal.user_resp_text')
|
||||
},
|
||||
{
|
||||
title: t('legal.dmca_title'),
|
||||
text: t('legal.dmca_text')
|
||||
},
|
||||
{
|
||||
title: t('legal.warranty_title'),
|
||||
text: t('legal.warranty_text')
|
||||
}
|
||||
];
|
||||
|
||||
return (
|
||||
<View style={[styles.container, { backgroundColor: currentTheme.colors.darkBackground }]}>
|
||||
<StatusBar barStyle="light-content" />
|
||||
<ScreenHeader
|
||||
title={t('legal.title')}
|
||||
showBackButton
|
||||
onBackPress={() => navigation.goBack()}
|
||||
/>
|
||||
|
||||
<ScrollView
|
||||
style={styles.scrollView}
|
||||
contentContainerStyle={[
|
||||
styles.contentContainer,
|
||||
{ paddingBottom: insets.bottom + 40 }
|
||||
]}
|
||||
showsVerticalScrollIndicator={false}
|
||||
>
|
||||
{sections.map((section, index) => (
|
||||
<View key={index} style={styles.section}>
|
||||
<Text style={[styles.sectionTitle, { color: currentTheme.colors.highEmphasis }]}>
|
||||
{section.title}
|
||||
</Text>
|
||||
<Text style={[styles.sectionText, { color: currentTheme.colors.mediumEmphasis }]}>
|
||||
{section.text}
|
||||
</Text>
|
||||
</View>
|
||||
))}
|
||||
|
||||
<View style={styles.footer}>
|
||||
<Text style={[styles.footerText, { color: currentTheme.colors.disabled }]}>
|
||||
Last updated: January 2026
|
||||
</Text>
|
||||
</View>
|
||||
</ScrollView>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
},
|
||||
scrollView: {
|
||||
flex: 1,
|
||||
},
|
||||
contentContainer: {
|
||||
padding: 24,
|
||||
gap: 32,
|
||||
},
|
||||
section: {
|
||||
gap: 12,
|
||||
},
|
||||
sectionTitle: {
|
||||
fontSize: 20,
|
||||
fontWeight: '700',
|
||||
letterSpacing: 0.3,
|
||||
},
|
||||
sectionText: {
|
||||
fontSize: 16,
|
||||
lineHeight: 26,
|
||||
},
|
||||
footer: {
|
||||
alignItems: 'center',
|
||||
marginTop: 16,
|
||||
paddingVertical: 20,
|
||||
borderTopWidth: 1,
|
||||
borderTopColor: 'rgba(255,255,255,0.1)',
|
||||
},
|
||||
footerText: {
|
||||
fontSize: 13,
|
||||
}
|
||||
});
|
||||
|
||||
export default LegalScreen;
|
||||
|
|
@ -5,6 +5,7 @@ export { default as IntegrationsSettingsScreen } from './IntegrationsSettingsScr
|
|||
export { default as PlaybackSettingsScreen } from './PlaybackSettingsScreen';
|
||||
export { default as AboutSettingsScreen } from './AboutSettingsScreen';
|
||||
export { default as DeveloperSettingsScreen } from './DeveloperSettingsScreen';
|
||||
export { default as LegalScreen } from './LegalScreen';
|
||||
|
||||
// Reusable content component exports (for inline use on tablets)
|
||||
export { ContentDiscoverySettingsContent } from './ContentDiscoverySettingsScreen';
|
||||
|
|
|
|||
Loading…
Reference in a new issue