Compare commits
38 Commits
3.5.1-beta
...
4.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e6fb8a8a50 | ||
|
|
e93a05f795 | ||
|
|
8c7601c1bc | ||
|
|
5d18354cbb | ||
|
|
7543f946f2 | ||
|
|
e75112b043 | ||
|
|
7b28688925 | ||
|
|
348d575c62 | ||
|
|
e81490ec34 | ||
|
|
ebdac408b0 | ||
|
|
9411208f81 | ||
|
|
9a7f8c06f6 | ||
|
|
0f6e6bfb65 | ||
|
|
8f499bd050 | ||
|
|
80069719f2 | ||
|
|
48c904258a | ||
|
|
1606d9da99 | ||
|
|
87e185f6f1 | ||
|
|
80f1896752 | ||
|
|
1e5e984fe6 | ||
|
|
4f5c36db18 | ||
|
|
8090ff35ec | ||
|
|
3b6af5fe9f | ||
|
|
d10eab19fc | ||
|
|
03a779ea9c | ||
|
|
be269a4a34 | ||
|
|
0e25c68e5a | ||
|
|
364f41e3c4 | ||
|
|
de079bd6ee | ||
|
|
35524589e4 | ||
|
|
cdd8886692 | ||
|
|
4ddf99feb4 | ||
|
|
4ff065d1b4 | ||
|
|
9d355dbc00 | ||
|
|
eb9e433070 | ||
|
|
62694c4bb8 | ||
|
|
5cb4e5c82e | ||
|
|
74caba75d6 |
40
.github/workflows/android.yml
vendored
Normal file
40
.github/workflows/android.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
name: Build for Android
|
||||
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Download Android keystore
|
||||
id: android_keystore
|
||||
uses: timheuer/base64-to-file@v1.0.3
|
||||
with:
|
||||
fileName: upload-keystore.jks
|
||||
encodedString: ${{ secrets.KEYSTORE_BASE64 }}
|
||||
- name: Create key.properties
|
||||
run: |
|
||||
echo "storeFile=${{ steps.android_keystore.outputs.filePath }}" > filcnaplo/android/key.properties
|
||||
echo "storePassword=${{ secrets.STORE_PASSWORD }}" >> filcnaplo/android/key.properties
|
||||
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> filcnaplo/android/key.properties
|
||||
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> filcnaplo/android/key.properties
|
||||
- uses: actions/setup-java@v3
|
||||
with:
|
||||
distribution: "zulu"
|
||||
java-version: "17.x"
|
||||
cache: "gradle"
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: "3.10.2"
|
||||
channel: "stable"
|
||||
cache: "true"
|
||||
- name: Install dependencies
|
||||
run: ./fix-pub.sh
|
||||
- name: Build
|
||||
run: cd filcnaplo && ./build.sh
|
||||
- name: Upload Android Release
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: android-release
|
||||
path: build/outputs/flutter-apk/app-release.apk
|
||||
65
.github/workflows/ios.yml
vendored
Normal file
65
.github/workflows/ios.yml
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
name: "Build and Publish iOS"
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
# Checks-out our repository under $GITHUB_WORKSPACE, so our job can access it
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Install the Apple certificate and provisioning profile
|
||||
- name: Install the Apple certificate and provisioning profile
|
||||
env:
|
||||
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
|
||||
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
|
||||
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
run: |
|
||||
# create variables
|
||||
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
|
||||
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
|
||||
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
|
||||
# import certificate and provisioning profile from secrets
|
||||
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
|
||||
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $PP_PATH
|
||||
# create temporary keychain
|
||||
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
|
||||
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
|
||||
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
|
||||
# import certificate to keychain
|
||||
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
|
||||
security list-keychain -d user -s $KEYCHAIN_PATH
|
||||
# apply provisioning profile
|
||||
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
|
||||
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
|
||||
# Install flutter
|
||||
- name: Flutter get
|
||||
uses: subosito/flutter-action@v1
|
||||
with:
|
||||
flutter-version: '3.10.2'
|
||||
|
||||
# Install your project's dependencies
|
||||
- name: Install dependencies
|
||||
run: bash fix-pub.sh
|
||||
|
||||
# Build and sign the ipa using a single flutter command
|
||||
- name: Building IPA
|
||||
working-directory: filcnaplo
|
||||
run: bash build-ipa.sh
|
||||
|
||||
# Collect the file and upload as artifact
|
||||
- name: collect ipa artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: release-ipa
|
||||
# Path to the release files
|
||||
path: filcnaplo/build/ios/ipa/*.ipa
|
||||
|
||||
# Important! Cleanup: remove the certificate and provisioning profile from the runner!
|
||||
- name: Clean up keychain and provisioning profile
|
||||
if: ${{ always() }}
|
||||
run: |
|
||||
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
|
||||
rm ~/Library/MobileDevice/Provisioning\ Profiles/build_pp.mobileprovision
|
||||
@@ -5,17 +5,17 @@ A folytatáshoz szükséged lesz egy Linuxot vagy Windowst futtató számítóg
|
||||
Segít, ha nem csak kicsit tudsz programozni, és ha ismered a Gitet és a GitHubot ;)
|
||||
|
||||
## Miben segítsek?
|
||||
Kérünk, **olyan dologgal járulj hozzá** a Filchez, ami valószínűleg **sok embernek hasznos lesz** majd. Szeretnénk egy minél teljeskörűbb iskolai asszisztenst létrehozni, de az iskolaspecifikus, vagy külön neked hasznos funkciók helye inkább legyen a saját forkod.
|
||||
Kérünk, **olyan dologgal járulj hozzá** a reFilchez, ami valószínűleg **sok embernek hasznos lesz** majd. Szeretnénk egy minél teljeskörűbb iskolai asszisztenst létrehozni, de az iskolaspecifikus, vagy külön neked hasznos funkciók helye inkább legyen a saját forkod.
|
||||
|
||||
Fontos, hogy **mielőtt egy nagy volumenű projektbe belekezdesz, futtasd meg ötletedet a [Discord szerverünkön](https://filcnaplo.hu/discord),** ahol még azelőtt tudunk tanácsot adni, mielőtt sok-sok órát beleöltél volna egy esetleg felesleges dologba.
|
||||
Fontos, hogy **mielőtt egy nagy volumenű projektbe belekezdesz, futtasd meg ötletedet a [Discord szerverünkön](https://dc.refilc.hu/),** ahol még azelőtt tudunk tanácsot adni, mielőtt sok-sok órát beleöltél volna egy esetleg felesleges dologba.
|
||||
|
||||
A legjobban annak örülünk, ha az [Issues](https://github.com/filcnaplo/filcnaplo/issues) oldalról szemezgetsz, **ha lehet, a [priority taggel megjelöltekkel kezdd](https://github.com/filcnaplo/filcnaplo/issues?q=is%3Aissue+is%3Aopen+label%3Apriority),** vagy ha új vagy a Flutterhez, ajánljuk figyelmedbe [ezeket a viszonylag könnyen javítható hibákat](https://github.com/filcnaplo/filcnaplo/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) (ha épp van ilyen).
|
||||
A legjobban annak örülünk, ha az [Issues](https://github.com/refilc/filcnaplo/issues) oldalról szemezgetsz, **ha lehet, a [priority taggel megjelöltekkel kezdd](https://github.com/refilc/filcnaplo/issues?q=is%3Aissue+is%3Aopen+label%3Apriority),** vagy ha új vagy a Flutterhez, ajánljuk figyelmedbe [ezeket a viszonylag könnyen javítható hibákat](https://github.com/refilc/filcnaplo/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) (ha épp van ilyen).
|
||||
|
||||
## Hogyan segítsek?
|
||||
|
||||
Nem ígérhetünk itt sem programozás-, sem git-kurzust, de a projektspecifikus dolgokat leírjuk, és segítünk a Flutter feltelepítésében.
|
||||
|
||||
A Filc a Google által pár éve létrehozott **[Fluttert](https://flutter.dev/)** használja, aminek nyelve a **[Dart](https://dart.dev/)**. Ha ismered a C#-ot, Javát, C++t, vagy egyéb hasonló nyelvet, **nem fog gondot okozni a használata.** A felhasználói felület létrehozásában az is segíthet, ha foglalkoztál már korábban weboldalakkal.
|
||||
A reFilc a Google által pár éve létrehozott **[Fluttert](https://flutter.dev/)** használja, aminek nyelve a **[Dart](https://dart.dev/)**. Ha ismered a C#-ot, Javát, C++t, vagy egyéb hasonló nyelvet, **nem fog gondot okozni a használata.** A felhasználói felület létrehozásában az is segíthet, ha foglalkoztál már korábban weboldalakkal.
|
||||
Ha még nem használtál Fluttert, mindenképp böngészd át a [YouTube csatornájukat](https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw).
|
||||
Könnyen tudsz kódot, vagy akár UI-t is tesztelni a [DartPad](https://dartpad.dev/) oldalon.
|
||||
|
||||
@@ -24,10 +24,10 @@ Fontos: **Legyél a flutter beta verzióján!** Írd be: `flutter channel beta`
|
||||
|
||||
|
||||
|
||||
Ha nem értesz a Githez, ajánljuk figyelmedbe [ezt a cikket](https://medium.com/envienta-magyarorsz%C3%A1g/git-%C3%A9s-github-gyorstalpal%C3%B3-f2d78a732deb). Viszont arra kérünk, a Git használatát ne a Filcen próbáld ki először, hozz létre előbb egy saját Repót, és abba tesztelgess. Ha már nagyjából kitapasztaltad, várjuk hozzájárulásodat.
|
||||
Ha nem értesz a Githez, ajánljuk figyelmedbe [ezt a cikket](https://medium.com/envienta-magyarorsz%C3%A1g/git-%C3%A9s-github-gyorstalpal%C3%B3-f2d78a732deb). Viszont arra kérünk, a Git használatát ne a reFilcen próbáld ki először, hozz létre előbb egy saját Repót, és abba tesztelgess. Ha már nagyjából kitapasztaltad, várjuk hozzájárulásodat.
|
||||
|
||||
Készíts egy forkot a saját fiókod alá.
|
||||
A Filc legfrissebb, épp fejlesztés alatt álló verzióját a [dev brancen](https://github.com/filcnaplo/filcnaplo/tree/dev) találod, kérjük ide commitolj, és ide célozd a forkodból a Pull Requested. Írd le benne, mit változtattál, és ha lehet, csatolj képernyőképet is.
|
||||
A reFilc legfrissebb, épp fejlesztés alatt álló verzióját a [dev brancen](https://github.com/refilc/filcnaplo/tree/dev) találod, kérjük ide commitolj, és ide célozd a forkodból a Pull Requested. Írd le benne, mit változtattál, és ha lehet, csatolj képernyőképet is.
|
||||
Minél gyakrabban készíts minél részletesebben elnevezett commitokat, hogy el tudjunk tájékozódni az általad beküldött kódon.
|
||||
|
||||
---
|
||||
|
||||
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2021, Filc
|
||||
Copyright (c) 2023, reFilc
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -18,13 +18,7 @@ cd naplo
|
||||
|
||||
### Install packages
|
||||
|
||||
```sh
|
||||
cd filcnaplo && flutter pub get && cd ..
|
||||
cd filcnaplo_mobile_ui && flutter pub get && cd ..
|
||||
cd filcnaplo_desktop_ui && flutter pub get && cd ..
|
||||
cd filcnaplo_kreta_api && flutter pub get && cd ..
|
||||
cd filcnaplo_premium && flutter pub get && cd ..
|
||||
```
|
||||
Run `fix-pub.sh`
|
||||
|
||||
### Run the app
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
|
||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||
|
||||
def keystoreProperties = new Properties()
|
||||
def keystorePropertiesFile = rootProject.file("filc3.properties")
|
||||
def keystorePropertiesFile = rootProject.file("key.properties")
|
||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||
|
||||
android {
|
||||
|
||||
@@ -13,7 +13,7 @@ buildscript {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:4.2.2'
|
||||
classpath 'com.android.tools.build:gradle:7.1.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
storePassword=filc3fix
|
||||
keyPassword=filc3fix
|
||||
keyAlias=upload
|
||||
storeFile=C:/Users/Peti/upload-keystore.jks
|
||||
3
filcnaplo/build-ipa.sh
Executable file
3
filcnaplo/build-ipa.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
flutter build ipa --release --dart-define=APPVER=$(cat pubspec.yaml | grep version: | cut -d' ' -f2 | cut -d+ -f1) --no-tree-shake-icons
|
||||
@@ -1,13 +1,3 @@
|
||||
#!/usr/bin/env fish
|
||||
#!/bin/sh
|
||||
|
||||
# With build number
|
||||
function get_version_bn
|
||||
cat pubspec.yaml | grep version: | cut -d' ' -f2
|
||||
end
|
||||
|
||||
function get_version
|
||||
cat pubspec.yaml | grep version: | cut -d' ' -f2 | cut -d+ -f1
|
||||
end
|
||||
|
||||
flutter build apk --release --dart-define=APPVER=(get_version) --no-tree-shake-icons && \
|
||||
cp -v "build/app/outputs/flutter-apk/app-release.apk" ~/"Desktop/hu.filc.naplo_"(get_version_bn).apk
|
||||
flutter build apk --release --dart-define=APPVER=$(cat pubspec.yaml | grep version: | cut -d' ' -f2 | cut -d+ -f1) --no-tree-shake-icons
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<dict>
|
||||
<key>BGTaskSchedulerPermittedIdentifiers</key>
|
||||
<array>
|
||||
<string>com.transistorsoft.fetch</string>
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Filc Napló</string>
|
||||
<string>reFilc</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
@@ -67,5 +67,5 @@
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -12,18 +12,18 @@ import 'package:connectivity_plus/connectivity_plus.dart';
|
||||
|
||||
class FilcAPI {
|
||||
// Public API
|
||||
static const schoolList = "https://filcnaplo.hu/v2/school_list.json";
|
||||
static const news = "https://filcnaplo.hu/v2/news.json";
|
||||
static const supporters = "https://api.filcnaplo.hu/sponsors";
|
||||
static const schoolList = "https://api.refilc.hu/v1/public/school-list";
|
||||
static const news = "https://api.refilc.hu/v1/public/news";
|
||||
static const supporters = "https://api.refilc.hu/v1/public/supporters";
|
||||
|
||||
// Private API
|
||||
static const config = "https://api.filcnaplo.hu/config";
|
||||
static const reportApi = "https://api.filcnaplo.hu/report";
|
||||
static const config = "https://api.refilc.hu/v1/private/config";
|
||||
static const reportApi = "https://api.refilc.hu/v1/private/crash-report";
|
||||
static const premiumApi = "https://api.filcnaplo.hu/premium/activate";
|
||||
// static const premiumScopesApi = "https://api.filcnaplo.hu/premium/scopes";
|
||||
|
||||
// Updates
|
||||
static const repo = "filc/naplo";
|
||||
static const repo = "refilc/naplo";
|
||||
static const releases = "https://api.github.com/repos/$repo/releases";
|
||||
|
||||
static Future<bool> checkConnectivity() async =>
|
||||
@@ -68,6 +68,7 @@ class FilcAPI {
|
||||
http.Response res = await http.get(Uri.parse(config), headers: headers);
|
||||
|
||||
if (res.statusCode == 200) {
|
||||
print(jsonDecode(res.body));
|
||||
return Config.fromJson(jsonDecode(res.body));
|
||||
} else if (res.statusCode == 429) {
|
||||
res = await http.get(Uri.parse(config));
|
||||
|
||||
@@ -21,11 +21,20 @@ import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:filcnaplo/api/nonce.dart';
|
||||
|
||||
enum LoginState { missingFields, invalidGrant, failed, normal, inProgress, success }
|
||||
enum LoginState {
|
||||
missingFields,
|
||||
invalidGrant,
|
||||
failed,
|
||||
normal,
|
||||
inProgress,
|
||||
success
|
||||
}
|
||||
|
||||
Nonce getNonce(String nonce, String username, String instituteCode) {
|
||||
Nonce nonceEncoder = Nonce(key: [98, 97, 83, 115, 120, 79, 119, 108, 85, 49, 106, 77], nonce: nonce);
|
||||
nonceEncoder.encode(instituteCode.toUpperCase() + nonce + username.toUpperCase());
|
||||
Nonce nonceEncoder = Nonce(
|
||||
key: [98, 97, 83, 115, 120, 79, 119, 108, 85, 49, 106, 77], nonce: nonce);
|
||||
nonceEncoder
|
||||
.encode(instituteCode.toUpperCase() + nonce + username.toUpperCase());
|
||||
|
||||
return nonceEncoder;
|
||||
}
|
||||
@@ -38,18 +47,21 @@ Future loginApi({
|
||||
void Function(User)? onLogin,
|
||||
void Function()? onSuccess,
|
||||
}) async {
|
||||
Provider.of<KretaClient>(context, listen: false).userAgent = Provider.of<SettingsProvider>(context, listen: false).config.userAgent;
|
||||
Provider.of<KretaClient>(context, listen: false).userAgent =
|
||||
Provider.of<SettingsProvider>(context, listen: false).config.userAgent;
|
||||
|
||||
Map<String, String> headers = {
|
||||
"content-type": "application/x-www-form-urlencoded",
|
||||
};
|
||||
|
||||
String nonceStr = await Provider.of<KretaClient>(context, listen: false).getAPI(KretaAPI.nonce, json: false);
|
||||
String nonceStr = await Provider.of<KretaClient>(context, listen: false)
|
||||
.getAPI(KretaAPI.nonce, json: false);
|
||||
|
||||
Nonce nonce = getNonce(nonceStr, username, instituteCode);
|
||||
headers.addAll(nonce.header());
|
||||
|
||||
Map? res = await Provider.of<KretaClient>(context, listen: false).postAPI(KretaAPI.login,
|
||||
Map? res = await Provider.of<KretaClient>(context, listen: false)
|
||||
.postAPI(KretaAPI.login,
|
||||
headers: headers,
|
||||
body: User.loginBody(
|
||||
username: username,
|
||||
@@ -64,8 +76,11 @@ Future loginApi({
|
||||
} else {
|
||||
if (res.containsKey("access_token")) {
|
||||
try {
|
||||
Provider.of<KretaClient>(context, listen: false).accessToken = res["access_token"];
|
||||
Map? studentJson = await Provider.of<KretaClient>(context, listen: false).getAPI(KretaAPI.student(instituteCode));
|
||||
Provider.of<KretaClient>(context, listen: false).accessToken =
|
||||
res["access_token"];
|
||||
Map? studentJson =
|
||||
await Provider.of<KretaClient>(context, listen: false)
|
||||
.getAPI(KretaAPI.student(instituteCode));
|
||||
Student student = Student.fromJson(studentJson!);
|
||||
var user = User(
|
||||
username: username,
|
||||
@@ -79,7 +94,9 @@ Future loginApi({
|
||||
if (onLogin != null) onLogin(user);
|
||||
|
||||
// Store User in the database
|
||||
await Provider.of<DatabaseProvider>(context, listen: false).store.storeUser(user);
|
||||
await Provider.of<DatabaseProvider>(context, listen: false)
|
||||
.store
|
||||
.storeUser(user);
|
||||
Provider.of<UserProvider>(context, listen: false).addUser(user);
|
||||
Provider.of<UserProvider>(context, listen: false).setUser(user.id);
|
||||
|
||||
@@ -87,7 +104,8 @@ Future loginApi({
|
||||
try {
|
||||
await Future.wait([
|
||||
Provider.of<GradeProvider>(context, listen: false).fetch(),
|
||||
Provider.of<TimetableProvider>(context, listen: false).fetch(week: Week.current()),
|
||||
Provider.of<TimetableProvider>(context, listen: false)
|
||||
.fetch(week: Week.current()),
|
||||
Provider.of<ExamProvider>(context, listen: false).fetch(),
|
||||
Provider.of<HomeworkProvider>(context, listen: false).fetch(),
|
||||
Provider.of<MessageProvider>(context, listen: false).fetchAll(),
|
||||
|
||||
@@ -120,7 +120,7 @@ class App extends StatelessWidget {
|
||||
),
|
||||
);
|
||||
},
|
||||
title: "Filc Napló",
|
||||
title: "reFilc",
|
||||
debugShowCheckedModeBanner: false,
|
||||
theme: AppTheme.lightTheme(context, palette: corePalette),
|
||||
darkTheme: AppTheme.darkTheme(context, palette: corePalette),
|
||||
|
||||
@@ -151,8 +151,9 @@ Future<List<DateWidget>> getFilterWidgets(FilterType activeData,
|
||||
|
||||
// Updates
|
||||
case FilterType.updates:
|
||||
if (updateProvider.available)
|
||||
if (updateProvider.available) {
|
||||
items = [update_filter.getWidget(updateProvider.releases.first)];
|
||||
}
|
||||
break;
|
||||
|
||||
// Missed Exams
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[Desktop Entry]
|
||||
Name=Filc Napló
|
||||
Name=reFilc
|
||||
Comment=Nem hivatalos e-napló alkalmazás az eKRÉTA rendszerhez
|
||||
Exec=filcnaplo
|
||||
Icon=icon.png
|
||||
|
||||
@@ -425,7 +425,7 @@
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = MYUTW2GF6J;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Filc Napló";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "reFilc";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -565,7 +565,7 @@
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = MYUTW2GF6J;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Filc Napló";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "reFilc";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -595,7 +595,7 @@
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = MYUTW2GF6J;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Filc Napló";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "reFilc";
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.education";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
// 'flutter create' template.
|
||||
|
||||
// The application's name. By default this is also the title of the Flutter window.
|
||||
PRODUCT_NAME = Filc Napló
|
||||
PRODUCT_NAME = reFilc
|
||||
|
||||
// The application's bundle identifier
|
||||
PRODUCT_BUNDLE_IDENTIFIER = hu.filc.filcnaplo
|
||||
PRODUCT_BUNDLE_IDENTIFIER = hu.refilc.naplo
|
||||
|
||||
// The copyright displayed in application information
|
||||
PRODUCT_COPYRIGHT = Deez mogyorók
|
||||
PRODUCT_COPYRIGHT = reFilc
|
||||
|
||||
@@ -3,7 +3,7 @@ description: "Nem hivatalos e-napló alkalmazás az e-Kréta rendszerhez"
|
||||
homepage: https://refilc.hu
|
||||
publish_to: "none"
|
||||
|
||||
version: 3.5.1+195
|
||||
version: 4.0.0+198
|
||||
|
||||
environment:
|
||||
sdk: ">=2.17.0 <3.0.0"
|
||||
|
||||
@@ -36,7 +36,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_custom_tabs/flutter_custom_tabs.dart' as tabs;
|
||||
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:filcnaplo/utils/color.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import 'settings_screen.i18n.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@@ -97,9 +96,11 @@ class _SettingsScreenState extends State<SettingsScreen>
|
||||
Text(!settings.presentationMode ? account.username : "72469696969"),
|
||||
profileImage: ProfileImage(
|
||||
name: _firstName,
|
||||
backgroundColor: !settings.presentationMode
|
||||
? ColorUtils.stringToColor(account.name)
|
||||
: Theme.of(context).colorScheme.secondary,
|
||||
backgroundColor: Theme.of(context)
|
||||
.colorScheme
|
||||
.primary, //!settings.presentationMode
|
||||
//? ColorUtils.stringToColor(account.name)
|
||||
//: Theme.of(context).colorScheme.secondary,
|
||||
role: account.role,
|
||||
),
|
||||
onTap: () {
|
||||
|
||||
@@ -46,7 +46,7 @@ extension SettingsLocalization on String {
|
||||
"goodstudent": "Good student mode",
|
||||
"attention": "Attention!",
|
||||
"goodstudent_disclaimer":
|
||||
"Filc Napló® Informatikai Zrt. can not be held liable for the usage of this feature.\n\n(if your mother beats you up because you showed her fake grades, you can only blame yourself for it)",
|
||||
"reFilc can not be held liable for the usage of this feature.\n\n(if your mother beats you up because you showed her fake grades, you can only blame yourself for it)",
|
||||
"understand": "I understand",
|
||||
"secret": "Secret Settings",
|
||||
"bell_delay": "Bell Delay",
|
||||
@@ -105,7 +105,7 @@ extension SettingsLocalization on String {
|
||||
"goodstudent": "Jó tanuló mód",
|
||||
"attention": "Figyelem!",
|
||||
"goodstudent_disclaimer":
|
||||
"A Filc Napló® Informatikai Zrt. minden felelősséget elhárít a funkció használatával kapcsolatban.\n\n(Értsd: ha az anyád megver, mert megtévesztő ábrákat mutattál neki, azért csakis magadadat hibáztathatod.)",
|
||||
"A reFilc minden felelősséget elhárít a funkció használatával kapcsolatban.\n\n(Értsd: ha az anyád megver, mert megtévesztő ábrákat mutattál neki, azért csakis magadadat hibáztathatod.)",
|
||||
"understand": "Értem",
|
||||
"secret": "Titkos Beállítások",
|
||||
"bell_delay": "Csengő eltolódása",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2021, Filc
|
||||
Copyright (c) 2023, reFilc
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2021, Filc
|
||||
Copyright (c) 2023, reFilc
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
||||
@@ -4,30 +4,40 @@ import 'package:flutter/material.dart';
|
||||
import 'package:i18n_extension/i18n_widget.dart';
|
||||
|
||||
class AverageDisplay extends StatelessWidget {
|
||||
const AverageDisplay({Key? key, this.average = 0.0, this.border = false}) : super(key: key);
|
||||
const AverageDisplay({Key? key, this.average = 0.0, this.border = false})
|
||||
: super(key: key);
|
||||
|
||||
final double average;
|
||||
final bool border;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
Color color = average == 0.0 ? AppColors.of(context).text.withOpacity(.8) : gradeColor(context: context, value: average);
|
||||
Color color = average == 0.0
|
||||
? AppColors.of(context).text.withOpacity(.8)
|
||||
: gradeColor(context: context, value: average);
|
||||
|
||||
String averageText = average.toStringAsFixed(2);
|
||||
if (I18n.of(context).locale.languageCode != "en") averageText = averageText.replaceAll(".", ",");
|
||||
if (I18n.of(context).locale.languageCode != "en") {
|
||||
averageText = averageText.replaceAll(".", ",");
|
||||
}
|
||||
|
||||
return Container(
|
||||
width: border ? 57.0 : 54.0,
|
||||
padding: EdgeInsets.symmetric(horizontal: 8.0 - (border ? 2 : 0), vertical: 6.0 - (border ? 2 : 0)),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 8.0 - (border ? 2 : 0), vertical: 6.0 - (border ? 2 : 0)),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(45.0),
|
||||
border: border ? Border.fromBorderSide(BorderSide(color: color.withOpacity(.5), width: 3.0)) : null,
|
||||
border: border
|
||||
? Border.fromBorderSide(
|
||||
BorderSide(color: color.withOpacity(.5), width: 3.0))
|
||||
: null,
|
||||
color: !border ? color.withOpacity(average == 0.0 ? .15 : .25) : null,
|
||||
),
|
||||
child: Text(
|
||||
average == 0.0 ? "-" : averageText,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(color: color, fontWeight: FontWeight.w600),
|
||||
style: TextStyle(
|
||||
color: color, fontWeight: FontWeight.w600, fontSize: 14.0),
|
||||
maxLines: 1,
|
||||
),
|
||||
);
|
||||
|
||||
@@ -59,7 +59,7 @@ class ProfileButton extends StatelessWidget {
|
||||
: Theme.of(context).colorScheme.secondary,
|
||||
heroTag: child.heroTag,
|
||||
key: child.key,
|
||||
name: !pMode ? child.name : "Béla",
|
||||
name: !pMode ? child.name : "János",
|
||||
radius: child.radius,
|
||||
badge: child.badge,
|
||||
role: child.role,
|
||||
@@ -86,7 +86,7 @@ class ProfileButton extends StatelessWidget {
|
||||
),
|
||||
);
|
||||
},
|
||||
onDoubleTap: () {
|
||||
onLongPress: () {
|
||||
if (account != null) {
|
||||
user.setUser(account!.id);
|
||||
restore().then((_) => user.setUser(account!.id));
|
||||
|
||||
@@ -6,7 +6,12 @@ import 'package:filcnaplo_mobile_ui/common/average_display.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class GradeSubjectTile extends StatelessWidget {
|
||||
const GradeSubjectTile(this.subject, {Key? key, this.average = 0.0, this.groupAverage = 0.0, this.onTap, this.averageBefore = 0.0})
|
||||
const GradeSubjectTile(this.subject,
|
||||
{Key? key,
|
||||
this.average = 0.0,
|
||||
this.groupAverage = 0.0,
|
||||
this.onTap,
|
||||
this.averageBefore = 0.0})
|
||||
: super(key: key);
|
||||
|
||||
final Subject subject;
|
||||
@@ -25,7 +30,9 @@ class GradeSubjectTile extends StatelessWidget {
|
||||
}
|
||||
|
||||
final String changeIcon = average < averageBefore ? "▼" : "▲";
|
||||
final Color changeColor = average < averageBefore ? Colors.redAccent : Colors.lightGreenAccent.shade700;
|
||||
final Color changeColor = average < averageBefore
|
||||
? Colors.redAccent
|
||||
: Colors.lightGreenAccent.shade700;
|
||||
|
||||
return Material(
|
||||
type: MaterialType.transparency,
|
||||
@@ -36,22 +43,30 @@ class GradeSubjectTile extends StatelessWidget {
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
||||
visualDensity: VisualDensity.compact,
|
||||
onTap: onTap,
|
||||
leading: Icon(SubjectIcon.resolveVariant(subject: subject, context: context), color: textColor.withOpacity(.75)),
|
||||
leading: Icon(
|
||||
SubjectIcon.resolveVariant(subject: subject, context: context),
|
||||
color: textColor.withOpacity(.75)),
|
||||
title: Text(
|
||||
subject.renamedTo ?? subject.name.capital(),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 14.0, color: textColor, fontStyle: subject.isRenamed ? FontStyle.italic : null),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 14.0,
|
||||
color: textColor,
|
||||
fontStyle: subject.isRenamed ? FontStyle.italic : null),
|
||||
),
|
||||
trailing: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (groupAverage != 0 && averageBefore == 0.0) AverageDisplay(average: groupAverage, border: true),
|
||||
if (groupAverage != 0 && averageBefore == 0.0)
|
||||
AverageDisplay(average: groupAverage, border: true),
|
||||
const SizedBox(width: 6.0),
|
||||
if (averageBefore != 0.0 && averageBefore != average) ...[
|
||||
AverageDisplay(average: averageBefore),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 6.0, right: 6.0, bottom: 3.5),
|
||||
padding:
|
||||
const EdgeInsets.only(left: 6.0, right: 6.0, bottom: 3.5),
|
||||
child: Text(
|
||||
changeIcon,
|
||||
style: TextStyle(
|
||||
|
||||
@@ -108,6 +108,16 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
|
||||
now.day == user.student?.birth.day) {
|
||||
greeting = "happybirthday";
|
||||
|
||||
if (NavigationScreen.of(context)?.init("confetti") ?? false) {
|
||||
_confettiController =
|
||||
ConfettiController(duration: const Duration(seconds: 3));
|
||||
Future.delayed(const Duration(seconds: 1))
|
||||
.then((value) => mounted ? _confettiController?.play() : null);
|
||||
}
|
||||
} else if (now.isAfter(DateTime(now.year, DateTime.may, 28)) &&
|
||||
now.isBefore(DateTime(now.year, DateTime.may, 30))) {
|
||||
greeting = "refilcopen";
|
||||
|
||||
if (NavigationScreen.of(context)?.init("confetti") ?? false) {
|
||||
_confettiController =
|
||||
ConfettiController(duration: const Duration(seconds: 3));
|
||||
@@ -149,7 +159,7 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
|
||||
if (!settings.presentationMode) {
|
||||
firstName = nameParts.length > 1 ? nameParts[1] : nameParts[0];
|
||||
} else {
|
||||
firstName = "Béla";
|
||||
firstName = "János";
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
@@ -285,11 +295,12 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
|
||||
.clamp(-1.0, 1.0);
|
||||
} else if (notification is ScrollEndNotification) {
|
||||
_tabController.index = _pageController.page!.round();
|
||||
if (!_tabController.indexIsChanging)
|
||||
if (!_tabController.indexIsChanging) {
|
||||
_tabController.offset =
|
||||
(_pageController.page! - _tabController.index)
|
||||
.clamp(-1.0, 1.0);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
child: PageView.custom(
|
||||
|
||||
@@ -11,13 +11,15 @@ extension Localization on String {
|
||||
"happybirthday": "🎂 Happy birthday, %s!",
|
||||
"merryxmas": "🎄 Merry Christmas, %s!",
|
||||
"happynewyear": "🎉 Happy New Year, %s!",
|
||||
"refilcopen": "🎈 Welcome in reFilc, %s!",
|
||||
"empty": "Nothing to see here.",
|
||||
"All": "All",
|
||||
"Grades": "Grades",
|
||||
"Messages": "Messages",
|
||||
"Absences": "Absences",
|
||||
"update_available": "Update Available",
|
||||
"missed_exams": "You missed %s exams this week.".one("You missed an exam this week."),
|
||||
"missed_exams": "You missed %s exams this week."
|
||||
.one("You missed an exam this week."),
|
||||
"missed_exam_contact": "Contact %s, to resolve it!",
|
||||
},
|
||||
"hu_hu": {
|
||||
@@ -28,13 +30,15 @@ extension Localization on String {
|
||||
"happybirthday": "🎂 Boldog születésnapot, %s!",
|
||||
"merryxmas": "🎄 Boldog Karácsonyt, %s!",
|
||||
"happynewyear": "🎉 Boldog új évet, %s!",
|
||||
"refilcopen": "🎈 Üdv a reFilc-ben, %s!",
|
||||
"empty": "Nincs itt semmi látnivaló.",
|
||||
"All": "Összes",
|
||||
"Grades": "Jegyek",
|
||||
"Messages": "Üzenetek",
|
||||
"Absences": "Hiányok",
|
||||
"update_available": "Frissítés elérhető",
|
||||
"missed_exams": "Ezen a héten hiányoztál %s dolgozatról.".one("Ezen a héten hiányoztál egy dolgozatról."),
|
||||
"missed_exams": "Ezen a héten hiányoztál %s dolgozatról."
|
||||
.one("Ezen a héten hiányoztál egy dolgozatról."),
|
||||
"missed_exam_contact": "Keresd %s-t, ha pótolni szeretnéd!",
|
||||
},
|
||||
"de_de": {
|
||||
@@ -45,13 +49,15 @@ extension Localization on String {
|
||||
"happybirthday": "🎂 Alles Gute zum Geburtstag, %s!",
|
||||
"merryxmas": "🎄 Frohe Weihnachten, %s!",
|
||||
"happynewyear": "🎉 Frohes neues Jahr, %s!",
|
||||
"refilcopen": "🎈 Willkommen bei reFilc, %s!",
|
||||
"empty": "Hier gibt es nichts zu sehen.",
|
||||
"All": "Alles",
|
||||
"Grades": "Noten",
|
||||
"Messages": "Nachrichten",
|
||||
"Absences": "Fehlen",
|
||||
"update_available": "Update verfügbar",
|
||||
"missed_exams": "Diese Woche haben Sie %s Prüfungen verpasst.".one("Diese Woche haben Sie eine Prüfung verpasst."),
|
||||
"missed_exams": "Diese Woche haben Sie %s Prüfungen verpasst."
|
||||
.one("Diese Woche haben Sie eine Prüfung verpasst."),
|
||||
"missed_exam_contact": "Wenden Sie sich an %s, um sie zu erneuern!",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -98,7 +98,7 @@ class _PremiumButtonState extends State<PremiumButton> with TickerProviderStateM
|
||||
Icon(FilcIcons.premium, color: Colors.white),
|
||||
SizedBox(width: 12.0),
|
||||
Text(
|
||||
"Filc Napló Premium",
|
||||
"reFilc Premium",
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
||||
@@ -90,7 +90,7 @@ class PremiumScreen extends StatelessWidget {
|
||||
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 25.0, color: Colors.white),
|
||||
),
|
||||
const Text(
|
||||
"Filc Premium.",
|
||||
"reFilc Premium.",
|
||||
style: TextStyle(fontWeight: FontWeight.w800, fontSize: 35.0, color: Colors.white),
|
||||
),
|
||||
const SizedBox(height: 15.0),
|
||||
@@ -221,7 +221,7 @@ class PremiumScreen extends StatelessWidget {
|
||||
imageKey: "premium_desktop_showcase",
|
||||
icon: SvgPicture.asset("assets/images/desktop_icon.svg", color: Theme.of(context).iconTheme.color),
|
||||
title: const Text("Asztali verzió"),
|
||||
description: const Text("Érd el a Filc Napló-t a gépeden is, és menekülj meg a csúnya felhasználói felületektől!"),
|
||||
description: const Text("Érd el a reFilcet a gépeden is, és menekülj meg a csúnya felhasználói felületektől!"),
|
||||
),
|
||||
const SizedBox(height: 14.0),
|
||||
const PremiumRewardCard(
|
||||
@@ -272,7 +272,7 @@ class PremiumScreen extends StatelessWidget {
|
||||
const PremiumRewardCard(
|
||||
title: Text("Még mindig nyílt a forráskód?"),
|
||||
description: Text(
|
||||
"Igen, a Filc napló teljesen nyílt forráskódú, és ez így is fog maradni. A prémium funkciók forráskódjához hozzáférnek a támogatók."),
|
||||
"Igen, a reFilc teljesen nyílt forráskódú, és ez így is fog maradni. A prémium funkciók forráskódjához hozzáférnek a támogatók."),
|
||||
),
|
||||
const SizedBox(height: 14.0),
|
||||
const PremiumRewardCard(
|
||||
|
||||
@@ -25,10 +25,10 @@ class PrivacyView extends StatelessWidget {
|
||||
),
|
||||
SelectableLinkify(
|
||||
text: """
|
||||
A Filc Napló egy kliensalkalmazás, segítségével az e-Kréta rendszeréből letöltheted és felhasználóbarát módon megjelenítheted az adataidat.
|
||||
A reFilc egy kliensalkalmazás, segítségével az e-Kréta rendszeréből letöltheted és felhasználóbarát módon megjelenítheted az adataidat.
|
||||
Tanulmányi adataid csak közvetlenül az alkalmazás és a Kréta-szerverek között közlekednek, titkosított kapcsolaton keresztül.
|
||||
|
||||
A Filc fejlesztői és üzemeltetői a tanulmányi adataidat semmilyen célból nem másolják, nem tárolják és harmadik félnek nem továbbítják. Ezeket így az e-Kréta Informatikai Zrt. kezeli, az ő tájékoztatójukat itt találod: https://tudasbazis.ekreta.hu/pages/viewpage.action?pageId=4065038.
|
||||
A reFilc fejlesztői és üzemeltetői a tanulmányi adataidat semmilyen célból nem másolják, nem tárolják és harmadik félnek nem továbbítják. Ezeket így az e-Kréta Informatikai Zrt. kezeli, az ő tájékoztatójukat itt találod: https://tudasbazis.ekreta.hu/pages/viewpage.action?pageId=4065038.
|
||||
Azok törlésével vagy módosítával kapcsolatban keresd az osztályfőnöködet vagy az iskolád rendszergazdáját.
|
||||
|
||||
Az alkalmazás névtelen használati statisztikákat gyűjt, ezek alapján tudjuk meghatározni a felhasználók és a telepítések számát. Ezt a beállításokban kikapcsolhatod.
|
||||
@@ -37,7 +37,7 @@ Kérünk, hogy ha csak teheted, hagyd ezt a funkciót bekapcsolva.
|
||||
Amikor az alkalmazás hibába ütközik, lehetőség van hibajelentés küldésére.
|
||||
Ez személyes- vagy tanulmányi adatokat nem tartalmaz, viszont részletes információval szolgál a hibáról és eszközödről.
|
||||
A küldés előtt megjelenő képernyőn a te felelősséged átnézni a továbbításra kerülő adatsort.
|
||||
A hibajelentéseket a Filc fejlesztői felületén és egy privát Discord szobában tároljuk, ezekhez csak az app fejlesztői férnek hozzá.
|
||||
A hibajelentéseket a reFilc fejlesztői felületén és egy privát Discord szobában tároljuk, ezekhez csak az app fejlesztői férnek hozzá.
|
||||
Az alkalmazás belépéskor a GitHub API segítségével ellenőrzi, hogy elérhető-e új verzió, és kérésre innen is tölti le a telepítőt.
|
||||
|
||||
Ha az adataiddal kapcsolatban bármilyen kérdésed van (törlés, módosítás, adathordozás), keress minket a filcnaplo@filcnaplo.hu címen.
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import 'package:filcnaplo/api/providers/update_provider.dart';
|
||||
import 'package:filcnaplo/theme/colors/accent.dart';
|
||||
import 'package:filcnaplo/theme/observer.dart';
|
||||
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
|
||||
import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
|
||||
import 'package:filcnaplo_kreta_api/providers/exam_provider.dart';
|
||||
@@ -30,7 +28,6 @@ import 'package:filcnaplo_mobile_ui/screens/settings/accounts/account_view.dart'
|
||||
import 'package:filcnaplo_mobile_ui/screens/settings/debug/subject_icon_gallery.dart';
|
||||
import 'package:filcnaplo_mobile_ui/screens/settings/privacy_view.dart';
|
||||
import 'package:filcnaplo_mobile_ui/screens/settings/settings_helper.dart';
|
||||
import 'package:filcnaplo_premium/providers/premium_provider.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -740,21 +737,21 @@ class _SettingsScreenState extends State<SettingsScreen>
|
||||
leading: const Icon(FeatherIcons.atSign),
|
||||
title: const Text("Discord"),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://filcnaplo.hu/discord"),
|
||||
Uri.parse("https://dc.refilc.hu"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.globe),
|
||||
title: const Text("www.filcnaplo.hu"),
|
||||
title: const Text("www.refilc.hu"),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://filcnaplo.hu"),
|
||||
Uri.parse("https://www.refilc.hu"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.github),
|
||||
title: const Text("Github"),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://github.com/filc"),
|
||||
Uri.parse("https://github.com/refilc"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
),
|
||||
PanelButton(
|
||||
@@ -857,21 +854,21 @@ class _SettingsScreenState extends State<SettingsScreen>
|
||||
Provider.of<KretaClient>(context, listen: false)
|
||||
.accessToken!)),
|
||||
),
|
||||
if (Provider.of<PremiumProvider>(context, listen: false)
|
||||
.hasPremium)
|
||||
PanelButton(
|
||||
leading: const Icon(FeatherIcons.key),
|
||||
title: const Text("Remove Premium"),
|
||||
onPressed: () {
|
||||
Provider.of<PremiumProvider>(context, listen: false)
|
||||
.activate(removePremium: true);
|
||||
settings.update(
|
||||
accentColor: AccentColor.filc, store: true);
|
||||
Provider.of<ThemeModeObserver>(context,
|
||||
listen: false)
|
||||
.changeTheme(settings.theme);
|
||||
},
|
||||
),
|
||||
// if (Provider.of<PremiumProvider>(context, listen: false)
|
||||
// .hasPremium)
|
||||
// PanelButton(
|
||||
// leading: const Icon(FeatherIcons.key),
|
||||
// title: const Text("Remove Premium"),
|
||||
// onPressed: () {
|
||||
// Provider.of<PremiumProvider>(context, listen: false)
|
||||
// .activate(removePremium: true);
|
||||
// settings.update(
|
||||
// accentColor: AccentColor.filc, store: true);
|
||||
// Provider.of<ThemeModeObserver>(context,
|
||||
// listen: false)
|
||||
// .changeTheme(settings.theme);
|
||||
// },
|
||||
// ),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -48,7 +48,7 @@ extension SettingsLocalization on String {
|
||||
"goodstudent": "Good student mode",
|
||||
"attention": "Attention!",
|
||||
"goodstudent_disclaimer":
|
||||
"Filc Napló® Informatikai Zrt. can not be held liable for the usage of this feature.\n\n(if your mother beats you up because you showed her fake grades, you can only blame yourself for it)",
|
||||
"reFilc can not be held liable for the usage of this feature.\n\n(if your mother beats you up because you showed her fake grades, you can only blame yourself for it)",
|
||||
"understand": "I understand",
|
||||
"secret": "Secret Settings",
|
||||
"bell_delay": "Bell Delay",
|
||||
@@ -109,7 +109,7 @@ extension SettingsLocalization on String {
|
||||
"goodstudent": "Jó tanuló mód",
|
||||
"attention": "Figyelem!",
|
||||
"goodstudent_disclaimer":
|
||||
"A Filc Napló® Informatikai Zrt. minden felelősséget elhárít a funkció használatával kapcsolatban.\n\n(Értsd: ha az anyád megver, mert megtévesztő ábrákat mutattál neki, azért csakis magadadat hibáztathatod.)",
|
||||
"A reFilc minden felelősséget elhárít a funkció használatával kapcsolatban.\n\n(Értsd: ha az anyád megver, mert megtévesztő ábrákat mutattál neki, azért csakis magadadat hibáztathatod.)",
|
||||
"understand": "Értem",
|
||||
"secret": "Titkos Beállítások",
|
||||
"bell_delay": "Csengő eltolódása",
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
sdk.dir=C:\\Users\\Peti\\AppData\\Local\\Android\\sdk
|
||||
flutter.sdk=D:\\flutter
|
||||
sdk.dir=E:\\__asdks\\Android\\Sdk
|
||||
flutter.sdk=E:\\__asdks\\flutter
|
||||
@@ -14,7 +14,7 @@ import 'package:provider/provider.dart';
|
||||
class UserMenuNickname extends StatelessWidget {
|
||||
late User u;
|
||||
|
||||
UserMenuNickname(User u, {Key? key}) : super(key: key);
|
||||
UserMenuNickname(this.u, {Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -39,7 +39,7 @@ class UserMenuNickname extends StatelessWidget {
|
||||
class UserNicknameEditor extends StatefulWidget {
|
||||
late User u;
|
||||
|
||||
UserNicknameEditor(User u, {Key? key}) : super(key: key);
|
||||
UserNicknameEditor(this.u, {Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<UserNicknameEditor> createState() => _UserNicknameEditorState();
|
||||
|
||||
@@ -19,7 +19,7 @@ import 'package:image_picker/image_picker.dart';
|
||||
class UserMenuProfilePic extends StatelessWidget {
|
||||
late User u;
|
||||
|
||||
UserMenuProfilePic(User u, {Key? key}) : super(key: key);
|
||||
UserMenuProfilePic(this.u, {Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -43,7 +43,7 @@ class UserMenuProfilePic extends StatelessWidget {
|
||||
class UserProfilePicEditor extends StatefulWidget {
|
||||
late User u;
|
||||
|
||||
UserProfilePicEditor(User u, {Key? key}) : super(key: key);
|
||||
UserProfilePicEditor(this.u, {Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<UserProfilePicEditor> createState() => _UserProfilePicEditorState();
|
||||
|
||||
@@ -267,7 +267,7 @@ class _PremiumCustomAccentColorSettingState extends State<PremiumCustomAccentCol
|
||||
"LattamozasDatuma": null,
|
||||
"Tantargy": {
|
||||
"Uid": "0",
|
||||
"Nev": "Filc szakirodalom",
|
||||
"Nev": "reFilc szakirodalom",
|
||||
"Kategoria": {"Uid": "0,_", "Nev": "_", "Leiras": "Nem mondom meg"},
|
||||
"SortIndex": 2
|
||||
},
|
||||
@@ -313,7 +313,7 @@ class _PremiumCustomAccentColorSettingState extends State<PremiumCustomAccentCol
|
||||
"LattamozasDatuma": null,
|
||||
"Tantargy": {
|
||||
"Uid": "0",
|
||||
"Nev": "Filc szakosztály",
|
||||
"Nev": "reFilc szakosztály",
|
||||
"Kategoria": {"Uid": "0,_", "Nev": "_", "Leiras": "Nem mondom meg"},
|
||||
"SortIndex": 2
|
||||
},
|
||||
@@ -357,15 +357,15 @@ class _PremiumCustomAccentColorSettingState extends State<PremiumCustomAccentCol
|
||||
"Uid": "0",
|
||||
"Tantargy": {
|
||||
"Uid": "0",
|
||||
"Nev": "Filc premium előnyei",
|
||||
"Nev": "reFilc premium előnyei",
|
||||
"Kategoria": {
|
||||
"Uid": "0,_",
|
||||
"Nev": "_",
|
||||
"Leiras": "Filc premium előnyei",
|
||||
"Leiras": "reFilc premium előnyei",
|
||||
},
|
||||
"SortIndex": 0
|
||||
},
|
||||
"TantargyNeve": "Filc premium előnyei",
|
||||
"TantargyNeve": "reFilc premium előnyei",
|
||||
"RogzitoTanarNeve": "Kupak János",
|
||||
"Szoveg": "45 perc filctollal való rajzolás",
|
||||
"FeladasDatuma": "2022-01-01T23:00:00Z",
|
||||
@@ -403,7 +403,7 @@ class _PremiumCustomAccentColorSettingState extends State<PremiumCustomAccentCol
|
||||
"uzenet": {
|
||||
"azonosito": 0,
|
||||
"kuldesDatum": "2022-01-01T23:00:00",
|
||||
"feladoNev": "Filc Napló",
|
||||
"feladoNev": "reFilc",
|
||||
"feladoTitulus": "Nagyon magas szintű személy",
|
||||
"szoveg":
|
||||
"<p>Kedves Felhasználó!</p><p><br></p><p>A prémium vásárlásakor kapott filctollal 90%-al több esély van jó jegyek szerzésére.</p>",
|
||||
|
||||
Reference in New Issue
Block a user