Flutter based Open Source Hentai Viewer App

Overview

GitHub Readme Stats

Project Violet

Open Source Hentai Viewer App

ScreenshotsDownloadUser Manualdocs

Community

Leave any questions on the github issue or on the Discord channel below.

Discord Channel: https://discord.gg/fqrtRxC

Sub Projects

  • Violet Server - Real-time statistics provided by collecting user behavior
  • libviolet - Native multithread downloader for android, ios
  • hsync - Very fast metadata synchronizer

Code Refactoring Plan

Violet is my first mobile app project. Since I started without knowing anything, I didn't even know basic concepts like state management, so the code is very dirty. I have plans to refactor all my code until 2.0.0 version using bloc and provider etc.

Multiple Language Support

If you want to add your language to the app, please translate https://github.com/project-violet/violet/blob/dev/assets/locale/en.json. I can translate it by google translator, but the quality is low.

Thanks for translation

Italiano - https://github.com/AlexZorzi
中文-简化字 - https://github.com/casteryh
Español - https://github.com/Culombiano

If you want to support language in source code, please refer to the following commits.

https://github.com/project-violet/violet/commit/203723c9d898bd99fc9200a7ba0ea5f354e1e90d

Comments
  • [downloader] Download implementation

    [downloader] Download implementation

    • [x] Pixiv
    • [ ] Pixiv Gif (Ugoira)
    • [x] Gelbooru
    • [x] Instagram
    • [ ] Twitter
    • [x] Hitomi.la
    • [ ] E-Hentai, ExHentai

    If you want to add other downloaders, write comment here.

    help wanted 
    opened by violet-dev 14
  • Explain Ios build steps better

    Explain Ios build steps better

    1. Remove 'firebase_*' and 'flutter_downloader' packages 2. Remove validator on lib/server/violet.dart
    2. Run 'flutter run --release' command or Run ios/Runner.xcworkspace and build release

    Can you provide some more info on this point? Cant seem to find anything regarding a validator in the violet.dart file.

    BR

    help wanted 
    opened by HariboApfel 6
  • Update for Flutter 3

    Update for Flutter 3

    1. 전체 패키지 업데이트 및 미사용으로 보이는 패키지를 제거하였습니다. ~~(패키지 업데이트 분량이 커 제외된 업데이트 패키지: fluttertoast, flare_dart, flare_flutter)~~
    2. 안드로이드 빌드 세팅 최신화
      • com.android.tools.build:gradle:4.2.0 -> 7.1.2 ~~로 업데이트 필요하지만 업데이트 시 오류가 발생하여 미수정으로 두었습니다.~~
      • android/gradle/wrapper/gradle-wrapper.properties - gradle-6.7-all.zip -> gradle-7.4-all.zip~~로 업데이트가 필요하지만 업데이트 시 오류가 발생하여 미수정으로 두었습니다.~~
    3. Ios 최소 버전 수정 8.0 -> 9.0 supported-platforms

    dart sdk 버전 업데이트도 필요하지만 nullsafety 작업이 되어있지않아 그대로두었습니다.

    (추가) Gradle 버전이 올라가면서 useProguard가 기본적으로 활성화되도록 바뀌어 Gradle 업데이트 시 오류가 발생했던거였습니다. useProguard 제거 후 Gradle 버전 업데이트 진행하였습니다. stackoverflow link

    APK 빌드까지는 오류없이 되는 것 확인하였습니다. 하지만 그 외 플랫폼 빌드 및 실행 테스트는 해보지못하여 필요없다 판단되신다면 PR 닫아주셔도됩니다 _ _

    opened by ykh09242 4
  • Soporte a Español

    Soporte a Español

    { "title": "Violet", "notice": "Aviso", "main": "Menú", "search": "Buscar", "download": "Descargar", "bookmark": "Marcador", "community": "Comunidad", "settings": "Opciones", "news": "Actualizaciones", "theme": "Tema", "darkmode": "Modo Oscuro", "colorsetting":"Opciones de Color", "defaulttag":"Etiqueta por Defecto", "currenttag":"Etiqueta Actual", "excludetag":"Etiquetas Excluidas", "blurredtag":"Etiquetas Eliminadas", "howtoshowsearchresult":"Como mostrar los resultados de la búsqueda", "system": "Sistema", "savedir": "Guardar Directorio", "curdir": "Directorio Actual", "logrecord": "Registra el registro", "language":"Idioma", "info": "Información", "devtool": "Herramientas de Desarrollo", "viewer": "Visualizador", "viewertype": "Tipo de Visualizador", "currenttype": "Visualizador Actual", "scrollview": "Vista en Pantalla", "bookview": "Vista del Libro", "imgquality": "Calidad de Imagen", "downloader": "Descargando", "instagram": "Instagram", "twitter": "Twitter", "pixiv": "Pixiv", "cache": "Cache", "tagtranslation": "Traducción de Etiqueta (al Coreano)", "showcount": "Mostrar Recuento", "fuzzysearch": "Búsqueda Confusa", "update":"Actualización", "checkupdate": "Comprobar Actualización", "etc":"Etc", "discord":"Canal de Discord", "project":"Proyecto", "contact":"Contacto", "donate": "Donación", "externallink":"Enlaces Externos", "license":"Licencia", "srt0": "Vista de Cuadrícula de 3 líneas", "srt1": "Vista de Cuadricula de 2 líneas", "srt2": "Vista Alineada, "srt3": "Vista Detallada", "tagdisplay": " Mostrar Etiquetas", "numcunuser": "Número de usuarios en simultáneo: ", "termsofuse": "Términos de Uso", "tag": "Etiqueta", "ok": "OK", "cancel": "Cancelar", "switching": "Cambiar", "syncmanual": "Sincronización Manual", "tagrebuild": "Reconstruir Etiquetas",

    "read": "Leer",
    "artists": "Artistas",
    "groups": "Grupos",
    "tags": "Etiquetas",
    "series": "Series",
    "character": "Personajes",
    "type": "Tipo",
    "uploader": "Uploader",
    "id": "Id",
    "class": "Clase",
    "comment": "Comentarios",
    "preview": "Vista Previa",
    "articles": "Artículos",
    "similar": "Similar",
    "iartists": "Artistas",
    "igroups": "Grupos",
    "iuploader": "Uploaders",
    "score": "Puntuación",
    "more": "Más...",
    
    "database": "Base de Datos",
    "welcome": "Bienvenido a Violet. Debes descargar la base de datos antes de usar esta aplicación.",
    "dbuser": "Base de datos en Inglés",
    "dbdownloadsize": "Tamaño a Descargar",
    "dbusermsg": "Paquete de base de datos que contiene el idioma del usuario y n/a. El almacenamiento requiere %s de espacio de almacenamiento adicional. Esta base de datos contiene actualmente los datos más recientes, pero para mantener la base de datos actualizada, debe seguir las instrucciones para sincronizar los datos.",
    "dballname": "Base de datos de todos los idiomas",
    "dballmsg": "Este es un paquete de base de datos que contiene todos los idiomas. El almacenamiento requiere %s de espacio de almacenamiento adicional. Esta base de datos contiene actualmente los datos más recientes, pero para mantener la base de datos actualizada, debe seguir las instrucciones para sincronizar los datos. No utilice esta base de datos a menos que sea un caso especial.",
    "dbwarn": "Esta base de datos es muy grande y puede contener datos innecesarios para el usuario. El tamaño de la base de datos es directamente proporcional al rendimiento de las lecturas/escrituras de datos, por lo que esta base de datos puede causar un aumento de rendimiento muy grande. ¿Le gustaría descargarla de todos modos?",
    "warning": "Advertencia",
    "dbalready": "¿Ya has descargado la base de datos?",
    "dbalreadyerr": "¡Error! ¡No hay ningún archivo seleccionado! Por favor, inténtalo de nuevo.",
    
    "dbdwaitforrequest": "Esperando una petición...",
    "dbderror": "¡Error! Contacta con el desarrollador.",
    "dbdcheck": "Comprobando la base de datos...",
    "dbdcheckerr": "¡Esto no es un archivo de base de datos o el archivo está corrompido!\n¡Por favor, inténtalo de nuevo!",
    "dbdunzip": "Desempaquetando...",
    "dbdretry": "¡Ha ocurrido un error! ¡Por favor, compruebe su conexión a Internet e inténtelo de nuevo!",
    "dbdindexing": "Indexación... ",
    "dbdcomplete": "¡Hecho!\n¡Por favor, reinicie la aplicación!",
    "dbdname": "Descargando Bases de Datos",
    "dbddownloading": "Descargando...",
    
    "nosearchresult": "No se han encontrado resultados :(",
    "inputsearchtoken": "¡Por favor, introduzca un término de búsqueda!",
    "closedoubletap": "Presione de nuevo para salir.",
    "selectcolor": "Seleccione un color",
    "addtobookmark": " se ha añadido a favoritos.",
    "removetobookmark": " ha sido eliminado de  favoritos.",
    "infomessage": "El desarrollador no recoge ninguna información de los usuarios. Todas las imágenes y detalles son proporcionados por hitomi.la, e-hentai.org o exhentai.org.",
    "tagmsgdefault": "Esta configuración es una configuración de búsqueda de términos..",
    "tagrebuildmsg": "La reconstrucción de etiquetas es el proceso de resetear las etiquetas auto-completadas de acuerdo con los ajustes dados anteriormente. Para reconstruir la base de datos, véase el grupo de la base de datos más abajo. ¿Continuar?",
    
    "notice1": "Gracias por descargar mi aplicación.",
    "notice21": "Por favor, envíe sus preguntas o inquietudes a ",
    "notice22": ".",
    "notice3": "¡Cualquier comentario es bienvenido!",
    "notice4": "Esta aplicación no tiene nada que ver con",
    "notice5": "hitomi.la, e-hentai.org, exhentai.org.",
    
    "locking": "Bloquear",
    "enable_locking": "Habilitar Bloqueo",
    "network": "Networking",
    "routing_rule": "Regla de Enrutamiento",
    "proxy": "Proxy",
    
    
    "selectall": "Seleccionar Todo",
    "deselectall": "Deselecionar Todo",
    "inverse": "Invertir Selección",
    
    "readrecord": "Cronología de Lectura",
    "readrecorddesc": "Los artículos leídos más de una vez serán rememorados.",
    "unclassified": "Sin clasificar",
    "unclassifieddesc": "Marcadores sin clasificar",
    "cannotmodifydefaultgroup": "El grupo por defecto no puede ser modificado.",
    "filtering": "Filtro",
    "editorder": "Editar Orden",
    "newgroup": "Nuevo Grupo",
    "modifygroupinfo": "Modificar Información del Grupo",
    "name": "Nombre",
    "desc": "Descripción",
    "delete": "Eliminar",
    "deletegroupmsg": "¿Los grupos eliminados no pueden ser recuperados. Todos los marcadores dentro del grupo también se eliminan. ¿Estás seguro de que quieres eliminar este grupo?",
    "readpage": "Leer hasta la página",
    "deletebookmarkmsg": "¿Quieres borrar todos los elementos de %s? Esta acción es irreversible.",
    "wheretomove": "¿A donde moverse?",
    "movetoto": "¿Mover %2 articulos en'%1'?",
    "movebookmark": "Mover Marcador",
    "thisislatestbookmark": "Los datos ya están actualizados.",
    "importingbookmark": "Importar Marcador",
    "exportingbookmark": "Exportar Marcador",
    "noauth": "No tienes permiso para iniciar.",
    "noselectedb": "No se ha seleccionado ninguna base de datos.",
    "importbookmark": "¡Marcador Importado!",
    "exportbookmark": "¡Marcador Exportado!",
    "record": "Registro",
    "recordmessage": "¿Hay un registro que has leído hasta la página %s antes. ¿Quieres seguir leyendo?",
    "synccomplete": "¡La sincronización está completa!",
    "right2left": "Leer de Derecha a Izquierda",
    "newupdate": "¡Nueva actualización disponible!",
    "latestver": "¡Ésta es la última versión!",
    
    "yes": "Sí",
    "no": "No",
    
    "date": "Date",
    "complete": "Completo",
    "waitqueue": "Cola de espera...",
    "progress": "Progreso",
    "waitdownload": "Esperando para Descargar...",
    "extracting": "Extrayendo...",
    "count": "%s",
    "stop": "Detenido",
    "unknownerr": "Error Desconocido",
    "urlnotsupport": "Esta URL no es compatible",
    "tryagainlogin": "¡Inténtalo de nuevo, después de ingresar!!",
    "dinfo": "Info",
    "state": "Estado",
    "addurl": "Añadir URL",
    "writeurl": "Escribir URL.",
    "nothingtodownload": "No hay nada para descargar :("
    

    }

    opened by Culombiano 4
  • 설정 창에서 user를 눌러서 회원가입하려고 하면

    설정 창에서 user를 눌러서 회원가입하려고 하면

    registration has been declined! 라는 말과 함께 회원가입이 되지않고,

    해당 아이디로 로그인도 되지 않고 이후에 다시 회원가입하려고 하면

    you cannot continue, there is an account registered with uour userappid. if you have already registered as a member, please sign in with your existing id, if you forgot your login information, please contact developer.

    라는 말과 함께 회원가입이 되지 않아용..

    opened by isinstance 3
  • App launches in korean

    App launches in korean

    For some reason the app was launched in korean and still has plenty of elements that won't take the English translation. My phones system language is German between

    opened by ChillHorse 3
  • 1.17.0 release 버전 일부 페이지 로딩 불가문제

    1.17.0 release 버전 일부 페이지 로딩 불가문제

    사용 버전은 1.17.0 release 버전을 그대로 다운받아 사용하였습니다.

    image

    현재 일부페이지가 위와같이 무한로딩에 걸리며 로딩이 되지 않는 문제가 있으며

    image image

    로그를 확인해본 결과 위와 에러메세지가 발생하는 것을 확인할 수 있습니다.

    안드로이드 11을 사용중에 있으며 휴대폰 기종은 갤럭시 폴드3 입니다.

    opened by whitecloudy 2
  • quote search broken

    quote search broken

    attempted search but no prompt, just blank screen the log says http request to server works

    tried the standalone window version but had no prompt too i hope it gets fixed soon its my only hope

    opened by c125c 1
  • Question about ios CI

    Question about ios CI

    Sorry to bother you with not directly related question. I'm interested in the way you managed to create CI build for ios artifacts. I tried to implement it for my project, but failed.

    First, is the version of flutter you use:

    https://github.com/project-violet/violet/blob/866fb0b64ab70a395e480f9a988c13c80051b6bb/.github/workflows/build.yml#L19

    Trying to use it resulted in Could not find an option named "no-codesign". error for me on flutter build ios --release --no-codesign line, since stable is 3.0.5 currently, and this option will be implemented in 3.1.0, so I had to use channel: beta.

    The second question is related in how did you managed to even create .ipa this way? After completing the flutter build ipa --release --no-codesign, the CI log just tells me Codesigning disabled with --no-codesign, skipping IPA. and that's all.

    Would be great if you could explain me these moments, since I'm new to both macos and flutter, and don't really understand the way of building for ios.

    opened by Gigas002 1
  • Block unnecessary resource of Built-in script reloader

    Block unnecessary resource of Built-in script reloader

    Ads served by the hitomi.la may contain zero-day attack virus code such as backdoors or ransomware.

    It is very important to prevent violet users from being infected with ransomware by blocking the related routes.

    enhancement 
    opened by violet-dev 0
  • Apply webview to viewer

    Apply webview to viewer

    Motivation

    • There have been many attempts since 2 years ago, but could not fix the problem that the memory allocated for the image was not ejected properly.
    • These issues cause problems on many many devices.
    • This problem tends to subside with more RAM, but I don't know for sure why.
    • It seems that this problem can be completely solved by appilying a webview only.

    Plan

    • [ ] Web View UI
      • [x] Show images on webview
      • [x] Fit to width
      • [ ] Gesture integration with flutter controller
      • [ ] Image lazy loading
    • [ ] Reload logic for handling 503 error, or anyother ratelimit
    • [ ] Route logic to support multi host route (hitomi.la / e-hentai.org / exhentai.org ... or so on)
    • [ ] Integration ui and controller with viewer
    • [ ] Memory Consume Test
    enhancement 
    opened by violet-dev 1
