Skip to content

Commit

Permalink
Merge pull request #22 from WheretoSleepinNJU/dev-idealclover
Browse files Browse the repository at this point in the history
Dev idealclover
  • Loading branch information
idealclover committed Dec 13, 2022
2 parents 289d18a + e4203d8 commit 826fc45
Show file tree
Hide file tree
Showing 26 changed files with 946 additions and 513 deletions.
7 changes: 5 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,19 @@ def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
compileSdkVersion 31
compileSdkVersion 32

lintOptions {
disable 'InvalidPackage'
disable "Instantiatable"
checkReleaseBuilds false
abortOnError false
}

defaultConfig {
applicationId "com.lilystudio.wheretosleepinnju"
minSdkVersion 23
targetSdkVersion 31
targetSdkVersion 32
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
Expand Down
2 changes: 1 addition & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ buildscript {
}

dependencies {
classpath 'com.android.tools.build:gradle:4.1.1'
classpath 'com.android.tools.build:gradle:4.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
gradle.projectsEvaluated {
Expand Down
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
14 changes: 6 additions & 8 deletions api/complete.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
{
"version": 1,
"title": "用户协议与隐私政策",
"content": "<p>版本生效日期:2021-10-01</p><p>感谢使用南哪课表!本应用由<b>idealclover</b>开发与发布。我们非常重视用户的隐私保护,绝不会在未经允许的情况下收集您的任何隐私内容。本文尽可能简短,强烈建议您认真阅读。</p><p><b>我们收集的数据</b><br>应用崩溃时产生的日志信息,以便于我们定位bug和改善应用健壮性;</p><p><b>我们不会收集的数据</b><br>用户在APP内进行登录操作时输入的账号与密码,如果您使用记住密码功能,我们会将这些信息存储在用户本地,不会上传至服务器;<br>用户的个人信息与课程信息将同样会存储在用户本地,不会上传至服务器;<br>特殊地,如果使用课表分享功能,课程信息将在服务器按期限进行暂存,如果添加由南哪助手(原NJU助手)提供的讲座信息,您的添加行为将被匿名记录以实现「X人已添加」功能;</p><p><b>集成的第三方 SDK</b><br>集成友盟+SDK,友盟+SDK需要收集您的设备Mac地址、唯一设备识别码(IMEI/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)以提供统计分析服务,并通过地理位置校准报表数据准确性,提供基础反作弊能力。</p>",
"isForce": false,
"confirm_text_first_install": "同意协议,开始导入",
"confirm_text_for_upgrade": "同意协议,开始使用",
"cancel_text": "不同意并退出"
}
"title": "欢迎使用南哪课表!",
"content": "2022.02\n恍惚之间又一年啊\n今年也为南哪课表做了不少工作,推出了讲座系统,支持了自由时间课程,也做了课表的官网和宣传视频,希望大家能喜欢鸭!\n\n2021.08\n又是新的学期啦\n21届的新同学都要来了,瞬间有种自己太老了的感觉hhhhhh\n\n2021.2\n不知不觉小作文更新这么长了~\n\n又是新的一年,新的一学期了。\n\n过去的这一年或许大家都经历了很多,疫情来了,翠翠毕业了,紫荆站关闭了。或许,哪次教务系统更新之后,南哪课表就再也用不起来了。\n\n所以,如果南哪课表还不错,可以在它还在的时候,一起安利给周围的小伙伴吗~\n\n过去的时光,我们都辛苦了,未来,一起加油。\n\n“敬自己一杯,因为值得。”\n\n2020.9\n这是翠翠离开南大的第一个秋天。不过放心,南哪课表还在维护。\n\n离开校园,其实想说的话有很多,但却又不知道从哪里说起,说些什么,却总会在被社会毒打的时候怀念起在南大的快乐时光。\n\n大概,衷心希望学弟学妹们珍惜大学生活w\n\n2020.5\n在付出了另一个¥688后,南哪课表终于上线 APP Store 啦!感谢大家一直以来的支持!\n\n2020.2\n2020年2月全部投喂收入将捐赠以支援湖北疫情\n(2020.3补充:已捐赠)\n\n2019.9\nHi!我是项目作者傻翠~\n\n看起来你已经导入我南教务处成功啦!撒花撒花!\n\n建议大家还是和自己教务系统中的课表对一下~避免出现什么bug~如果有bug的话欢迎反馈给我!设置-反馈中有交流群的群号~\n\n坦率地讲,从安卓移植到全平台是一个痛苦的过程。之前的APP多少是建立在开源项目的基础上,而这个重构项目算是自己从零开始搭起来的。其中也做了不少取舍与妥协,还有可能出现之前所没有过的bug,如果不巧遇到bug,欢迎向我反馈。\n\n写这个项目是一个吃力不讨好的事。单是苹果的开发者账号就要688/年,更不用提为了开发iOS版而单独买的MacBook。所以如果小伙伴想让这个项目持续下去的话,欢迎投喂傻翠。\n\n放心,这个弹框每次导入只会弹出一次,所以不会影响你的正常使用。\n\n希望南哪课表可以陪伴学弟学妹们走过每一学期ww\n\n傻翠",
"content_html": "<p><b>2022.02</b></p><p>恍惚之间又一年啊</p><p>今年也为南哪课表做了不少工作,推出了讲座系统,支持了自由时间课程,也做了课表的官网和宣传视频,希望大家能喜欢鸭!</p><p><b>2021.08</b></p><p>又是新的学期啦</p><p>21届的新同学都要来了,瞬间有种自己太老了的感觉hhhhhh</p><p><b>2021.2</b></p><p>不知不觉小作文更新这么长了~</p><p>又是新的一年,新的一学期了。</p><p>过去的这一年或许大家都经历了很多,疫情来了,翠翠毕业了,紫荆站关闭了。或许,哪次教务系统更新之后,南哪课表就再也用不起来了。</p><p>所以,如果南哪课表还不错,可以在它还在的时候,一起安利给周围的小伙伴吗~</p><p>过去的时光,我们都辛苦了,未来,一起加油。</p><p>“敬自己一杯,因为值得。”</p><p><b>2020.9</b></p><p>这是翠翠离开南大的第一个秋天。不过放心,南哪课表还在维护。</p><p>离开校园,其实想说的话有很多,但却又不知道从哪里说起,说些什么,却总会在被社会毒打的时候怀念起在南大的快乐时光。</p><p>大概,衷心希望学弟学妹们珍惜大学生活w</p><p><b>2020.5</b></p><p>在付出了另一个¥688后,南哪课表终于上线 APP Store 啦!感谢大家一直以来的支持!</p><p><b>2020.2</b></p><p>2020年2月全部投喂收入将捐赠以支援湖北疫情</p><p>(2020.3补充:已捐赠)</p><p><b>2019.9</b></p><p>Hi!我是项目作者傻翠~</p><p>看起来你已经导入我南教务处成功啦!撒花撒花!</p><p>建议大家还是和自己教务系统中的课表对一下~避免出现什么bug~如果有bug的话欢迎反馈给我!设置-反馈中有交流群的群号~</p><p>坦率地讲,从安卓移植到全平台是一个痛苦的过程。之前的APP多少是建立在开源项目的基础上,而这个重构项目算是自己从零开始搭起来的。其中也做了不少取舍与妥协,还有可能出现之前所没有过的bug,如果不巧遇到bug,欢迎向我反馈。</p><p>写这个项目是一个吃力不讨好的事。单是苹果的开发者账号就要688/年,更不用提为了开发iOS版而单独买的MacBook。所以如果小伙伴想让这个项目持续下去的话,欢迎投喂傻翠。</p><p>放心,这个弹框每次导入只会弹出一次,所以不会影响你的正常使用。</p><p>希望南哪课表可以陪伴学弟学妹们走过每一学期ww</p><p>傻翠</p>",
"semester_start_monday": "2022-09-05",
"delay": 10
}
7 changes: 7 additions & 0 deletions api/importVisibility.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"data": [
true,
true,
false
]
}
36 changes: 28 additions & 8 deletions api/schoolList.json
Original file line number Diff line number Diff line change
@@ -1,36 +1,56 @@
{
"data": [
{
"title": "南京大学本科生选课系统(beta)",
"title": "南京大学本科生统一认证",
"pinyin": "nanjingdaxuebenke",
"description": "测试中,请确保APP版本>=3.1.0!",
"page_title": "选课系统登录",
"description": "内置导入不成功时可以试试这个",
"page_title": "教务系统登录",
"initialUrl": "https://authserver.nju.edu.cn/authserver/login?service=http%3A%2F%2Felite.nju.edu.cn%2Fjiaowu%2Fcaslogin.jsp",
"redirectUrl": "http://elite.nju.edu.cn/jiaowu/login.do",
"targetUrl": "http://elite.nju.edu.cn/jiaowu/student/teachinginfo/courseList.do?method=currentTermCourse",
"preExtractJS": "",
"delayTime": 3,
"extractJS": "",
"extractJSfileAndroid": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njubksxk_android.js",
"extractJSfileiOS": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njubksxk.js",
"extractJSfileAndroid": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njubksjw.js",
"extractJSfileiOS": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njubksjw.js",
"banner_content": "注意:如加载失败,请连接南京大学VPN\n试试浏览器访问教务网,没准教务系统又抽风了\n听起来有点离谱,不过在南京大学,倒也正常",
"banner_action": "下载南京大学VPN",
"banner_url": "https://vpn.nju.edu.cn",
"isGrey": true,
"isGrey3.1.0": false
},
{
"title": "南京大学研究生选课系统(alpha)",
"title": "南京大学本科生选课系统(beta)",
"pinyin": "nanjingdaxuebenke",
"description": "新选课系统,可能不太稳定",
"page_title": "选课系统登录",
"initialUrl": "https://xk.nju.edu.cn",
"redirectUrl": "",
"targetUrl": "https://xk.nju.edu.cn/xsxkapp/sys/xsxkapp/*default/grablessons.do",
"preExtractJS": "document.getElementsByClassName('yxkc-window-btn')[0].click();document.getElementsByClassName('jqx-tabs-titleContentWrapper ')[0].click();",
"delayTime": 3,
"extractJS": "",
"extractJSfileAndroid": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njubksxk.js",
"extractJSfileiOS": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njubksxk.js",
"banner_content": "注意:如加载失败,请连接南京大学VPN\n试试浏览器访问教务网,没准系统又抽风了\n听起来有点离谱,不过在南京大学,倒也正常",
"banner_action": "下载南京大学VPN",
"banner_url": "https://vpn.nju.edu.cn",
"isGrey": true,
"isGrey3.1.0": false,
"semester_start_monday": "2022-09-05"
},
{
"title": "南京大学研究生选课系统",
"pinyin": "nanjingdaxueyanjiu",
"description": "测试中,请确保APP版本>=3.1.0!",
"description": "研究生同学的课表导入方式",
"page_title": "选课系统登录",
"initialUrl": "https://yjsxk.nju.edu.cn/yjsxkapp/sys/xsxkapp/index_nju.html",
"redirectUrl": "https://yjsxk.nju.edu.cn/yjsxkapp/sys/xsxkapp/course_nju.html",
"targetUrl": "https://yjsxk.nju.edu.cn/yjsxkapp/sys/xsxkapp/xsxkCourse/loadStdCourseInfo.do",
"preExtractJS": "",
"delayTime": 3,
"extractJS": "",
"extractJSfileAndroid": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njuyjsxk_android.js",
"extractJSfileAndroid": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njuyjsxk.js",
"extractJSfileiOS": "https://cdn.idealclover.cn/Projects/wheretosleepinnju/production/tools/njuyjsxk.js",
"banner_content": "导入方式:登陆后点击「我的选课」进入选课页\n注意:如加载失败,请连接南京大学VPN\n试试浏览器访问教务网,没准教务系统又抽风了\n听起来有点离谱,不过在南京大学,倒也正常",
"banner_action": "下载南京大学VPN",
Expand Down
91 changes: 91 additions & 0 deletions api/tools/njubksjw.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
function scheduleHtmlParser() {
let WEEK_WITH_BIAS = [
"",
"周一",
"周二",
"周三",
"周四",
"周五",
"周六",
"周日",
];
let name = document.querySelector(
"body > div:nth-child(10) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(1)"
).textContent;
let rst = { name: name, courses: [] };
let table_1 = document.getElementsByClassName("TABLE_TR_01");
let table_2 = document.getElementsByClassName("TABLE_TR_02");
let table = table_1.concat(table_2);
table.forEach((e) => {
let state = e.children[6].innerText;
if (state.includes("已退选")) return;
let course_name = e.children[1].innerText;
let class_number = e.children[0].innerText;
let teacher = e.children[3].innerText;
let test_time = e.children[8].innerText;
let test_location = e.children[9].innerText;
let course_info = e.children[10].innerText;
let info_str = e.children[4].innerText;
let info_list = info_str.split("\n");
info_list.forEach((i) => {
let week_time = 0;
let strs = i.split(" ");
let start_time = 0;
let time_count = 0;
let weeks = [];
for (let z = 0; z < WEEK_WITH_BIAS.length; z++) {
if (WEEK_WITH_BIAS[z] == strs[0]) week_time = z;
}
let pattern1 = new RegExp("第(\\d{1,2})-(\\d{1,2})节", "i");
strs.forEach((w) => {
let r = pattern1.exec(w);
if (r) {
start_time = parseInt(r[1]);
time_count = parseInt(r[2]) - parseInt(r[1]);
}
});
let pattern2 = new RegExp("(\\d{1,2})-(\\d{1,2})周", "i");
strs.forEach((x) => {
let s = pattern2.exec(x);
if (s) {
if (strs.includes("单周")) {
for (let z = parseInt(s[1]); z <= parseInt(s[2]); z += 2)
weeks.push(z);
} else if (strs.includes("双周")) {
for (let z = parseInt(s[1]); z <= parseInt(s[2]); z += 2)
weeks.push(z);
} else {
for (let z = parseInt(s[1]); z <= parseInt(s[2]); z++)
weeks.push(z);
}
}
});
let pattern3 = new RegExp("第(\\d{1,2})周", "i");
strs.forEach((y) => {
let t = pattern3.exec(y);
if (t) {
weeks.push(parseInt(t[1]));
}
});
let classroom = strs[strs.length - 1];
rst["courses"].push({
name: course_name,
classroom: classroom,
class_number: class_number,
teacher: teacher,
test_time: test_time,
test_location: test_location,
link: null,
weeks: weeks,
week_time: week_time,
start_time: start_time,
time_count: time_count,
import_type: 1,
info: course_info,
data: null,
});
});
});
return encodeURIComponent(JSON.stringify(rst));
}
scheduleHtmlParser();
Loading

0 comments on commit 826fc45

Please sign in to comment.