# 🐍 PyMyFileBrowser

[![Python Version](https://img.shields.io/badge/python-3.6+-blue.svg)](https://www.python.org/downloads/)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Flask](https://img.shields.io/badge/flask-3.0.3-red.svg)](https://flask.palletsprojects.com/)

**PyMyFileBrowser** é um gerenciador de arquivos web poderoso e intuitivo desenvolvido em Python com Flask. Navegue, gerencie e visualize seus arquivos através de uma interface web moderna e responsiva, acessível de qualquer navegador.

## ✨ Características Principais

### 🗂️ Gerenciamento de Arquivos
- **Navegação Intuitiva**: Interface limpa inspirada em gerenciadores de arquivos modernos
- **Upload de Arquivos**: Suporte para upload único e múltiplo, incluindo pastas completas (drag & drop)
- **Download Inteligente**: Download individual ou múltiplo com compressão automática em ZIP
- **Criação de Pastas**: Crie novas pastas diretamente pela interface
- **Exclusão Segura**: Remova arquivos e pastas com confirmação

### 🔍 Busca e Organização
- **Busca Local**: Filtro rápido por nome na pasta atual
- **Busca Global**: Busca avançada recursiva em todas as pastas configuradas
- **Ordenação Flexível**: Ordene por nome, data ou tipo de arquivo
- **Ícones Inteligentes**: Identificação visual automática por tipo de arquivo (imagens, vídeos, código, documentos, etc.)

### 👁️ Visualização de Arquivos
Suporte nativo para visualização de diversos formatos:
- **Imagens**: JPG, PNG, GIF, BMP, SVG, WebP, ICO
- **Vídeos**: MP4, WebM, OGG
- **Áudio**: MP3, WAV, OGG, M4A
- **Documentos**: PDF
- **Código**: Python, JavaScript, HTML, CSS, JSON, XML, C/C++, Java e mais
- **Texto**: TXT, MD, LOG, INI

### 🚀 Recursos Avançados
- **Múltiplas Raízes**: Configure várias pastas raiz independentes via variável de ambiente
- **Compressão Streaming**: Download de pastas grandes com streaming ZIP (sem consumir memória)
- **Seleção Múltipla**: Selecione e baixe múltiplos arquivos/pastas de uma vez
- **Data de Criação**: Visualize quando cada arquivo foi criado
- **Responsivo**: Interface adaptável para desktop, tablet e mobile
- **Hostname Display**: Identifique facilmente qual servidor você está acessando

## 📋 Requisitos

- Python 3.6 ou superior
- Flask 3.0.3
- zipstream-new 1.1.8

## 📦 Instalação

### Instalação via pip (Recomendado)

```bash
pip install pymyfilebrowser
```

### Instalação para Desenvolvimento

```bash
# Clone o repositório
git clone https://github.com/seu-usuario/pymyfilebrowser.git
cd pymyfilebrowser

# Instale em modo desenvolvimento
pip install -e .
```

### Instalação Manual

```bash
# Clone o repositório
git clone https://github.com/seu-usuario/pymyfilebrowser.git
cd pymyfilebrowser

# Instale as dependências
pip install -r requirements.txt
```

## ⚙️ Configuração

### Pastas Raiz

Por padrão, o PyMyFileBrowser usa a pasta **Downloads** do usuário atual. Para configurar pastas personalizadas, defina a variável de ambiente `PYBROWSER_ROOTS`:

#### Windows (PowerShell)
```powershell
$env:PYBROWSER_ROOTS='C:\Users\SeuUsuario\Downloads,C:\Users\SeuUsuario\Documents,D:\Projetos'
```

#### Windows (CMD)
```cmd
set PYBROWSER_ROOTS=C:\Users\SeuUsuario\Downloads,C:\Users\SeuUsuario\Documents,D:\Projetos
```

#### Linux/macOS
```bash
export PYBROWSER_ROOTS='/home/usuario/Downloads,/home/usuario/Documents,/var/www/projetos'
```

#### Formato da Variável

A variável `PYBROWSER_ROOTS` deve conter **caminhos separados por vírgula**. O nome de cada pasta será extraído automaticamente do caminho.

**Exemplos:**

Windows:
```
PYBROWSER_ROOTS=C:\Users\John\Downloads,C:\Users\John\Documents,D:\Development\Projects
```

Linux/macOS:
```
PYBROWSER_ROOTS=/home/john/Downloads,/home/john/Documents,/var/www/projects
```

> **Nota**: O nome exibido será o nome da pasta final no caminho. Por exemplo, `C:\Users\John\Downloads` será exibido como "Downloads".

#### Uso com Argumento -r

Você também pode especificar uma pasta diretamente ao executar:

```bash
python -m pymyfilebrowser -r C:\MinhaPasta
```

ou

```bash
pymyfilebrowser -r /home/usuario/meus-arquivos
```

## 🚀 Uso

### Executar como Módulo Python (Recomendado)

```bash
python -m pymyfilebrowser
```

### Executar via Comando Instalado

```bash
pymyfilebrowser
```

### Executar Diretamente (Desenvolvimento)

```bash
python run.py
```

Após iniciar, acesse em seu navegador:
```
http://localhost:5000
```

Para acessar de outros dispositivos na rede:
```
http://[IP-DO-SEU-PC]:5000
```

## 🎯 Como Usar

### Navegação Básica
1. Ao abrir, você verá as pastas raiz configuradas
2. Clique em uma pasta para navegar
3. Use o breadcrumb no topo para voltar
4. Use os botões de navegação (Voltar/Home) no topo direito

### Upload de Arquivos
1. Navegue até a pasta de destino
2. Clique no botão **📤 Upload** (canto superior direito)
3. Escolha "Arquivos" ou "Pasta"
4. Selecione os arquivos/pasta desejados
5. Aguarde o upload e clique em "Concluir"

### Download de Arquivos
1. **Download Individual**: Clique no ícone 📥 ao lado do arquivo
2. **Download Múltiplo**:
   - Marque as caixas de seleção dos itens desejados
   - Clique no botão verde que aparece no topo
   - Arquivos múltiplos são automaticamente compactados em ZIP

### Busca de Arquivos
1. **Busca Local**: Digite na caixa de busca no topo da lista
2. **Busca Global**: Clique no ícone 🔍 (Busca Avançada)
   - Digite o termo de busca
   - Aguarde os resultados
   - Clique em qualquer resultado para navegar até o arquivo

### Criar Pasta
1. Navegue até onde deseja criar a pasta
2. Clique no botão **📁+** (canto superior direito)
3. Digite o nome da pasta
4. Confirme

### Excluir Arquivo/Pasta
1. Clique no ícone 🗑️ ao lado do item
2. Confirme a exclusão
3. ⚠️ **Atenção**: Esta ação é irreversível!

### Visualizar Arquivo
1. Clique no ícone 👁️ ao lado do arquivo
2. O arquivo será aberto em uma modal de visualização
3. Use os controles nativos para imagens, vídeos e áudios

### Ordenação
Use os botões no topo da lista:
- **Nome**: Ordem alfabética (pastas primeiro)
- **Data**: Mais recentes primeiro
- **Tipo**: Agrupado por extensão

## 📁 Estrutura do Projeto

```
pymyfilebrowser/
│
├── pyMyFileBrowser/           # Pacote principal
│   ├── __init__.py           # Aplicação Flask e rotas
│   ├── __main__.py           # Entry point para python -m
│   └── templates/            # Templates HTML
│       └── index.html        # Interface principal
│
├── setup.py                  # Configuração do pacote
├── MANIFEST.in              # Arquivos para incluir no pacote
├── requirements.txt         # Dependências
├── CHANGELOG.txt           # Histórico de versões
├── README.md              # Este arquivo
└── run.py                # Script de execução direta
```

## 🛠️ Desenvolvimento

#

## 🔒 Segurança

- **Path Traversal Protection**: O sistema valida todos os caminhos para evitar acesso fora das pastas raiz
- **Filename Sanitization**: Nomes de arquivos são sanitizados usando `secure_filename()` do Werkzeug
- **Input Validation**: Validação em todas as rotas POST
- **⚠️ Aviso**: Este sistema foi projetado para uso em redes locais confiáveis. **NÃO exponha diretamente à internet sem autenticação adequada**

## 🤝 Contribuindo

Contribuições são bem-vindas! Para contribuir:

1. Faça um Fork do projeto
2. Crie uma branch para sua feature (`git checkout -b feature/NovaFeature`)
3. Commit suas mudanças (`git commit -m 'Adiciona nova feature'`)
4. Push para a branch (`git push origin feature/NovaFeature`)
5. Abra um Pull Request

## 📝 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo [LICENSE](LICENSE) para detalhes.

## 🐛 Reportar Bugs

Encontrou um bug? Por favor, abra uma [issue](https://github.com/seu-usuario/pymyfilebrowser/issues) com:
- Descrição do problema
- Passos para reproduzir
- Comportamento esperado vs atual
- Screenshots (se aplicável)
- Informações do sistema (OS, versão do Python)

## 💡 Roadmap

- [ ] Autenticação de usuários
- [ ] Suporte a temas (claro/escuro)
- [ ] Editor de texto integrado
- [ ] Visualização de mais formatos (Office, etc.)
- [ ] Compartilhamento de links temporários
- [ ] Upload com barra de progresso
- [ ] Preview de thumbnails para imagens
- [ ] Drag & drop para reorganizar arquivos

## 📧 Contato

Para questões, sugestões ou feedback, entre em contato através das issues do GitHub.

---

**Desenvolvido com ❤️ e 🐍 Python**