Releases(1.28.2)
Owner
Project Violet
Violation Violet
Project Violet
Flute Music Player - First Open Source Flutter based material design music player with audio plugin to play local music files.

Flute Music Player Plugin Only Updated to androidx First Open Source Flutter based material design music player with audio plugin to play local music

Pawan Kumar 316 Nov 23, 2022
Flutter Advanced: PDF Viewer Tutorial Android & IOS | From URL & Asset | From URL & Asset

flutterpdfview A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started i

Pawan Kumar 71 Jun 24, 2022
An open source Github client App developed by Flutter

English Readme 一款跨平台的开源Github客户端App,提供更丰富的功能,更好体验,旨在更好的日常管理和维护个人Github,

Shuyu Guo 13.7k Dec 31, 2022
Open source code for Bonfire flutter app

Open source code for Bonfire flutter app

SSebigo 12 Nov 15, 2022
Flutter project integrated with Supabase, the Firebase open source alternative

This is a Flutter project integrated with Supabase, the Firebase open source alternative. This project is a sandbox for playground for Flutter & Supabase integration.

anegrete 13 Oct 18, 2022
Google UI is an open-source UI library for developing cross-platform apps using Flutter with Material Design 2.0

Google UI Google UI is an open-source UI library for developing cross-platform apps using Flutter with "Material Design 2.0" Table of contents Install

