#hangar-dev
1 messages Β· Page 13 of 1
I think yeah
oh yeah, by default
but its still nicer to have the right version in package.json
https://the-guild.dev/blog/how-should-you-pin-dependencies-and-why suggests setting rangeStrategy to bump?
well that might not matter if the deps are pinned in package.json
Well if you pass in --latest it updated dev dependencies but not regualr ones smh
Gotta get it to upgrade the regular ones too because it's still sematic under older vrsions.
no good sign
π
ok anyways I confirmed old db is gone
but I think I got a backup from when I moved servers
lets see
backup as in: didnt delete the files on old server and it still runs for a few days π
Alrighty well just tried to pin it all and it just broke everything. I need to take a break from this for a bit but the open PR works, just doesn't pin any of the dependencies.
I think I can make renovate do that
aayy
old staging is back
mmmh
new staging is still redirecting to localhost
but even if I do https://hangar-new.minidigger.me/login?returnUrl=https://hangar-new.minidigger.me/ it doesnt login properly, strange
token is fine
isn't pinning the deps just as simple as removing the ^ before the version in package.json?
Yes but the packages in the package.json are not the latest.
Cause yarn upgrade didn't modify them
ooo I see
So if I pinned nuxt on what it is currently, it takes us back to 2.15
So gotta go through the yarn.lock and modify the package.json to that
@pallid yoke maybe you could set renovate's upgrade strategy to pinned and then the bot would do it?
isnt that done via config json?
idk, never configured renovate
if it is, then I could do it
but I thought maybe that was above my perm level
we broke staging again π
this is gonna be a recurring thing...
what happened now? I tested the upgraded packages and they seemed to have deployed right
oh that
just a script that needed updating
requesting renovate app eh π
yeah? that an issue?
yeah its a huge issue, it showed up in my inbox and everything π’
you should be good to go
just gonna request ALL the apps now to spam your inbox
didnt hangar already use renovate?
machine requested the github integration for it
no, I don't think so? cause it said I had to request it
not familiar to know if it gets used without it
some stuff will, some stuff wont
the github integration didnt exist until just now though
Configuration Options usable in renovate.json or package.json
you want this for pin?
idk, was just following the guide for it π€·ββοΈ
yeah, I thought that would be a way to pin them
oh you know what... I didnt realize the repo already had a renovate.json... I was looking in the .github folder for it
π€¦ββοΈ
can you make it force do stuff?
can change it to run like every hour I guess
build
Started 43m 8s ago
ah yes
"Investigating - We are investigating reports of degraded availability for GitHub Actions."
cool
guess I have to go to sleep without working staging, smh
Oh so it worked on renovate? Nice work.
Ahh I just saw the pin commit
azure having some problems atm
not sure their status page says anything other than AD but yeah other sites down, GH actions having degraded availability, etc
fun times
So we can just plain that for Hangar not working
@pallid yoke It looks like it's alive again.
Hello renovate π
That is sexy
oh my god so much spam
Remember why I shoved renovates onto weekly only? π
oh wait, need to exclude frontend-old
Oh yeah
that's a bunch of the spam
I'll look at stuff tomorrow if you don't handle it while am asleep
ill look into it
On next push staging should be fixed too
Ooo nice
Nice work
mmkay, should be all good to now
Awesome
well, there is something I'm a little confused about... there are still a ton of renovate branches left over?
do I just delete them?
I dont wanna be one of those repositories that has renovate/* branches sitting around for like 3 years
well renovate doesn't have a schedule set
that was dependabot
which I think is github's own thing
wut there's only 3 branches
Iβm confused a bit... why is it creating branches but no pr?
Oh wait... is there a pr limit?
Soon as I closed one, it opened another new one.
Yeah i think 5 PRs?
Just let them be for now and we will handle the PRs and if it isn't happy in a day or two we can look at stuff again
I don't like how renovate advertises in their PRs
what's wrong with dependabot anyhow?
Idk, we kinda have both idk why
Lol
jake, can you take a look why auth is not working on staging?
I thought I fixed the wrong redirect, but even if I fix manually, its not logging me in
It's cool watching a build push and going through the action and then deploying.
welcome to 2015? π
lmao
yeah, I can take a look
ill take another look on why the redirect is wrong in a second
finished testing the paper update
wait I think env vars in code doesnt work how I think they do
oh, did you just use process.env.adfal in the code?
is staging using the same auth db as not-staging?
shouldnt
I mean... it can right?
not making any breaking changes to hangarauth I don't think
it can even use the same hangar auth instance
its just easier not too π
I can copy over the data tho
320 rows, not bad
is the gh action trying to deploy the prs?
I see Deploy as a step in the action in a pr tho
it should be skipped
oh ok
hangar auth new should have all accounts now
reee I still get redirected to localhost
location.replace("/login?returnUrl=".concat("http://localhost:3000").concat(e))
its hardcoded in the source
oh, well you are still using process.env.publicHost
thats the env set via nuxt
you need to use the env property of the Context
oh rly?
Then, I can access my baseUrl variable in 2 ways:
Via process.env.baseUrl.
Via context.env.baseUrl, see context API.
hmm
if, and only if, baseUrl is defined in env in nuxt.config.js
yeah, typing $nuxt.context.env in the browser console spits out localhosts
nodeEnv is correct tho
it says production
which is right
yeah I just need to move stuff
ok that worked, nice
now you can see why it doesnt log me in π
looks right to me
looks like we cant use a util method isLoggedIn. it doesn't look like its reactive like a computed property would be.
like if you log in, then click sign out, the order of the header buttons gets messed up
yeah, that might work
well maybe that's not the problem... when I click sign out... this happens
then a refresh, and the author & staff buttons are back on the right side
idk what that is
interesting, lol
Promise all makes requests concurrent?
Yeah, was just asking if that was the case
This is the first time an touching async in js ^^
the promise "starts" when its created
so removing the awaits creates them all at once
and the promise.all waits until they are all done
I see
Call me when nuxt 3 is out, then I'll get exited
π
Cause then we can do webpack 5 and vue 3
Oooo
??? the same thing appeared on my screen
I hadn't closed the tab, went back to it, and there was a bunch
eeesss.. think I just found that you can accept other people's invites
there isn't a userid check anywhere
π it only gets the role table id from the request
idk
its possible, I found an issue on ore a while back that you could change other people's roles in a project
thats my contribution for today
π
had a team event at work and we got drunk playing games, hopefully I can properly continue tomorrow
Guess the update checking has a timing problem
hmm Mini, we need to figure out this pagination stuff
we can't really do client-side filtering and server side pagniation
both the filtering and pagination have to be either client-side or server-side
My initial thinking... is projects should be server-side pagination & filtering, but versions on the client side
gonna be 1000s of projects hopefully someday, I dont know if a project is going to have 1000 versions
Can't we do all server side?
Vuetify had some examples on how to do that I think
Filtering in frontend can be heavy on mobile i guess
Mmkay, yeah, it can be all server side. Have to refactor some of those requests to accept filters for various things.
Maybe we can have it generic, as part of the pagination object
A filter is just field operator value, plus sort direction, right?
Really good progress btw, I'll look thru the commits when am at work
The sign up page still links to the SpongePowered TOS
I'm not sure we have any sort directions anywhere?
author/staff page
but those dont have pagination I think
idk, sort doesnt seem too hard to add, filter is a where, sort is a sort by, but its generally the same
I just signed off of work, I dont have much time today it seems but maybe I can throw a poc together
I need a better cpu, >50% usage by opening the hangar project, pulling and letting IJ index π
I wonder if I can make IJ not index node_modules
I can!
mmmh do you know why the getProjects swagger api thingy doesnt include the pagination param?
I thought it was because of a missing @RequestParam annotation but that doesnt change anything
oh am dum
I dont think the swagger "try it out" works rn
we still havent done the new api authentication system
actually, who knows, it might work if you are logged in
Is there are reason you separated the UserSelectionForm and MemberList components?
they are very similar
I also don't see a reason why the edit button on the MemberList on the project page has to link to the settings page, why not be able to edit it where it is?
no I noticed that too that they got very similar now
and yes in place editing seems find so we can nuke one
I just fixed swaggers try it out
mmmh, I wonder if I can write smth that can take all parameters, that arent part of the method, and do smth with them in spring
hmm, like a catchall?
http://localhost:3000/api/v1/projects?limit=10&category=admin_tools
would give my a Pagination Object with limit: 10 and a Map with category -> admin_tools
I think a hanlder interceptor should be able to do that
do you think an isHome column of the project page table is better than checking against the configured value?
Yeah. Checks if the page name equals a string.
But the configuration isnβt sent to the frontend. So itβs a hard coded string
yeah lets do it on the table then
Could also allow changing the home page name, or smth in the future
yeah
any way to enforce in the db only one row per project having it set to true?
we want it unique with the project id if isHome is true
but not if isHome is false
I dont think so
generally thats really bad normalization wise and we would have a separate table for marking smth as homepage
should we do that? have a table that just has a project_id and a page_id?
idk how much overhead that is, but then we can nicely enforce the uniqueness
and prevent deleting the home page without setting a new one
I think ON DELETE has a prevent option right?
I am really no sql pro, idk this stuff by head π
ya, it does, ON DELETE RESTRICT
ok so I have an idea on how this could work but am deep into spring stuff, I need more time to understand, lol
but am I fairly confident that I can get all remaining parameters and put them into the pagination object
I constructed a CatchAllHandlerMethodArgumentResolver π
basically, I can wrap the class that does the request -> pagination object resolving
that class is called ServletModelAttributeMethodProcessor in case you were wondering
...
not to be confused with the RequestParamMethodArgumentResolver
that I had before, that is only used for the more "literal" arguments, but not for the nested thing
Jesus, what's up with IRC today?
discord > irc confirmed
Not just esper, I also enountered the same issue with spigot earlier today
both times I was on catastrophe, so I guess we have someone to blame
hey, what about letting users chose icons for their pages?
like the home has a house by default
(paid feature!)
Just a mdi string?
Issue I see is that we then expose implementation details, so if we ever change icon lib, those all break
maybe we have a set few to pick from
then we link those to an mdi string
or some other string if we change
Yeah that would be better I think
And more user friendly
Mdi's website is hella annoying
We would have a table with icons or smth
But i would propose we just throw this line of thought into a github issue and work on other stuff for now π
Yeah thought like that are really cool and we def need to persist them somewhere
We wanna set ourself apart from the rest
I think I'm gonna separate out some of the project settings. Like have different save buttons for different things. You've got the existing save button for the links, category, keywords, description, forumSync, one for the member list, icon has its own, deployment key has its own, and rename is its own thing
no need for all them to be under 1 save changes button when some of them (like rename) have nothing to do with it
And split the UI in multiple cards?
yes
Or tabs?
cards I think
the sticky card title works well cause its only on screen for the card that it pertains to
Vertical tabs might work, it's pretty common to have a sidebar for setting navigation
well there are really just 3 groups then,
- the links, category, description
- project members
- misc (rename, icon, deployment key)
then there are the 2 delete buttons
idk if that's enough for tabs
Yeah i guess it's fine for now
that part doesnt matter, the splitting up is really all I was going for cause that has backend implications
btw IE11 doesnt support sticky
but I dont think the plan is to support IE fully
What's IE?
I don't know IE
We only support chrome, and maybe firefox if we are bored
Safari Support has to be contributed by cat
you use chrome for this right?
Edge, yeah
I use firefox so I guess that kinda makes sure there aren't any breaking inconsistencies
otherwise, an open issue ticket for an issue and a help-wanted label is good enough
"safari misrenders this pls fix"
"PRs pls"
"dont break the rest of it kthxbai"
mini, how do you want to get config values for various min/max lengths of fields?
You wanna make that configurable?
At work we got a route for validations like that
yeah, I thought about that. It'd be cool to have counters tho on the fields themselves
Can prolly shove that into the store then
No i mean data, we have a route that gives validations for a "flow"
Flow being a list of forms
oh I thought you mean you have a route you send whatever text and it returns yes or no
Nah that's slow
We do client side validation and server side validation, but store the validation config once and expose it
is there a better way to do that here than just sending a json object with various fields for different things, regex, min, max len, etc
Don't think so
At work we have a mixin of some sorts that handles that
Idk how it works tho
Surprisingly i never touched our vue base component lib
That's old btw
Oh also new staging doesn't have images
Idk, 500
I'll check tomorrow π€·ββοΈ
I think I can only see logs for not-staging on portainer
oh, its probably db changes right?
the migrations are complaining because we changed the base file instead of adding a new one
now that staging is working, should use migrations until we want to flatten again
Yea, I know, but, like, me remembering stuff and to check on stuff is like... yea...
I mean, I spent the past few hours practically unable to see
#YAYHEALTH
If it would be DB changing backend wouldn't even start
Ah I couldn't check browser log cause mobile
Prolly can catch that better eventually
Am drive home now, but I'll prolly just crash in my bed
yeah, the first request made is in the nuxtServerInit when it tried to load the stuff from backend data controller
although I think that doesnt fail, I think the one telling it to show 500 is one of the ones on pages/index.vue
but whatevs
Worked on that ar work today, making frontend still serve sane stuff when backend is gone
Since company likes to literally turn of power for an hour or two sometimes
So a wget my static content and inject error pages for dynamic content and do fail over dns to some cheap vps, lol

yeah, its broken
who knows regex and has a good URL one? I found
(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})
Or just send HEAD request and see if you get Content-Type: text/html 
I think it might be just like with emails - hard to really properly parse it.
good gracious, that TLD one
found additional param limit
found additional param category
getting there
now I will just hardcode exclude limit and offset I think, lol
wow mini... your project folder is still called hangar2 π
ye
oh mini, did you fix staging?
not that I know of
Gradatim Ferociter
mmmh, I cant find a good way to turn a map<string, string[]> into a where clause
there was somebody who did that with jdbi 2 but thats different with jdbi3
@Validate(SpEL = "#root matches @hangarConfig.urlRegex", message = "general.error.invalidUrl")
private final String homepage;
this doesnt allow empty
ok I dont wanna touch the regex π
yeah we def need to seperate between required url and optional url
you cant even upload a version rn
Oh ya....
Add to the @Validate annotation an or clause
Matches url regex or is null
Or what you did works. π
less stuff in spel is a win for me π
am working on ProjectChannelsPage rn but I cut my finger so I cant really type
I'll come back to make Hangar worse again in the late phases of your frontend rewrite btw
as part of me currently being a very active hangar team member
only very small things that bug me lol, else just backend again. webdev frontend itself is
for me
I love that comparison between the old and new channel edit modal π
yeah, the vuetify color picker is nice
kinda annoying how the hot reloading doesn't seem to call the asyncData hook so when you change something, you get 500 errors until you refresh the page
yes, it is only sometimes. Idk what the deal is there
I guess when it has to reload the component
the data module for the flag doesnt seem to line up with the reviews page ore has, idk what up with that
but I gotta stop for today, my hand hurts from typing so strangely
I'm not following what you mean here...? ore gets a list of flags for that page
I don't see a subject in our data model
Maybe I was just blind
Will continue tomorrow
oh yeah ok, that was never fleshed out, the typescript Flag interface is different from the HangarProjectFlag java model
so those need to be synced together
Yeah that's what I guessed
For channel deletion, how should that work?
Would deleting a channel delete all versions?
Can you delete versions rn as a user?
yeah... I never even fully implemented it before we switched to nuxt
I only implementing deleting the channel if there were no versions with it
I think only soft delete (which doesn't really do anything except hide it from others)
Mmh
Maybe we can just allow you to hide channels then
And if a channel is hidden, all versions of that channel are hidden too
ya, that could work.
We could do the hiding in sql then
I had a thought about having a "no channel" state for versions where then the author could attach a different channel after deleting one
so you delete a channel, the versions attached just have no channel, dont show up in the version list to others, until to associate it with a channel again
Mmh but we said no switching channels, which that effectifly is
do you think that's the right call? no switching channels?
I think if a plugin changes how it does its versioning, maybe they want the opportunity to change the channel of old versions, and this would be the only way
deleting a channel, versions with that channel can then be re-assigned to a different one
Renaming works?
Hiding would be called "archiving" btw, i like that more
mmkay
I thought about actual hiding too, so like youtube's unlisted
so only can be linked to?
Yeah
yeah, that's prob a good thing
For sending debut builds?
can be a setting associated with a channel
versions released on this channel are unlisted
making an issue for this rn
Was about to ask, am on phone π
Thanks
So no deleting then?
Maybe we can just not do that for now and see if users complain and worry about it later, lol
right now it does. the version count thing I added just looks for versions with that channel id
doesn't look at the visibility
if we want to keep the not null constraint on a version's channel_id column, they have to count
Yeah let's just leave it at that then
It's not worth it to overthink such simple stuff rn i guess
I just looked at the db, if a channel row is deleted, it cascades to project_versions and deletes the version row
prob dont want that
We need that for the constraints as you just said
well can just have it throw the exception instead
to prevent any accidental mishaps somehow
I guess
is it enough to just soft delete all the versions on an archived channel?
or should there be a new visibility state
Depends if we wanna allow unarchiving?
Because if we do, we couldn't differentiate between what was deleted manually and what was deleted by archiving
we could do nothing with the version visibility, but that would requiring checking the archive state of all versions' channels in queries, and idk if that's a good thing
so maybe a new visibility state would be better
Adding a new different field seems wrong, yeah
it'd probably be two new visibilities, Archived, and Unlisted
can apply to both projects and versions I guess
Yeah
https://github.com/PaperMC/Hangar/issues/384
k, take a read through when you get the chance, see if you agree with everything
(also, probably dont need a confirm delete channel modal then, like I think ore had)
oh, and can't delete all channels is a constraint
must have at least one
I would go so far so say that release is untouchable?
Also color, so it's consistent
mm, I always thought the release name, and color was just defaults, not something set.
but we could do that too
if we do want to make that first channel un-editable, then we should add a new column to the db editable or smth so we aren't comparing it to config values
Yeah
mmkay, not gonna do that now, but ill do another issue for it
Read thru the issue, only think idk about is the relisting a version in an unlisted channel
Because that effectifly would create a version without a channel?
Else you would expose the channel
I also don't see a usecase for that
I thought the unlisted channel would be more of setting the default for versions released on it
and then could be unlisted later
not forcing versions on it to be unlisted all the time
So as a preview kinda thing?
But basically that would mean that an unlisted channel isn't actually hidden
ya sorta. Like if you wanted new versions to be unlisted for a week then listed after that
Yeah ok that makes sense
yeah, the channel itself isnt hidden, but it sets the version's visibility to unlisted from the start
mmkay, I think I'm done for the day
Nice
My finger hurts like hell, so I'll not be able to touch my PC this morning, hopefully after lunch it will be better
Man, this sounds like a serious cut. I thought you just cut it a bit, not like cut it all the way off π
I did cut a bit on the side off ^^
I think i had the band aid too strong this night so it's a bit swollen, and I expect that to go away in a few hours
But the cut itself isn't that bad, just burns a bit but that i can handle
Mini, what was your thinking behind adding routes behind /organization?
before, it was almost identical to a user
For projects and stuff?
It's, that would duplicate a bunch of routes for no real gain I think
There's no real difference between a user and an org, other than that an org has members
We can do the differentiation for the end user in the UI so it's clear that smth is a org or not
Wait i misread
Where did i add routes behind orgs?
You added some routes in pages/organization/_organization/settings/*
I agree with everything you said
there is one route that is being used rn, organizations/new
which is fine I guess
Backend of frontend?
frontend
Mmh I think for those i just mirrored ore
I removed them. They had nothing in them except your default template from when you added all the pages
π€·ββοΈ
No idea where those came from
Aaah
Maybe those were backend requests
mmm ya probably
I think i used the routes stuff on backed to generate the pages
So yeah, can just be deleted
smth broken with deployment again
Could not resolve hostname bender.minidigger.me: Name or service not known
It's strange
I can't renew, but it's also not gone yet
Contacted support
Registrar Status pendingDelete, redemptionPeriod, serverHold
π
I seriously need to fix the mess that my personal inboxes are, lmao
Request URL: http://localhost:3000/api/internal/flags/
Request Method: PUT
Status Code: 403 Forbidden
Response: Invalid CORS request
huh?
man I become rusty on all the backend stuff, lol
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "projects_namespace_unique" Detail: Key (name, slug)=(Test, Test) already exists.
I think this is wrong
should be paper/Test
but other than that, I can create org projects now
Iβve never had that issue with the menu before...
It started happening today, don't think i saw it before
I also sometimes get console errors for the organization prop being null somewhere, so i blame that for now
you know... I've never decided if its better to just remove the content from the client like you did here https://github.com/PaperMC/Hangar/compare/68b1949019939d2d75e35e3c690617afe40be6e7...fb4990e8cece6b4d7e97cf9f51a7b4f7a8e14914#diff-6c4e7e40965557c5c4186152cdd96ca3f9021974e64f9209fb826d161f47ad9aR72
or call this.$nuxt.refresh() to just have it reload the data from the server
Ok, I identified the issue where the organization prop was null. It was set to required on child pages of _user.vue.
And I'm getting the missing menu items issue on first page load now
Yeah idk either, maybe refresh is better cause it makes sure no desyncs?
The refreshing is so seamless that from a users perspective, there really shouldnβt be any different if itβs setup correctly.
Let's do that then

Mfw i can't even dam them
is there anything different between using ResponseEntity<Something> or using the @ ResponseBody annotation and just returning Something?
apparently the annotation causes automatic json serialization
right, but I thought ResponseEntity also did that
I thiiink returning does the same by default too?
biggest thing for the object is being able to do stuff like set the response code
like ResponseEntity includes a status code, do I have to use @ ResponseStatus if I want to set the status code if I use @ ResponseBody
https://stackoverflow.com/a/22725259/6686790
It's just more functionality with response Entity.
So @pallid yoke I just had a thought about filtering/sorting. Instead of exposing impl to the frontend for filters/sort by, we have presets for various things, sort byβs, and filters and they are parsed out of the query, and attached to each preset is a way to modify the sql statement.
So we have some SortBy interface thatβs implemented by AuthorSortBy, that adds sql to sort by an author
Or a Filter interface thatβs implemented by ProjectCategoryFilter that gets a project category from the url query and then adds the appropriate sql
I think thatβs far superior to having the api take sql table/column names/aliases which could change easily if we need the query to change somehow
If what I laid out doesnβt make sense, I can try to mock something up tmrw
well... I couldn't wait so I made a new branch.
very basic and the sql intergration isn't even implemented, just some comments but I think it gets the point across
I'll look later
Only concern I have is that it's not as flexible, but if ppl need additional filters in public api they can just PR them
Yes, it should be easy to add new ones.
I think it would be cool if you could have the option to select which platform you want to download when you download a plugin, like it comes up with a screen with all the options for available platforms on it
and you can upload different versions of a plugin for different platforms as an author
Plattforms?
because idk about anyone else here, but I personally find it quite frustrating to have to go to many different places just to find the version I want
yeah, like Paper, BungeeCord, Sponge, Velocity, Fabric, Forge, etc.
Myeh, Sponge, Fabric and Forge don't belong at Hangar
true
Fabric and Sponge have their own repositories
yeah I was just saying for example
even a link to the other version from Hangar would be enough
that's likely gonna be up to plugin authors
wouldn't that just be a pretty hyperlink
yeah
They can just use the description if they wanna link elsewhere
true
Hangar already supports platforms like that
Iβve just always liked the idea of one centralised place for everything
makes everyoneβs life easier
and makes the maintainer's life hell
a bit like what LuckPermsβ downloads page has for example
true
Curseforge was on the way of becoming that, however they never hosted bungee or velocity plugins
god i love mini
it looks like a mixture of modrinth and ore right now lol
I love the idea of promoting free and open-source
better example
dependencies get auto detected, and hangar requires you to provide either the name of the hangar project, or a link
so its really easy to find dependencies
velocity-plugin.json
just out of curiosity
nice
so whatβs the motivation for this project? what are its aims?
no
you supporting premium plugins then?
remind me what a paywall is again
pay to download
ah okay
idea is that we push for pay for support, iirc
love it
Thiiiiink that we was discussing requiring stuff to be OSS, given the licensing
what would be with plugins that utilize Paper forks, such as Tuinity (there is an API for the per-player-chunkloading thing) and Purpur I wonder?
Iβm personally fed up with the amount of plugins on Spigot that are premium and the author either overcharges, doesnβt offer good support, doesnβt make a good API for you to add to it, or all three
that's not been discussed
so I love the idea of everything being open-source
The general hope is that stuff like that gets all pulled back into paper
no reason to exclude them, the differences are most likely small
As long as they have fallback logic to be compatible with paper that is fully okay
I don't think that we intend to exclude them, but, like, ^ We'd much prefer if stuff hosted on our platform supported our platform
yeah
also, about the multi platform support, just out of curiosity, does that mean I could add support to distribute plugins that have support for my platform?
anything to do with my platform will be maintained fully by me, just curious if it could be accepted or not
I doubt that we're gonna support custom platforms as that just gets messy
that is true, but it would be convenient for everyone if that would be a thing. I get if you don't think that fabric or forge mods belong on Hangar, but everything that is Paper-related (and that is basically Tuinity and Purpur, Airplane does not have APIs if I am right, and all other forks are not considered as trusted) would fit on Hangar in my opinion, as there is no place for it currently
if there is demand for a new platform by the community, we will certainly talk to the platform owner
great!
isn't that the argument that everyone flamed Spigot on
yes, but spigot outright boots you from it
this honestly, that is why I asked
having the requirement and a preference are two different things
fair
being hostile to the community serves no good for anybody, and ideally we work on getting stuff pulled back into paper at some point
forgive me for asking, but wdym by pulled back into Paper btw?
forks getting merged back to paper
ah right
or rather, their useful patches
flying squids in Paper confirmed
Purpur goes too OTT

yeah that would be great, would avoid all the confusion with the spiderβs web of forks on top of forks on top of forks we have
probs to billy for his insanity, but, a lot of the stuff in PurPur really doesn't suit a general mc server
as I just read somewhere on their discord, "Purpur is Billy being too lazy to write plugins" lmao
lol
if there's anything good we'd like it, but, basically, yea
Paper tends to eer towards API rather than slapping config options for everything, BILLY
||jkilynokillme||
lol
but but but my floating-squids-that-are-spawned-on-tuesdays-while-players-are-holding-torches config βΉοΈ
tbf QoL things like chests opening despite a solid block above are nice, or the custom seed thing for end spikes and dungeons, which helps A LOT against detecting a secret seed.
Probably something like tags for fork names would be good. So that someone can exclude/include certain plugins supported by their used fork.
And paper contributer could filter them to see what features could be pulled upstream.
sorry, you are right
yeah but back to my point, if something like an area for those legitimate forks existed, it would be nice and definitely serve some people π
ppl can just add stuff like Purpur to their dependencies on the paper platform, thats prolly enough to make it clear to users
or this, even smoother
but like, tbh, thats not really a concern
would be just scarier to get another SpigotMC-like thing that gets picky about plugin devs genuinely trying to tell that you can do more on Paper with their plugins
90% of plugins that use the paper api dont use works
so we gotta serve those first
but as cat said, we have a friendly relationship with forks, we have no reason to be hostile
yep and that makes the community around paper so awesome π
some great people doing really great stuff, and hangar is something kinda everyone is really looking forward to
Mini, did you get a chance to peek at whatβs on the new branch?
oh no
will do once am done with this
its a spicy one https://i.imgur.com/GqT3YJ6.png
wait, that broke again
why arent you using 3 equals signs?
because it didnt work
but now it also doesnt work with 2
if I toggle the value in the vue console it works
when I reload it doesnt
idk whats going on there and idk rn, lol
your branch looks nice
not sure I like the map there tho
ya, I wasn't sure what the best way to test against all possible filters would be
I would rather have like a registry for the thingies
for minimessage I solved this project like this
have a types there
then register them somewhere
then use the type to call the method that tests if its supports the type, and the method to instanciaze
mmm ok. ya I see the similarities
this being the canParse
and this the instanciation
altho that can be just done with a functional interface in the Types class I guess
do we even need the supports method?
cant we move the param map call to the registry, and only have a name for the filter?
yeah, if it never gets more complicated than just having a query string present
I thought maybe somehow it might get more complicated that just having ?projectCategory= in the query
I cant think of anything
also, your filter doesnt support repeated params, I feel like that could be useful?
maybe it becomes more complicated when we want to limit which filters can be applied to which query
hmm, I wonder if there is an annotation that takes an array of enums for saying what filters are compatible with a request method
if we could add that^
when I did my poc I also thought about if I want ?projectCategory=admin,fun or ?projectCategory=admin&projectCategory=fun and I think the latter is nicer
we prolly could, yeah
or better, an array of classes so we dont have to make an enum for it
pretty sure we can get access to the annotation here
yeah, so we get the compatible filters/sortbys from the annotation, filter though those, if they are present, add them to the RequestPagination object, and then modify the sql accordingly
and then just check the pagination object and remove filters
then we just gotta think about if a unsupported filter is a 400?
might be the clearest to users, right?
yeah, I think 400 is fine
maybe just ignore it, but then users wouldnt know they did something wrong
and you think just having a name for the filter is enough to replace the supports method?
I cant think of a reason where we wouldn't just check the param name
k, what about this latest commit? It's actually really similar to how the mc advancements work
that fits, ye
now just convert the query param field into a method, and move the supports method as a default method to filter
mmhmm ya
So this does mean we have to use the name table, column name aliases on db queries where the same filter will be used on each.
But hopefully that wonβt be an issue
We could add arguments to the bind pagination annotation to configure that maybe
we already have a "convention" like that I think
like, all joins and stuff just use the captials of each table I think
users -> u, user_roles -> ur
Ya OK I guess thatβs fine
@pallid yoke we thinking only 1 sortBy for a query?
Idk
Prreeetty sure the data table in vuetify allows multiple?
Not sure if that's worth the effort tho
ah yes, it does support multi-sorting, I totally didn't know that
well hey, if it supports it, I'm all for it. just have a ?sortBy=firstThing&sortBy=secondThing&sortDirection=ASC&sortDirection=DESC
hey @random badger do you use a lot of async ajax calls for hangar?
"async ajax" is one of those "pin number" or "atm machine" things
but yes, there are a lot of async http requests. Its how the frontend communicates w/the backend
sorry yeah my bad - do you know of any decent js discord channels -
I mean, the ones I'm in mainly have to do with hangar atm. Like the official Vue, Nuxt, Vuetify ones. I'm not in any general js programming ones
yeah ok ...Ill keep looking I need a jquery specific one ...chaining ajax calls is a nightmare
sorry async calls
the fact its ajax is irrelevant
I think the tides have turned on jquery, I think most people are against using it nowadays
@somber flicker Have you tried async/await? Itβs honestly so much better than using callbacks or even the regular promise.then
in hangar, we started using Promise.all for concurrent requests over await, but yeah its nice
mmkay @pallid yoke author page sorting should be in. I added one TODO in the sorting in pages/author.vue that you should prop take a look at and see what you think the best way to solve it is
Hey mini, am I going crazy, or did you let your domain expire? Trying to look at the dev instances, but they're all returning DNS errors
ya, he knows about it
aight just checking π
Basically need to wait till it's deleted @copper perch...
I saw this before, but is this really optional?
Mmh, I guess
I considered doing sort direction like ?sortBy=-firstThing&sortBy=secondThing
Maybe that's a bit more clear
Ah you did do that
Solving the username issue in that case is easy, just name it username in the header and use a slot to display the data
I wanted a slot there anyways, since we wanna make it a link
Ya, has to be optional. I couldnβt create a project without it being optional
Ah yes. Didnβt think of that. Should work.
Really happy with the sorters tho. Will be easy to implement elsewhere I think.
I didnβt test out filters cause there arenβt filters on the authors page
I didn't even test with UI, just manually called the api
One thing tho, for project/version lists, we use a data-iterator. How do we want sorting to work with that cause there arenβt table headers?
And with the optional or not licence url I mean that I am not sure if it should be required in UI? Choosing the licence is pretty important, it should be required. Do we require a licence url for all licences? Or is it enough to select MIT, but require it for custom stuff?
Oh, I didnβt realize we wanted to require a license
Well, i don't think no option is acceptable, maybe we should give all rights reserved as a preset?
And project/version list is controlled via the boxes in the sidebar, that should be enough to construct the request params
Iirc the main page has a drop down for sorting
Question also is if we need sort everywhere
Mm, maybe not in version list.
And like, api can still easily support it for 3rd party stuff
Always sort by created_at
I mean, I could see why ppl would wanna see the first uploaded Version or smth, idk
We can think about some UI for that later
Def want sorting for projects tho, most downloaded, viewed,
Yeah, on home page that has a drop-down, on profile Pages we could just move that?
Eh copy I mean
Yep, saw it
May I ask why this was closed? https://github.com/PaperMC/Hangar/pull/389
you're farming contributions
Mini, maybe each license should be tied to a default url that can be overriden?
idrk much about various licenses, can you have a generic one? or does each project need their own specific one
generally you link to your own file
Oh, how should the api sorting/filtering be documented btw? Can we register some custom swagger annotation or smth?
To make it use the ApplicableSorters/Filters annotations
Oh that would be cool
Hmm implementing Model converter I think is what we want?
I just skimmed it, i can't really focus rn
I'm just gonna merge the filter sort branch. It seems like we settled on a design choice right?
Yeah
Oh. I guess this might have looked like that. I personally don't think this should be categorized as a farm contribution. I mean, IMO, every PR counts
you broke a discord invite for no reason
What?
It's not broken I think
.gg redirects to .com/invite, it's IMO better practice to go directly to .com, especially for slower connections
That's bullshit and you know it, why are you even trying to argue this?
We welcome every actually meaningful contributions
Don't bore me
isn't that wrong?
it's a singular line non priority thing
there are much more pressing things to deal with that a '
There are. Sorry for bothering you all.
I'm sorry, it was in my best intentions to submit that PR. I meant no harm.
wow
grrrrr this sql binding stuff is driving me crazy
jdbi is yelling that < is invalid syntax when I try to do this
but jdbi also says that is how you bind lists
π‘ π‘ π‘ π‘
oooo I wonder if its because you can't have defined params inside other defined params
hmmmm
like, it does one replace, but then doesn't go back over the string to see if that replace added anything to replace
Honestly, this conversation made me sick to my stomach. I understand that my contribution (especially the Discord invite part) might have not been welcome, and unnecessary, but I felt like Paper's community didn't really do a good job of welcoming newcomers, with my first PR being closed without explanation.
I think understanding the stage at which a Project is it is really important @main lava. In the case of a really mature project ..the fixes you proposed (well maybe not the invite change) would be accepted as simple fixes - but Hanger is not that...its not even out of development - its dynamic changing and has some major stuff that needs doing before it can go public - which everyone is "hanging" out for - and I think we need to be clear - Every PR doesnt count - everyone here gets what I call ComputerScience commits...which drive me nuts - because I still have to review each one from some kid who hasnt a clue what my project does and is just following some CS rule - eg Liskov's principal.
Are grammar edits really appropriate on a project that is still in development with out a single beta release?
btw did everyone like my "pun" ....we are all
hanging out for hangar...
maybe thats too australian
idk
π
now I remember why we left y'all on an island
pretty sure ore was doing a left join on a one-to-many relation where they had limit/offset parameters
that throws off the whole thing
phew. ok, so I think the only big thing left on the backend (relating to filters/sorting) is the project sorting. since that already has logic dealing w/it
Strange that list binding didnt work for you
Btw, I vote for static importing filter and sort registry for readability
Oh i see it goes thru the string template engine
Well, no, not really
It's strange
Well... it kinda does
I think it does what I ended up doing
Procedurally creating binded params
Yeah it seems good enough anyways
Heh, didn't knew we still had scala code around, lol
Yeah, that bit in PromotedVersionMapper. Idk what it really did and I was like... well stuff is working w/o it so who cares
hrm... bit of a conundrum. When a user has no channels selected in the version list, it shows everything
cause its no longer filtering by channels cause none are in the api request query
Mmh, I mean, is that wrong?
well I guess I would expect it to show 0 versions
Technically it is, yes, but there's no usecase to show 0
Maybe we can communicate that in the UI, like a show all checkbox
Wait doesn't that exist for channels?
yeah, there is a global checkbox
that unchecks/checks all the channels' checkboxes
I am trying to think of smth that makes sense UI wise
I mean, we could have a dummy filter, but that's strange api wise
Maybe just send no request at all if non is selected?
yeah, ?channel=randomalphanumericstring π€£
yeah, could just manually update the versions to have 0
oh mini, why did you add a logged-out page instead of redirecting back to /?
There was some Todo I think
not on that page
oh on this redirect?
I guess redirecting it to / every time is fine. My initial thinking was it should just refresh the page, but then sometimes it would error if someone was viewing a protected resource
We deleting old stuff now if it's present in new?
Great work tho, I have a feeling of getting really close now
Yes, itβs wayyyy easier to figure out what has to be done still by looking at old controllers and seeing what is still there
Should I not have deleted stuff? I did check that it was implemented before doing so.
Nono it's fine
Not as satisfying as deleting everything in one go, but still good ^^
As you said, easier to track progress
Yeah, I wouldβve liked to delete it all at once too. But... thatβs meaningless π
^^
jdbi says it can't find a mapper for
it handles lists of strings when they are an sql array in the result set
oh huh, it works w/o the enumby ordinal annotation
cause that makes sense
gotta move the annotation to the generic
doesn't work on the generic
as in the annotation doesnt have that as a valid spot for it
it always defaults to enum names everywhere else
so it doesnt make sense that it works here w/o any annotation
before checkout: https://i.imgur.com/vNKt0j0.png
π
I started working on displaying user action log stuff btw
nice
im working on the version approvals
do you know what the purpose of the BACKLOG review state?
why not just UNREVIEWED, UNDER_REVIEW
like, there's that button on the review logs page to toggle the version between the BACKLOG state
and I've never understood what it's purpose was
backlog means like todo normally
wouldnt unreviewed kinda mean that then?
well, unreviewed is new, and backlog is moved back?
like, unreviewed needs triage, backlog is somebody looked at it and moved it back for others to view?
k, whatever. I was just looking at the old version approval queue and it looks like versions in the BACKLOG state don't show up there
which seems wrong
I mean, we can just nuke that state altogether
and if we later find when reviewing stuff we would benefit from smth like this, add it back
yeah ok, ill do that
queue finding random sql queries that relied on the ordinal order in 2 weeks
no need to keep using stuff because ore did it that way, even tho it makes no sense to us
yeah ordinal order is really meh :/
ideally we would have a proper table for the enums and use their PKs
but idk how much overhead that would mean
that's a lot of tables
could have one enum table π
also, would make a LOT of queries more complicated
but yeah, its ugly either way
cause jdbi has nice mapping for enums
well, actually, the button on the version review page is called removeFromQueue
is there a usecase for hiding an unreviewed version from the queue?
yeah thats what I meant, its not in the "incoming" lane