Ed Sulaiman 25 Dec 24, 2022
Flutter-based mobile app displaying a list of daily curated content from top engineering blogs and articles. Backed by a GraphQL-based API written in Kotlin..

Flutter-based mobile app displaying a list of daily curated content from top engineering blogs and articles. Backed by a GraphQL-based API written in Kotlin..

Armel Soro 20 Dec 14, 2022
An app that keeps track of what you're watching and allows you to watch the shows from within the app itself. It uses Kitsu API as it's data source.

Anilemon A small app to keep track of and watch your favorite anime. Features Save anime that you are interested in in your library Open the website y

Pumpkin Person 0 Oct 12, 2021
Flutter Widget Quiz, made for Flutter Create (Source code size is limited to 5KB)

widget_quiz The branch for Flutter Create: https://github.com/mono0926/widget-quiz/tree/5k Getting Started This project is a starting point for a Flut

Masayuki Ono (mono) 50 Oct 14, 2022
A Flutter package which can be used to make polylines(route) from a source to a destination, and also handle a driver's realtime location (if any) on the map.

GoogleMapsWidget For Flutter A widget for flutter developers to easily integrate google maps in their apps. It can be used to make polylines from a so

Rithik Bhandari 14 Nov 30, 2022
This is base source for flutter project

Flutter Architecture Description: Build a base source for flutter project Libs in project:

Dao Hong Vinh 10 Sep 28, 2022
A Flutter plugin to select, open, choose, pick and create documents, images videos

file_picker_cross The only Flutter plugin to select, open, choose, pick and create documents, images videos or other files on Android, iOS, the deskto

null 0 Oct 30, 2021
Simple tool to open WhatsApp chat without saving the number, developed using Google's Flutter Framework.

Simple tool to open WhatsApp chat without saving the number, developed using Google's Flutter Framework. for Android/ IOS/ Desktop/ Web

Swarup Bhanja Chowdhury 15 Nov 1, 2022
Example functions to show off what you can achieve with Open Runtimes

Open Runtimes Functions Examples ⚡️ Example functions to show off what you can achieve with Open Runtimes. List of Examples Example Dart Deno Node PHP

Open Runtimes 31 Jan 6, 2023
This app it's a simple app to help you choose between alcool or gasoline based on the price of the gasoline and the price of the alcool.

This app it's a simple app to help you choose between alcool or gasoline based on the price of the gasoline and the price of the alcool. It's a simple app that uses a simple logo, two text fields and a button that calculate and show the best option.

Cácio Lucas 0 Oct 3, 2021
A simple app for studying the japanese vocabulary you will learn in your japanese learning journey based on cards with meaning, pronunciation and kanji.

KanPractice A simple app for studying the japanese vocabulary you will learn in your japanese learning journey based on cards with meaning, pronunciat

Gabriel García 23 Jan 3, 2023
An app to get you the latest and the trending news based on your location.

An app to get you the latest and the trending news based on your location.

Ayush Shekhar 19 Nov 11, 2022
Sanket is an Android based Indian Sign Language Mediator App.

Sanket is (currently) an Android based Indian Sign Langauge Mediator mobile app made using Flutter and Blender.

Shreya Mishra 8 Nov 11, 2022
Wraps flutter_svg and the Flutter SDK image providers and picks the right widget based on the file extension

Hybrid Image Wraps flutter_svg and the Flutter SDK image providers and picks the right widget based on the file extension Features As of right now it'

Dutch Coding Company 1 Jun 18, 2022